Contract 0xf38a7a7ac2d745e2204c13f824c00139df831fff 3

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x6e456c6ebde3d51342aafb6e073bd5c5e566c45dd73861a784124f187a70fb16Swap Exact Token...432265892023-05-27 22:54:5121 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.017368999922 134.790739666
0x9a103e829797ce8fb842e37a4bee9dc2fb4b085d6e1674532bb4d6c30268bd29Swap MATIC For E...432229732023-05-27 20:44:562 hrs 31 mins ago onepieceee.wallet  IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff150.411894698362165 MATIC0.041431455335338.899293558
0x34b20ba6323882d7635e1ee0d6d1d61569f90bb0a8d8d7120e49001f722b8005Swap Exact Token...432225202023-05-27 20:28:222 hrs 47 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.017893753483 144.577294924
0xddf0ccc339380418d5a063fbaf81073b6c1a043909acfa50162e8edc1f7b94e6Add Liquidity432215262023-05-27 19:51:273 hrs 24 mins ago0x93ae850e19c879dd6e9219fe17a54da7142e2b7c IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.023586291214 141.92621092
0x973e6e819d82efc883d519dadd552fa5867489b3b7950f75a0f974e7a1fc33c7Swap Exact Token...432208992023-05-27 19:28:213 hrs 47 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.024412405161 176.609696744
0x22ad0b97adb9a7964e24388e311b89c50144060e6c2ac6e5a285e349bb0d205aSwap Exact Token...432204162023-05-27 19:10:114 hrs 6 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.018187620109 146.951667736
0xa219c831da8ec9437ec684d4a56f8baf71c164c3a9bd90c21a956a531ee0f62bSwap Exact Token...432196112023-05-27 18:40:384 hrs 35 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.019834797002 160.260467356
0x8b7ea839ae9040bfbf514ef028d6dcfc215043f86c502325a8a4967600af148bSwap Exact Token...432185242023-05-27 18:00:295 hrs 15 mins ago0x83cc2117632c1e499e454690a932685c30953483 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.019841350161 145.21957229
0x5bf611ef9681bab53f0035476c94f32a5984301a787799a09f82e865431953aaSwap Exact Token...432180562023-05-27 17:42:075 hrs 34 mins ago0xbe8c09cad081426ecdb2969630031d098dade734 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.01752055988 133.045986576
0xbf1b029a34720669e9b6ccac2293613885c6faa7cd9f132d0e921b9056b82c9bSwap Exact MATIC...432178752023-05-27 17:35:275 hrs 40 mins ago0x740ad5f74258c89a89cef06575e4b3fabfd7d22f IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff8 MATIC0.018835065889142.739635706
0xf9af1b41408d858ae0c09ef5d672c9513f11568c6aa7a8ee9c1bf99c34f2e46fSwap Exact MATIC...432174512023-05-27 17:19:205 hrs 56 mins ago0xfc83aeb01430237c808d56c5397e2977e5703a35 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff3 MATIC0.018647289165 141.316588853
0xf5940ac23a0537925212f1e8a1cda2c80aa77698a502347b9de00beb7140b868Swap Exact Token...432124642023-05-27 14:12:069 hrs 4 mins ago0xd8fdf4516174262f07a1458e9cb71553b801ced9 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.043548660298 148.270948548
0x3b4c4969f84cc17a7994f3f81b4f67925a8c1006e8f1f350735ec468e0a3dc4bSwap Exact Token...432122242023-05-27 14:03:369 hrs 12 mins ago0xf130a9d746b563e9dfff390f45c9a68b454e4d82 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.051947995364 185.823217405
0xf2c95d9060bc26a9eaea846b360c124093f93c6c031dbac528e66c4c523dca37Add Liquidity MA...432120832023-05-27 13:58:369 hrs 17 mins ago0x267e54fe02400fe24be97a05d4f8d24e4b8b9e25 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff2.238254698160865 MATIC0.054655636604 354.966660635
0xb45936a80d9b94742bcfb5bbddb9b64986837736fefb428735b5389b60ffd94fSwap Exact Token...432106912023-05-27 13:08:5810 hrs 7 mins ago0x55dfafe84451563b1baac2ed381685ec8a0537cb IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.018877741398 155.668319175
0x5a76cd516e485075e2fe3dafd04853353d83c74a90d1517c038cc2511361731bRemove Liquidity...432106742023-05-27 13:08:2210 hrs 7 mins ago0x55dfafe84451563b1baac2ed381685ec8a0537cb IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.034944190964 158.029128161
0xe287330694147512768ae42470043c0182275f27a14cebc4aa8dcede16d0dda7Swap Exact Token...432077142023-05-27 11:22:4011 hrs 53 mins ago0x0aecf95353e92f011f4783ab55af66cc315acd6b IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.032427612534 189.262170659
0x8d3898a1fe41a71099fddb0e536830da164ce1cb5b29f4c07bddbd540358205eSwap Exact Token...432070622023-05-27 10:59:2012 hrs 16 mins ago0x7bd48e2e5bb9b666d16858ae77137d8d32670ed5 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.017349584872140.180541285
0xfccc030007d072238af682f0c0c197e903adcd2137828cc6e6a48aed1d7343eaSwap Exact Token...432060952023-05-27 10:24:3212 hrs 51 mins ago onepieceee.wallet  IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.017933273491 142.276754265
0x8d23291d6d25225663f22f3074c78e5476d889853187a19b66dde7524b55ecddSwap Exact MATIC...432049052023-05-27 9:41:1613 hrs 34 mins ago0xc6e168a9c7081570342816be37f88348c3cdc378 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff20 MATIC0.021455502409 162.598347984
0x068756fb695ed52eb1c30e30b5fea7b5cc988b25bcd15375e96fd2de1582baa1Swap Exact Token...432037042023-05-27 8:56:3514 hrs 19 mins ago0x1587c94817bfaa7172f6c82e03bb2ac3a5ad6102 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.027524555209 162.812277574
0x29fc4d46bdfb73c6b176d6bbde2a911aa6585dca6327a4eb19d82e441fb43e65Swap Exact Token...431999302023-05-27 6:34:5816 hrs 41 mins ago defipenetrator281.wallet  IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.018309807151
0xe2938e294723b2bfadd54b66a70beb2be22c62899da34ddc402e1ddb0eae9f33Swap MATIC For E...431919932023-05-27 1:37:4021 hrs 38 mins ago onepieceee.wallet  IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff148.936649814918998 MATIC0.018369439956 150.257580235
0x27eaded3f0f28f09bdc9cd0468f2572b4e320664ee8f3ee0138e2ca50b56d9f7Swap Exact MATIC...431896432023-05-27 0:10:0823 hrs 6 mins ago0xd31c8d0dda6ac5fea522e9c9b1af7daf7b1721a8 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff6.22 MATIC0.020580992971 155.970966942
0x34518c36da862d590e78a7a2d4ac7ea2f433b8ac2fe1f7ddbe5d43ed56332306Swap Exact MATIC...431846162023-05-26 21:08:131 day 2 hrs ago0x279abb339b8b4e13f597be2ee0eb05e8c70d41b7 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff298 MATIC0.048927804426
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9a103e829797ce8fb842e37a4bee9dc2fb4b085d6e1674532bb4d6c30268bd29432229732023-05-27 20:44:562 hrs 31 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff onepieceee.wallet 0.748317884071453561 MATIC
0x9a103e829797ce8fb842e37a4bee9dc2fb4b085d6e1674532bb4d6c30268bd29432229732023-05-27 20:44:562 hrs 31 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token149.663576814290712379 MATIC
0xbf1b029a34720669e9b6ccac2293613885c6faa7cd9f132d0e921b9056b82c9b432178752023-05-27 17:35:275 hrs 40 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token8 MATIC
0xf9af1b41408d858ae0c09ef5d672c9513f11568c6aa7a8ee9c1bf99c34f2e46f432174512023-05-27 17:19:205 hrs 56 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token3 MATIC
0xf5940ac23a0537925212f1e8a1cda2c80aa77698a502347b9de00beb7140b868432124642023-05-27 14:12:069 hrs 4 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0xd8fdf4516174262f07a1458e9cb71553b801ced930.426707056450813609 MATIC
0xf5940ac23a0537925212f1e8a1cda2c80aa77698a502347b9de00beb7140b868432124642023-05-27 14:12:069 hrs 4 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff30.426707056450813609 MATIC
0xf2c95d9060bc26a9eaea846b360c124093f93c6c031dbac528e66c4c523dca37432120832023-05-27 13:58:369 hrs 17 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token2.238254698160865538 MATIC
0xb45936a80d9b94742bcfb5bbddb9b64986837736fefb428735b5389b60ffd94f432106912023-05-27 13:08:5810 hrs 7 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x55dfafe84451563b1baac2ed381685ec8a0537cb91.090196290580184807 MATIC
0xb45936a80d9b94742bcfb5bbddb9b64986837736fefb428735b5389b60ffd94f432106912023-05-27 13:08:5810 hrs 7 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff91.090196290580184807 MATIC
0x5a76cd516e485075e2fe3dafd04853353d83c74a90d1517c038cc2511361731b432106742023-05-27 13:08:2210 hrs 7 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x55dfafe84451563b1baac2ed381685ec8a0537cb91.455633326688599596 MATIC
0x5a76cd516e485075e2fe3dafd04853353d83c74a90d1517c038cc2511361731b432106742023-05-27 13:08:2210 hrs 7 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff91.455633326688599596 MATIC
0xfccc030007d072238af682f0c0c197e903adcd2137828cc6e6a48aed1d7343ea432060952023-05-27 10:24:3212 hrs 51 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff onepieceee.wallet 145.844153565433131791 MATIC
0xfccc030007d072238af682f0c0c197e903adcd2137828cc6e6a48aed1d7343ea432060952023-05-27 10:24:3212 hrs 51 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff145.844153565433131791 MATIC
0x8d23291d6d25225663f22f3074c78e5476d889853187a19b66dde7524b55ecdd432049052023-05-27 9:41:1613 hrs 34 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token20 MATIC
0x29fc4d46bdfb73c6b176d6bbde2a911aa6585dca6327a4eb19d82e441fb43e65431999302023-05-27 6:34:5816 hrs 41 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff defipenetrator281.wallet 4.669675460397468912 MATIC
0x29fc4d46bdfb73c6b176d6bbde2a911aa6585dca6327a4eb19d82e441fb43e65431999302023-05-27 6:34:5816 hrs 41 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff4.669675460397468912 MATIC
0xe2938e294723b2bfadd54b66a70beb2be22c62899da34ddc402e1ddb0eae9f33431919932023-05-27 1:37:4021 hrs 38 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff onepieceee.wallet 1.474620295197217807 MATIC
0xe2938e294723b2bfadd54b66a70beb2be22c62899da34ddc402e1ddb0eae9f33431919932023-05-27 1:37:4021 hrs 38 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token147.462029519721780791 MATIC
0x27eaded3f0f28f09bdc9cd0468f2572b4e320664ee8f3ee0138e2ca50b56d9f7431896432023-05-27 0:10:0823 hrs 6 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token6.22 MATIC
0x34518c36da862d590e78a7a2d4ac7ea2f433b8ac2fe1f7ddbe5d43ed56332306431846162023-05-26 21:08:131 day 2 hrs ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token298 MATIC
0x33497f4fa38e05483b490a09debc338fb8a51788b9c37281b0758760b0accdb0431805422023-05-26 18:43:001 day 4 hrs ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0xc87665ffc340d1361b37b3f814e21cf8c2434393691.58062040672374609 MATIC
0x33497f4fa38e05483b490a09debc338fb8a51788b9c37281b0758760b0accdb0431805422023-05-26 18:43:001 day 4 hrs ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff691.58062040672374609 MATIC
0x2bfa76efe8abb49856fa264b36b362868b2028cab74b301178f96db8a923ba8b431803172023-05-26 18:34:561 day 4 hrs ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff 0xb1f120578a7589fd9336315c4df7d5a5d90173a829.334268698165086611 MATIC
0x2bfa76efe8abb49856fa264b36b362868b2028cab74b301178f96db8a923ba8b431803172023-05-26 18:34:561 day 4 hrs ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff29.334268698165086611 MATIC
0x92454d96266dc98714d6c960ca2961793588f735affbb48bbb14af55942d107e431779852023-05-26 17:11:131 day 6 hrs ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token6.577138114294176096 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ElkRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.0.6 https://hardhat.org

