Contract 0xa274258b2d68dca40955a2d5e7bb67756d30db3e

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xec8a099779cf922ef0f0bb992b07454fcc4fb7ba3b3bdb37ab2606cbc26661c6Add Liquidity ET...390258722023-02-07 17:35:3723 hrs 40 mins ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.878081531787554 MATIC0.029921233503209.040587298
0x61a156ceadea0e1ca33320164a7dd2bef84c267b129552b78757908699f8f4e1Add Liquidity ET...389658972023-02-06 4:41:202 days 12 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.7784936171509 MATIC0.028277589413197.590624224
0xe6afbcfc44d5d764d0e8fc7b3a87eb212f7e6c0ebb224446bfadabdaeca9d56bSwap Exact Token...389658822023-02-06 4:40:482 days 12 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.020344506275169.217449284
0x21dd7da7f36424c7d323c4c54a6b0a15e3b49248ed41ace7a01e2d2ff1a9b432Swap Exact Token...389286202023-02-05 5:48:543 days 11 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.013991003708121.173048582
0x1e9365f3eebd71a7b3976dca04c973abd05fb148cf8e0b94c24b69aeb7314b69Remove Liquidity...387758432023-02-01 8:02:117 days 9 hrs ago0xb07be0a616827be62c8066692a29ea88c2b9c6f7 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.012403045608 75.728528654
0x5ef97dc4e63b2a0d5767965baa4846eec6c47e0b90350ddc579b72d380d45a18Add Liquidity ET...387751772023-02-01 7:38:317 days 9 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.890331763092629 MATIC0.01181329696482.538896091
0xea95bb0b0e5339d1cbef26b7b8170fc104c168546069dddb29bd13b9e2408754Swap Exact Token...387751582023-02-01 7:37:517 days 9 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.00972973724580.928054811
0xa8e111d7cc93e056665a120916d1bdba1639a21927f429bee55979888a13deafAdd Liquidity ET...387553372023-01-31 19:35:047 days 21 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.954657230979126 MATIC0.01428744071999.817241782
0x50985bf2bf087cac2a9cc93b77b79f1871b4c1d783cc6ec19ec45d004d5cb9bfSwap Exact Token...387553212023-01-31 19:34:307 days 21 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.00900063892874.856235736
0xfb95079444102072c36c5808185c823832395b4a15d7bc8971821bc974afbc2fSwap Exact Token...386941142023-01-30 6:16:219 days 10 hrs ago0x0b0565e6c4af042b707461a1ad954b303c6790cd IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.007214123873 62.479962179
0x834b418c7589c0c798e7abe9c584266f523aeff0cc53f18a3a754660343c8789Remove Liquidity...386940822023-01-30 6:15:139 days 11 hrs ago0x0b0565e6c4af042b707461a1ad954b303c6790cd IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.011496453936 70.197492483
0x70cfa6c1b5f870877155efb3f4b124bf0c95cc641b9496d0f6ac85c0536d430fAdd Liquidity ET...386148882023-01-28 6:15:1311 days 11 hrs ago0x0b0565e6c4af042b707461a1ad954b303c6790cd IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.486804622310603 MATIC0.00948114486 64.120711332
0xeb80e2b4e6b6fd288d1d7679e9f7f74ed535fc432492fdcb1b40ceafdc356937Swap Exact Token...386148602023-01-28 6:14:1311 days 11 hrs ago0x0b0565e6c4af042b707461a1ad954b303c6790cd IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.008715527489 72.477796354
0xd34bfd9fae13cf1bd07f975049812f51dc708efdca2e092dbc9d5a33157b1ac7Remove Liquidity...385805012023-01-27 8:16:5112 days 8 hrs ago0x7bf3a9758ff2bc4bfb1d18acbf00dc0c76db69be IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.017651496871 107.805276032
0xb8b27cab8deee6c5bf51f82b8befc367884f803c3f1ee43a83027f0b1a17dbfcAdd Liquidity ET...385792162023-01-27 7:26:2612 days 9 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.391790611950996 MATIC0.016102241647112.514964837
0x5413ec6bf202337efa2edad6ee09ba62943e93770212b34d37fc9904d2b079cfSwap Tokens For ...385791542023-01-27 7:24:1412 days 9 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.01042775948786.724546636
0x47beeb3b3ed1229008caa0b9d2576cc684c86f057e6505294ebb8517394f870bAdd Liquidity ET...385610282023-01-26 20:12:0512 days 21 hrs ago0x30f958dd841eb8d846ebfbcb0c88161247e6f66a IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e6.097600774571718 MATIC0.007336115756 51.2527649
0x917a67200608b2b2e1c7da91e0e767c80fc7bf8f291f28440288266202d00cd4Swap Exact ETH F...385609922023-01-26 20:10:4912 days 21 hrs ago0x30f958dd841eb8d846ebfbcb0c88161247e6f66a IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e6 MATIC0.004999768266 53.597275701
0x85b34dd86f419a5f9bbeb051cf2b235ccaa20426e098ac15147d9cb453f3037eAdd Liquidity ET...385405652023-01-26 7:44:5413 days 9 hrs ago0x0b0565e6c4af042b707461a1ad954b303c6790cd IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.848552853001728 MATIC0.007550272645 51.037425948
0x9c4c59e50c1babd06137d2c8b51ed342556105fbbae333734ba5e77707cd75c2Add Liquidity ET...384989792023-01-25 6:36:2714 days 10 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.609960396497844 MATIC0.00788677193755.109088945
0x0c7c96d6ba921b9070e38e43cac3ae03aa83f251b4119925113b2790a3e8dea8Swap Exact Token...384989652023-01-25 6:35:5714 days 10 hrs ago0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea3 IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.00662649057755.116492778
0x83a3812ca8392cfa6fd732aff8ea3528293ceb777d5205c5c76b9bb88dee9ac4Add Liquidity ET...384916622023-01-25 2:12:4214 days 15 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.508005876374044 MATIC0.01197389001983.667966484
0xb27d18bdd2498e6292d47aac195ba603a0b04e8d97912ecb1906ec01ea0ea3fcSwap Exact Token...384916452023-01-25 2:12:0614 days 15 hrs ago0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e0 MATIC0.01010347345484.045031436
0xf895a29cdb740869a357f6557480e8ce8007ebe114dc1db564c0a1bbc9e3df21Add Liquidity ET...384753872023-01-24 16:21:3715 days 54 mins ago0x30f958dd841eb8d846ebfbcb0c88161247e6f66a IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e4.048681564015771 MATIC0.007170671945 50.101114735
0x0a1e941cce047bf4cfa71fd644133e311c2e8b7eb0473d419b236980f8aa88c3Swap Exact ETH F...384753542023-01-24 16:20:2715 days 55 mins ago0x30f958dd841eb8d846ebfbcb0c88161247e6f66a IN  0xa274258b2d68dca40955a2d5e7bb67756d30db3e4 MATIC0.004680699191 45.069126397
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xec8a099779cf922ef0f0bb992b07454fcc4fb7ba3b3bdb37ab2606cbc26661c6390258722023-02-07 17:35:3723 hrs 40 mins ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.878081531787554628 MATIC
0x61a156ceadea0e1ca33320164a7dd2bef84c267b129552b78757908699f8f4e1389658972023-02-06 4:41:202 days 12 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.778493617150900556 MATIC
0xe6afbcfc44d5d764d0e8fc7b3a87eb212f7e6c0ebb224446bfadabdaeca9d56b389658822023-02-06 4:40:482 days 12 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea30.797844042711109491 MATIC
0xe6afbcfc44d5d764d0e8fc7b3a87eb212f7e6c0ebb224446bfadabdaeca9d56b389658822023-02-06 4:40:482 days 12 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.797844042711109491 MATIC
0x21dd7da7f36424c7d323c4c54a6b0a15e3b49248ed41ace7a01e2d2ff1a9b432389286202023-02-05 5:48:543 days 11 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada1.381809870088314098 MATIC
0x21dd7da7f36424c7d323c4c54a6b0a15e3b49248ed41ace7a01e2d2ff1a9b432389286202023-02-05 5:48:543 days 11 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e1.381809870088314098 MATIC
0x1e9365f3eebd71a7b3976dca04c973abd05fb148cf8e0b94c24b69aeb7314b69387758432023-02-01 8:02:117 days 9 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0xb07be0a616827be62c8066692a29ea88c2b9c6f7134.086510982520131938 MATIC
0x1e9365f3eebd71a7b3976dca04c973abd05fb148cf8e0b94c24b69aeb7314b69387758432023-02-01 8:02:117 days 9 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e134.086510982520131938 MATIC
0x5ef97dc4e63b2a0d5767965baa4846eec6c47e0b90350ddc579b72d380d45a18387751772023-02-01 7:38:317 days 9 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.890331763092629572 MATIC
0xea95bb0b0e5339d1cbef26b7b8170fc104c168546069dddb29bd13b9e2408754387751582023-02-01 7:37:517 days 9 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada0.897691179471412973 MATIC
0xea95bb0b0e5339d1cbef26b7b8170fc104c168546069dddb29bd13b9e2408754387751582023-02-01 7:37:517 days 9 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.897691179471412973 MATIC
0xa8e111d7cc93e056665a120916d1bdba1639a21927f429bee55979888a13deaf387553372023-01-31 19:35:047 days 21 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.954657230979126752 MATIC
0x50985bf2bf087cac2a9cc93b77b79f1871b4c1d783cc6ec19ec45d004d5cb9bf387553212023-01-31 19:34:307 days 21 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x2ba2764726a194d6fbbed4d95fd96e3bf73ecea30.975943797468784151 MATIC
0x50985bf2bf087cac2a9cc93b77b79f1871b4c1d783cc6ec19ec45d004d5cb9bf387553212023-01-31 19:34:307 days 21 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.975943797468784151 MATIC
0xfb95079444102072c36c5808185c823832395b4a15d7bc8971821bc974afbc2f386941142023-01-30 6:16:219 days 10 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x0b0565e6c4af042b707461a1ad954b303c6790cd51.514436378374674489 MATIC
0xfb95079444102072c36c5808185c823832395b4a15d7bc8971821bc974afbc2f386941142023-01-30 6:16:219 days 10 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e51.514436378374674489 MATIC
0x834b418c7589c0c798e7abe9c584266f523aeff0cc53f18a3a754660343c8789386940822023-01-30 6:15:139 days 11 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x0b0565e6c4af042b707461a1ad954b303c6790cd52.848940379160702304 MATIC
0x834b418c7589c0c798e7abe9c584266f523aeff0cc53f18a3a754660343c8789386940822023-01-30 6:15:139 days 11 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e52.848940379160702304 MATIC
0x70cfa6c1b5f870877155efb3f4b124bf0c95cc641b9496d0f6ac85c0536d430f386148882023-01-28 6:15:1311 days 11 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.48680462231060373 MATIC
0xeb80e2b4e6b6fd288d1d7679e9f7f74ed535fc432492fdcb1b40ceafdc356937386148602023-01-28 6:14:1311 days 11 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x0b0565e6c4af042b707461a1ad954b303c6790cd0.492773905416286207 MATIC
0xeb80e2b4e6b6fd288d1d7679e9f7f74ed535fc432492fdcb1b40ceafdc356937386148602023-01-28 6:14:1311 days 11 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.492773905416286207 MATIC
0xd34bfd9fae13cf1bd07f975049812f51dc708efdca2e092dbc9d5a33157b1ac7385805012023-01-27 8:16:5112 days 8 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0x7bf3a9758ff2bc4bfb1d18acbf00dc0c76db69be0.120747056207498642 MATIC
0xd34bfd9fae13cf1bd07f975049812f51dc708efdca2e092dbc9d5a33157b1ac7385805012023-01-27 8:16:5112 days 8 hrs ago Polygon: WMATIC Token 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0.120747056207498642 MATIC
0xb8b27cab8deee6c5bf51f82b8befc367884f803c3f1ee43a83027f0b1a17dbfc385792162023-01-27 7:26:2612 days 9 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e Polygon: WMATIC Token0.391790611950996175 MATIC
0x5413ec6bf202337efa2edad6ee09ba62943e93770212b34d37fc9904d2b079cf385791542023-01-27 7:24:1412 days 9 hrs ago 0xa274258b2d68dca40955a2d5e7bb67756d30db3e0xd0013c6bf9baa6cb16a07fa16d3bbd680c87dada0.41 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EagonRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-09-15
*/

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}


