Contract
0x1a05eb736873485655f29a37def8a0aa87f5a447
2
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Router
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2022-11-18 */ // File: contracts/interfaces/IRouter.sol pragma solidity 0.8.9; interface IRouter { function pairFor( address tokenA, address tokenB, bool stable ) external view returns (address pair); } // File: contracts/interfaces/IWETH.sol pragma solidity 0.8.9; interface IWETH { function deposit() external payable returns (uint); function transfer(address to, uint value) external returns (bool); function withdraw(uint) external returns (uint); } // File: contracts/interfaces/IPairFactory.sol pragma solidity 0.8.9; interface IPairFactory { function isPaused() external view returns (bool); function allPairsLength() external view returns (uint); function isPair(address pair) external view returns (bool); function getFee(bool _stable) external view returns(uint256); function pairCodeHash() external pure returns (bytes32); function getPair(address tokenA, address token, bool stable) external view returns (address); function getInitializable() external view returns (address, address, bool); function createPair(address tokenA, address tokenB, bool stable) external returns (address pair); } // File: contracts/interfaces/IPair.sol pragma solidity 0.8.9; interface IPair { function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1); function claimFees() external returns (uint, uint); function tokens() external returns (address, address); function transferFrom(address src, address dst, uint amount) external returns (bool); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function burn(address to) external returns (uint amount0, uint amount1); function mint(address to) external returns (uint liquidity); function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast); function getAmountOut(uint, address) external view returns (uint); } // File: contracts/interfaces/IERC20.sol pragma solidity 0.8.9; interface IERC20 { function totalSupply() external view returns (uint256); function transfer(address recipient, uint amount) external returns (bool); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function balanceOf(address) external view returns (uint); function transferFrom(address sender, address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } // File: contracts/libraries/Math.sol pragma solidity 0.8.9; library Math { function max(uint a, uint b) internal pure returns (uint) { return a >= b ? a : b; } function min(uint a, uint b) internal pure returns (uint) { return a < b ? a : b; } function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function cbrt(uint256 n) internal pure returns (uint256) { unchecked { uint256 x = 0; for (uint256 y = 1 << 255; y > 0; y >>= 3) { x <<= 1; uint256 z = 3 * x * (x + 1) + 1; if (n / y >= z) { n -= y * z; x += 1; } } return x; }} } // File: contracts/Router.sol pragma solidity 0.8.9; contract Router is IRouter { struct Route { address from; address to; bool stable; } uint internal constant MINIMUM_LIQUIDITY = 10**3; address public immutable factory; IWETH public immutable weth; bytes32 public immutable pairCodeHash; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "Router: EXPIRED"); _; } constructor(address _factory, address _weth) { factory = _factory; pairCodeHash = IPairFactory(_factory).pairCodeHash(); weth = IWETH(_weth); } /// @dev only accept ETH via fallback from the WETH contract receive() external payable { assert(msg.sender == address(weth)); } function sortTokens(address tokenA, address tokenB) public pure returns (address token0, address token1) { require(tokenA != tokenB, "Router: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "Router: ZERO_ADDRESS"); } /// @dev calculates the CREATE2 address for a pair without making any external calls function pairFor(address tokenA, address tokenB, bool stable) public view returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint256(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1, stable)), pairCodeHash // init code hash ))))); } /// @dev given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quoteLiquidity(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, "Router: INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "Router: INSUFFICIENT_LIQUIDITY"); amountB = amountA * reserveB / reserveA; } /// @dev fetches and sorts the reserves for a pair function getReserves(address tokenA, address tokenB, bool stable) public view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IPair(pairFor(tokenA, tokenB, stable)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } /// @dev performs chained getAmountOut calculations on any number of pairs function getAmountOut(uint amountIn, address tokenIn, address tokenOut) external view returns (uint amount, bool stable) { address pair = pairFor(tokenIn, tokenOut, true); uint amountStable; uint amountVolatile; if (IPairFactory(factory).isPair(pair)) { amountStable = IPair(pair).getAmountOut(amountIn, tokenIn); } pair = pairFor(tokenIn, tokenOut, false); if (IPairFactory(factory).isPair(pair)) { amountVolatile = IPair(pair).getAmountOut(amountIn, tokenIn); } return amountStable > amountVolatile ? (amountStable, true) : (amountVolatile, false); } /// @dev performs chained getAmountOut calculations on any number of pairs function getAmountsOut(uint amountIn, Route[] memory routes) public view returns (uint[] memory amounts) { require(routes.length >= 1, "Router: INVALID_PATH"); amounts = new uint[](routes.length+1); amounts[0] = amountIn; for (uint i = 0; i < routes.length; i++) { address pair = pairFor(routes[i].from, routes[i].to, routes[i].stable); if (IPairFactory(factory).isPair(pair)) { amounts[i+1] = IPair(pair).getAmountOut(amounts[i], routes[i].from); } } } function isPair(address pair) external view returns (bool) { return IPairFactory(factory).isPair(pair); } function quoteAddLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired ) external view returns (uint amountA, uint amountB, uint liquidity) { // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); (uint reserveA, uint reserveB) = (0,0); uint _totalSupply = 0; if (_pair != address(0)) { _totalSupply = IERC20(_pair).totalSupply(); (reserveA, reserveB) = getReserves(tokenA, tokenB, stable); } if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); liquidity = Math.sqrt(amountA * amountB) - MINIMUM_LIQUIDITY; } else { uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { (amountA, amountB) = (amountADesired, amountBOptimal); liquidity = Math.min(amountA * _totalSupply / reserveA, amountB * _totalSupply / reserveB); } else { uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA); (amountA, amountB) = (amountAOptimal, amountBDesired); liquidity = Math.min(amountA * _totalSupply / reserveA, amountB * _totalSupply / reserveB); } } } function quoteRemoveLiquidity( address tokenA, address tokenB, bool stable, uint liquidity ) external view returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); if (_pair == address(0)) { return (0,0); } (uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable); uint _totalSupply = IERC20(_pair).totalSupply(); amountA = liquidity * reserveA / _totalSupply; // using balances ensures pro-rata distribution amountB = liquidity * reserveB / _totalSupply; // using balances ensures pro-rata distribution } function _addLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal returns (uint amountA, uint amountB) { require(amountADesired >= amountAMin, "Router: invalid desired amountA"); require(amountBDesired >= amountBMin, "Router: invalid desired amountB"); // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); if (_pair == address(0)) { _pair = IPairFactory(factory).createPair(tokenA, tokenB, stable); } (uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "Router: INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "Router: INSUFFICIENT_A_AMOUNT"); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, stable, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = pairFor(tokenA, tokenB, stable); _safeTransferFrom(tokenA, msg.sender, pair, amountA); _safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IPair(pair).mint(to); } function addLiquidityETH( address token, bool stable, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, address(weth), stable, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = pairFor(token, address(weth), stable); _safeTransferFrom(token, msg.sender, pair, amountToken); weth.deposit{value: amountETH}(); assert(weth.transfer(pair, amountETH)); liquidity = IPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) _safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, bool stable, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public ensure(deadline) returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB, stable); require(IPair(pair).transferFrom(msg.sender, pair, liquidity), "Router: transfer failed"); // send liquidity to pair (uint amount0, uint amount1) = IPair(pair).burn(to); (address token0,) = sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "Router: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "Router: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, address(weth), stable, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); _safeTransfer(token, to, amountToken); weth.withdraw(amountETH); _safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, bool stable, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB, stable); { uint value = approveMax ? type(uint).max : liquidity; IPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); } (amountA, amountB) = removeLiquidity(tokenA, tokenB, stable, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH) { address pair = pairFor(token, address(weth), stable); uint value = approveMax ? type(uint).max : liquidity; IPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, stable, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** SWAP **** /// @dev requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, Route[] memory routes, address _to) internal virtual { for (uint i = 0; i < routes.length; i++) { (address token0,) = sortTokens(routes[i].from, routes[i].to); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = routes[i].from == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < routes.length - 1 ? pairFor(routes[i+1].from, routes[i+1].to, routes[i+1].stable) : _to; IPair(pairFor(routes[i].from, routes[i].to, routes[i].stable)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokensSimple( uint amountIn, uint amountOutMin, address tokenFrom, address tokenTo, bool stable, address to, uint deadline ) external ensure(deadline) returns (uint[] memory amounts) { Route[] memory routes = new Route[](1); routes[0].from = tokenFrom; routes[0].to = tokenTo; routes[0].stable = stable; amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT"); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, to); } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) returns (uint[] memory amounts) { amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT"); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, to); } function swapExactETHForTokens(uint amountOutMin, Route[] calldata routes, address to, uint deadline) external payable ensure(deadline) returns (uint[] memory amounts) { require(routes[0].from == address(weth), "Router: INVALID_PATH"); amounts = getAmountsOut(msg.value, routes); require(amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT"); weth.deposit{value: amounts[0]}(); assert(weth.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0])); _swap(amounts, routes, to); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline) external ensure(deadline) returns (uint[] memory amounts) { require(routes[routes.length - 1].to == address(weth), "Router: INVALID_PATH"); amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT"); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, address(this)); weth.withdraw(amounts[amounts.length - 1]); _safeTransferETH(to, amounts[amounts.length - 1]); } function UNSAFE_swapExactTokensForTokens( uint[] memory amounts, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) returns (uint[] memory) { _safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]); _swap(amounts, routes, to); return amounts; } function _safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } function _safeTransfer(address token, address to, uint256 value) internal { require(token.code.length > 0, "Router: invalid token"); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "Router: token transfer failed"); } function _safeTransferFrom(address token, address from, address to, uint256 value) internal { require(token.code.length > 0, "Router: invalid token"); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "Router: token transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"UNSAFE_swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.Route[]","name":"routes","type":"tuple[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"}],"name":"quoteAddLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"quoteRemoveLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"sortTokens","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSimple","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162003d9738038062003d978339810160408190526200003491620000e8565b6001600160a01b038216608081905260408051631355724960e31b81529051639aab924891600480820192602092909190829003018186803b1580156200007a57600080fd5b505afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b5919062000120565b60c0526001600160a01b031660a052506200013a565b80516001600160a01b0381168114620000e357600080fd5b919050565b60008060408385031215620000fc57600080fd5b6200010783620000cb565b91506200011760208401620000cb565b90509250929050565b6000602082840312156200013357600080fd5b5051919050565b60805160a05160c051613b8c6200020b600039600081816104050152610fe601526000818161014901528181610216015281816109c701528181610c0601528181610e96015281816115b8015281816116cb0152818161177a01528181611f9d01528181611fd301528181612008015281816120c10152818161221a015261226a01526000818161047a01528181610d0d01528181610fab01528181611274015281816113a601528181611b0e01528181611ca00152818161232801528181612a250152612ad50152613b8c6000f3fe6080604052600436106101395760003560e01c806367ffb66a116100ab578063a32b1fcd1161006f578063a32b1fcd14610435578063b7e0d4c014610455578063c45a015514610468578063d7b0e0a51461049c578063e5e31b13146104bc578063f41766d8146104ec57600080fd5b806367ffb66a146103805780637301e3c8146103935780639881fcb4146103b357806398a0fb3c146103d35780639aab9248146103f357600080fd5b8063448725b4116100fd578063448725b4146102705780634c1ee03e14610290578063544caa56146102b05780635a47ddc3146102f05780635e1e63251461032b5780635e60dab51461036057600080fd5b80630dede6c41461017d57806313dcfc59146101b757806318a13086146101e45780633fc8cef3146102045780634386e63c1461025057600080fd5b3661017857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461017657610176612f49565b005b600080fd5b34801561018957600080fd5b5061019d610198366004612f90565b61050c565b604080519283526020830191909152015b60405180910390f35b3480156101c357600080fd5b506101d76101d2366004613015565b610787565b6040516101ae9190613090565b3480156101f057600080fd5b506101d76101ff366004613119565b61099a565b34801561021057600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ae565b34801561025c57600080fd5b5061019d61026b36600461318c565b610d06565b34801561027c57600080fd5b5061019d61028b3660046131ee565b610e8b565b34801561029c57600080fd5b506102386102ab366004613298565b610f64565b3480156102bc57600080fd5b506102d06102cb3660046132e3565b61106c565b604080516001600160a01b039384168152929091166020830152016101ae565b3480156102fc57600080fd5b5061031061030b36600461331c565b61114d565b604080519384526020840192909252908201526060016101ae565b34801561033757600080fd5b5061034b6103463660046133ab565b61123c565b604080519283529015156020830152016101ae565b34801561036c57600080fd5b5061019d61037b366004613298565b6114cc565b6101d761038e3660046133e2565b611593565b34801561039f57600080fd5b506101d76103ae3660046134b4565b611922565b3480156103bf57600080fd5b506101d76103ce3660046135f6565b6119f8565b3480156103df57600080fd5b506103106103ee36600461369c565b611c98565b3480156103ff57600080fd5b506104277f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101ae565b34801561044157600080fd5b5061019d6104503660046136f7565b611eb6565b6103106104633660046137b3565b611f71565b34801561047457600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a857600080fd5b5061019d6104b73660046137b3565b6121f0565b3480156104c857600080fd5b506104dc6104d736600461380e565b612306565b60405190151581526020016101ae565b3480156104f857600080fd5b506101d7610507366004613119565b6123aa565b60008082428110156105395760405162461bcd60e51b81526004016105309061382b565b60405180910390fd5b60006105468c8c8c610f64565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561059757600080fd5b505af11580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf9190613854565b61061b5760405162461bcd60e51b815260206004820152601760248201527f526f757465723a207472616e73666572206661696c65640000000000000000006044820152606401610530565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561066257600080fd5b505af1158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190613871565b9150915060006106aa8f8f61106c565b509050806001600160a01b03168f6001600160a01b0316146106cd5781836106d0565b82825b90975095508a8710156107255760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f415f414d4f554e540000006044820152606401610530565b898610156107755760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f425f414d4f554e540000006044820152606401610530565b50505050509850989650505050505050565b606081428110156107aa5760405162461bcd60e51b81526004016105309061382b565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816107c1579050509050878160008151811061080457610804613895565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050868160008151811061083c5761083c613895565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050858160008151811061087457610874613895565b60209081029190910101519015156040909101526108928a826119f8565b92508883600185516108a491906138c1565b815181106108b4576108b4613895565b602002602001015110156108da5760405162461bcd60e51b8152600401610530906138d8565b610982816000815181106108f0576108f0613895565b602002602001015160000151336109628460008151811061091357610913613895565b6020026020010151600001518560008151811061093257610932613895565b6020026020010151602001518660008151811061095157610951613895565b602002602001015160400151610f64565b8660008151811061097557610975613895565b60200260200101516124cf565b61098d838287612645565b5050979650505050505050565b606081428110156109bd5760405162461bcd60e51b81526004016105309061382b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866109f46001826138c1565b818110610a0357610a03613895565b9050606002016020016020810190610a1b919061380e565b6001600160a01b031614610a415760405162461bcd60e51b81526004016105309061391a565b610a9d888787808060200260200160405190810160405280939291908181526020016000905b82821015610a9357610a8460608302860136819003810190613948565b81526020019060010190610a67565b50505050506119f8565b9150868260018451610aaf91906138c1565b81518110610abf57610abf613895565b60200260200101511015610ae55760405162461bcd60e51b8152600401610530906138d8565b610ba786866000818110610afb57610afb613895565b610b11926020606090920201908101915061380e565b33610b9489896000818110610b2857610b28613895565b610b3e926020606090920201908101915061380e565b8a8a6000818110610b5157610b51613895565b9050606002016020016020810190610b69919061380e565b8b8b6000818110610b7c57610b7c613895565b90506060020160400160208101906102ab9190613964565b8560008151811061097557610975613895565b610c04828787808060200260200160405190810160405280939291908181526020016000905b82821015610bf957610bea60608302860136819003810190613948565b81526020019060010190610bcd565b505050505030612645565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551610c4291906138c1565b81518110610c5257610c52613895565b60200260200101516040518263ffffffff1660e01b8152600401610c7891815260200190565b602060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cca9190613981565b50610cfb848360018551610cde91906138c1565b81518110610cee57610cee613895565b602002602001015161289a565b509695505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308888886040518463ffffffff1660e01b8152600401610d5b9392919061399a565b60206040518083038186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab91906139be565b90506001600160a01b038116610dc8576000809250925050610e82565b600080610dd68989896114cc565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1557600080fd5b505afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d9190613981565b905080610e5a84896139db565b610e6491906139fa565b955080610e7183896139db565b610e7b91906139fa565b9450505050505b94509492505050565b6000806000610ebb8e7f00000000000000000000000000000000000000000000000000000000000000008f610f64565b9050600087610eca578c610ece565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610f09903390309086908f908e908e908e90600401613a1c565b600060405180830381600087803b158015610f2357600080fd5b505af1158015610f37573d6000803e3d6000fd5b50505050610f4a8f8f8f8f8f8f8f6121f0565b809450819550505050509b509b9950505050505050505050565b6000806000610f73868661106c565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015286151560f81b604882015291935091507f000000000000000000000000000000000000000000000000000000000000000090604901604051602081830303815290604052805190602001207f000000000000000000000000000000000000000000000000000000000000000060405160200161104a939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b031614156110d15760405162461bcd60e51b815260206004820152601b60248201527f526f757465723a204944454e544943414c5f41444452455353455300000000006044820152606401610530565b826001600160a01b0316846001600160a01b0316106110f15782846110f4565b83835b90925090506001600160a01b0382166111465760405162461bcd60e51b8152602060048201526014602482015273526f757465723a205a45524f5f4144445245535360601b6044820152606401610530565b9250929050565b600080600083428110156111735760405162461bcd60e51b81526004016105309061382b565b6111828d8d8d8d8d8d8d612968565b909450925060006111948e8e8e610f64565b90506111a28e3383886124cf565b6111ae8d3383876124cf565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b1580156111f157600080fd5b505af1158015611205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112299190613981565b9250505099509950999650505050505050565b600080600061124d85856001610f64565b60405163e5e31b1360e01b81526001600160a01b03828116600483015291925060009182917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f09190613854565b15611378576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190613981565b91505b61138487876000610f64565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529194507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b1580156113ea57600080fd5b505afa1580156113fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114229190613854565b156114aa576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b15801561146f57600080fd5b505afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190613981565b90505b8082116114b9578060006114bd565b8160015b94509450505050935093915050565b60008060006114db868661106c565b5090506000806114ec888888610f64565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155c9190613a5d565b5091509150826001600160a01b0316886001600160a01b031614611581578082611584565b81815b90999098509650505050505050565b606081428110156115b65760405162461bcd60e51b81526004016105309061382b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106115f3576115f3613895565b611609926020606090920201908101915061380e565b6001600160a01b03161461162f5760405162461bcd60e51b81526004016105309061391a565b611681348787808060200260200160405190810160405280939291908181526020016000905b82821015610a935761167260608302860136819003810190613948565b81526020019060010190611655565b915086826001845161169391906138c1565b815181106116a3576116a3613895565b602002602001015110156116c95760405162461bcd60e51b8152600401610530906138d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061170b5761170b613895565b60200260200101516040518263ffffffff1660e01b81526004016020604051808303818588803b15801561173e57600080fd5b505af1158015611752573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117779190613981565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611811888860008181106117bd576117bd613895565b6117d3926020606090920201908101915061380e565b898960008181106117e6576117e6613895565b90506060020160200160208101906117fe919061380e565b8a8a6000818110610b7c57610b7c613895565b8460008151811061182457611824613895565b60200260200101516040518363ffffffff1660e01b815260040161185d9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561187757600080fd5b505af115801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190613854565b6118bb576118bb612f49565b611918828787808060200260200160405190810160405280939291908181526020016000905b8282101561190d576118fe60608302860136819003810190613948565b815260200190600101906118e1565b505050505086612645565b5095945050505050565b606081428110156119455760405162461bcd60e51b81526004016105309061382b565b61199b8686600081811061195b5761195b613895565b611971926020606090920201908101915061380e565b3361198889896000818110610b2857610b28613895565b8a60008151811061097557610975613895565b6119ed878787808060200260200160405190810160405280939291908181526020016000905b8282101561190d576119de60608302860136819003810190613948565b815260200190600101906119c1565b509495945050505050565b6060600182511015611a1c5760405162461bcd60e51b81526004016105309061391a565b8151611a29906001613a8b565b67ffffffffffffffff811115611a4157611a41613449565b604051908082528060200260200182016040528015611a6a578160200160208202803683370190505b5090508281600081518110611a8157611a81613895565b60200260200101818152505060005b8251811015611c91576000611aec848381518110611ab057611ab0613895565b602002602001015160000151858481518110611ace57611ace613895565b60200260200101516020015186858151811061095157610951613895565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b158015611b5257600080fd5b505afa158015611b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8a9190613854565b15611c7e57806001600160a01b031663f140a35a848481518110611bb057611bb0613895565b6020026020010151868581518110611bca57611bca613895565b6020026020010151600001516040518363ffffffff1660e01b8152600401611c059291909182526001600160a01b0316602082015260400190565b60206040518083038186803b158015611c1d57600080fd5b505afa158015611c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c559190613981565b83611c61846001613a8b565b81518110611c7157611c71613895565b6020026020010181815250505b5080611c8981613aa3565b915050611a90565b5092915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308a8a8a6040518463ffffffff1660e01b8152600401611cee9392919061399a565b60206040518083038186803b158015611d0657600080fd5b505afa158015611d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3e91906139be565b9050600080806001600160a01b03841615611dd757836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190613981565b9050611dd18c8c8c6114cc565b90935091505b82158015611de3575081155b15611e14578896508795506103e8611e03611dfe888a6139db565b612c8a565b611e0d91906138c1565b9450611ea7565b6000611e218a8585612cfa565b9050888111611e6957899750955085611e6284611e3e848b6139db565b611e4891906139fa565b84611e53858b6139db565b611e5d91906139fa565b612dc4565b9550611ea5565b6000611e768a8587612cfa565b9850899750889050611ea185611e8c85846139db565b611e9691906139fa565b85611e53868c6139db565b9650505b505b50505050955095509592505050565b6000806000611ec68f8f8f610f64565b9050600087611ed5578c611ed9565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611f14903390309086908f908e908e908e90600401613a1c565b600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b5050505050611f578f8f8f8f8f8f8f8f61050c565b8093508194505050509c509c9a5050505050505050505050565b60008060008342811015611f975760405162461bcd60e51b81526004016105309061382b565b611fc68b7f00000000000000000000000000000000000000000000000000000000000000008c8c348d8d612968565b90945092506000611ff88c7f00000000000000000000000000000000000000000000000000000000000000008d610f64565b90506120068c3383886124cf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016020604051808303818588803b15801561206157600080fd5b505af1158015612075573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061209a9190613981565b5060405163a9059cbb60e01b81526001600160a01b038281166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561210557600080fd5b505af1158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d9190613854565b61214957612149612f49565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190613981565b9250833411156121e1576121e1336121dc86346138c1565b61289a565b50509750975097945050505050565b60008082428110156122145760405162461bcd60e51b81526004016105309061382b565b6122448a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b308b61050c565b90935091506122548a8685612ddc565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401602060405180830381600087803b1580156122b657600080fd5b505af11580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190613981565b506122f9858361289a565b5097509795505050505050565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b15801561236c57600080fd5b505afa158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190613854565b92915050565b606081428110156123cd5760405162461bcd60e51b81526004016105309061382b565b61241f888787808060200260200160405190810160405280939291908181526020016000905b82821015610a935761241060608302860136819003810190613948565b815260200190600101906123f3565b915086826001845161243191906138c1565b8151811061244157612441613895565b602002602001015110156124675760405162461bcd60e51b8152600401610530906138d8565b61247d86866000818110610afb57610afb613895565b610cfb828787808060200260200160405190810160405280939291908181526020016000905b8282101561190d576124c060608302860136819003810190613948565b815260200190600101906124a3565b6000846001600160a01b03163b116125215760405162461bcd60e51b81526020600482015260156024820152742937baba32b91d1034b73b30b634b2103a37b5b2b760591b6044820152606401610530565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916125859190613aea565b6000604051808303816000865af19150503d80600081146125c2576040519150601f19603f3d011682016040523d82523d6000602084013e6125c7565b606091505b50915091508180156125f15750805115806125f15750808060200190518101906125f19190613854565b61263d5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20746f6b656e207472616e73666572206661696c65640000006044820152606401610530565b505050505050565b60005b825181101561289457600061269784838151811061266857612668613895565b60200260200101516000015185848151811061268657612686613895565b60200260200101516020015161106c565b5090506000856126a8846001613a8b565b815181106126b8576126b8613895565b60200260200101519050600080836001600160a01b03168786815181106126e1576126e1613895565b6020026020010151600001516001600160a01b03161461270357826000612707565b6000835b9150915060006001885161271b91906138c1565b8610612727578661279a565b61279a88612736886001613a8b565b8151811061274657612746613895565b602002602001015160000151898860016127609190613a8b565b8151811061277057612770613895565b6020026020010151602001518a89600161278a9190613a8b565b8151811061095157610951613895565b90506127ed8887815181106127b1576127b1613895565b6020026020010151600001518988815181106127cf576127cf613895565b6020026020010151602001518a898151811061095157610951613895565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561282a576020820181803683370190505b506040518563ffffffff1660e01b815260040161284a9493929190613b06565b600060405180830381600087803b15801561286457600080fd5b505af1158015612878573d6000803e3d6000fd5b505050505050505050808061288c90613aa3565b915050612648565b50505050565b604080516000808252602082019092526001600160a01b0384169083906040516128c49190613aea565b60006040518083038185875af1925050503d8060008114612901576040519150601f19603f3d011682016040523d82523d6000602084013e612906565b606091505b50509050806129635760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610530565b505050565b600080838610156129bb5760405162461bcd60e51b815260206004820152601f60248201527f526f757465723a20696e76616c6964206465736972656420616d6f756e7441006044820152606401610530565b82851015612a0b5760405162461bcd60e51b815260206004820152601f60248201527f526f757465723a20696e76616c6964206465736972656420616d6f756e7442006044820152606401610530565b6040516306801cc360e41b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636801cc3090612a5e908d908d908d9060040161399a565b60206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae91906139be565b90506001600160a01b038116612b63576040516320b7f73960e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906382dfdce490612b0e908d908d908d9060040161399a565b602060405180830381600087803b158015612b2857600080fd5b505af1158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6091906139be565b90505b600080612b718c8c8c6114cc565b91509150816000148015612b83575080155b15612b9357889450879350612c7b565b6000612ba08a8484612cfa565b9050888111612c045786811015612bf95760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f425f414d4f554e540000006044820152606401610530565b899550935083612c79565b6000612c118a8486612cfa565b90508a811115612c2357612c23612f49565b88811015612c735760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f415f414d4f554e540000006044820152606401610530565b95508894505b505b50505097509795505050505050565b60006003821115612ceb5750806000612ca46002836139fa565b612caf906001613a8b565b90505b81811015612ce557905080600281612cca81866139fa565b612cd49190613a8b565b612cde91906139fa565b9050612cb2565b50919050565b8115612cf5575060015b919050565b6000808411612d4b5760405162461bcd60e51b815260206004820152601b60248201527f526f757465723a20494e53554646494349454e545f414d4f554e5400000000006044820152606401610530565b600083118015612d5b5750600082115b612da75760405162461bcd60e51b815260206004820152601e60248201527f526f757465723a20494e53554646494349454e545f4c495155494449545900006044820152606401610530565b82612db283866139db565b612dbc91906139fa565b949350505050565b6000818310612dd35781612dd5565b825b9392505050565b6000836001600160a01b03163b11612e2e5760405162461bcd60e51b81526020600482015260156024820152742937baba32b91d1034b73b30b634b2103a37b5b2b760591b6044820152606401610530565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612e8a9190613aea565b6000604051808303816000865af19150503d8060008114612ec7576040519150601f19603f3d011682016040523d82523d6000602084013e612ecc565b606091505b5091509150818015612ef6575080511580612ef6575080806020019051810190612ef69190613854565b612f425760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20746f6b656e207472616e73666572206661696c65640000006044820152606401610530565b5050505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114612f7457600080fd5b50565b8035612cf581612f5f565b8015158114612f7457600080fd5b600080600080600080600080610100898b031215612fad57600080fd5b8835612fb881612f5f565b97506020890135612fc881612f5f565b96506040890135612fd881612f82565b9550606089013594506080890135935060a0890135925060c0890135612ffd81612f5f565b8092505060e089013590509295985092959890939650565b600080600080600080600060e0888a03121561303057600080fd5b8735965060208801359550604088013561304981612f5f565b9450606088013561305981612f5f565b9350608088013561306981612f82565b925060a088013561307981612f5f565b8092505060c0880135905092959891949750929550565b6020808252825182820181905260009190848201906040850190845b818110156130c8578351835292840192918401916001016130ac565b50909695505050505050565b60008083601f8401126130e657600080fd5b50813567ffffffffffffffff8111156130fe57600080fd5b60208301915083602060608302850101111561114657600080fd5b60008060008060008060a0878903121561313257600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561315757600080fd5b61316389828a016130d4565b909550935050606087013561317781612f5f565b80925050608087013590509295509295509295565b600080600080608085870312156131a257600080fd5b84356131ad81612f5f565b935060208501356131bd81612f5f565b925060408501356131cd81612f82565b9396929550929360600135925050565b803560ff81168114612cf557600080fd5b60008060008060008060008060008060006101608c8e03121561321057600080fd5b8b3561321b81612f5f565b9a5060208c013561322b81612f82565b995060408c0135985060608c0135975060808c0135965060a08c013561325081612f5f565b955060c08c0135945060e08c013561326781612f82565b93506132766101008d016131dd565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000606084860312156132ad57600080fd5b83356132b881612f5f565b925060208401356132c881612f5f565b915060408401356132d881612f82565b809150509250925092565b600080604083850312156132f657600080fd5b823561330181612f5f565b9150602083013561331181612f5f565b809150509250929050565b60008060008060008060008060006101208a8c03121561333b57600080fd5b893561334681612f5f565b985060208a013561335681612f5f565b975060408a013561336681612f82565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013561339281612f5f565b809250506101008a013590509295985092959850929598565b6000806000606084860312156133c057600080fd5b8335925060208401356133d281612f5f565b915060408401356132d881612f5f565b6000806000806000608086880312156133fa57600080fd5b85359450602086013567ffffffffffffffff81111561341857600080fd5b613424888289016130d4565b909550935050604086013561343881612f5f565b949793965091946060013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561348857613488613449565b604052919050565b600067ffffffffffffffff8211156134aa576134aa613449565b5060051b60200190565b6000806000806000608086880312156134cc57600080fd5b853567ffffffffffffffff808211156134e457600080fd5b818801915088601f8301126134f857600080fd5b8135602061350d61350883613490565b61345f565b82815260059290921b8401810191818101908c84111561352c57600080fd5b948201945b8386101561354a57853582529482019490820190613531565b9950508901359250508082111561356057600080fd5b5061356d888289016130d4565b9095509350613438905060408701612f77565b60006060828403121561359257600080fd5b6040516060810181811067ffffffffffffffff821117156135b5576135b5613449565b60405290508082356135c681612f5f565b815260208301356135d681612f5f565b602082015260408301356135e981612f82565b6040919091015292915050565b6000806040838503121561360957600080fd5b8235915060208084013567ffffffffffffffff81111561362857600080fd5b8401601f8101861361363957600080fd5b803561364761350882613490565b8181526060918202830184019184820191908984111561366657600080fd5b938501935b8385101561368c5761367d8a86613580565b8352938401939185019161366b565b5080955050505050509250929050565b600080600080600060a086880312156136b457600080fd5b85356136bf81612f5f565b945060208601356136cf81612f5f565b935060408601356136df81612f82565b94979396509394606081013594506080013592915050565b6000806000806000806000806000806000806101808d8f03121561371a57600080fd5b8c3561372581612f5f565b9b5060208d013561373581612f5f565b9a5060408d013561374581612f82565b995060608d0135985060808d0135975060a08d0135965060c08d013561376a81612f5f565b955060e08d013594506101008d013561378281612f82565b93506137916101208e016131dd565b92506101408d013591506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a0312156137ce57600080fd5b87356137d981612f5f565b965060208801356137e981612f82565b955060408801359450606088013593506080880135925060a088013561307981612f5f565b60006020828403121561382057600080fd5b8135612dd581612f5f565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60006020828403121561386657600080fd5b8151612dd581612f82565b6000806040838503121561388457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156138d3576138d36138ab565b500390565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b60006060828403121561395a57600080fd5b612dd58383613580565b60006020828403121561397657600080fd5b8135612dd581612f82565b60006020828403121561399357600080fd5b5051919050565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6000602082840312156139d057600080fd5b8151612dd581612f5f565b60008160001904831182151516156139f5576139f56138ab565b500290565b600082613a1757634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600080600060608486031215613a7257600080fd5b8351925060208401519150604084015190509250925092565b60008219821115613a9e57613a9e6138ab565b500190565b6000600019821415613ab757613ab76138ab565b5060010190565b60005b83811015613ad9578181015183820152602001613ac1565b838111156128945750506000910152565b60008251613afc818460208701613abe565b9190910192915050565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613b3f8160a0850160208701613abe565b601f01601f19169190910160a0019594505050505056fea2646970667358221220ade63090b6ff06ced67a8455d306c84faf1b91ed202e7abce77c4e4c8a12d8db64736f6c63430008090033000000000000000000000000c6366efd0af1d09171fe0ebf32c7943bb310832a00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c6366efd0af1d09171fe0ebf32c7943bb310832a00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
-----Decoded View---------------
Arg [0] : _factory (address): 0xc6366efd0af1d09171fe0ebf32c7943bb310832a
Arg [1] : _weth (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6366efd0af1d09171fe0ebf32c7943bb310832a
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Deployed ByteCode Sourcemap
4066:17394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4788:10;-1:-1:-1;;;;;4810:4:0;4788:27;;4781:35;;;;:::i;:::-;4066:17394;;;;;13589:835;;;;;;;;;;-1:-1:-1;13589:835:0;;;;;:::i;:::-;;:::i;:::-;;;;1664:25:1;;;1720:2;1705:18;;1698:34;;;;1637:18;13589:835:0;;;;;;;;17297:780;;;;;;;;;;-1:-1:-1;17297:780:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19290:755::-;;;;;;;;;;-1:-1:-1;19290:755:0;;;;;:::i;:::-;;:::i;4289:27::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4643:32:1;;;4625:51;;4613:2;4598:18;4289:27:0;4467:215:1;9561:752:0;;;;;;;;;;-1:-1:-1;9561:752:0;;;;;:::i;:::-;;:::i;15822:670::-;;;;;;;;;;-1:-1:-1;15822:670:0;;;;;:::i;:::-;;:::i;5257:415::-;;;;;;;;;;-1:-1:-1;5257:415:0;;;;;:::i;:::-;;:::i;4832:327::-;;;;;;;;;;-1:-1:-1;4832:327:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7955:15:1;;;7937:34;;8007:15;;;;8002:2;7987:18;;7980:43;7872:18;4832:327:0;7725:304:1;11893:696:0;;;;;;;;;;-1:-1:-1;11893:696:0;;;;;:::i;:::-;;:::i;:::-;;;;9251:25:1;;;9307:2;9292:18;;9285:34;;;;9335:18;;;9328:34;9239:2;9224:18;11893:696:0;9049:319:1;6625:664:0;;;;;;;;;;-1:-1:-1;6625:664:0;;;;;:::i;:::-;;:::i;:::-;;;;10002:25:1;;;10070:14;;10063:22;10058:2;10043:18;;10036:50;9975:18;6625:664:0;9834:258:1;6162:375:0;;;;;;;;;;-1:-1:-1;6162:375:0;;;;;:::i;:::-;;:::i;18670:612::-;;;;;;:::i;:::-;;:::i;20053:404::-;;;;;;;;;;-1:-1:-1;20053:404:0;;;;;:::i;:::-;;:::i;7377:559::-;;;;;;;;;;-1:-1:-1;7377:559:0;;;;;:::i;:::-;;:::i;8071:1482::-;;;;;;;;;;-1:-1:-1;8071:1482:0;;;;;:::i;:::-;;:::i;4323:37::-;;;;;;;;;;;;;;;;;;15463:25:1;;;15451:2;15436:18;4323:37:0;15317:177:1;15113:701:0;;;;;;;;;;-1:-1:-1;15113:701:0;;;;;:::i;:::-;;:::i;12597:949::-;;;;;;:::i;:::-;;:::i;4250:32::-;;;;;;;;;;;;;;;14432:673;;;;;;;;;;-1:-1:-1;14432:673:0;;;;;:::i;:::-;;:::i;7944:119::-;;;;;;;;;;-1:-1:-1;7944:119:0;;;;;:::i;:::-;;:::i;:::-;;;18015:14:1;;18008:22;17990:41;;17978:2;17963:18;7944:119:0;17850:187:1;18085:577:0;;;;;;;;;;-1:-1:-1;18085:577:0;;;;;:::i;:::-;;:::i;13589:835::-;13848:12;13862;13829:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;;;;;;;;;13887:12:::1;13902:31;13910:6;13918;13926;13902:7;:31::i;:::-;13952:53;::::0;-1:-1:-1;;;13952:53:0;;13977:10:::1;13952:53;::::0;::::1;18626:34:1::0;-1:-1:-1;;;;;13952:24:0;::::1;18676:18:1::0;;;18669:43;;;18728:18;;;18721:34;;;13887:46:0;;-1:-1:-1;13952:24:0::1;::::0;18561:18:1;;13952:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13944:89;;;::::0;-1:-1:-1;;;13944:89:0;;19218:2:1;13944:89:0::1;::::0;::::1;19200:21:1::0;19257:2;19237:18;;;19230:30;19296:25;19276:18;;;19269:53;19339:18;;13944:89:0::1;19016:347:1::0;13944:89:0::1;14101:20;::::0;-1:-1:-1;;;14101:20:0;;-1:-1:-1;;;;;4643:32:1;;;14101:20:0::1;::::0;::::1;4625:51:1::0;14071:12:0::1;::::0;;;14101:16;::::1;::::0;::::1;::::0;4598:18:1;;14101:20:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14070:51;;;;14133:14;14152:26;14163:6;14171;14152:10;:26::i;:::-;14132:46;;;14220:6;-1:-1:-1::0;;;;;14210:16:0::1;:6;-1:-1:-1::0;;;;;14210:16:0::1;;:58;;14251:7;14260;14210:58;;;14230:7;14239;14210:58;14189:79:::0;;-1:-1:-1;14189:79:0;-1:-1:-1;14287:21:0;;::::1;;14279:63;;;::::0;-1:-1:-1;;;14279:63:0;;19820:2:1;14279:63:0::1;::::0;::::1;19802:21:1::0;19859:2;19839:18;;;19832:30;19898:31;19878:18;;;19871:59;19947:18;;14279:63:0::1;19618:353:1::0;14279:63:0::1;14372:10;14361:7;:21;;14353:63;;;::::0;-1:-1:-1;;;14353:63:0;;20178:2:1;14353:63:0::1;::::0;::::1;20160:21:1::0;20217:2;20197:18;;;20190:30;20256:31;20236:18;;;20229:59;20305:18;;14353:63:0::1;19976:353:1::0;14353:63:0::1;13876:548;;;;13589:835:::0;;;;;;;;;;;;:::o;17297:780::-;17552:21;17533:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;17610:14:::1;::::0;;17622:1:::1;17610:14:::0;;;;;::::1;::::0;;;17586:21:::1;::::0;17610:14:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;17610:14:0;;-1:-1:-1;;17610:14:0;;;;::::1;::::0;::::1;;;;;17586:38;;17652:9;17635:6;17642:1;17635:9;;;;;;;;:::i;:::-;;;;;;;:14;;:26;-1:-1:-1::0;;;;;17635:26:0::1;;;-1:-1:-1::0;;;;;17635:26:0::1;;;::::0;::::1;17687:7;17672:6;17679:1;17672:9;;;;;;;;:::i;:::-;;;;;;;:12;;:22;-1:-1:-1::0;;;;;17672:22:0::1;;;-1:-1:-1::0;;;;;17672:22:0::1;;;::::0;::::1;17724:6;17705;17712:1;17705:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;:25;::::1;;:16;::::0;;::::1;:25:::0;17751:31:::1;17765:8:::0;17775:6;17751:13:::1;:31::i;:::-;17741:41;;17832:12;17801:7;17826:1;17809:7;:14;:18;;;;:::i;:::-;17801:27;;;;;;;;:::i;:::-;;;;;;;:43;;17793:90;;;;-1:-1:-1::0;;;17793:90:0::1;;;;;;;:::i;:::-;17894:138;17926:6;17933:1;17926:9;;;;;;;;:::i;:::-;;;;;;;:14;;;17942:10;17954:55;17962:6;17969:1;17962:9;;;;;;;;:::i;:::-;;;;;;;:14;;;17978:6;17985:1;17978:9;;;;;;;;:::i;:::-;;;;;;;:12;;;17992:6;17999:1;17992:9;;;;;;;;:::i;:::-;;;;;;;:16;;;17954:7;:55::i;:::-;18011:7;18019:1;18011:10;;;;;;;;:::i;:::-;;;;;;;17894:17;:138::i;:::-;18043:26;18049:7;18058:6;18066:2;18043:5;:26::i;:::-;17575:502;17297:780:::0;;;;;;;;;;:::o;19290:755::-;19457:21;19433:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19544:4:0::1;19504:45;:6:::0;;19511:17:::1;19527:1;19504:6:::0;19511:17:::1;:::i;:::-;19504:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19504:45:0::1;;19496:78;;;;-1:-1:-1::0;;;19496:78:0::1;;;;;;;:::i;:::-;19595:31;19609:8;19619:6;;19595:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:13;:31::i;:::-;19585:41;;19676:12;19645:7;19670:1;19653:7;:14;:18;;;;:::i;:::-;19645:27;;;;;;;;:::i;:::-;;;;;;;:43;;19637:90;;;;-1:-1:-1::0;;;19637:90:0::1;;;;;;;:::i;:::-;19738:138;19770:6;;19777:1;19770:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;19770:14:0::1;:::i;:::-;19786:10;19798:55;19806:6;;19813:1;19806:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;19806:14:0::1;:::i;:::-;19822:6;;19829:1;19822:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;19836:6;;19843:1;19836:9;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;19798:55::-;19855:7;19863:1;19855:10;;;;;;;;:::i;19738:138::-;19887:37;19893:7;19902:6;;19887:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;19918:4;19887:5;:37::i;:::-;19935:4;-1:-1:-1::0;;;;;19935:13:0::1;;19949:7;19974:1;19957:7;:14;:18;;;;:::i;:::-;19949:27;;;;;;;;:::i;:::-;;;;;;;19935:42;;;;;;;;;;;;;15463:25:1::0;;15451:2;15436:18;;15317:177;19935:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19988:49;20005:2;20009:7;20034:1;20017:7;:14;:18;;;;:::i;:::-;20009:27;;;;;;;;:::i;:::-;;;;;;;19988:16;:49::i;:::-;19290:755:::0;;;;;;;;;:::o;9561:752::-;9718:12;9732;9809:13;9838:7;-1:-1:-1;;;;;9825:29:0;;9855:6;9863;9871;9825:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9809:69;-1:-1:-1;;;;;;9895:19:0;;9891:64;;9939:1;9941;9931:12;;;;;;;9891:64;9968:13;9983;10000:35;10012:6;10020;10028;10000:11;:35::i;:::-;9967:68;;;;10046:17;10073:5;-1:-1:-1;;;;;10066:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10046:47;-1:-1:-1;10046:47:0;10116:20;10128:8;10116:9;:20;:::i;:::-;:35;;;;:::i;:::-;10106:45;-1:-1:-1;10243:12:0;10220:20;10232:8;10220:9;:20;:::i;:::-;:35;;;;:::i;:::-;10210:45;;9746:567;;;;9561:752;;;;;;;;:::o;15822:670::-;16116:16;16134:14;16161:12;16176:37;16184:5;16199:4;16206:6;16176:7;:37::i;:::-;16161:52;;16224:10;16237;:39;;16267:9;16237:39;;;-1:-1:-1;;16237:39:0;16287:71;;-1:-1:-1;;;16287:71:0;;16224:52;;-1:-1:-1;;;;;;16287:18:0;;;;;:71;;16306:10;;16326:4;;16224:52;;16340:8;;16350:1;;16353;;16356;;16287:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16396:88;16415:5;16422:6;16430:9;16441:14;16457:12;16471:2;16475:8;16396:18;:88::i;:::-;16369:115;;;;;;;;16150:342;;15822:670;;;;;;;;;;;;;;:::o;5257:415::-;5340:12;5366:14;5382;5400:26;5411:6;5419;5400:10;:26::i;:::-;5563:40;;-1:-1:-1;;24289:2:1;24285:15;;;24281:24;;5563:40:0;;;24269:37:1;24340:15;;;24336:24;24322:12;;;24315:46;24407:14;;24400:22;24395:3;24391:32;24377:12;;;24370:54;5365:61:0;;-1:-1:-1;5365:61:0;-1:-1:-1;5531:7:0;;24440:12:1;;5563:40:0;;;;;;;;;;;;5553:51;;;;;;5619:12;5478:182;;;;;;;;;-1:-1:-1;;;;;;24749:26:1;;24812:2;24808:15;;;;-1:-1:-1;;24804:53:1;24800:1;24791:11;;24784:74;24883:2;24874:12;;24867:28;;;;24920:2;24911:12;;24904:28;24957:2;24948:12;;24463:503;5478:182:0;;;;-1:-1:-1;;5478:182:0;;;;;;;;;5468:193;;5478:182;5468:193;;;;;5257:415;-1:-1:-1;;;;;;5257:415:0:o;4832:327::-;4905:14;4921;4966:6;-1:-1:-1;;;;;4956:16:0;:6;-1:-1:-1;;;;;4956:16:0;;;4948:56;;;;-1:-1:-1;;;4948:56:0;;25173:2:1;4948:56:0;;;25155:21:1;25212:2;25192:18;;;25185:30;25251:29;25231:18;;;25224:57;25298:18;;4948:56:0;24971:351:1;4948:56:0;5043:6;-1:-1:-1;;;;;5034:15:0;:6;-1:-1:-1;;;;;5034:15:0;;:53;;5072:6;5080;5034:53;;;5053:6;5061;5034:53;5015:72;;-1:-1:-1;5015:72:0;-1:-1:-1;;;;;;5106:20:0;;5098:53;;;;-1:-1:-1;;;5098:53:0;;25529:2:1;5098:53:0;;;25511:21:1;25568:2;25548:18;;;25541:30;-1:-1:-1;;;25587:18:1;;;25580:50;25647:18;;5098:53:0;25327:344:1;5098:53:0;4832:327;;;;;:::o;11893:696::-;12186:12;12200;12214:14;12167:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;12262:93:::1;12276:6;12284;12292;12300:14;12316;12332:10;12344;12262:13;:93::i;:::-;12241:114:::0;;-1:-1:-1;12241:114:0;-1:-1:-1;12366:12:0::1;12381:31;12389:6:::0;12397;12405;12381:7:::1;:31::i;:::-;12366:46;;12423:52;12441:6;12449:10;12461:4;12467:7;12423:17;:52::i;:::-;12486;12504:6;12512:10;12524:4;12530:7;12486:17;:52::i;:::-;12561:20;::::0;-1:-1:-1;;;12561:20:0;;-1:-1:-1;;;;;4643:32:1;;;12561:20:0::1;::::0;::::1;4625:51:1::0;12561:16:0;::::1;::::0;::::1;::::0;4598:18:1;;12561:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12549:32;;12230:359;11893:696:::0;;;;;;;;;;;;;;:::o;6625:664::-;6720:11;6733;6757:12;6772:32;6780:7;6789:8;6799:4;6772:7;:32::i;:::-;6877:34;;-1:-1:-1;;;6877:34:0;;-1:-1:-1;;;;;4643:32:1;;;6877:34:0;;;4625:51:1;4643:32;;-1:-1:-1;;;;;6890:7:0;6877:28;;;;;;4598:18:1;;6877:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6873:125;;;6943:43;;-1:-1:-1;;;6943:43:0;;;;;25850:25:1;;;-1:-1:-1;;;;;25911:32:1;;;25891:18;;;25884:60;6943:24:0;;;;;25823:18:1;;6943:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6928:58;;6873:125;7015:33;7023:7;7032:8;7042:5;7015:7;:33::i;:::-;7063:34;;-1:-1:-1;;;7063:34:0;;-1:-1:-1;;;;;4643:32:1;;;7063:34:0;;;4625:51:1;7008:40:0;;-1:-1:-1;7076:7:0;7063:28;;;;;;4598:18:1;;7063:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7059:127;;;7131:43;;-1:-1:-1;;;7131:43:0;;;;;25850:25:1;;;-1:-1:-1;;;;;25911:32:1;;;25891:18;;;25884:60;7131:24:0;;;;;25823:18:1;;7131:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7114:60;;7059:127;7218:14;7203:12;:29;:78;;7259:14;7275:5;7203:78;;;7236:12;7250:4;7203:78;7196:85;;;;;;;6625:664;;;;;;:::o;6162:375::-;6249:13;6264;6291:14;6310:26;6321:6;6329;6310:10;:26::i;:::-;6290:46;;;6348:13;6363;6387:31;6395:6;6403;6411;6387:7;:31::i;:::-;-1:-1:-1;;;;;6381:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6347:86;;;;;6477:6;-1:-1:-1;;;;;6467:16:0;:6;-1:-1:-1;;;;;6467:16:0;;:62;;6510:8;6520;6467:62;;;6487:8;6497;6467:62;6444:85;;;;-1:-1:-1;6162:375:0;-1:-1:-1;;;;;;;6162:375:0:o;18670:612::-;18835:21;18811:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;18908:4:::1;-1:-1:-1::0;;;;;18882:31:0::1;:6;;18889:1;18882:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;18882:14:0::1;:::i;:::-;-1:-1:-1::0;;;;;18882:31:0::1;;18874:64;;;;-1:-1:-1::0;;;18874:64:0::1;;;;;;;:::i;:::-;18959:32;18973:9;18984:6;;18959:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;18949:42;;19041:12;19010:7;19035:1;19018:7;:14;:18;;;;:::i;:::-;19010:27;;;;;;;;:::i;:::-;;;;;;;:43;;19002:90;;;;-1:-1:-1::0;;;19002:90:0::1;;;;;;;:::i;:::-;19103:4;-1:-1:-1::0;;;;;19103:12:0::1;;19123:7;19131:1;19123:10;;;;;;;;:::i;:::-;;;;;;;19103:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19154:4;-1:-1:-1::0;;;;;19154:13:0::1;;19168:55;19176:6;;19183:1;19176:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;19176:14:0::1;:::i;:::-;19192:6;;19199:1;19192:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;19206:6;;19213:1;19206:9;;;;;;;:::i;19168:55::-;19225:7;19233:1;19225:10;;;;;;;;:::i;:::-;;;;;;;19154:82;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26458:32:1;;;;26440:51;;26522:2;26507:18;;26500:34;26428:2;26413:18;;26266:274;19154:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19147:90;;;;:::i;:::-;19248:26;19254:7;19263:6;;19248:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;19271:2;19248:5;:26::i;:::-;18670:612:::0;;;;;;;;:::o;20053:404::-;20247:13;20228:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;20273:114:::1;20291:6;;20298:1;20291:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;20291:14:0::1;:::i;:::-;20307:10;20319:55;20327:6;;20334:1;20327:9;;;;;;;:::i;20319:55::-;20376:7;20384:1;20376:10;;;;;;;;:::i;20273:114::-;20398:26;20404:7;20413:6;;20398:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;-1:-1:-1::0;20442:7:0;;20053:404;-1:-1:-1;;;;;20053:404:0:o;7377:559::-;7459:21;7518:1;7501:6;:13;:18;;7493:51;;;;-1:-1:-1;;;7493:51:0;;;;;;;:::i;:::-;7576:13;;:15;;7590:1;7576:15;:::i;:::-;7565:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7565:27:0;;7555:37;;7616:8;7603:7;7611:1;7603:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;7640:6;7635:294;7656:6;:13;7652:1;:17;7635:294;;;7691:12;7706:55;7714:6;7721:1;7714:9;;;;;;;;:::i;:::-;;;;;;;:14;;;7730:6;7737:1;7730:9;;;;;;;;:::i;:::-;;;;;;;:12;;;7744:6;7751:1;7744:9;;;;;;;;:::i;7706:55::-;7780:34;;-1:-1:-1;;;7780:34:0;;-1:-1:-1;;;;;4643:32:1;;;7780:34:0;;;4625:51:1;7691:70:0;;-1:-1:-1;7793:7:0;7780:28;;;;;;4598:18:1;;7780:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7776:142;;;7856:4;-1:-1:-1;;;;;7850:24:0;;7875:7;7883:1;7875:10;;;;;;;;:::i;:::-;;;;;;;7887:6;7894:1;7887:9;;;;;;;;:::i;:::-;;;;;;;:14;;;7850:52;;;;;;;;;;;;;;;25850:25:1;;;-1:-1:-1;;;;;25911:32:1;25906:2;25891:18;;25884:60;25838:2;25823:18;;25676:274;7850:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7835:7;7843:3;:1;7845;7843:3;:::i;:::-;7835:12;;;;;;;;:::i;:::-;;;;;;:67;;;;;7776:142;-1:-1:-1;7671:3:0;;;;:::i;:::-;;;;7635:294;;;;7377:559;;;;:::o;8071:1482::-;8260:12;8274;8288:14;8367:13;8396:7;-1:-1:-1;;;;;8383:29:0;;8413:6;8421;8429;8383:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8367:69;-1:-1:-1;8448:13:0;;;-1:-1:-1;;;;;8532:19:0;;;8528:167;;8590:5;-1:-1:-1;;;;;8583:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8568:42;;8648:35;8660:6;8668;8676;8648:11;:35::i;:::-;8625:58;;-1:-1:-1;8625:58:0;-1:-1:-1;8528:167:0;8709:13;;:30;;;;-1:-1:-1;8726:13:0;;8709:30;8705:841;;;8778:14;;-1:-1:-1;8794:14:0;;-1:-1:-1;4238:5:0;8836:28;8846:17;8794:14;8778;8846:17;:::i;:::-;8836:9;:28::i;:::-;:48;;;;:::i;:::-;8824:60;;8705:841;;;8919:19;8941:50;8956:14;8972:8;8982;8941:14;:50::i;:::-;8919:72;;9028:14;9010;:32;9006:529;;9085:14;;-1:-1:-1;9101:14:0;-1:-1:-1;9101:14:0;9147:78;9181:8;9156:22;9166:12;9085:14;9156:22;:::i;:::-;:33;;;;:::i;:::-;9216:8;9191:22;9201:12;9191:7;:22;:::i;:::-;:33;;;;:::i;:::-;9147:8;:78::i;:::-;9135:90;;9006:529;;;9266:19;9288:50;9303:14;9319:8;9329;9288:14;:50::i;:::-;9266:72;-1:-1:-1;9395:14:0;;-1:-1:-1;9266:72:0;;-1:-1:-1;9441:78:0;9475:8;9450:22;9460:12;9266:72;9450:22;:::i;:::-;:33;;;;:::i;:::-;9510:8;9485:22;9495:12;9485:7;:22;:::i;9441:78::-;9429:90;;9247:288;9006:529;8902:644;8705:841;8304:1249;;;;8071:1482;;;;;;;;;:::o;15113:701::-;15424:12;15438;15463;15478:31;15486:6;15494;15502;15478:7;:31::i;:::-;15463:46;;15535:10;15548;:39;;15578:9;15548:39;;;-1:-1:-1;;15548:39:0;15602:71;;-1:-1:-1;;;15602:71:0;;15535:52;;-1:-1:-1;;;;;;15602:18:0;;;;;:71;;15621:10;;15641:4;;15535:52;;15655:8;;15665:1;;15668;;15671;;15602:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15520:165;15718:88;15734:6;15742;15750;15758:9;15769:10;15781;15793:2;15797:8;15718:15;:88::i;:::-;15697:109;;;;;;;;15452:362;15113:701;;;;;;;;;;;;;;;:::o;12597:949::-;12855:16;12873:14;12889;12836:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;12943:206:::1;12971:5;12999:4;13019:6;13040:18;13073:9;13097:14;13126:12;12943:13;:206::i;:::-;12916:233:::0;;-1:-1:-1;12916:233:0;-1:-1:-1;13160:12:0::1;13175:37;13183:5:::0;13198:4:::1;13205:6:::0;13175:7:::1;:37::i;:::-;13160:52;;13223:55;13241:5;13248:10;13260:4;13266:11;13223:17;:55::i;:::-;13289:4;-1:-1:-1::0;;;;;13289:12:0::1;;13309:9;13289:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13339:30:0::1;::::0;-1:-1:-1;;;13339:30:0;;-1:-1:-1;;;;;26458:32:1;;;13339:30:0::1;::::0;::::1;26440:51:1::0;26507:18;;;26500:34;;;13339:4:0::1;:13;::::0;::::1;::::0;26413:18:1;;13339:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13332:38;;;;:::i;:::-;13393:20;::::0;-1:-1:-1;;;13393:20:0;;-1:-1:-1;;;;;4643:32:1;;;13393:20:0::1;::::0;::::1;4625:51:1::0;13393:16:0;::::1;::::0;::::1;::::0;4598:18:1;;13393:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13381:32;;13476:9;13464;:21;13460:78;;;13487:51;13504:10;13516:21;13528:9:::0;13516::::1;:21;:::i;:::-;13487:16;:51::i;:::-;12905:641;12597:949:::0;;;;;;;;;;;;:::o;14432:673::-;14674:16;14692:14;14655:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;14746:226:::1;14776:5;14804:4;14824:6;14845:9;14869:14;14898:12;14933:4;14953:8;14746:15;:226::i;:::-;14719:253:::0;;-1:-1:-1;14719:253:0;-1:-1:-1;14983:37:0::1;14997:5:::0;15004:2;14719:253;14983:13:::1;:37::i;:::-;15031:24;::::0;-1:-1:-1;;;15031:24:0;;::::1;::::0;::::1;15463:25:1::0;;;15031:4:0::1;-1:-1:-1::0;;;;;15031:13:0::1;::::0;::::1;::::0;15436:18:1;;15031:24:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15066:31;15083:2;15087:9;15066:16;:31::i;:::-;14432:673:::0;;;;;;;;;;;:::o;7944:119::-;8021:34;;-1:-1:-1;;;8021:34:0;;-1:-1:-1;;;;;4643:32:1;;;8021:34:0;;;4625:51:1;7997:4:0;;8034:7;8021:28;;;;;;4598:18:1;;8021:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8014:41;7944:119;-1:-1:-1;;7944:119:0:o;18085:577::-;18292:21;18273:8;4431:15;4419:8;:27;;4411:55;;;;-1:-1:-1;;;4411:55:0;;;;;;;:::i;:::-;18336:31:::1;18350:8;18360:6;;18336:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;18326:41;;18417:12;18386:7;18411:1;18394:7;:14;:18;;;;:::i;:::-;18386:27;;;;;;;;:::i;:::-;;;;;;;:43;;18378:90;;;;-1:-1:-1::0;;;18378:90:0::1;;;;;;;:::i;:::-;18479:138;18511:6;;18518:1;18511:9;;;;;;;:::i;18479:138::-;18628:26;18634:7;18643:6;;18628:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;21053:404:::0;21184:1;21164:5;-1:-1:-1;;;;;21164:17:0;;:21;21156:55;;;;-1:-1:-1;;;21156:55:0;;27020:2:1;21156:55:0;;;27002:21:1;27059:2;27039:18;;;27032:30;-1:-1:-1;;;27078:18:1;;;27071:51;27139:18;;21156:55:0;26818:345:1;21156:55:0;21269:69;;;-1:-1:-1;;;;;18644:15:1;;;21269:69:0;;;18626:34:1;18696:15;;;18676:18;;;18669:43;18728:18;;;;18721:34;;;21269:69:0;;;;;;;;;;18561:18:1;;;;21269:69:0;;;;;;;-1:-1:-1;;;;;21269:69:0;-1:-1:-1;;;21269:69:0;;;21258:81;;-1:-1:-1;;;;21258:10:0;;;;:81;;21269:69;21258:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21222:117;;;;21358:7;:57;;;;-1:-1:-1;21370:11:0;;:16;;:44;;;21401:4;21390:24;;;;;;;;;;;;:::i;:::-;21350:99;;;;-1:-1:-1;;;21350:99:0;;27912:2:1;21350:99:0;;;27894:21:1;27951:2;27931:18;;;27924:30;27990:31;27970:18;;;27963:59;28039:18;;21350:99:0;27710:353:1;21350:99:0;21145:312;;21053:404;;;;:::o;16609:680::-;16716:6;16711:571;16732:6;:13;16728:1;:17;16711:571;;;16768:14;16787:40;16798:6;16805:1;16798:9;;;;;;;;:::i;:::-;;;;;;;:14;;;16814:6;16821:1;16814:9;;;;;;;;:::i;:::-;;;;;;;:12;;;16787:10;:40::i;:::-;-1:-1:-1;16767:60:0;-1:-1:-1;16842:14:0;16859:7;16867:5;:1;16871;16867:5;:::i;:::-;16859:14;;;;;;;;:::i;:::-;;;;;;;16842:31;;16889:15;16906;16943:6;-1:-1:-1;;;;;16925:24:0;:6;16932:1;16925:9;;;;;;;;:::i;:::-;;;;;;;:14;;;-1:-1:-1;;;;;16925:24:0;;:70;;16976:9;16992:1;16925:70;;;16958:1;16962:9;16925:70;16888:107;;;;17010:10;17043:1;17027:6;:13;:17;;;;:::i;:::-;17023:1;:21;:91;;17111:3;17023:91;;;17047:61;17055:6;17062:3;:1;17064;17062:3;:::i;:::-;17055:11;;;;;;;;:::i;:::-;;;;;;;:16;;;17073:6;17080:1;17082;17080:3;;;;:::i;:::-;17073:11;;;;;;;;:::i;:::-;;;;;;;:14;;;17089:6;17096:1;17098;17096:3;;;;:::i;:::-;17089:11;;;;;;;;:::i;17047:61::-;17010:104;;17135:55;17143:6;17150:1;17143:9;;;;;;;;:::i;:::-;;;;;;;:14;;;17159:6;17166:1;17159:9;;;;;;;;:::i;:::-;;;;;;;:12;;;17173:6;17180:1;17173:9;;;;;;;;:::i;17135:55::-;-1:-1:-1;;;;;17129:67:0;;17215:10;17227;17239:2;17253:1;17243:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17243:12:0;;17129:141;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16752:530;;;;;16747:3;;;;;:::i;:::-;;;;16711:571;;;;16609:680;;;:::o;20465:196::-;20574:12;;;20536;20574;;;;;;;;;-1:-1:-1;;;;;20553:7:0;;;20567:5;;20553:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20535:52;;;20606:7;20598:55;;;;-1:-1:-1;;;20598:55:0;;28899:2:1;20598:55:0;;;28881:21:1;28938:2;28918:18;;;28911:30;28977:34;28957:18;;;28950:62;-1:-1:-1;;;29028:18:1;;;29021:33;29071:19;;20598:55:0;28697:399:1;20598:55:0;20524:137;20465:196;;:::o;10321:1564::-;10553:12;10567;10618:10;10600:14;:28;;10592:72;;;;-1:-1:-1;;;10592:72:0;;29303:2:1;10592:72:0;;;29285:21:1;29342:2;29322:18;;;29315:30;29381:33;29361:18;;;29354:61;29432:18;;10592:72:0;29101:355:1;10592:72:0;10701:10;10683:14;:28;;10675:72;;;;-1:-1:-1;;;10675:72:0;;29663:2:1;10675:72:0;;;29645:21:1;29702:2;29682:18;;;29675:30;29741:33;29721:18;;;29714:61;29792:18;;10675:72:0;29461:355:1;10675:72:0;10826:53;;-1:-1:-1;;;10826:53:0;;10810:13;;-1:-1:-1;;;;;10839:7:0;10826:29;;;;:53;;10856:6;;10864;;10872;;10826:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10810:69;-1:-1:-1;;;;;;10894:19:0;;10890:116;;10938:56;;-1:-1:-1;;;10938:56:0;;-1:-1:-1;;;;;10951:7:0;10938:32;;;;:56;;10971:6;;10979;;10987;;10938:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10930:64;;10890:116;11017:13;11032;11049:35;11061:6;11069;11077;11049:11;:35::i;:::-;11016:68;;;;11099:8;11111:1;11099:13;:30;;;;-1:-1:-1;11116:13:0;;11099:30;11095:783;;;11168:14;;-1:-1:-1;11184:14:0;;-1:-1:-1;11095:783:0;;;11232:19;11254:50;11269:14;11285:8;11295;11254:14;:50::i;:::-;11232:72;;11341:14;11323;:32;11319:548;;11402:10;11384:14;:28;;11376:70;;;;-1:-1:-1;;;11376:70:0;;20178:2:1;11376:70:0;;;20160:21:1;20217:2;20197:18;;;20190:30;20256:31;20236:18;;;20229:59;20305:18;;11376:70:0;19976:353:1;11376:70:0;11487:14;;-1:-1:-1;11503:14:0;-1:-1:-1;11503:14:0;11319:548;;;11559:19;11581:50;11596:14;11612:8;11622;11581:14;:50::i;:::-;11559:72;;11675:14;11657;:32;;11650:40;;;;:::i;:::-;11735:10;11717:14;:28;;11709:70;;;;-1:-1:-1;;;11709:70:0;;19820:2:1;11709:70:0;;;19802:21:1;19859:2;19839:18;;;19832:30;19898:31;19878:18;;;19871:59;19947:18;;11709:70:0;19618:353:1;11709:70:0;11820:14;-1:-1:-1;11836:14:0;;-1:-1:-1;11319:548:0;11217:661;11095:783;10581:1304;;;10321:1564;;;;;;;;;;:::o;3323:303::-;3368:6;3395:1;3391;:5;3387:232;;;-1:-1:-1;3417:1:0;3433:6;3442:5;3446:1;3417;3442:5;:::i;:::-;:9;;3450:1;3442:9;:::i;:::-;3433:18;;3466:92;3477:1;3473;:5;3466:92;;;3503:1;-1:-1:-1;3503:1:0;3541;3503;3528:5;3503:1;3528;:5;:::i;:::-;:9;;;;:::i;:::-;3527:15;;;;:::i;:::-;3523:19;;3466:92;;;3398:171;3323:303;;;:::o;3387:232::-;3579:6;;3575:44;;-1:-1:-1;3606:1:0;3575:44;3323:303;;;:::o;5791:307::-;5882:12;5925:1;5915:7;:11;5907:51;;;;-1:-1:-1;;;5907:51:0;;30023:2:1;5907:51:0;;;30005:21:1;30062:2;30042:18;;;30035:30;30101:29;30081:18;;;30074:57;30148:18;;5907:51:0;29821:351:1;5907:51:0;5988:1;5977:8;:12;:28;;;;;6004:1;5993:8;:12;5977:28;5969:71;;;;-1:-1:-1;;;5969:71:0;;30379:2:1;5969:71:0;;;30361:21:1;30418:2;30398:18;;;30391:30;30457:32;30437:18;;;30430:60;30507:18;;5969:71:0;30177:354:1;5969:71:0;6082:8;6061:18;6071:8;6061:7;:18;:::i;:::-;:29;;;;:::i;:::-;6051:39;5791:307;-1:-1:-1;;;;5791:307:0:o;3220:97::-;3272:4;3300:1;3296;:5;:13;;3308:1;3296:13;;;3304:1;3296:13;3289:20;3220:97;-1:-1:-1;;;3220:97:0:o;20669:376::-;20782:1;20762:5;-1:-1:-1;;;;;20762:17:0;;:21;20754:55;;;;-1:-1:-1;;;20754:55:0;;27020:2:1;20754:55:0;;;27002:21:1;27059:2;27039:18;;;27032:30;-1:-1:-1;;;27078:18:1;;;27071:51;27139:18;;20754:55:0;26818:345:1;20754:55:0;20867:59;;;-1:-1:-1;;;;;26458:32:1;;;20867:59:0;;;26440:51:1;26507:18;;;;26500:34;;;20867:59:0;;;;;;;;;;26413:18:1;;;;20867:59:0;;;;;;;-1:-1:-1;;;;;20867:59:0;-1:-1:-1;;;20867:59:0;;;20856:71;;-1:-1:-1;;;;20856:10:0;;;;:71;;20867:59;20856:71;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20820:107;;;;20946:7;:57;;;;-1:-1:-1;20958:11:0;;:16;;:44;;;20989:4;20978:24;;;;;;;;;;;;:::i;:::-;20938:99;;;;-1:-1:-1;;;20938:99:0;;27912:2:1;20938:99:0;;;27894:21:1;27951:2;27931:18;;;27924:30;27990:31;27970:18;;;27963:59;28039:18;;20938:99:0;27710:353:1;20938:99:0;20743:302;;20669:376;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;201:70;146:131;:::o;282:134::-;350:20;;379:31;350:20;379:31;:::i;421:118::-;507:5;500:13;493:21;486:5;483:32;473:60;;529:1;526;519:12;544:941;663:6;671;679;687;695;703;711;719;772:3;760:9;751:7;747:23;743:33;740:53;;;789:1;786;779:12;740:53;828:9;815:23;847:31;872:5;847:31;:::i;:::-;897:5;-1:-1:-1;954:2:1;939:18;;926:32;967:33;926:32;967:33;:::i;:::-;1019:7;-1:-1:-1;1078:2:1;1063:18;;1050:32;1091:30;1050:32;1091:30;:::i;:::-;1140:7;-1:-1:-1;1194:2:1;1179:18;;1166:32;;-1:-1:-1;1245:3:1;1230:19;;1217:33;;-1:-1:-1;1297:3:1;1282:19;;1269:33;;-1:-1:-1;1354:3:1;1339:19;;1326:33;1368;1326;1368;:::i;:::-;1420:7;1410:17;;;1474:3;1463:9;1459:19;1446:33;1436:43;;544:941;;;;;;;;;;;:::o;1743:872::-;1853:6;1861;1869;1877;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;2007:9;1994:23;1984:33;;2064:2;2053:9;2049:18;2036:32;2026:42;;2118:2;2107:9;2103:18;2090:32;2131:31;2156:5;2131:31;:::i;:::-;2181:5;-1:-1:-1;2238:2:1;2223:18;;2210:32;2251:33;2210:32;2251:33;:::i;:::-;2303:7;-1:-1:-1;2362:3:1;2347:19;;2334:33;2376:30;2334:33;2376:30;:::i;:::-;2425:7;-1:-1:-1;2484:3:1;2469:19;;2456:33;2498;2456;2498;:::i;:::-;2550:7;2540:17;;;2604:3;2593:9;2589:19;2576:33;2566:43;;1743:872;;;;;;;;;;:::o;2620:632::-;2791:2;2843:21;;;2913:13;;2816:18;;;2935:22;;;2762:4;;2791:2;3014:15;;;;2988:2;2973:18;;;2762:4;3057:169;3071:6;3068:1;3065:13;3057:169;;;3132:13;;3120:26;;3201:15;;;;3166:12;;;;3093:1;3086:9;3057:169;;;-1:-1:-1;3243:3:1;;2620:632;-1:-1:-1;;;;;;2620:632:1:o;3257:384::-;3334:8;3344:6;3398:3;3391:4;3383:6;3379:17;3375:27;3365:55;;3416:1;3413;3406:12;3365:55;-1:-1:-1;3439:20:1;;3482:18;3471:30;;3468:50;;;3514:1;3511;3504:12;3468:50;3551:4;3543:6;3539:17;3527:29;;3614:3;3607:4;3599;3591:6;3587:17;3579:6;3575:30;3571:41;3568:50;3565:70;;;3631:1;3628;3621:12;3646:816;3792:6;3800;3808;3816;3824;3832;3885:3;3873:9;3864:7;3860:23;3856:33;3853:53;;;3902:1;3899;3892:12;3853:53;3938:9;3925:23;3915:33;;3995:2;3984:9;3980:18;3967:32;3957:42;;4050:2;4039:9;4035:18;4022:32;4077:18;4069:6;4066:30;4063:50;;;4109:1;4106;4099:12;4063:50;4148:84;4224:7;4215:6;4204:9;4200:22;4148:84;:::i;:::-;4251:8;;-1:-1:-1;4122:110:1;-1:-1:-1;;4336:2:1;4321:18;;4308:32;4349:31;4308:32;4349:31;:::i;:::-;4399:5;4389:15;;;4451:3;4440:9;4436:19;4423:33;4413:43;;3646:816;;;;;;;;:::o;4687:592::-;4770:6;4778;4786;4794;4847:3;4835:9;4826:7;4822:23;4818:33;4815:53;;;4864:1;4861;4854:12;4815:53;4903:9;4890:23;4922:31;4947:5;4922:31;:::i;:::-;4972:5;-1:-1:-1;5029:2:1;5014:18;;5001:32;5042:33;5001:32;5042:33;:::i;:::-;5094:7;-1:-1:-1;5153:2:1;5138:18;;5125:32;5166:30;5125:32;5166:30;:::i;:::-;4687:592;;;;-1:-1:-1;5215:7:1;;5269:2;5254:18;5241:32;;-1:-1:-1;;4687:592:1:o;5284:156::-;5350:20;;5410:4;5399:16;;5389:27;;5379:55;;5430:1;5427;5420:12;5445:1146;5586:6;5594;5602;5610;5618;5626;5634;5642;5650;5658;5666:7;5720:3;5708:9;5699:7;5695:23;5691:33;5688:53;;;5737:1;5734;5727:12;5688:53;5776:9;5763:23;5795:31;5820:5;5795:31;:::i;:::-;5845:5;-1:-1:-1;5902:2:1;5887:18;;5874:32;5915:30;5874:32;5915:30;:::i;:::-;5964:7;-1:-1:-1;6018:2:1;6003:18;;5990:32;;-1:-1:-1;6069:2:1;6054:18;;6041:32;;-1:-1:-1;6120:3:1;6105:19;;6092:33;;-1:-1:-1;6177:3:1;6162:19;;6149:33;6191;6149;6191;:::i;:::-;6243:7;-1:-1:-1;6297:3:1;6282:19;;6269:33;;-1:-1:-1;6354:3:1;6339:19;;6326:33;6368:30;6326:33;6368:30;:::i;:::-;6417:7;-1:-1:-1;6443:37:1;6475:3;6460:19;;6443:37;:::i;:::-;6433:47;;6527:3;6516:9;6512:19;6499:33;6489:43;;6580:3;6569:9;6565:19;6552:33;6541:44;;5445:1146;;;;;;;;;;;;;;:::o;6596:523::-;6670:6;6678;6686;6739:2;6727:9;6718:7;6714:23;6710:32;6707:52;;;6755:1;6752;6745:12;6707:52;6794:9;6781:23;6813:31;6838:5;6813:31;:::i;:::-;6863:5;-1:-1:-1;6920:2:1;6905:18;;6892:32;6933:33;6892:32;6933:33;:::i;:::-;6985:7;-1:-1:-1;7044:2:1;7029:18;;7016:32;7057:30;7016:32;7057:30;:::i;:::-;7106:7;7096:17;;;6596:523;;;;;:::o;7332:388::-;7400:6;7408;7461:2;7449:9;7440:7;7436:23;7432:32;7429:52;;;7477:1;7474;7467:12;7429:52;7516:9;7503:23;7535:31;7560:5;7535:31;:::i;:::-;7585:5;-1:-1:-1;7642:2:1;7627:18;;7614:32;7655:33;7614:32;7655:33;:::i;:::-;7707:7;7697:17;;;7332:388;;;;;:::o;8034:1010::-;8162:6;8170;8178;8186;8194;8202;8210;8218;8226;8279:3;8267:9;8258:7;8254:23;8250:33;8247:53;;;8296:1;8293;8286:12;8247:53;8335:9;8322:23;8354:31;8379:5;8354:31;:::i;:::-;8404:5;-1:-1:-1;8461:2:1;8446:18;;8433:32;8474:33;8433:32;8474:33;:::i;:::-;8526:7;-1:-1:-1;8585:2:1;8570:18;;8557:32;8598:30;8557:32;8598:30;:::i;:::-;8647:7;-1:-1:-1;8701:2:1;8686:18;;8673:32;;-1:-1:-1;8752:3:1;8737:19;;8724:33;;-1:-1:-1;8804:3:1;8789:19;;8776:33;;-1:-1:-1;8856:3:1;8841:19;;8828:33;;-1:-1:-1;8913:3:1;8898:19;;8885:33;8927;8885;8927;:::i;:::-;8979:7;8969:17;;;9033:3;9022:9;9018:19;9005:33;8995:43;;8034:1010;;;;;;;;;;;:::o;9373:456::-;9450:6;9458;9466;9519:2;9507:9;9498:7;9494:23;9490:32;9487:52;;;9535:1;9532;9525:12;9487:52;9571:9;9558:23;9548:33;;9631:2;9620:9;9616:18;9603:32;9644:31;9669:5;9644:31;:::i;:::-;9694:5;-1:-1:-1;9751:2:1;9736:18;;9723:32;9764:33;9723:32;9764:33;:::i;10097:747::-;10234:6;10242;10250;10258;10266;10319:3;10307:9;10298:7;10294:23;10290:33;10287:53;;;10336:1;10333;10326:12;10287:53;10372:9;10359:23;10349:33;;10433:2;10422:9;10418:18;10405:32;10460:18;10452:6;10449:30;10446:50;;;10492:1;10489;10482:12;10446:50;10531:84;10607:7;10598:6;10587:9;10583:22;10531:84;:::i;:::-;10634:8;;-1:-1:-1;10505:110:1;-1:-1:-1;;10719:2:1;10704:18;;10691:32;10732:31;10691:32;10732:31;:::i;:::-;10097:747;;;;-1:-1:-1;10097:747:1;;10834:2;10819:18;10806:32;;10097:747;-1:-1:-1;;10097:747:1:o;10849:127::-;10910:10;10905:3;10901:20;10898:1;10891:31;10941:4;10938:1;10931:15;10965:4;10962:1;10955:15;10981:275;11052:2;11046:9;11117:2;11098:13;;-1:-1:-1;;11094:27:1;11082:40;;11152:18;11137:34;;11173:22;;;11134:62;11131:88;;;11199:18;;:::i;:::-;11235:2;11228:22;10981:275;;-1:-1:-1;10981:275:1:o;11261:183::-;11321:4;11354:18;11346:6;11343:30;11340:56;;;11376:18;;:::i;:::-;-1:-1:-1;11421:1:1;11417:14;11433:4;11413:25;;11261:183::o;11449:1410::-;11611:6;11619;11627;11635;11643;11696:3;11684:9;11675:7;11671:23;11667:33;11664:53;;;11713:1;11710;11703:12;11664:53;11753:9;11740:23;11782:18;11823:2;11815:6;11812:14;11809:34;;;11839:1;11836;11829:12;11809:34;11877:6;11866:9;11862:22;11852:32;;11922:7;11915:4;11911:2;11907:13;11903:27;11893:55;;11944:1;11941;11934:12;11893:55;11980:2;11967:16;12002:4;12026:60;12042:43;12082:2;12042:43;:::i;:::-;12026:60;:::i;:::-;12120:15;;;12202:1;12198:10;;;;12190:19;;12186:28;;;12151:12;;;;12226:19;;;12223:39;;;12258:1;12255;12248:12;12223:39;12282:11;;;;12302:142;12318:6;12313:3;12310:15;12302:142;;;12384:17;;12372:30;;12335:12;;;;12422;;;;12302:142;;;12463:5;-1:-1:-1;;12506:18:1;;12493:32;;-1:-1:-1;;12537:16:1;;;12534:36;;;12566:1;12563;12556:12;12534:36;;12605:86;12683:7;12672:8;12661:9;12657:24;12605:86;:::i;:::-;12710:8;;-1:-1:-1;12579:112:1;-1:-1:-1;12764:38:1;;-1:-1:-1;12798:2:1;12783:18;;12764:38;:::i;12864:752::-;12916:5;12964:4;12952:9;12947:3;12943:19;12939:30;12936:50;;;12982:1;12979;12972:12;12936:50;13015:2;13009:9;13057:4;13049:6;13045:17;13128:6;13116:10;13113:22;13092:18;13080:10;13077:34;13074:62;13071:88;;;13139:18;;:::i;:::-;13175:2;13168:22;13208:6;-1:-1:-1;13208:6:1;13238:23;;13270:33;13238:23;13270:33;:::i;:::-;13312:23;;13387:2;13372:18;;13359:32;13400:33;13359:32;13400:33;:::i;:::-;13461:2;13449:15;;13442:32;13526:2;13511:18;;13498:32;13539:30;13498:32;13539:30;:::i;:::-;13597:2;13585:15;;;;13578:32;12864:752;;-1:-1:-1;;12864:752:1:o;13621:1025::-;13736:6;13744;13797:2;13785:9;13776:7;13772:23;13768:32;13765:52;;;13813:1;13810;13803:12;13765:52;13849:9;13836:23;13826:33;;13878:2;13931;13920:9;13916:18;13903:32;13958:18;13950:6;13947:30;13944:50;;;13990:1;13987;13980:12;13944:50;14013:22;;14066:4;14058:13;;14054:27;-1:-1:-1;14044:55:1;;14095:1;14092;14085:12;14044:55;14131:2;14118:16;14154:60;14170:43;14210:2;14170:43;:::i;14154:60::-;14248:15;;;14310:4;14349:11;;;14341:20;;14337:29;;;14279:12;;;;14236:3;14378:19;;;14375:39;;;14410:1;14407;14400:12;14375:39;14434:11;;;;14454:162;14470:6;14465:3;14462:15;14454:162;;;14536:37;14565:7;14560:3;14536:37;:::i;:::-;14524:50;;14487:12;;;;14594;;;;14454:162;;;14458:3;14635:5;14625:15;;;;;;;13621:1025;;;;;:::o;14651:661::-;14743:6;14751;14759;14767;14775;14828:3;14816:9;14807:7;14803:23;14799:33;14796:53;;;14845:1;14842;14835:12;14796:53;14884:9;14871:23;14903:31;14928:5;14903:31;:::i;:::-;14953:5;-1:-1:-1;15010:2:1;14995:18;;14982:32;15023:33;14982:32;15023:33;:::i;:::-;15075:7;-1:-1:-1;15134:2:1;15119:18;;15106:32;15147:30;15106:32;15147:30;:::i;:::-;14651:661;;;;-1:-1:-1;15196:7:1;;15250:2;15235:18;;15222:32;;-1:-1:-1;15301:3:1;15286:19;15273:33;;14651:661;-1:-1:-1;;14651:661:1:o;15499:1290::-;15649:6;15657;15665;15673;15681;15689;15697;15705;15713;15721;15729:7;15738;15792:3;15780:9;15771:7;15767:23;15763:33;15760:53;;;15809:1;15806;15799:12;15760:53;15848:9;15835:23;15867:31;15892:5;15867:31;:::i;:::-;15917:5;-1:-1:-1;15974:2:1;15959:18;;15946:32;15987:33;15946:32;15987:33;:::i;:::-;16039:7;-1:-1:-1;16098:2:1;16083:18;;16070:32;16111:30;16070:32;16111:30;:::i;:::-;16160:7;-1:-1:-1;16214:2:1;16199:18;;16186:32;;-1:-1:-1;16265:3:1;16250:19;;16237:33;;-1:-1:-1;16317:3:1;16302:19;;16289:33;;-1:-1:-1;16374:3:1;16359:19;;16346:33;16388;16346;16388;:::i;:::-;16440:7;-1:-1:-1;16494:3:1;16479:19;;16466:33;;-1:-1:-1;16551:3:1;16536:19;;16523:33;16565:30;16523:33;16565:30;:::i;:::-;16614:7;-1:-1:-1;16640:37:1;16672:3;16657:19;;16640:37;:::i;:::-;16630:47;;16725:3;16714:9;16710:19;16697:33;16686:44;;16778:3;16767:9;16763:19;16750:33;16739:44;;15499:1290;;;;;;;;;;;;;;:::o;16794:799::-;16904:6;16912;16920;16928;16936;16944;16952;17005:3;16993:9;16984:7;16980:23;16976:33;16973:53;;;17022:1;17019;17012:12;16973:53;17061:9;17048:23;17080:31;17105:5;17080:31;:::i;:::-;17130:5;-1:-1:-1;17187:2:1;17172:18;;17159:32;17200:30;17159:32;17200:30;:::i;:::-;17249:7;-1:-1:-1;17303:2:1;17288:18;;17275:32;;-1:-1:-1;17354:2:1;17339:18;;17326:32;;-1:-1:-1;17405:3:1;17390:19;;17377:33;;-1:-1:-1;17462:3:1;17447:19;;17434:33;17476;17434;17476;:::i;17598:247::-;17657:6;17710:2;17698:9;17689:7;17685:23;17681:32;17678:52;;;17726:1;17723;17716:12;17678:52;17765:9;17752:23;17784:31;17809:5;17784:31;:::i;18042:339::-;18244:2;18226:21;;;18283:2;18263:18;;;18256:30;-1:-1:-1;;;18317:2:1;18302:18;;18295:45;18372:2;18357:18;;18042:339::o;18766:245::-;18833:6;18886:2;18874:9;18865:7;18861:23;18857:32;18854:52;;;18902:1;18899;18892:12;18854:52;18934:9;18928:16;18953:28;18975:5;18953:28;:::i;19368:245::-;19447:6;19455;19508:2;19496:9;19487:7;19483:23;19479:32;19476:52;;;19524:1;19521;19514:12;19476:52;-1:-1:-1;;19547:16:1;;19603:2;19588:18;;;19582:25;19547:16;;19582:25;;-1:-1:-1;19368:245:1:o;20334:127::-;20395:10;20390:3;20386:20;20383:1;20376:31;20426:4;20423:1;20416:15;20450:4;20447:1;20440:15;20466:127;20527:10;20522:3;20518:20;20515:1;20508:31;20558:4;20555:1;20548:15;20582:4;20579:1;20572:15;20598:125;20638:4;20666:1;20663;20660:8;20657:34;;;20671:18;;:::i;:::-;-1:-1:-1;20708:9:1;;20598:125::o;20728:398::-;20930:2;20912:21;;;20969:2;20949:18;;;20942:30;21008:34;21003:2;20988:18;;20981:62;-1:-1:-1;;;21074:2:1;21059:18;;21052:32;21116:3;21101:19;;20728:398::o;21131:344::-;21333:2;21315:21;;;21372:2;21352:18;;;21345:30;-1:-1:-1;;;21406:2:1;21391:18;;21384:50;21466:2;21451:18;;21131:344::o;21480:222::-;21561:6;21614:2;21602:9;21593:7;21589:23;21585:32;21582:52;;;21630:1;21627;21620:12;21582:52;21653:43;21688:7;21677:9;21653:43;:::i;21707:241::-;21763:6;21816:2;21804:9;21795:7;21791:23;21787:32;21784:52;;;21832:1;21829;21822:12;21784:52;21871:9;21858:23;21890:28;21912:5;21890:28;:::i;22135:184::-;22205:6;22258:2;22246:9;22237:7;22233:23;22229:32;22226:52;;;22274:1;22271;22264:12;22226:52;-1:-1:-1;22297:16:1;;22135:184;-1:-1:-1;22135:184:1:o;22324:385::-;-1:-1:-1;;;;;22576:15:1;;;22558:34;;22628:15;;;;22623:2;22608:18;;22601:43;22687:14;;22680:22;22675:2;22660:18;;22653:50;22508:2;22493:18;;22324:385::o;22714:251::-;22784:6;22837:2;22825:9;22816:7;22812:23;22808:32;22805:52;;;22853:1;22850;22843:12;22805:52;22885:9;22879:16;22904:31;22929:5;22904:31;:::i;22970:168::-;23010:7;23076:1;23072;23068:6;23064:14;23061:1;23058:21;23053:1;23046:9;23039:17;23035:45;23032:71;;;23083:18;;:::i;:::-;-1:-1:-1;23123:9:1;;22970:168::o;23143:217::-;23183:1;23209;23199:132;;23253:10;23248:3;23244:20;23241:1;23234:31;23288:4;23285:1;23278:15;23316:4;23313:1;23306:15;23199:132;-1:-1:-1;23345:9:1;;23143:217::o;23365:670::-;-1:-1:-1;;;;;23732:15:1;;;23714:34;;23784:15;;;;23779:2;23764:18;;23757:43;23831:2;23816:18;;23809:34;;;;23874:2;23859:18;;23852:34;;;;23935:4;23923:17;23917:3;23902:19;;23895:46;23694:3;23957:19;;23950:35;24016:3;24001:19;;23994:35;;;;23663:3;23648:19;;23365:670::o;25955:306::-;26043:6;26051;26059;26112:2;26100:9;26091:7;26087:23;26083:32;26080:52;;;26128:1;26125;26118:12;26080:52;26157:9;26151:16;26141:26;;26207:2;26196:9;26192:18;26186:25;26176:35;;26251:2;26240:9;26236:18;26230:25;26220:35;;25955:306;;;;;:::o;26545:128::-;26585:3;26616:1;26612:6;26609:1;26606:13;26603:39;;;26622:18;;:::i;:::-;-1:-1:-1;26658:9:1;;26545:128::o;26678:135::-;26717:3;-1:-1:-1;;26738:17:1;;26735:43;;;26758:18;;:::i;:::-;-1:-1:-1;26805:1:1;26794:13;;26678:135::o;27168:258::-;27240:1;27250:113;27264:6;27261:1;27258:13;27250:113;;;27340:11;;;27334:18;27321:11;;;27314:39;27286:2;27279:10;27250:113;;;27381:6;27378:1;27375:13;27372:48;;;-1:-1:-1;;27416:1:1;27398:16;;27391:27;27168:258::o;27431:274::-;27560:3;27598:6;27592:13;27614:53;27660:6;27655:3;27648:4;27640:6;27636:17;27614:53;:::i;:::-;27683:16;;;;;27431:274;-1:-1:-1;;27431:274:1:o;28068:624::-;28299:6;28288:9;28281:25;28342:6;28337:2;28326:9;28322:18;28315:34;28414:1;28410;28405:3;28401:11;28397:19;28389:6;28385:32;28380:2;28369:9;28365:18;28358:60;28454:3;28449:2;28438:9;28434:18;28427:31;28262:4;28487:6;28481:13;28531:6;28525:3;28514:9;28510:19;28503:35;28547:67;28607:6;28601:3;28590:9;28586:19;28581:2;28573:6;28569:15;28547:67;:::i;:::-;28675:2;28654:15;-1:-1:-1;;28650:29:1;28635:45;;;;28682:3;28631:55;;28068:624;-1:-1:-1;;;;;28068:624:1:o
Swarm Source
ipfs://ade63090b6ff06ced67a8455d306c84faf1b91ed202e7abce77c4e4c8a12d8db
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.