// File contracts/elk-core/interfaces/IElkFactory.sol

pragma solidity >=0.5.0;

interface IElkFactory {
    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;
}


// File contracts/elk-lib/libraries/TransferHelper.sol


pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending MATIC that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 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,
        uint256 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,
        uint256 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 safeTransferMATIC(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: MATIC_TRANSFER_FAILED');
    }
}


// File contracts/elk-periphery/interfaces/IElkRouter.sol

pragma solidity >=0.6.2;

interface IElkRouter {
    function factory() external pure returns (address);
    function WMATIC() 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 addLiquidityMATIC(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountMATIC, 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 removeLiquidityMATIC(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountMATIC);
    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 removeLiquidityMATICWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountMATIC);
    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 swapExactMATICForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactMATIC(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForMATIC(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapMATICForExactTokens(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);

    function removeLiquidityMATICSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external returns (uint amountMATIC);
    function removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountMATIC);

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


// File contracts/elk-core/interfaces/IElkPair.sol

pragma solidity >=0.5.0;

interface IElkPair {
    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;
}


// File contracts/elk-periphery/libraries/SafeMath.sol

pragma solidity =0.6.6;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

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');
    }
}


// File contracts/elk-periphery/libraries/ElkLibrary.sol

pragma solidity >=0.5.0;


library ElkLibrary {
    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, 'ElkLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'ElkLibrary: 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'84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31' // 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);
        (uint reserve0, uint reserve1,) = IElkPair(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, 'ElkLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'ElkLibrary: 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, 'ElkLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'ElkLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).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, 'ElkLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'ElkLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        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, 'ElkLibrary: 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, 'ElkLibrary: 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);
        }
    }
}


// File contracts/elk-periphery/interfaces/IERC20.sol

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);
}


// File contracts/elk-periphery/interfaces/IWMATIC.sol

pragma solidity >=0.5.0;

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


// File contracts/elk-periphery/ElkRouter.sol

pragma solidity =0.6.6;