pragma solidity >=0.6.2;

interface IEagonRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity >=0.6.2;

interface IEagonRouter01 is IEagonRouter {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity >=0.5.0;

interface IEagonFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

pragma solidity =0.6.6;

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

pragma solidity >=0.5.0;

interface IEagonPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

pragma solidity >=0.5.0;

library EagonLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'EagonLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'EagonLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'58ec54384d3e544bee629fe3e9fde4f096f2028a05e6ffdb2f8eeb24bce723a2' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IEagonPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'EagonLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'EagonLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'EagonLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'EagonLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9975);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'EagonLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'EagonLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9975);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'EagonLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'EagonLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

pragma solidity =0.6.6;

contract EagonRouter is IEagonRouter01 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'EagonRouter: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IEagonFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IEagonFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = EagonLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = EagonLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'EagonRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = EagonLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'EagonRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = EagonLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IEagonPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = EagonLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IEagonPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = EagonLibrary.pairFor(factory, tokenA, tokenB);
        IEagonPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IEagonPair(pair).burn(to);
        (address token0,) = EagonLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'EagonRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'EagonRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = EagonLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IEagonPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = EagonLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IEagonPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = EagonLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IEagonPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = EagonLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? EagonLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IEagonPair(EagonLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = EagonLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = EagonLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'EagonRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'EagonRouter: INVALID_PATH');
        amounts = EagonLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'EagonRouter: INVALID_PATH');
        amounts = EagonLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'EagonRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'EagonRouter: INVALID_PATH');
        amounts = EagonLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'EagonRouter: INVALID_PATH');
        amounts = EagonLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'EagonRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(EagonLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = EagonLibrary.sortTokens(input, output);
            IEagonPair pair = IEagonPair(EagonLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = EagonLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? EagonLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'EagonRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(EagonLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'EagonRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, EagonLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'EagonRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return EagonLibrary.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return EagonLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return EagonLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return EagonLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return EagonLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"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":"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":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"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":"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":"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":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"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":"token","type":"address"},{"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":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"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":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"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":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"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"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"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":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405162004750380380620047508339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145cb620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145cb6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602781526020018061456f6027913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602781526020018061456f6027913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260238152602001806143cc6023913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602781526020018061456f6027913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602781526020018061456f6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602781526020018061456f6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260238152602001806143cc6023913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260228152602001806144516022913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260228152602001806144936022913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601460248201526000805160206143ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b81526020600482015260196024820152600080516020614473833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260238152602001806143cc6023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144dc6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260278152602001806144b56027913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260248152602001806145276024913960400191505060405180910390fd5b60006132c5856126f763ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601a60248201527f4561676f6e4c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f58ec54384d3e544bee629fe3e9fde4f096f2028a05e6ffdb2f8eeb24bce723a2609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061454b6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601a60248201527f4561676f6e4c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b81526004018080602001828103825260288152602001806144ff6028913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260248152602001806145276024913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126f7613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602181526020018061440f6021913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260248152602001806145276024913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260218152602001806144306021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601a60248201527f4561676f6e4c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260228152602001806144936022913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260228152602001806144516022913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe4561676f6e526f757465723a204558434553534956455f494e5055545f414d4f554e544561676f6e526f757465723a20455850495245440000000000000000000000004561676f6e4c6962726172793a20494e53554646494349454e545f414d4f554e544561676f6e4c6962726172793a204944454e544943414c5f4144445245535345534561676f6e526f757465723a20494e53554646494349454e545f415f414d4f554e544561676f6e526f757465723a20494e56414c49445f50415448000000000000004561676f6e526f757465723a20494e53554646494349454e545f425f414d4f554e544561676f6e4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444561676f6e4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544561676f6e4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444561676f6e526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220f6816bfc14e1e46d685890f7f55daa265d177f70cfe07a627c0ca2012e68574664736f6c63430006060033000000000000000000000000dbc781b6da48e14ac6b34aff1e16da2ac55b13580000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000dbc781b6da48e14ac6b34aff1e16da2ac55b13580000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Decoded View---------------
Arg [0] : _factory (address): 0xdbc781b6da48e14ac6b34aff1e16da2ac55b1358
Arg [1] : _WETH (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dbc781b6da48e14ac6b34aff1e16da2ac55b1358
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270


Deployed ByteCode Sourcemap

15627:18263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16095:10;-1:-1:-1;;;;;16109:4:0;16095:18;;16088:26;;;;15627:18263;;12:1:-1;9;2:12;20177:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20177:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20177:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32850:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32850:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32850:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27250:834;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27250:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27250:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27250:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27250:834:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27250:834:0;;-1:-1:-1;27250:834:0;-1:-1:-1;;;;;;27250:834:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27250:834:0;;;;;;;;;;;;;;;;;33638:249;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33638:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33638:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33638:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33638:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33638:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33638:249:0;;-1:-1:-1;33638:249:0;;-1:-1:-1;;;;;33638:249:0:i;20856:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20856:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20856:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24523:616::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24523:616:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24523:616:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24523:616:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24523:616:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24523:616:0;;-1:-1:-1;24523:616:0;-1:-1:-1;;;;;;24523:616:0;;;;;;;;:::i;26432:812::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26432:812:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26432:812:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26432:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26432:812:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26432:812:0;;-1:-1:-1;26432:812:0;-1:-1:-1;;;;;;26432:812:0;;;;;;;;:::i;22977:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22977:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22977:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30227:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30227:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30227:706:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30227:706:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30227:706:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30227:706:0;;-1:-1:-1;30227:706:0;-1:-1:-1;;;;;;30227:706:0;;;;;;;;:::i;31783:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31783:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31783:831:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31783:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31783:831:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31783:831:0;;-1:-1:-1;31783:831:0;-1:-1:-1;;;;;;31783:831:0;;;;;;;;:::i;25745:681::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25745:681:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25745:681:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25745:681:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25745:681:0;;-1:-1:-1;25745:681:0;-1:-1:-1;;;;;;25745:681:0;;;;;;;;:::i;33116:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33116:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33116:257:0;;;;;;;;;;;;:::i;25145:594::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25145:594:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25145:594:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25145:594:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25145:594:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25145:594:0;;-1:-1:-1;25145:594:0;-1:-1:-1;;;;;;25145:594:0;;;;;;;;:::i;15753:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15753:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15753:38:0;;;;;;;;;;;;;;32658:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32658:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32658:184:0;;;;;;;;;;;;:::i;22271:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22271:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22271:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30939:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30939:838:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30939:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30939:838:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30939:838:0;;-1:-1:-1;30939:838:0;-1:-1:-1;;;;;;30939:838:0;;;;;;;;:::i;19330:841::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19330:841:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19330:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15705:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15705:41:0;;;:::i;33381:249::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33381:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33381:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33381:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33381:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33381:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33381:249:0;;-1:-1:-1;33381:249:0;;-1:-1:-1;;;;;33381:249:0:i;21531:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21531:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21531:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17585:730::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17585:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17585:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18321:966;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18321:966:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28090:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28090:794:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28090:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28090:794:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28090:794:0;;-1:-1:-1;28090:794:0;-1:-1:-1;;;;;;28090:794:0;;;;;;;;:::i;20177:673::-;20414:16;20432:14;20395:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;20486:196:::1;20516:5;20536:4;20555:9;20579:14;20608:12;20643:4;20663:8;20486:15;:196::i;:::-;20459:223:::0;;-1:-1:-1;20459:223:0;-1:-1:-1;20693:51:0::1;20721:5:::0;20728:2;20459:223;20693:27:::1;:51::i;:::-;20761:4;-1:-1:-1::0;;;;;20755:20:0::1;;20776:9;20755:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20755:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20755:31:0;;;;20797:45;20828:2;20832:9;20797:30;:45::i;:::-;20177:673:::0;;;;;;;;;;:::o;32850:258::-;33003:14;33042:58;33068:8;33078:9;33089:10;33042:25;:58::i;:::-;33035:65;32850:258;-1:-1:-1;;;;32850:258:0:o;27250:834::-;27464:21;27436:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27536:4:0::1;27511:29;:4:::0;;-1:-1:-1;;27516:15:0;;27511:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27511:21:0::1;-1:-1:-1::0;;;;;27511:29:0::1;;27503:67;;;::::0;;-1:-1:-1;;;27503:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27503:67:0;;;;;;;;;;;;;::::1;;27591:51;27618:7;27627:8;27637:4;;27591:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27591:26:0::1;::::0;-1:-1:-1;;;27591:51:0:i:1;:::-;27581:61;;27692:12;27661:7;27686:1;27669:7;:14;:18;27661:27;;;;;;;;;;;;;;:43;;27653:95;;;;-1:-1:-1::0;;;27653:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27759:137;27805:4;;27810:1;27805:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27805:7:0::1;27814:10;27826:47;27847:7;27856:4;;27861:1;27856:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27856:7:0::1;27865:4;;27870:1;27865:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27865:7:0::1;27826:20;:47::i;:::-;27875:7;27883:1;27875:10;;;;;;;;;;;;;;27759:31;:137::i;:::-;27907:35;27913:7;27922:4;;27907:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27936:4:0::1;::::0;-1:-1:-1;27907:5:0::1;::::0;-1:-1:-1;;27907:35:0:i:1;:::-;27959:4;-1:-1:-1::0;;;;;27953:20:0::1;;27974:7;27999:1;27982:7;:14;:18;27974:27;;;;;;;;;;;;;;27953:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27953:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27953:49:0;;;;28013:63;28044:2;28048:7;28073:1;28056:7;:14;:18;28048:27;;;;;;;;;;;;;;28013:30;:63::i;:::-;27250:834:::0;;;;;;;;;:::o;33638:249::-;33782:21;33828:51;33854:7;33863:9;33874:4;33828:25;:51::i;:::-;33821:58;;33638:249;;;;;:::o;20856:669::-;21162:12;21176;21201;21216:45;21237:7;21246:6;21254;21216:20;:45::i;:::-;21201:60;;21272:10;21285;:33;;21309:9;21285:33;;;-1:-1:-1;;21285:33:0;21329:76;;;-1:-1:-1;;;21329:76:0;;21353:10;21329:76;;;;21373:4;21329:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21272:46;;-1:-1:-1;;;;;;21329:23:0;;;;;:76;;;;;-1:-1:-1;;21329:76:0;;;;;;;;-1:-1:-1;21329:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21329:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21329:76:0;;;;21437:80;21453:6;21461;21469:9;21480:10;21492;21504:2;21508:8;21437:15;:80::i;:::-;21416:101;;;;;;;;20856:669;;;;;;;;;;;;;;;;:::o;24523:616::-;24747:21;24728:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;24791:51:::1;24818:7;24827:8;24837:4;;24791:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24791:26:0::1;::::0;-1:-1:-1;;;24791:51:0:i:1;:::-;24781:61;;24892:12;24861:7;24886:1;24869:7;:14;:18;24861:27;;;;;;;;;;;;;;:43;;24853:95;;;;-1:-1:-1::0;;;24853:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24959:137;25005:4;;25010:1;25005:7;;;;;;24959:137;25107:24;25113:7;25122:4;;25107:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25128:2:0;;-1:-1:-1;25107:5:0::1;::::0;-1:-1:-1;;25107:24:0:i:1;26432:812::-:0;26646:21;26618:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26718:4:0::1;26693:29;:4:::0;;-1:-1:-1;;26698:15:0;;26693:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26693:21:0::1;-1:-1:-1::0;;;;;26693:29:0::1;;26685:67;;;::::0;;-1:-1:-1;;;26685:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26685:67:0;;;;;;;;;;;;;::::1;;26773:51;26799:7;26808:9;26819:4;;26773:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26773:25:0::1;::::0;-1:-1:-1;;;26773:51:0:i:1;:::-;26763:61;;26857:11;26843:7;26851:1;26843:10;;;;;;;;;;;;;;:25;;26835:73;;;;-1:-1:-1::0;;;26835:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22977:710:::0;23295:14;23322:12;23337:42;23358:7;23367:5;23374:4;23337:20;:42::i;:::-;23322:57;;23390:10;23403;:33;;23427:9;23403:33;;;-1:-1:-1;;23403:33:0;23447:76;;;-1:-1:-1;;;23447:76:0;;23471:10;23447:76;;;;23491:4;23447:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23390:46;;-1:-1:-1;;;;;;23447:23:0;;;;;:76;;;;;-1:-1:-1;;23447:76:0;;;;;;;;-1:-1:-1;23447:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;23447:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23447:76:0;;;;23546:133;23608:5;23615:9;23626:14;23642:12;23656:2;23660:8;23546:47;:133::i;:::-;23534:145;22977:710;-1:-1:-1;;;;;;;;;;;;;22977:710:0:o;30227:706::-;30461:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;30482:135:::1;30528:4;;30533:1;30528:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30528:7:0::1;30537:10;30549:47;30570:7;30579:4;;30584:1;30579:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30579:7:0::1;30588:4;;30593:1;30588:7;;;;;;30549:47;30598:8;30482:31;:135::i;:::-;30628:18;30656:4:::0;;-1:-1:-1;;30661:15:0;;30656:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30656:21:0::1;-1:-1:-1::0;;;;;30649:39:0::1;;30689:2;30649:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30649:43:0::1;-1:-1:-1::0;;;;;30649:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30649:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30649:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30649:43:0;30703:44:::1;::::0;;30649:43:::1;30703:44:::0;;::::1;::::0;;;;;;;;;;;30649:43;;-1:-1:-1;30703:44:0::1;::::0;;;30738:4;;;;;;30703:44;::::1;::::0;30738:4;;30703:44;30738:4;30703:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30744:2:0;;-1:-1:-1;30703:34:0::1;::::0;-1:-1:-1;;30703:44:0:i:1;:::-;30846:12:::0;30780:62:::1;30828:13:::0;30787:4;;-1:-1:-1;;30792:15:0;;30787:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30787:21:0::1;-1:-1:-1::0;;;;;30780:39:0::1;;30820:2;30780:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30780:43:0::1;-1:-1:-1::0;;;;;30780:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30780:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30780:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30780:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30758:167;;;;-1:-1:-1::0;;;30758:167:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15913:1;30227:706:::0;;;;;;;:::o;31783:831::-;32050:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32109:4:0::1;32084:29;:4:::0;;-1:-1:-1;;32089:15:0;;32084:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32084:21:0::1;-1:-1:-1::0;;;;;32084:29:0::1;;32076:67;;;::::0;;-1:-1:-1;;;32076:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32076:67:0;;;;;;;;;;;;;::::1;;32154:135;32200:4;;32205:1;32200:7;;;;;;32154:135;32300:55;32335:4;;32300:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32349:4:0::1;::::0;-1:-1:-1;32300:34:0::1;::::0;-1:-1:-1;;32300:55:0:i:1;:::-;32383:37;::::0;;-1:-1:-1;;;32383:37:0;;32414:4:::1;32383:37;::::0;::::1;::::0;;;32366:14:::1;::::0;-1:-1:-1;;;;;32390:4:0::1;32383:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32383:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32383:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32383:37:0;;-1:-1:-1;32439:25:0;;::::1;;32431:77;;;;-1:-1:-1::0;;;32431:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32525:4;-1:-1:-1::0;;;;;32519:20:0::1;;32540:9;32519:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32519:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32519:31:0;;;;32561:45;32592:2;32596:9;32561:30;:45::i;25745:681::-:0;25961:21;25933:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;26019:4:::1;-1:-1:-1::0;;;;;26008:15:0::1;:4;;26013:1;26008:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26008:7:0::1;-1:-1:-1::0;;;;;26008:15:0::1;;26000:53;;;::::0;;-1:-1:-1;;;26000:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26000:53:0;;;;;;;;;;;;;::::1;;26074:52;26101:7;26110:9;26121:4;;26074:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26074:26:0::1;::::0;-1:-1:-1;;;26074:52:0:i:1;:::-;26064:62;;26176:12;26145:7;26170:1;26153:7;:14;:18;26145:27;;;;;;;;;;;;;;:43;;26137:95;;;;-1:-1:-1::0;;;26137:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26249:4;-1:-1:-1::0;;;;;26243:19:0::1;;26270:7;26278:1;26270:10;;;;;;;;;;;;;;26243:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26243:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26243:40:0;;;;;26307:4;-1:-1:-1::0;;;;;26301:20:0::1;;26322:47;26343:7;26352:4;;26357:1;26352:7;;;;;;26322:47;26371:7;26379:1;26371:10;;;;;;;;;;;;;;26301:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26301:81:0::1;-1:-1:-1::0;;;;;26301:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26301:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26301:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26301:81:0;26294:89:::1;;;;26394:24;26400:7;26409:4;;26394:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26415:2:0;;-1:-1:-1;26394:5:0::1;::::0;-1:-1:-1;;26394:24:0:i:1;:::-;25745:681:::0;;;;;;;;:::o;33116:257::-;33269:13;33307:58;33332:9;33343;33354:10;33307:24;:58::i;25145:594::-;25369:21;25350:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;25413:51:::1;25439:7;25448:9;25459:4;;25413:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25413:25:0::1;::::0;-1:-1:-1;;;25413:51:0:i:1;:::-;25403:61;;25497:11;25483:7;25491:1;25483:10;;;;;;;;;;;;;;:25;;25475:73;;;;-1:-1:-1::0;;;25475:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15753:38:::0;;;:::o;32658:184::-;32755:12;32787:47;32806:7;32815:8;32825;32787:18;:47::i;22271:700::-;22537:14;22518:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;22580:196:::1;22610:5;22630:4;22649:9;22673:14;22702:12;22737:4;22757:8;22580:15;:196::i;:::-;22826:38;::::0;;-1:-1:-1;;;22826:38:0;;22858:4:::1;22826:38;::::0;::::1;::::0;;;22564:212;;-1:-1:-1;22787:78:0::1;::::0;-1:-1:-1;22815:5:0;;22822:2;;-1:-1:-1;;;;;22826:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22826:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22826:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22826:38:0;22787:27:::1;:78::i;:::-;22882:4;-1:-1:-1::0;;;;;22876:20:0::1;;22897:9;22876:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22876:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22876:31:0;;;;22918:45;22949:2;22953:9;22918:30;:45::i;30939:838::-:0;31199:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;31244:4:::1;-1:-1:-1::0;;;;;31233:15:0::1;:4;;31238:1;31233:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31233:7:0::1;-1:-1:-1::0;;;;;31233:15:0::1;;31225:53;;;::::0;;-1:-1:-1;;;31225:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31225:53:0;;;;;;;;;;;;;::::1;;31289:13;31305:9;31289:25;;31331:4;-1:-1:-1::0;;;;;31325:19:0::1;;31352:8;31325:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31325:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31325:38:0;;;;;31387:4;-1:-1:-1::0;;;;;31381:20:0::1;;31402:47;31423:7;31432:4;;31437:1;31432:7;;;;;;31402:47;31451:8;31381:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;31381:79:0::1;-1:-1:-1::0;;;;;31381:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31381:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31381:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31381:79:0;31374:87:::1;;;;31472:18;31500:4:::0;;-1:-1:-1;;31505:15:0;;31500:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31500:21:0::1;-1:-1:-1::0;;;;;31493:39:0::1;;31533:2;31493:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31493:43:0::1;-1:-1:-1::0;;;;;31493:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31493:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31493:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31493:43:0;31547:44:::1;::::0;;31493:43:::1;31547:44:::0;;::::1;::::0;;;;;;;;;;;31493:43;;-1:-1:-1;31547:44:0::1;::::0;;;31582:4;;;;;;31547:44;::::1;::::0;31582:4;;31547:44;31582:4;31547:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31588:2:0;;-1:-1:-1;31547:34:0::1;::::0;-1:-1:-1;;31547:44:0:i:1;:::-;31690:12:::0;31624:62:::1;31672:13:::0;31631:4;;-1:-1:-1;;31636:15:0;;31631:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31631:21:0::1;-1:-1:-1::0;;;;;31624:39:0::1;;31664:2;31624:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31624:43:0::1;-1:-1:-1::0;;;;;31624:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19330:841:0::0;19584:12;19598;19565:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;19623:12:::1;19638:45;19659:7;19668:6;19676;19638:20;:45::i;:::-;19694:58;::::0;;-1:-1:-1;;;19694:58:0;;19724:10:::1;19694:58;::::0;::::1;::::0;-1:-1:-1;;;;;19694:29:0;::::1;:58:::0;;;;;;;;;;;;;;19623:60;;-1:-1:-1;19694:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19694:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19694:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19694:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19820:25:0::1;::::0;;-1:-1:-1;;;19820:25:0;;-1:-1:-1;;;;;19820:25:0;;::::1;;::::0;::::1;::::0;;;19790:12:::1;::::0;;;19820:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;19790:12;19820:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19820:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19820:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19820:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19820:25:0;-1:-1:-1;19857:14:0::1;19876:39;19900:6:::0;19908;19876:23:::1;:39::i;:::-;19856:59;;;19957:6;-1:-1:-1::0;;;;;19947:16:0::1;:6;-1:-1:-1::0;;;;;19947:16:0::1;;:58;;19988:7;19997;19947:58;;;19967:7;19976;19947:58;19926:79:::0;;-1:-1:-1;19926:79:0;-1:-1:-1;20024:21:0;;::::1;;20016:68;;;;-1:-1:-1::0;;;20016:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20114:10;20103:7;:21;;20095:68;;;;-1:-1:-1::0;;;20095:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15913:1;;;;19330:841:::0;;;;;;;;;;;:::o;15705:41::-;;;:::o;33381:249::-;33525:21;33571:51;33598:7;33607:8;33617:4;33571:26;:51::i;21531:661::-;21820:16;21838:14;21865:12;21880:42;21901:7;21910:5;21917:4;21880:20;:42::i;:::-;21865:57;;21933:10;21946;:33;;21970:9;21946:33;;;-1:-1:-1;;21946:33:0;21990:76;;;-1:-1:-1;;;21990:76:0;;22014:10;21990:76;;;;22034:4;21990:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21933:46;;-1:-1:-1;;;;;;21990:23:0;;;;;:76;;;;;-1:-1:-1;;21990:76:0;;;;;;;;-1:-1:-1;21990:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21990:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21990:76:0;;;;22104:80;22123:5;22130:9;22141:14;22157:12;22171:2;22175:8;22104:18;:80::i;:::-;22077:107;;;;-1:-1:-1;21531:661:0;-1:-1:-1;;;;;;;;;;;;;21531:661:0:o;17585:730::-;17873:12;17887;17901:14;17854:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;17949:85:::1;17963:6;17971;17979:14;17995;18011:10;18023;17949:13;:85::i;:::-;17928:106:::0;;-1:-1:-1;17928:106:0;-1:-1:-1;18045:12:0::1;18060:45;18081:7;18090:6:::0;18098;18060:20:::1;:45::i;:::-;18045:60;;18116:66;18148:6;18156:10;18168:4;18174:7;18116:31;:66::i;:::-;18193;18225:6;18233:10;18245:4;18251:7;18193:31;:66::i;:::-;18293:4;-1:-1:-1::0;;;;;18282:21:0::1;;18304:2;18282:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;18282:25:0::1;-1:-1:-1::0;;;;;18282:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18282:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18282:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18282:25:0;17585:730;;;;-1:-1:-1;18282:25:0;;-1:-1:-1;17585:730:0;;-1:-1:-1;;;;;;;;;17585:730:0:o;18321:966::-;18574:16;18592:14;18608;18555:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;18662:176:::1;18690:5;18710:4;18729:18;18762:9;18786:14;18815:12;18662:13;:176::i;:::-;18635:203:::0;;-1:-1:-1;18635:203:0;-1:-1:-1;18849:12:0::1;18864:42;18885:7;18894:5:::0;18901:4:::1;18864:20;:42::i;:::-;18849:57;;18917:69;18949:5;18956:10;18968:4;18974:11;18917:31;:69::i;:::-;19003:4;-1:-1:-1::0;;;;;18997:19:0::1;;19024:9;18997:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18997:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18997:39:0;;;;;19060:4;-1:-1:-1::0;;;;;19054:20:0::1;;19075:4;19081:9;19054:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19054:37:0::1;-1:-1:-1::0;;;;;19054:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19054:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19054:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19054:37:0;19047:45:::1;;;;19126:4;-1:-1:-1::0;;;;;19115:21:0::1;;19137:2;19115:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19115:25:0::1;-1:-1:-1::0;;;;;19115:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19115:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19115:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19115:25:0;;-1:-1:-1;19191:9:0::1;:21:::0;-1:-1:-1;19187:92:0::1;;;19214:65;19245:10;19269:9;19257;:21;19214:30;:65::i;:::-;15913:1;18321:966:::0;;;;;;;;;;;:::o;28090:794::-;28303:21;28275:8;15862:15;15850:8;:27;;15842:60;;;;;-1:-1:-1;;;15842:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15842:60:0;;;;;;;;;;;;;;;28361:4:::1;-1:-1:-1::0;;;;;28350:15:0::1;:4;;28355:1;28350:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28350:7:0::1;-1:-1:-1::0;;;;;28350:15:0::1;;28342:53;;;::::0;;-1:-1:-1;;;28342:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28342:53:0;;;;;;;;;;;;;::::1;;28416:51;28442:7;28451:9;28462:4;;28416:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28416:25:0::1;::::0;-1:-1:-1;;;28416:51:0:i:1;:::-;28406:61;;28500:9;28486:7;28494:1;28486:10;;;;;;;;;;;;;;:23;;28478:71;;;;-1:-1:-1::0;;;28478:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28566:4;-1:-1:-1::0;;;;;28560:19:0::1;;28587:7;28595:1;28587:10;;;;;;;;;;;;;;28560:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28560:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28560:40:0;;;;;28624:4;-1:-1:-1::0;;;;;28618:20:0::1;;28639:47;28660:7;28669:4;;28674:1;28669:7;;;;;;28639:47;28688:7;28696:1;28688:10;;;;;;;;;;;;;;28618:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;28618:81:0::1;-1:-1:-1::0;;;;;28618:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28618:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28618:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28618:81:0;28611:89:::1;;;;28711:24;28717:7;28726:4;;28711:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28732:2:0;;-1:-1:-1;28711:5:0::1;::::0;-1:-1:-1;;28711:24:0:i:1;:::-;28798:7;28806:1;28798:10;;;;;;;;;;;;;;28786:9;:22;28782:94;;;28810:66;28841:10;28865:7;28873:1;28865:10;;;;;;;;;;;;;;28853:9;:22;28810:30;:66::i;536:361::-:0;731:45;;;-1:-1:-1;;;;;731:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;731:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;720:57:0;;;;685:12;;699:17;;720:10;;;;731:45;720:57;;;25:18:-1;720:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;720:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;684:93:0;;;;796:7;:57;;;;-1:-1:-1;808:11:0;;:16;;:44;;;839:4;828:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;828:24:0;808:44;788:101;;;;;-1:-1:-1;;;788:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;536:361;;;;;:::o;1315:195::-;1423:12;;;1385;1423;;;;;;;;;-1:-1:-1;;;;;1402:7:0;;;1416:5;;1402:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1402:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1384:52:0;;;1455:7;1447:55;;;;-1:-1:-1;;;1447:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1315:195;;;:::o;12250:511::-;12343:14;12389:1;12378:8;:12;12370:64;;;;-1:-1:-1;;;12370:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12465:1;12453:9;:13;:31;;;;;12483:1;12470:10;:14;12453:31;12445:80;;;;-1:-1:-1;;;12445:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12536:20;12559:18;:8;12572:4;12559:18;:12;:18;:::i;:::-;12536:41;-1:-1:-1;12588:14:0;12605:31;12536:41;12625:10;12605:31;:19;:31;:::i;:::-;12588:48;-1:-1:-1;12647:16:0;12666:41;12691:15;12666:20;:9;12680:5;12666:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12647:60;;12742:11;12730:9;:23;;;;;;;12250:511;-1:-1:-1;;;;;;;12250:511:0:o;13430:507::-;13531:21;13588:1;13573:4;:11;:16;;13565:55;;;;;-1:-1:-1;;;13565:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13652:4;:11;13641:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13641:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13641:23:0;;13631:33;;13688:8;13675:7;13683:1;13675:10;;;;;;;;;;;;;:21;;;;;13712:6;13707:223;13738:1;13724:4;:11;:15;13720:1;:19;13707:223;;;13762:14;13778:15;13797:42;13809:7;13818:4;13823:1;13818:7;;;;;;;;;;;;;;13827:4;13832:1;13836;13832:5;13827:11;;;;;;;;;;;;;;13797;:42::i;:::-;13761:78;;;;13871:47;13884:7;13892:1;13884:10;;;;;;;;;;;;;;13896:9;13907:10;13871:12;:47::i;:::-;13854:7;13862:1;13866;13862:5;13854:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13741:3:0;;13707:223;;;;13430:507;;;;;:::o;10736:478::-;10825:12;10851:14;10867;10885:26;10896:6;10904;10885:10;:26::i;:::-;11049:32;;;-1:-1:-1;;11049:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11049:32:0;;;;;11039:43;;;;;;-1:-1:-1;;;;;;10952:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10952:251:0;;;;;;;10942:262;;;;;;;;;10736:478;-1:-1:-1;;;;;10736:478:0:o;905:402::-;1130:51;;;-1:-1:-1;;;;;1130:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1130:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1119:63:0;;;;1084:12;;1098:17;;1119:10;;;;1130:51;1119:63;;;25:18:-1;1119:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1119:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1083:99:0;;;;1201:7;:57;;;;-1:-1:-1;1213:11:0;;:16;;:44;;;1244:4;1233:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1233:24:0;1213:44;1193:106;;;;-1:-1:-1;;;1193:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;905:402;;;;;;:::o;23798:719::-;23905:6;23900:610;23931:1;23917:4;:11;:15;23913:1;:19;23900:610;;;23955:13;23970:14;23989:4;23994:1;23989:7;;;;;;;;;;;;;;23998:4;24003:1;24007;24003:5;23998:11;;;;;;;;;;;;;;23954:56;;;;24026:14;24045:38;24069:5;24076:6;24045:23;:38::i;:::-;24025:58;;;24098:14;24115:7;24123:1;24127;24123:5;24115:14;;;;;;;;;;;;;;24098:31;;24145:15;24162;24190:6;-1:-1:-1;;;;;24181:15:0;:5;-1:-1:-1;;;;;24181:15:0;;:61;;24223:9;24239:1;24181:61;;;24205:1;24209:9;24181:61;24144:98;;;;24257:10;24288:1;24274:4;:11;:15;24270:1;:19;:78;;24345:3;24270:78;;;24292:50;24313:7;24322:6;24330:4;24335:1;24339;24335:5;24330:11;;;;;;;;;;;;;;24292:20;:50::i;:::-;24257:91;;24374:44;24395:7;24404:5;24411:6;24374:20;:44::i;:::-;-1:-1:-1;;;;;24363:61:0;;24443:10;24455;24467:2;24481:1;24471:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24471:12:0;87:42:-1;143:17;;-1:-1;24471:12:0;;24363:135;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24363:135:0;-1:-1:-1;;;;;24363:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24363:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24363:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23934:3:0;;;;;-1:-1:-1;23900:610:0;;-1:-1:-1;;;;;;;;23900:610:0;;;23798:719;;;:::o;14018:528::-;14119:21;14176:1;14161:4;:11;:16;;14153:55;;;;;-1:-1:-1;;;14153:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14240:4;:11;14229:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14229:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14229:23:0;;14219:33;;14293:9;14263:7;14288:1;14271:7;:14;:18;14263:27;;;;;;;;;;;;;;;;;:39;14327:11;;-1:-1:-1;;14327:15:0;14313:226;14344:5;;14313:226;;14372:14;14388:15;14407:42;14419:7;14428:4;14437:1;14433;:5;14428:11;;;;;;;;;;;;;;14441:4;14446:1;14441:7;;;;;;;14407:42;14371:78;;;;14481:46;14493:7;14501:1;14493:10;;;;;;;;;;;;;;14505:9;14516:10;14481:11;:46::i;:::-;14464:7;14476:1;14472;:5;14464:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14351:3:0;14313:226;;29031:1190;29144:6;29139:1075;29170:1;29156:4;:11;:15;29152:1;:19;29139:1075;;;29194:13;29209:14;29228:4;29233:1;29228:7;;;;;;;;;;;;;;29237:4;29242:1;29246;29242:5;29237:11;;;;;;;;;;;;;;29193:56;;;;29265:14;29284:38;29308:5;29315:6;29284:23;:38::i;:::-;29264:58;;;29337:15;29366:44;29387:7;29396:5;29403:6;29366:20;:44::i;:::-;29337:74;;29426:16;29457:17;29545:13;29560;29578:4;-1:-1:-1;;;;;29578:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29578:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29578:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29578:18:0;;;;;;;-1:-1:-1;;;;;29544:52:0;;;;-1:-1:-1;29544:52:0;;-1:-1:-1;29612:17:0;;-1:-1:-1;;;;;29653:15:0;;;;;;;:61;;29695:8;29705;29653:61;;;29672:8;29682;29653:61;29611:103;;;;29743:56;29786:12;29750:5;-1:-1:-1;;;;;29743:23:0;;29775:4;29743:38;;;;;;;;;;;;;-1:-1:-1;;;;;29743:38:0;-1:-1:-1;;;;;29743:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29743:56:0;29729:70;;29829:67;29855:11;29868:12;29882:13;29829:25;:67::i;:::-;29814:82;;29139:1075;;;;29927:15;29944;29972:6;-1:-1:-1;;;;;29963:15:0;:5;-1:-1:-1;;;;;29963:15:0;;:67;;30008:12;30027:1;29963:67;;;29987:1;29991:12;29963:67;29926:104;;;;30045:10;30076:1;30062:4;:11;:15;30058:1;:19;:78;;30133:3;30058:78;;;30080:50;30101:7;30110:6;30118:4;30123:1;30127;30123:5;30118:11;;;;;;;30080:50;30189:12;;;30199:1;30189:12;;;;;;;;;;-1:-1:-1;;;30151:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30151:51:0;;;;;;;;;;;;;;;;;;;;;;30045:91;;-1:-1:-1;30151:9:0;;;;;;30161:10;;30173;;30045:91;;30189:12;;30151:51;;;;;;;;30189:12;;30151:51;;;;30189:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30151:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30151:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29173:3:0;;;;;-1:-1:-1;29139:1075:0;;-1:-1:-1;;;;;;;;;;29139:1075:0;7354:129;7438:5;;;7433:16;;;;7425:50;;;;;-1:-1:-1;;;7425:50:0;;;;;;;;;;;;-1:-1:-1;;;7425:50:0;;;;;;;;;;;;;;12882:466;12975:13;13021:1;13009:9;:13;13001:66;;;;-1:-1:-1;;;13001:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13098:1;13086:9;:13;:31;;;;;13116:1;13103:10;:14;13086:31;13078:80;;;;-1:-1:-1;;;13078:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13169:14;13186:35;13215:5;13186:24;:9;13200;13186:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13169:52;-1:-1:-1;13232:16:0;13251:35;13281:4;13251:25;:10;13266:9;13251:25;:14;:25;:::i;:35::-;13232:54;;13308:32;13338:1;13321:11;13309:9;:23;;;;;;;13308:32;:29;:32;:::i;:::-;13297:43;12882:466;-1:-1:-1;;;;;;12882:466:0:o;11815:313::-;11897:12;11940:1;11930:7;:11;11922:57;;;;-1:-1:-1;;;11922:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12009:1;11998:8;:12;:28;;;;;12025:1;12014:8;:12;11998:28;11990:77;;;;-1:-1:-1;;;11990:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12112:8;12088:21;:7;12100:8;12088:21;:11;:21;:::i;:::-;:32;;;;;;;11815:313;-1:-1:-1;;;;11815:313:0:o;10303:341::-;10378:14;10394;10439:6;-1:-1:-1;;;;;10429:16:0;:6;-1:-1:-1;;;;;10429:16:0;;;10421:62;;;;-1:-1:-1;;;10421:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10522:6;-1:-1:-1;;;;;10513:15:0;:6;-1:-1:-1;;;;;10513:15:0;;:53;;10551:6;10559;10513:53;;;10532:6;10540;10513:53;10494:72;;-1:-1:-1;10494:72:0;-1:-1:-1;;;;;;10585:20:0;;10577:59;;;;;-1:-1:-1;;;10577:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10303:341;;;;;:::o;16217:1362::-;16530:46;;;-1:-1:-1;;;16530:46:0;;-1:-1:-1;;;;;16530:46:0;;;;;;;;;;;;;;;;16435:12;;;;;;16544:7;16530:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;16530:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16530:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16530:46:0;-1:-1:-1;;;;;16530:60:0;;16526:142;;;16607:49;;;-1:-1:-1;;;16607:49:0;;-1:-1:-1;;;;;16607:49:0;;;;;;;;;;;;;;;;16621:7;16607:33;;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;16607:33:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;16607:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16607:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16526:142:0;16679:13;16694;16711:49;16736:7;16745:6;16753;16711:24;:49::i;:::-;16678:82;;;;16775:8;16787:1;16775:13;:30;;;;-1:-1:-1;16792:13:0;;16775:30;16771:801;;;16844:14;;-1:-1:-1;16860:14:0;;-1:-1:-1;16771:801:0;;;16908:19;16930:54;16949:14;16965:8;16975;16930:18;:54::i;:::-;16908:76;;17021:14;17003;:32;16999:562;;17082:10;17064:14;:28;;17056:75;;;;-1:-1:-1;;;17056:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17172:14;;-1:-1:-1;17188:14:0;-1:-1:-1;17188:14:0;16999:562;;;17244:19;17266:54;17285:14;17301:8;17311;17266:18;:54::i;:::-;17244:76;;17364:14;17346;:32;;17339:40;;;;17424:10;17406:14;:28;;17398:75;;;;-1:-1:-1;;;17398:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17514:14;-1:-1:-1;17530:14:0;;-1:-1:-1;16999:562:0;16771:801;;16217:1362;;;;;;;;;;;:::o;7491:142::-;7543:6;7570;;;:30;;-1:-1:-1;;7585:5:0;;;7599:1;7594;7585:5;7594:1;7580:15;;;;;:20;7570:30;7562:63;;;;;-1:-1:-1;;;7562:63:0;;;;;;;;;;;;-1:-1:-1;;;7562:63:0;;;;;;;;;;;;;;7218:128;7302:5;;;7297:16;;;;7289:49;;;;;-1:-1:-1;;;7289:49:0;;;;;;;;;;;;-1:-1:-1;;;7289:49:0;;;;;;;;;;;;;;11272:430;11365:13;11380;11407:14;11426:26;11437:6;11445;11426:10;:26::i;:::-;11406:46;;;11463:32;11471:7;11480:6;11488;11463:7;:32::i;:::-;;11507:13;11522;11551:32;11559:7;11568:6;11576;11551:7;:32::i;:::-;-1:-1:-1;;;;;11540:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11540:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11540:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11540:58:0;;;;;;;-1:-1:-1;;;;;11506:92:0;;;;-1:-1:-1;11506:92:0;;-1:-1:-1;;;;;;11632:16:0;;;;;;;:62;;11675:8;11685;11632:62;;;11652:8;11662;11632:62;11609:85;;;;-1:-1:-1;11272:430:0;-1:-1:-1;;;;;;;11272:430:0:o

Swarm Source

ipfs://f6816bfc14e1e46d685890f7f55daa265d177f70cfe07a627c0ca2012e685746
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.