contract ElkRouter is IElkRouter {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WMATIC;

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

    constructor(address _factory, address _WMATIC) public {
        factory = _factory;
        WMATIC = _WMATIC;
    }

    receive() external payable {
        assert(msg.sender == WMATIC); // only accept MATIC via fallback from the WMATIC 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 (IElkFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IElkFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = ElkLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = ElkLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = ElkLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'ElkRouter: 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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IElkPair(pair).mint(to);
    }
    function addLiquidityMATIC(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountMATIC, uint liquidity) {
        (amountToken, amountMATIC) = _addLiquidity(
            token,
            WMATIC,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountMATICMin
        );
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWMATIC(WMATIC).deposit{value: amountMATIC}();
        assert(IWMATIC(WMATIC).transfer(pair, amountMATIC));
        liquidity = IElkPair(pair).mint(to);
        // refund dust MATIC, if any
        if (msg.value > amountMATIC) TransferHelper.safeTransferMATIC(msg.sender, msg.value - amountMATIC);
    }

    // **** 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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        IElkPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IElkPair(pair).burn(to);
        (address token0,) = ElkLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'ElkRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityMATIC(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountMATIC) {
        (amountToken, amountMATIC) = removeLiquidity(
            token,
            WMATIC,
            liquidity,
            amountTokenMin,
            amountMATICMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWMATIC(WMATIC).withdraw(amountMATIC);
        TransferHelper.safeTransferMATIC(to, amountMATIC);
    }
    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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityMATICWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountMATIC) {
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountMATIC) = removeLiquidityMATIC(token, liquidity, amountTokenMin, amountMATICMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityMATICSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountMATIC) {
        (, amountMATIC) = removeLiquidity(
            token,
            WMATIC,
            liquidity,
            amountTokenMin,
            amountMATICMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWMATIC(WMATIC).withdraw(amountMATIC);
        TransferHelper.safeTransferMATIC(to, amountMATIC);
    }
    function removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountMATIC) {
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountMATIC = removeLiquidityMATICSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountMATICMin, 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,) = ElkLibrary.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 ? ElkLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IElkPair(ElkLibrary.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 = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.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 = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactMATICForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWMATIC(WMATIC).deposit{value: amounts[0]}();
        assert(IWMATIC(WMATIC).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactMATIC(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] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWMATIC(WMATIC).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferMATIC(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForMATIC(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] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWMATIC(WMATIC).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferMATIC(to, amounts[amounts.length - 1]);
    }
    function swapMATICForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        IWMATIC(WMATIC).deposit{value: amounts[0]}();
        assert(IWMATIC(WMATIC).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust MATIC, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferMATIC(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,) = ElkLibrary.sortTokens(input, output);
            IElkPair pair = IElkPair(ElkLibrary.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 = ElkLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? ElkLibrary.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, ElkLibrary.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,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactMATICForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWMATIC(WMATIC).deposit{value: amountIn}();
        assert(IWMATIC(WMATIC).transfer(ElkLibrary.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,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForMATICSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WMATIC, 'ElkRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WMATIC).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWMATIC(WMATIC).withdraw(amountOut);
        TransferHelper.safeTransferMATIC(to, amountOut);
    }

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WMATIC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityMATIC","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityMATIC","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityMATICSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","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":"removeLiquidityMATICWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","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":"removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountMATIC","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":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactMATICForTokens","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":"swapExactMATICForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForMATIC","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":"swapExactTokensForMATICSupportingFeeOnTransferTokens","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":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapMATICForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactMATIC","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"}]

60c060405234801561001057600080fd5b50604051620048e1380380620048e18339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475c620001856000398061019f5280610d175280610e5d5280610efe5280610f7252806112b752806114cc528061170f528061174a528061197d5280611acc5280611b545280611ccf5280611d465280611e945280611f4a52806122ec5280612487528061253652806126125280612668528061269c52806127105280612b545280612ca65280612d2e5280612e8d525080610cf55280610fa452806113515280611428528061159252806115cb528061182e5280611a1c5280611b865280611e0152806121e75280612386528061264652806128ca5280612bf35280612d605280612e6b5280612f775280612fa05280613030528061332852806134ae52806139d35280613a09528061405a528061412152806141a1525061475c6000f3fe60806040526004361061018f5760003560e01c806385f8c259116100d6578063baa2abde1161007f578063c45a015511610059578063c45a015514610bbf578063d06ca61f14610bd4578063e8e3370014610c8b576101c8565b8063baa2abde14610a69578063bb47d99314610ac6578063bdc10c3414610b4c576101c8565b8063971ac4d5116100b0578063971ac4d51461097c5780639897c7e3146109cf578063ad615dec14610a33576101c8565b806385f8c259146108165780638803dbee1461084c5780638b9352c7146108e4576101c8565b806324a8e4e8116101385780634d95cad9116101125780634d95cad9146106b55780634f22d546146106e65780635c11d7951461077e576101c8565b806324a8e4e81461054457806338ed1739146105975780633e3f54651461062f576101c8565b80631dd16b86116101695780631dd16b861461030e5780631f00ca74146103f65780632195995c146104ad576101c8565b806304959ec5146101cd578063054d50d41461025257806307df936714610288576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b5061024060048036036101408110156101f157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ced565b60408051918252519081900360200190f35b34801561025e57600080fd5b506102406004803603606081101561027557600080fd5b5080359060208101359060400135610dfb565b6101c66004803603608081101561029e57600080fd5b813591908101906040810160208201356401000000008111156102c057600080fd5b8201836020820111156102d257600080fd5b803590602001918460208302840111640100000000831117156102f457600080fd5b91935091506001600160a01b038135169060200135610e10565b34801561031a57600080fd5b506103a6600480360360a081101561033157600080fd5b81359160208101359181019060608101604082013564010000000081111561035857600080fd5b82018360208201111561036a57600080fd5b8035906020019184602083028401116401000000008311171561038c57600080fd5b91935091506001600160a01b038135169060200135611260565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103e25781810151838201526020016103ca565b505050509050019250505060405180910390f35b34801561040257600080fd5b506103a66004803603604081101561041957600080fd5b8135919081019060408101602082013564010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184602083028401116401000000008311171561046f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061158b945050505050565b3480156104b957600080fd5b5061052b60048036036101608110156104d157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356115c1565b6040805192835260208301919091528051918290030190f35b34801561055057600080fd5b5061052b600480360360c081101561056757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356116bb565b3480156105a357600080fd5b506103a6600480360360a08110156105ba57600080fd5b8135916020810135918101906060810160408201356401000000008111156105e157600080fd5b8201836020820111156105f357600080fd5b8035906020019184602083028401116401000000008311171561061557600080fd5b91935091506001600160a01b0381351690602001356117dc565b6103a66004803603608081101561064557600080fd5b8135919081019060408101602082013564010000000081111561066757600080fd5b82018360208201111561067957600080fd5b8035906020019184602083028401116401000000008311171561069b57600080fd5b91935091506001600160a01b03813516906020013561192e565b3480156106c157600080fd5b506106ca611ccd565b604080516001600160a01b039092168252519081900360200190f35b3480156106f257600080fd5b506101c6600480360360a081101561070957600080fd5b81359160208101359181019060608101604082013564010000000081111561073057600080fd5b82018360208201111561074257600080fd5b8035906020019184602083028401116401000000008311171561076457600080fd5b91935091506001600160a01b038135169060200135611cf1565b34801561078a57600080fd5b506101c6600480360360a08110156107a157600080fd5b8135916020810135918101906060810160408201356401000000008111156107c857600080fd5b8201836020820111156107da57600080fd5b803590602001918460208302840111640100000000831117156107fc57600080fd5b91935091506001600160a01b038135169060200135611fd0565b34801561082257600080fd5b506102406004803603606081101561083957600080fd5b5080359060208101359060400135612188565b34801561085857600080fd5b506103a6600480360360a081101561086f57600080fd5b81359160208101359181019060608101604082013564010000000081111561089657600080fd5b8201836020820111156108a857600080fd5b803590602001918460208302840111640100000000831117156108ca57600080fd5b91935091506001600160a01b038135169060200135612195565b3480156108f057600080fd5b506103a6600480360360a081101561090757600080fd5b81359160208101359181019060608101604082013564010000000081111561092e57600080fd5b82018360208201111561094057600080fd5b8035906020019184602083028401116401000000008311171561096257600080fd5b91935091506001600160a01b038135169060200135612295565b34801561098857600080fd5b50610240600480360360c081101561099f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612434565b610a15600480360360c08110156109e557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356125bc565b60408051938452602084019290925282820152519081900360600190f35b348015610a3f57600080fd5b5061024060048036036060811015610a5657600080fd5b5080359060208101359060400135612868565b348015610a7557600080fd5b5061052b600480360360e0811015610a8c57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612875565b6103a660048036036080811015610adc57600080fd5b81359190810190604081016020820135640100000000811115610afe57600080fd5b820183602082011115610b1057600080fd5b80359060200191846020830284011164010000000083111715610b3257600080fd5b91935091506001600160a01b038135169060200135612b05565b348015610b5857600080fd5b5061052b6004803603610140811015610b7057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612e61565b348015610bcb57600080fd5b506106ca612f75565b348015610be057600080fd5b506103a660048036036040811015610bf757600080fd5b81359190810190604081016020820135640100000000811115610c1957600080fd5b820183602082011115610c2b57600080fd5b80359060200191846020830284011164010000000083111715610c4d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612f99945050505050565b348015610c9757600080fd5b50610a156004803603610100811015610caf57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612fc6565b600080610d3b7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613109565b9050600086610d4a578b610d4e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b50505050610dea8d8d8d8d8d8d612434565b9d9c50505050505050505050505050565b6000610e088484846131e1565b949350505050565b8042811015610e5b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110610e9257fe5b905060200201356001600160a01b03166001600160a01b031614610ef7576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6110027f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b905060200201356001600160a01b03168a8a6001818110610fed57fe5b905060200201356001600160a01b0316613109565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b505050506040513d602081101561107c57600080fd5b505161108457fe5b60008686600019810181811061109657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b505160408051602089810282810182019093528982529293506111679290918a918a9182918501908490808284376000920191909152508992506132d1915050565b87611219828989600019810181811061117c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b505afa1580156111f5573d6000803e3d6000fd5b505050506040513d602081101561120b57600080fd5b50519063ffffffff61360e16565b10156112565760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b5050505050505050565b606081428110156112ad576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106112e757fe5b905060200201356001600160a01b03166001600160a01b03161461134c576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6113aa7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b915086826001845103815181106113bd57fe5b602002602001015110156114025760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b61148b8686600081811061141257fe5b905060200201356001600160a01b0316336114717f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061145457fe5b905060200201356001600160a01b03168b8b6001818110610fed57fe5b8560008151811061147e57fe5b60200260200101516137b2565b6114ca82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613924915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061150957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b50505050611580848360018551038151811061157357fe5b6020026020010151613b5d565b509695505050505050565b60606115b87f00000000000000000000000000000000000000000000000000000000000000008484613c50565b90505b92915050565b60008060006115f17f00000000000000000000000000000000000000000000000000000000000000008f8f613109565b9050600087611600578c611604565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506116a18f8f8f8f8f8f8f612875565b809450819550505050509b509b9950505050505050505050565b6000808242811015611709576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611738897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612875565b9093509150611748898685613d88565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b505050506117d08583613b5d565b50965096945050505050565b60608142811015611829576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6118877f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b9150868260018451038151811061189a57fe5b602002602001015110156118df5760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b6118ef8686600081811061141257fe5b61158082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b6060814281101561197b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106119b257fe5b905060200201356001600160a01b03166001600160a01b031614611a17576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a757f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b91503482600081518110611a8557fe5b60200260200101511115611aca5760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611b0657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611bb27f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b84600081518110611bbf57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b505050506040513d6020811015611c4057600080fd5b5051611c4857fe5b611c8782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b81600081518110611c9457fe5b6020026020010151341115611cc357611cc33383600081518110611cb457fe5b60200260200101513403613b5d565b5095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8042811015611d3c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611d7657fe5b905060200201356001600160a01b03166001600160a01b031614611ddb576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611e3385856000818110611deb57fe5b905060200201356001600160a01b031633611e2d7f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b8a6137b2565b611e718585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506132d1915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611edb57600080fd5b505afa158015611eef573d6000803e3d6000fd5b505050506040513d6020811015611f0557600080fd5b5051905086811015611f485760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fae57600080fd5b505af1158015611fc2573d6000803e3d6000fd5b505050506112568482613b5d565b804281101561201b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61202b85856000818110611deb57fe5b60008585600019810181811061203d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b5051604080516020888102828101820190935288825292935061210e9290918991899182918501908490808284376000920191909152508892506132d1915050565b86611219828888600019810181811061212357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b6000610e08848484613f20565b606081428110156121e2576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6122407f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b9150868260008151811061225057fe5b602002602001015111156118df5760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b606081428110156122e2576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061231c57fe5b905060200201356001600160a01b03166001600160a01b031614612381576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6123df7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b915086826000815181106123ef57fe5b602002602001015111156114025760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b60008142811015612481576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6124b0887f00000000000000000000000000000000000000000000000000000000000000008989893089612875565b604080516370a0823160e01b8152306004820152905191945061253492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561250357600080fd5b505afa158015612517573d6000803e3d6000fd5b505050506040513d602081101561252d57600080fd5b5051613d88565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561259a57600080fd5b505af11580156125ae573d6000803e3d6000fd5b505050506115808483613b5d565b6000806000834281101561260c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61263a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614010565b9094509250600061268c7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613109565b905061269a8b3383886137b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156126f557600080fd5b505af1158015612709573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561278e57600080fd5b505af11580156127a2573d6000803e3d6000fd5b505050506040513d60208110156127b857600080fd5b50516127c057fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b505050506040513d602081101561284257600080fd5b505192503484101561285a5761285a33853403613b5d565b505096509650969350505050565b6000610e088484846142e2565b60008082428110156128c3576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b60006128f07f00000000000000000000000000000000000000000000000000000000000000008c8c613109565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561294b57600080fd5b505af115801561295f573d6000803e3d6000fd5b505050506040513d602081101561297557600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b50805160209091015190925090506000612a1f8e8e6143a4565b509050806001600160a01b03168e6001600160a01b031614612a42578183612a45565b82825b90975095508a871015612a9f576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612af4576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b60608142811015612b52576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612b8957fe5b905060200201356001600160a01b03166001600160a01b031614612bee576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b612c4c7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b91508682600184510381518110612c5f57fe5b60200260200101511015612ca45760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ce057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d1357600080fd5b505af1158015612d27573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8c7f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b84600081518110612d9957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612df057600080fd5b505af1158015612e04573d6000803e3d6000fd5b505050506040513d6020811015612e1a57600080fd5b5051612e2257fe5b611cc382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b6000806000612eb17f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613109565b9050600087612ec0578c612ec4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f608e8e8e8e8e8e6116bb565b909f909e509c50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606115b87f00000000000000000000000000000000000000000000000000000000000000008484613666565b60008060008342811015613016576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6130248c8c8c8c8c8c614010565b909450925060006130567f00000000000000000000000000000000000000000000000000000000000000008e8e613109565b90506130648d3383886137b2565b6130708c3383876137b2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156130c857600080fd5b505af11580156130dc573d6000803e3d6000fd5b505050506040513d60208110156130f257600080fd5b5051949d939c50939a509198505050505050505050565b600080600061311885856143a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60008084116132215760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156132315750600082115b61326c5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613280856103e563ffffffff61449816565b90506000613294828563ffffffff61449816565b905060006132ba836132ae886103e863ffffffff61449816565b9063ffffffff61450416565b90508082816132c557fe5b04979650505050505050565b60005b6001835103811015613609576000808483815181106132ef57fe5b602002602001015185846001018151811061330657fe5b602002602001015191509150600061331e83836143a4565b509050600061334e7f00000000000000000000000000000000000000000000000000000000000000008585613109565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d60608110156133b957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a8116908916146133f65782846133f9565b83835b91509150613457828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b95506134648683836131e1565b945050505050600080856001600160a01b0316886001600160a01b03161461348e57826000613492565b6000835b91509150600060028c51038a106134a9578a6134ea565b6134ea7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106134dd57fe5b6020026020010151613109565b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561358d578181015183820152602001613575565b50505050905090810190601f1680156135ba5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156135dc57600080fd5b505af11580156135f0573d6000803e3d6000fd5b50506001909b019a506132d49950505050505050505050565b505050565b808203828111156115bb576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60606002825110156136bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156136d757600080fd5b50604051908082528060200260200182016040528015613701578160200160208202803683370190505b509050828160008151811061371257fe5b60200260200101818152505060005b60018351038110156137aa576000806137648786858151811061374057fe5b602002602001015187866001018151811061375757fe5b602002602001015161455c565b9150915061378684848151811061377757fe5b602002602001015183836131e1565b84846001018151811061379557fe5b60209081029190910101525050600101613721565b509392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061384c5780518252601f19909201916020918201910161382d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138ae576040519150601f19603f3d011682016040523d82523d6000602084013e6138b3565b606091505b50915091508180156138e15750805115806138e157508080602001905160208110156138de57600080fd5b50515b61391c5760405162461bcd60e51b81526004018080602001828103825260248152602001806146de6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613b575760008084838151811061394257fe5b602002602001015185846001018151811061395957fe5b602002602001015191509150600061397183836143a4565b509050600087856001018151811061398557fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139b3578260006139b7565b6000835b91509150600060028a510388106139ce5788613a02565b613a027f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106134dd57fe5b9050613a2f7f00000000000000000000000000000000000000000000000000000000000000008888613109565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a6c576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613add578181015183820152602001613ac5565b50505050905090810190601f168015613b0a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b2c57600080fd5b505af1158015613b40573d6000803e3d6000fd5b505060019099019850613927975050505050505050565b50505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613ba95780518252601f199092019160209182019101613b8a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613c0b576040519150601f19603f3d011682016040523d82523d6000602084013e613c10565b606091505b50509050806136095760405162461bcd60e51b81526004018080602001828103825260258152602001806146b96025913960400191505060405180910390fd5b6060600282511015613ca9576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613cc157600080fd5b50604051908082528060200260200182016040528015613ceb578160200160208202803683370190505b5090508281600183510381518110613cff57fe5b60209081029190910101528151600019015b80156137aa57600080613d4187866001860381518110613d2d57fe5b602002602001015187868151811061375757fe5b91509150613d63848481518110613d5457fe5b60200260200101518383613f20565b846001850381518110613d7257fe5b6020908102919091010152505060001901613d11565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613e335780518252601f199092019160209182019101613e14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613e95576040519150601f19603f3d011682016040523d82523d6000602084013e613e9a565b606091505b5091509150818015613ec8575080511580613ec85750808060200190516020811015613ec557600080fd5b50515b613f19576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146506026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff61360e16565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156140a357600080fd5b505afa1580156140b7573d6000803e3d6000fd5b505050506040513d60208110156140cd57600080fd5b50516001600160a01b0316141561419957604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561416c57600080fd5b505af1158015614180573d6000803e3d6000fd5b505050506040513d602081101561419657600080fd5b50505b6000806141c77f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b915091508160001480156141d9575080155b156141e9578793508692506142d5565b60006141f68984846142e2565b905087811161425f5785811015614254576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b8894509250826142d3565b600061426c8984866142e2565b90508981111561427857fe5b878110156142cd576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b6000808411614338576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156143485750600082115b6143835760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b82614394858463ffffffff61449816565b8161439b57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561440e576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061442e578284614431565b83835b90925090506001600160a01b038216614491576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b60008115806144b3575050808202828282816144b057fe5b04145b6115bb576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156115bb576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856143a4565b50905060008061457c888888613109565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a204d415449435f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a26469706673582212208632b12cd6aab449245178ab7efbd3f783be77ff9bc18a930c0e89148144553964736f6c63430006060033000000000000000000000000e3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

000000000000000000000000e3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Decoded View---------------
Arg [0] : _factory (address): 0xe3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a
Arg [1] : _WMATIC (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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


Deployed ByteCode Sourcemap

16293:18311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16761:10;-1:-1:-1;;;;;16775:6:0;16761:20;;16754:28;;;;16293:18311;;12:1:-1;9;2:12;23699:720:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23699:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23699:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33572:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33572:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33572:256:0;;;;;;;;;;;;:::i;31651:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31651:844:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31651:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31651:844:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31651:844:0;;-1:-1:-1;31651:844:0;-1:-1:-1;;;;;;31651:844:0;;;;;;;;:::i;27968:836::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27968:836:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27968:836:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27968:836:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27968:836:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27968:836:0;;-1:-1:-1;27968:836:0;-1:-1:-1;;;;;;27968:836: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;27968:836:0;;;;;;;;;;;;;;;;;34354:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34354:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34354:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34354:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34354:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34354:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34354:247:0;;-1:-1:-1;34354:247:0;;-1:-1:-1;;;;;34354:247:0:i;21550:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21550:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21550:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20849:695;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20849:695:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20849:695:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25247:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25247:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25247:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25247:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25247:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25247:610:0;;-1:-1:-1;25247:610:0;-1:-1:-1;;;;;;25247:610:0;;;;;;;;:::i;28810:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28810:802:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28810:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28810:802:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28810:802:0;;-1:-1:-1;28810:802:0;-1:-1:-1;;;;;;28810:802:0;;;;;;;;:::i;16413:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16413:40:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16413:40:0;;;;;;;;;;;;;;32501:837;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32501:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32501:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32501:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32501:837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32501:837:0;;-1:-1:-1;32501:837:0;-1:-1:-1;;;;;;32501:837:0;;;;;;;;:::i;30943:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30943:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30943:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30943:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30943:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30943:702:0;;-1:-1:-1;30943:702:0;-1:-1:-1;;;;;;30943:702:0;;;;;;;;:::i;33836:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33836:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33836:255:0;;;;;;;;;;;;:::i;25863:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25863:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25863:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25863:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25863:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25863:588:0;;-1:-1:-1;25863:588:0;-1:-1:-1;;;;;;25863:588:0;;;;;;;;:::i;27148:814::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27148:814:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27148:814:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27148:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27148:814:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27148:814:0;;-1:-1:-1;27148:814:0;-1:-1:-1;;;;;;27148:814:0;;;;;;;;:::i;22971:722::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22971:722:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22971:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18975:996::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18975:996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;33382:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33382:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33382:182:0;;;;;;;;;;;;:::i;20014:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20014:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20014:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26457:685::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26457:685:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26457:685:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26457:685:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26457:685:0;;-1:-1:-1;26457:685:0;-1:-1:-1;;;;;;26457:685:0;;;;;;;;:::i;22221:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22221:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22221:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16365:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16365:41:0;;;:::i;34099:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34099:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34099:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34099:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34099:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34099:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34099:247:0;;-1:-1:-1;34099:247:0;;-1:-1:-1;;;;;34099:247:0:i;18243:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18243:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18243:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23699:720::-;24021:16;24050:12;24065:42;24084:7;24093:5;24100:6;24065:18;:42::i;:::-;24050:57;;24118:10;24131;:33;;24155:9;24131:33;;;-1:-1:-1;;24131:33:0;24175:74;;;-1:-1:-1;;;24175:74:0;;24197:10;24175:74;;;;24217:4;24175:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24118:46;;-1:-1:-1;;;;;;24175:21:0;;;;;:74;;;;;-1:-1:-1;;24175:74:0;;;;;;;;-1:-1:-1;24175:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24175:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24175:74:0;;;;24274:137;24338:5;24345:9;24356:14;24372;24388:2;24392:8;24274:49;:137::i;:::-;24260:151;23699:720;-1:-1:-1;;;;;;;;;;;;;23699:720:0:o;33572:256::-;33725:14;33764:56;33788:8;33798:9;33809:10;33764:23;:56::i;:::-;33757:63;33572:256;-1:-1:-1;;;;33572:256:0:o;31651:844::-;31913:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;31958:6:::1;-1:-1:-1::0;;;;;31947:17:0::1;:4;;31952:1;31947:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31947:7:0::1;-1:-1:-1::0;;;;;31947:17:0::1;;31939:53;;;::::0;;-1:-1:-1;;;31939:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31939:53:0;;;;;;;;;;;;;::::1;;32003:13;32019:9;32003:25;;32047:6;-1:-1:-1::0;;;;;32039:23:0::1;;32070:8;32039:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32039:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32039:42:0;;;;;32107:6;-1:-1:-1::0;;;;;32099:24:0::1;;32124:45;32143:7;32152:4;;32157:1;32152:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32152:7:0::1;32161:4;;32166:1;32161:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32161:7:0::1;32124:18;:45::i;:::-;32171:8;32099:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32099:81:0::1;-1:-1:-1::0;;;;;32099:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32099:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32099:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32099:81:0;32092:89:::1;;;;32192:18;32220:4:::0;;-1:-1:-1;;32225:15:0;;32220:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32220:21:0::1;-1:-1:-1::0;;;;;32213:39:0::1;;32253:2;32213:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32213:43:0::1;-1:-1:-1::0;;;;;32213:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32213:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32213:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32213:43:0;32267:44:::1;::::0;;32213:43:::1;32267:44:::0;;::::1;::::0;;;;;;;;;;;32213:43;;-1:-1:-1;32267:44:0::1;::::0;;;32302:4;;;;;;32267:44;::::1;::::0;32302:4;;32267:44;32302:4;32267:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32308:2:0;;-1:-1:-1;32267:34:0::1;::::0;-1:-1:-1;;32267:44:0:i:1;:::-;32410:12:::0;32344:62:::1;32392:13:::0;32351:4;;-1:-1:-1;;32356:15:0;;32351:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32351:21:0::1;-1:-1:-1::0;;;;;32344:39:0::1;;32384:2;32344:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32344:43:0::1;-1:-1:-1::0;;;;;32344:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32344:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32344:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32344:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32322:165;;;;-1:-1:-1::0;;;32322:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16573:1;;31651:844:::0;;;;;;:::o;27968:836::-;28184:21;28156:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28256:6:0::1;28231:31;:4:::0;;-1:-1:-1;;28236:15:0;;28231:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28231:21:0::1;-1:-1:-1::0;;;;;28231:31:0::1;;28223:67;;;::::0;;-1:-1:-1;;;28223:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28223:67:0;;;;;;;;;;;;;::::1;;28311:49;28336:7;28345:8;28355:4;;28311:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28311:24:0::1;::::0;-1:-1:-1;;;28311:49:0:i:1;:::-;28301:59;;28410:12;28379:7;28404:1;28387:7;:14;:18;28379:27;;;;;;;;;;;;;;:43;;28371:93;;;;-1:-1:-1::0;;;28371:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28475:135;28521:4;;28526:1;28521:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28521:7:0::1;28530:10;28542:45;28561:7;28570:4;;28575:1;28570:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28570:7:0::1;28579:4;;28584:1;28579:7;;;;;;28542:45;28589:7;28597:1;28589:10;;;;;;;;;;;;;;28475:31;:135::i;:::-;28621:35;28627:7;28636:4;;28621:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28650:4:0::1;::::0;-1:-1:-1;28621:5:0::1;::::0;-1:-1:-1;;28621:35:0:i:1;:::-;28675:6;-1:-1:-1::0;;;;;28667:24:0::1;;28692:7;28717:1;28700:7;:14;:18;28692:27;;;;;;;;;;;;;;28667:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28667:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28667:53:0;;;;28731:65;28764:2;28768:7;28793:1;28776:7;:14;:18;28768:27;;;;;;;;;;;;;;28731:32;:65::i;:::-;27968:836:::0;;;;;;;;;:::o;34354:247::-;34498:21;34544:49;34568:7;34577:9;34588:4;34544:23;:49::i;:::-;34537:56;;34354:247;;;;;:::o;21550:665::-;21856:12;21870;21895;21910:43;21929:7;21938:6;21946;21910:18;:43::i;:::-;21895:58;;21964:10;21977;:33;;22001:9;21977:33;;;-1:-1:-1;;21977:33:0;22021:74;;;-1:-1:-1;;;22021:74:0;;22043:10;22021:74;;;;22063:4;22021:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21964:46;;-1:-1:-1;;;;;;22021:21:0;;;;;:74;;;;;-1:-1:-1;;22021:74:0;;;;;;;;-1:-1:-1;22021:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22021:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22021:74:0;;;;22127:80;22143:6;22151;22159:9;22170:10;22182;22194:2;22198:8;22127:15;:80::i;:::-;22106:101;;;;;;;;21550:665;;;;;;;;;;;;;;;;:::o;20849:695::-;21090:16;21108;21071:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;21166:200:::1;21196:5;21216:6;21237:9;21261:14;21290;21327:4;21347:8;21166:15;:200::i;:::-;21137:229:::0;;-1:-1:-1;21137:229:0;-1:-1:-1;21377:51:0::1;21405:5:::0;21412:2;21137:229;21377:27:::1;:51::i;:::-;21447:6;-1:-1:-1::0;;;;;21439:24:0::1;;21464:11;21439:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21439:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21439:37:0;;;;21487:49;21520:2;21524:11;21487:32;:49::i;:::-;20849:695:::0;;;;;;;;;;:::o;25247:610::-;25471:21;25452:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;25515:49:::1;25540:7;25549:8;25559:4;;25515:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25515:24:0::1;::::0;-1:-1:-1;;;25515:49:0:i:1;:::-;25505:59;;25614:12;25583:7;25608:1;25591:7;:14;:18;25583:27;;;;;;;;;;;;;;:43;;25575:93;;;;-1:-1:-1::0;;;25575:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25679:135;25725:4;;25730:1;25725:7;;;;;;25679:135;25825:24;25831:7;25840:4;;25825:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25846:2:0;;-1:-1:-1;25825:5:0::1;::::0;-1:-1:-1;;25825:24:0:i:1;28810:802::-:0;29025:21;28997:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;29083:6:::1;-1:-1:-1::0;;;;;29072:17:0::1;:4;;29077:1;29072:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29072:7:0::1;-1:-1:-1::0;;;;;29072:17:0::1;;29064:53;;;::::0;;-1:-1:-1;;;29064:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29064:53:0;;;;;;;;;;;;;::::1;;29138:49;29162:7;29171:9;29182:4;;29138:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29138:23:0::1;::::0;-1:-1:-1;;;29138:49:0:i:1;:::-;29128:59;;29220:9;29206:7;29214:1;29206:10;;;;;;;;;;;;;;:23;;29198:69;;;;-1:-1:-1::0;;;29198:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29286:6;-1:-1:-1::0;;;;;29278:23:0::1;;29309:7;29317:1;29309:10;;;;;;;;;;;;;;29278:44;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29278:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29278:44:0;;;;;29348:6;-1:-1:-1::0;;;;;29340:24:0::1;;29365:45;29384:7;29393:4;;29398:1;29393:7;;;;;;29365:45;29412:7;29420:1;29412:10;;;;;;;;;;;;;;29340:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29340:83:0::1;-1:-1:-1::0;;;;;29340:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29340:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29340:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29340:83:0;29333:91:::1;;;;29435:24;29441:7;29450:4;;29435:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29456:2:0;;-1:-1:-1;29435:5:0::1;::::0;-1:-1:-1;;29435:24:0:i:1;:::-;29524:7;29532:1;29524:10;;;;;;;;;;;;;;29512:9;:22;29508:96;;;29536:68;29569:10;29593:7;29601:1;29593:10;;;;;;;;;;;;;;29581:9;:22;29536:32;:68::i;:::-;28810:802:::0;;;;;;;;:::o;16413:40::-;;;:::o;32501:837::-;32770:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32829:6:0::1;32804:31;:4:::0;;-1:-1:-1;;32809:15:0;;32804:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32804:21:0::1;-1:-1:-1::0;;;;;32804:31:0::1;;32796:67;;;::::0;;-1:-1:-1;;;32796:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32796:67:0;;;;;;;;;;;;;::::1;;32874:133;32920:4;;32925:1;32920:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32920:7:0::1;32929:10;32941:45;32960:7;32969:4;;32974:1;32969:7;;;;;;32941:45;32988:8;32874:31;:133::i;:::-;33018:55;33053:4;;33018:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33067:4:0::1;::::0;-1:-1:-1;33018:34:0::1;::::0;-1:-1:-1;;33018:55:0:i:1;:::-;33101:39;::::0;;-1:-1:-1;;;33101:39:0;;33134:4:::1;33101:39;::::0;::::1;::::0;;;33084:14:::1;::::0;-1:-1:-1;;;;;33108:6:0::1;33101:24;::::0;::::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;:24;:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33101:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33101:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33101:39:0;;-1:-1:-1;33159:25:0;;::::1;;33151:75;;;;-1:-1:-1::0;;;33151:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33245:6;-1:-1:-1::0;;;;;33237:24:0::1;;33262:9;33237:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33237:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33237:35:0;;;;33283:47;33316:2;33320:9;33283:32;:47::i;30943:702::-:0;31177:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;31198:133:::1;31244:4;;31249:1;31244:7;;;;;;31198:133;31342:18;31370:4:::0;;-1:-1:-1;;31375:15:0;;31370:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31370:21:0::1;-1:-1:-1::0;;;;;31363:39:0::1;;31403:2;31363:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31363:43:0::1;-1:-1:-1::0;;;;;31363:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31363:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31363:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31363:43:0;31417:44:::1;::::0;;31363:43:::1;31417:44:::0;;::::1;::::0;;;;;;;;;;;31363:43;;-1:-1:-1;31417:44:0::1;::::0;;;31452:4;;;;;;31417:44;::::1;::::0;31452:4;;31417:44;31452:4;31417:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31458:2:0;;-1:-1:-1;31417:34:0::1;::::0;-1:-1:-1;;31417:44:0:i:1;:::-;31560:12:::0;31494:62:::1;31542:13:::0;31501:4;;-1:-1:-1;;31506:15:0;;31501:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31501:21:0::1;-1:-1:-1::0;;;;;31494:39:0::1;;31534:2;31494:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31494:43:0::1;-1:-1:-1::0;;;;;31494:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;33836:255:0::0;33989:13;34027:56;34050:9;34061;34072:10;34027:22;:56::i;25863:588::-;26087:21;26068:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;26131:49:::1;26155:7;26164:9;26175:4;;26131:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26131:23:0::1;::::0;-1:-1:-1;;;26131:49:0:i:1;:::-;26121:59;;26213:11;26199:7;26207:1;26199:10;;;;;;;;;;;;;;:25;;26191:71;;;;-1:-1:-1::0;;;26191:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27148:814:::0;27364:21;27336:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27436:6:0::1;27411:31;:4:::0;;-1:-1:-1;;27416:15:0;;27411:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27411:21:0::1;-1:-1:-1::0;;;;;27411:31:0::1;;27403:67;;;::::0;;-1:-1:-1;;;27403:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27403:67:0;;;;;;;;;;;;;::::1;;27491:49;27515:7;27524:9;27535:4;;27491:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27491:23:0::1;::::0;-1:-1:-1;;;27491:49:0:i:1;:::-;27481:59;;27573:11;27559:7;27567:1;27559:10;;;;;;;;;;;;;;:25;;27551:71;;;;-1:-1:-1::0;;;27551:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22971:722:::0;23241:16;23222:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;23288:200:::1;23318:5;23338:6;23359:9;23383:14;23412;23449:4;23469:8;23288:15;:200::i;:::-;23538:38;::::0;;-1:-1:-1;;;23538:38:0;;23570:4:::1;23538:38;::::0;::::1;::::0;;;23270:218;;-1:-1:-1;23499:78:0::1;::::0;-1:-1:-1;23527:5:0;;23534:2;;-1:-1:-1;;;;;23538: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;23538:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23538:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23538:38:0;23499:27:::1;:78::i;:::-;23596:6;-1:-1:-1::0;;;;;23588:24:0::1;;23613:11;23588:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23588:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23588:37:0;;;;23636:49;23669:2;23673:11;23636:32;:49::i;18975:996::-:0;19232:16;19250;19268:14;19213:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;19324:180:::1;19352:5;19372:6;19393:18;19426:9;19450:14;19479;19324:13;:180::i;:::-;19295:209:::0;;-1:-1:-1;19295:209:0;-1:-1:-1;19515:12:0::1;19530:42;19549:7;19558:5:::0;19565:6:::1;19530:18;:42::i;:::-;19515:57;;19583:69;19615:5;19622:10;19634:4;19640:11;19583:31;:69::i;:::-;19671:6;-1:-1:-1::0;;;;;19663:23:0::1;;19694:11;19663:45;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19663:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19663:45:0;;;;;19734:6;-1:-1:-1::0;;;;;19726:24:0::1;;19751:4;19757:11;19726:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;19726:43:0::1;-1:-1:-1::0;;;;;19726:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19726:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19726:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19726:43:0;19719:51:::1;;;;19802:4;-1:-1:-1::0;;;;;19793:19:0::1;;19813:2;19793:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19793:23:0::1;-1:-1:-1::0;;;;;19793:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19793:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19793:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19793:23:0;;-1:-1:-1;19869:9:0::1;:23:::0;-1:-1:-1;19865:98:0::1;;;19894:69;19927:10;19951:11;19939:9;:23;19894:32;:69::i;:::-;16573:1;18975:996:::0;;;;;;;;;;;:::o;33382:182::-;33479:12;33511:45;33528:7;33537:8;33547;33511:16;:45::i;20014:829::-;20268:12;20282;20249:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;20307:12:::1;20322:43;20341:7;20350:6;20358;20322:18;:43::i;:::-;20376:56;::::0;;-1:-1:-1;;;20376:56:0;;20404:10:::1;20376:56;::::0;::::1;::::0;-1:-1:-1;;;;;20376:27:0;::::1;:56:::0;;;;;;;;;;;;;;20307:58;;-1:-1:-1;20376:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20376:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20376:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20376:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20500:23:0::1;::::0;;;;;-1:-1:-1;;;;;20500:23:0;;::::1;;::::0;::::1;::::0;;;20470:12:::1;::::0;;;20500:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20470:12;20500:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20500:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20500:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20500:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20500:23:0;-1:-1:-1;20535:14:0::1;20554:37;20576:6:::0;20584;20554:21:::1;:37::i;:::-;20534:57;;;20633:6;-1:-1:-1::0;;;;;20623:16:0::1;:6;-1:-1:-1::0;;;;;20623:16:0::1;;:58;;20664:7;20673;20623:58;;;20643:7;20652;20623:58;20602:79:::0;;-1:-1:-1;20602:79:0;-1:-1:-1;20700:21:0;;::::1;;20692:66;;;::::0;;-1:-1:-1;;;20692:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20788:10;20777:7;:21;;20769:66;;;::::0;;-1:-1:-1;;;20769:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16573:1;;;;20014:829:::0;;;;;;;;;;;:::o;26457:685::-;26675:21;26647:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;26733:6:::1;-1:-1:-1::0;;;;;26722:17:0::1;:4;;26727:1;26722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26722:7:0::1;-1:-1:-1::0;;;;;26722:17:0::1;;26714:53;;;::::0;;-1:-1:-1;;;26714:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26714:53:0;;;;;;;;;;;;;::::1;;26788:50;26813:7;26822:9;26833:4;;26788:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26788:24:0::1;::::0;-1:-1:-1;;;26788:50:0:i:1;:::-;26778:60;;26888:12;26857:7;26882:1;26865:7;:14;:18;26857:27;;;;;;;;;;;;;;:43;;26849:93;;;;-1:-1:-1::0;;;26849:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26961:6;-1:-1:-1::0;;;;;26953:23:0::1;;26984:7;26992:1;26984:10;;;;;;;;;;;;;;26953:44;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26953:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26953:44:0;;;;;27023:6;-1:-1:-1::0;;;;;27015:24:0::1;;27040:45;27059:7;27068:4;;27073:1;27068:7;;;;;;27040:45;27087:7;27095:1;27087:10;;;;;;;;;;;;;;27015:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;27015:83:0::1;-1:-1:-1::0;;;;;27015:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27015:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27015:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27015:83:0;27008:91:::1;;;;27110:24;27116:7;27125:4;;27110:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27131:2:0;;-1:-1:-1;27110:5:0::1;::::0;-1:-1:-1;;27110:24:0:i:1;22221:671::-:0;22514:16;22532;22561:12;22576:42;22595:7;22604:5;22611:6;22576:18;:42::i;:::-;22561:57;;22629:10;22642;:33;;22666:9;22642:33;;;-1:-1:-1;;22642:33:0;22686:74;;;-1:-1:-1;;;22686:74:0;;22708:10;22686:74;;;;22728:4;22686:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22629:46;;-1:-1:-1;;;;;;22686:21:0;;;;;:74;;;;;-1:-1:-1;;22686:74:0;;;;;;;;-1:-1:-1;22686:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22686:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22686:74:0;;;;22800:84;22821:5;22828:9;22839:14;22855;22871:2;22875:8;22800:20;:84::i;:::-;22771:113;;;;-1:-1:-1;22221:671:0;-1:-1:-1;;;;;;;;;;;;;22221:671:0:o;16365:41::-;;;:::o;34099:247::-;34243:21;34289:49;34314:7;34323:8;34333:4;34289:24;:49::i;18243:726::-;18531:12;18545;18559:14;18512:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;18607:85:::1;18621:6;18629;18637:14;18653;18669:10;18681;18607:13;:85::i;:::-;18586:106:::0;;-1:-1:-1;18586:106:0;-1:-1:-1;18703:12:0::1;18718:43;18737:7;18746:6:::0;18754;18718:18:::1;:43::i;:::-;18703:58;;18772:66;18804:6;18812:10;18824:4;18830:7;18772:31;:66::i;:::-;18849;18881:6;18889:10;18901:4;18907:7;18849:31;:66::i;:::-;18947:4;-1:-1:-1::0;;;;;18938:19:0::1;;18958:2;18938:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18938:23:0::1;-1:-1:-1::0;;;;;18938:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18938:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18938:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18938:23:0;18243:726;;;;-1:-1:-1;18938:23:0;;-1:-1:-1;18243:726:0;;-1:-1:-1;;;;;;;;;18243:726:0:o;11285:478::-;11374:12;11400:14;11416;11434:26;11445:6;11453;11434:10;:26::i;:::-;11598:32;;;-1:-1:-1;;11598:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11598:32:0;;;;;11588:43;;;;;;11501:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11501:251:0;;;;;;;11491:262;;;;;;;;;11285:478;-1:-1:-1;;;;;11285:478:0:o;12750:505::-;12843:14;12889:1;12878:8;:12;12870:62;;;;-1:-1:-1;;;12870:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12963:1;12951:9;:13;:31;;;;;12981:1;12968:10;:14;12951:31;12943:78;;;;-1:-1:-1;;;12943:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:20;13055:17;:8;13068:3;13055:17;:12;:17;:::i;:::-;13032:40;-1:-1:-1;13083:14:0;13100:31;13032:40;13120:10;13100:31;:19;:31;:::i;:::-;13083:48;-1:-1:-1;13142:16:0;13161:40;13185:15;13161:19;:9;13175:4;13161:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13142:59;;13236:11;13224:9;:23;;;;;;;12750:505;-1:-1:-1;;;;;;;12750:505:0:o;29759:1178::-;29872:6;29867:1063;29898:1;29884:4;:11;:15;29880:1;:19;29867:1063;;;29922:13;29937:14;29956:4;29961:1;29956:7;;;;;;;;;;;;;;29965:4;29970:1;29974;29970:5;29965:11;;;;;;;;;;;;;;29921:56;;;;29993:14;30012:36;30034:5;30041:6;30012:21;:36::i;:::-;29992:56;;;30063:13;30088:42;30107:7;30116:5;30123:6;30088:18;:42::i;:::-;30063:68;;30146:16;30177:17;30265:13;30280;30298:4;-1:-1:-1;;;;;30298:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30298:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30298:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30298:18:0;;;;;;;30264:52;;;;;-1:-1:-1;30264:52:0;;-1:-1:-1;30332:17:0;;-1:-1:-1;;;;;30373:15:0;;;;;;;:61;;30415:8;30425;30373:61;;;30392:8;30402;30373:61;30331:103;;;;30463:56;30506:12;30470:5;-1:-1:-1;;;;;30463:23:0;;30495:4;30463:38;;;;;;;;;;;;;-1:-1:-1;;;;;30463:38:0;-1:-1:-1;;;;;30463:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30463:56:0;30449:70;;30549:65;30573:11;30586:12;30600:13;30549:23;:65::i;:::-;30534:80;;29867:1063;;;;30645:15;30662;30690:6;-1:-1:-1;;;;;30681:15:0;:5;-1:-1:-1;;;;;30681:15:0;;:67;;30726:12;30745:1;30681:67;;;30705:1;30709:12;30681:67;30644:104;;;;30763:10;30794:1;30780:4;:11;:15;30776:1;:19;:76;;30849:3;30776:76;;;30798:48;30817:7;30826:6;30834:4;30839:1;30843;30839:5;30834:11;;;;;;;;;;;;;;30798:18;:48::i;:::-;30905:12;;;30915:1;30905:12;;;;;;;;;;30867:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30867:51:0;;;;;;;;;;;;;;;;;;;;;;30763:89;;-1:-1:-1;30867:9:0;;;;;;30877:10;;30889;;30763:89;;30905:12;;30867:51;;;;;;;;30905:12;;30867:51;;;;30905: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;30867:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30867:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29901:3:0;;;;;-1:-1:-1;29867:1063:0;;-1:-1:-1;;;;;;;;;;29867:1063:0;;;29759:1178;;:::o;10319:129::-;10403:5;;;10398:16;;;;10390:50;;;;;-1:-1:-1;;;10390:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13918:505;14019:21;14076:1;14061:4;:11;:16;;14053:53;;;;;-1:-1:-1;;;14053:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14138:4;:11;14127:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14127:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14127:23:0;;14117:33;;14174:8;14161:7;14169:1;14161:10;;;;;;;;;;;;;:21;;;;;14198:6;14193:223;14224:1;14210:4;:11;:15;14206:1;:19;14193:223;;;14248:14;14264:15;14283:42;14295:7;14304:4;14309:1;14304:7;;;;;;;;;;;;;;14313:4;14318:1;14322;14318:5;14313:11;;;;;;;;;;;;;;14283;:42::i;:::-;14247:78;;;;14357:47;14370:7;14378:1;14370:10;;;;;;;;;;;;;;14382:9;14393:10;14357:12;:47::i;:::-;14340:7;14348:1;14352;14348:5;14340:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14227:3:0;;14193:223;;;;13918:505;;;;;:::o;1838:448::-;2109:51;;;-1:-1:-1;;;;;2109:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2109:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2098:63:0;;;;2063:12;;2077:17;;2098:10;;;;2109:51;2098:63;;;25:18:-1;2098: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;;;2098: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;;2062:99:0;;;;2180:7;:57;;;;-1:-1:-1;2192:11:0;;:16;;:44;;;2223:4;2212:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2212:24:0;2192:44;2172:106;;;;-1:-1:-1;;;2172:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1838:448;;;;;;:::o;24530:711::-;24637:6;24632:602;24663:1;24649:4;:11;:15;24645:1;:19;24632:602;;;24687:13;24702:14;24721:4;24726:1;24721:7;;;;;;;;;;;;;;24730:4;24735:1;24739;24735:5;24730:11;;;;;;;;;;;;;;24686:56;;;;24758:14;24777:36;24799:5;24806:6;24777:21;:36::i;:::-;24757:56;;;24828:14;24845:7;24853:1;24857;24853:5;24845:14;;;;;;;;;;;;;;24828:31;;24875:15;24892;24920:6;-1:-1:-1;;;;;24911:15:0;:5;-1:-1:-1;;;;;24911:15:0;;:61;;24953:9;24969:1;24911:61;;;24935:1;24939:9;24911:61;24874:98;;;;24987:10;25018:1;25004:4;:11;:15;25000:1;:19;:76;;25073:3;25000:76;;;25022:48;25041:7;25050:6;25058:4;25063:1;25067;25063:5;25058:11;;;;;;;25022:48;24987:89;;25100:42;25119:7;25128:5;25135:6;25100:18;:42::i;:::-;-1:-1:-1;;;;;25091:57:0;;25167:10;25179;25191:2;25205:1;25195:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25195:12:0;87:42:-1;143:17;;-1:-1;25195:12:0;;25091:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25091:131:0;-1:-1:-1;;;;;25091:131: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;25091:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25091:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24666:3:0;;;;;-1:-1:-1;24632:602:0;;-1:-1:-1;;;;;;;;24632:602:0;;;24530:711;;;:::o;2294:204::-;2409:12;;;2369;2409;;;;;;;;;-1:-1:-1;;;;;2387:7:0;;;2402:5;;2387:35;;;;;;;;;;;;;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;;;2387:35: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;;2368:54:0;;;2441:7;2433:57;;;;-1:-1:-1;;;2433:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14504:526;14605:21;14662:1;14647:4;:11;:16;;14639:53;;;;;-1:-1:-1;;;14639:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14724:4;:11;14713:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14713:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14713:23:0;;14703:33;;14777:9;14747:7;14772:1;14755:7;:14;:18;14747:27;;;;;;;;;;;;;;;;;:39;14811:11;;-1:-1:-1;;14811:15:0;14797:226;14828:5;;14797:226;;14856:14;14872:15;14891:42;14903:7;14912:4;14921:1;14917;:5;14912:11;;;;;;;;;;;;;;14925:4;14930:1;14925:7;;;;;;;14891:42;14855:78;;;;14965:46;14977:7;14985:1;14977:10;;;;;;;;;;;;;;14989:9;15000:10;14965:11;:46::i;:::-;14948:7;14960:1;14956;:5;14948:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14835:3:0;14797:226;;1432:398;1664:45;;;-1:-1:-1;;;;;1664:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1664:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1664:45:0;179:29:-1;160:49;;1653:57:0;;;;1618:12;;1632:17;;1653:10;;;;1664:45;1653:57;;;25:18:-1;1653: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;;;1653: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;;1617:93:0;;;;1729:7;:57;;;;-1:-1:-1;1741:11:0;;:16;;:44;;;1772:4;1761:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1761:24:0;1741:44;1721:101;;;;;-1:-1:-1;;;1721:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1432:398;;;;;:::o;13376:460::-;13469:13;13515:1;13503:9;:13;13495:64;;;;-1:-1:-1;;;13495:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13590:1;13578:9;:13;:31;;;;;13608:1;13595:10;:14;13578:31;13570:78;;;;-1:-1:-1;;;13570:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13659:14;13676:34;13705:4;13676:24;:9;13690;13676:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13659:51;-1:-1:-1;13721:16:0;13740:34;13770:3;13740:25;:10;13755:9;13740:25;:14;:25;:::i;:34::-;13721:53;;13796:32;13826:1;13809:11;13797:9;:23;;;;;;;13796:32;:29;:32;:::i;:::-;13785:43;13376:460;-1:-1:-1;;;;;;13376:460:0:o;16889:1348::-;17202:44;;;;;;-1:-1:-1;;;;;17202:44:0;;;;;;;;;;;;;;;;17107:12;;;;;;17214:7;17202:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17202:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17202:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17202:44:0;-1:-1:-1;;;;;17202:58:0;;17198:138;;;17277:47;;;;;;-1:-1:-1;;;;;17277:47:0;;;;;;;;;;;;;;;;17289:7;17277:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17277:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17277:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17277:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17198:138:0;17347:13;17362;17379:47;17402:7;17411:6;17419;17379:22;:47::i;:::-;17346:80;;;;17441:8;17453:1;17441:13;:30;;;;-1:-1:-1;17458:13:0;;17441:30;17437:793;;;17510:14;;-1:-1:-1;17526:14:0;;-1:-1:-1;17437:793:0;;;17574:19;17596:52;17613:14;17629:8;17639;17596:16;:52::i;:::-;17574:74;;17685:14;17667;:32;17663:556;;17746:10;17728:14;:28;;17720:73;;;;;-1:-1:-1;;;17720:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17834:14;;-1:-1:-1;17850:14:0;-1:-1:-1;17850:14:0;17663:556;;;17906:19;17928:52;17945:14;17961:8;17971;17928:16;:52::i;:::-;17906:74;;18024:14;18006;:32;;17999:40;;;;18084:10;18066:14;:28;;18058:73;;;;;-1:-1:-1;;;18058:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18172:14;-1:-1:-1;18188:14:0;;-1:-1:-1;17663:556:0;17437:793;;16889:1348;;;;;;;;;;;:::o;12319:309::-;12401:12;12444:1;12434:7;:11;12426:55;;;;;-1:-1:-1;;;12426:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:1;12500:8;:12;:28;;;;;12527:1;12516:8;:12;12500:28;12492:75;;;;-1:-1:-1;;;12492:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12612:8;12588:21;:7;12600:8;12588:21;:11;:21;:::i;:::-;:32;;;;;;;12319:309;-1:-1:-1;;;;12319:309:0:o;10856:337::-;10931:14;10947;10992:6;-1:-1:-1;;;;;10982:16:0;:6;-1:-1:-1;;;;;10982:16:0;;;10974:60;;;;;-1:-1:-1;;;10974:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11073:6;-1:-1:-1;;;;;11064:15:0;:6;-1:-1:-1;;;;;11064:15:0;;:53;;11102:6;11110;11064:53;;;11083:6;11091;11064:53;11045:72;;-1:-1:-1;11045:72:0;-1:-1:-1;;;;;;11136:20:0;;11128:57;;;;;-1:-1:-1;;;11128:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10856:337;;;;;:::o;10456:142::-;10508:6;10535;;;:30;;-1:-1:-1;;10550:5:0;;;10564:1;10559;10550:5;10559:1;10545:15;;;;;:20;10535:30;10527:63;;;;;-1:-1:-1;;;10527:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10183:128;10267:5;;;10262:16;;;;10254:49;;;;;-1:-1:-1;;;10254:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11821:385;11914:13;11929;11956:14;11975:26;11986:6;11994;11975:10;:26::i;:::-;11955:46;;;12013:13;12028;12055:32;12063:7;12072:6;12080;12055:7;:32::i;:::-;-1:-1:-1;;;;;12046:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12046:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12046:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12046:56:0;;;;;;;12012:90;;;;;-1:-1:-1;12012:90:0;;-1:-1:-1;;;;;;12136:16:0;;;;;;;:62;;12179:8;12189;12136:62;;;12156:8;12166;12136:62;12113:85;;;;-1:-1:-1;11821:385:0;-1:-1:-1;;;;;;;11821:385:0:o

Swarm Source

ipfs://8632b12cd6aab449245178ab7efbd3f783be77ff9bc18a930c0e891481445539
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.