Contract 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x54b182a606f14f82c96d3c571c0d40701b147516292925c3b25981de84bcbbf5Swap Exact Token...192019702021-10-16 0:21:181 min ago0x34a022b6faec60a7a4b5ef554bdec2493e82acf0 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.023222733152
0x1cdb56ddcda5bb24aa576f9985b9f34433a45e841ac09d74adb85d3552b7e5e1Add Liquidity ET...192017232021-10-16 0:17:335 mins ago0xc4294c508d51888eda48a302a10b02047971e872 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee2518.177605845224972 FTM0.048793039222
0xbaf3e6f8403b9dbb3fbe78aae5ad74fc66d3fafd12a07aa2ec6fa1ba92b9d472Swap ETH For Exa...192015762021-10-16 0:15:317 mins ago0xe208cb6c0cb24ef91b028c5e7860be974a786917 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee252.017494136870749 FTM0.021048373451
0xea9a2ea2a4c8929b917fb8500d00b6cc5de98956d80c437ff1c02fca4346d0b6Swap Exact Token...192013852021-10-16 0:11:1811 mins ago0xe0d43f5ad06c1643b31e3bb99234c87cfbe13bb1 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.018691437611
0x31ffab85acca1406f6a6ecf413f94aae6c2f2c0de71e91472dc9a3c47f8e8754Swap Exact Token...192011782021-10-16 0:07:2615 mins ago0x720651e4834b9a98b5f32fc851538f9b3a7a60cc IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.015360049726
0x968b94bd1597c1d9c137331e093a1636dcc3cf297dfaa2b7f094be07fdbfb7acAdd Liquidity ET...192006072021-10-15 23:56:0126 mins ago0x2260382b93858cf2e51ce30a2661e5b519c1fd76 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee259.688901685999618 FTM0.059340816562
0x2b2707fc4681b15c675d73886a7823e719ec9e375dee8da026133e71ed994658Add Liquidity192005182021-10-15 23:54:3328 mins ago0xeb5eb8a22d7ee85d571b75c41288a35eaa24571d IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.030221438801
0x178fd9449d4b14770beb19e16641d26485b420f47ac28f5634a68bf5107107daSwap Exact ETH F...192003752021-10-15 23:51:4331 mins ago0xeb5eb8a22d7ee85d571b75c41288a35eaa24571d IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee259.5 FTM0.032139403358
0xea01ee4ab63c65386eefd093471cce6d52a565aaa49eb8c01207cbbd642dcc6cSwap Exact ETH F...192002202021-10-15 23:48:3434 mins ago0x34a022b6faec60a7a4b5ef554bdec2493e82acf0 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee2551 FTM0.021342578703
0x2f2b221651af0f42977650edd39bb3cafe8cf7e13949c88b6f5dbda3898b196bSwap Exact Token...191999782021-10-15 23:44:0038 mins ago0x3459de597f16f321e9c100dda9fcf7515cd90dc6 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.024507932521
0x97f4ee0c9213fceaf2cf676d54bce5a867e879f62e82b4e555a570bd87339aeaSwap Exact Token...191998242021-10-15 23:40:5142 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.035420847907
0x483448f8a3744b55983ffce22621c3f06dbaf87a132ac8eb9f0e50a7d2e37d7cSwap Exact Token...191997872021-10-15 23:40:1442 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.017316255057
0xa3f4852d81275c655020e70fb6d0650c675b72723ae63386076d75c0572f2252Swap Exact Token...191997642021-10-15 23:39:5043 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.027635905929
0x3a5e0d466a80a9dc3e1435dec2bc0dcee5b7841af5368107a8c0bffd39a028d7Swap Exact Token...191997142021-10-15 23:39:0343 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.016990293889
0x20b1aa16e657d122c9b07584d3836d7471a13729821b3c4b5696db7936b4275eSwap Exact Token...191996892021-10-15 23:38:3844 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.016990293889
0xf47329fd23c8f7db29ade80b0acc582c3428152248438e14f88a77219a385210Add Liquidity ET...191996682021-10-15 23:38:2144 mins ago0x16b00db74167b7469dda63b674ca9a3b1b70c439 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee2511.261218145089389 FTM0.027791743341
0xa5b45a679117455ae2df0ce7e616734a24ab08c0fe78815aa4a6975b2fbc388cSwap Exact Token...191996512021-10-15 23:38:0844 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.016990293889
0x5cf082c4ac84ca70ece1096aaa6774591f371f4c2611d93ce8f6a5a4bd140caeSwap Exact Token...191996112021-10-15 23:37:3345 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.027239178837
0xa850d7635b33dafd6b8d9ac7afedaf4f10142122bec831ec4e364ebfb1b3a90fSwap Exact Token...191995822021-10-15 23:37:1045 mins ago0x40f74e65e73903ce96eeb981aac98c353961f5e7 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.025181354116
0xf7a58d9c71a732885a6ca86260eb51b74b83129939d85b172807f652830a0815Add Liquidity ET...191995602021-10-15 23:36:5046 mins ago0x2e177a4acd44ad5a25ab3f177bba9d3d1e9f5e48 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee258.650205709931675 FTM0.032106367985
0x6387d4ca63cbb4e12c856f71bb8d6d8195517beb41adb20c3ac88ca45303aa68Swap Exact Token...191995412021-10-15 23:36:3246 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.017067671655
0x342c9e492156f03dbbc6957905a5ee606adc6691a916d0b1a26e6fe3167f62b0Swap Exact Token...191995332021-10-15 23:36:2646 mins ago0xc0af16725bd379f2de5fe860ea2943b82e89121f IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.026227835251
0xf4283373ba57ee29e4335d91084c95a58e6ae5c6281b3e628824afd62a2efb07Swap Exact Token...191995262021-10-15 23:36:2046 mins ago0x2e177a4acd44ad5a25ab3f177bba9d3d1e9f5e48 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.026417438311
0x57e08b2bf882aff9f5d358a22ba9f4b70951f5e26a19a6cdf97dd706c8979b0fSwap Exact Token...191994072021-10-15 23:34:3548 mins ago0x29e3fbc71d6fcc7cfe35f6fc05c79fd76160c365 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee250 FTM0.027343474935
0xe83638bd752e2c763962d8639302342e98da81d147069f280bb5d6d18126feb4Swap Exact ETH F...191991432021-10-15 23:30:2752 mins ago0xf24e40833396470636fcfc5df3139d20f58b17f4 IN  0x845e76a8691423fbc4ecb8dd77556cb61c09ee2515 FTM0.033084111771
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x54b182a606f14f82c96d3c571c0d40701b147516292925c3b25981de84bcbbf5192019702021-10-16 0:21:181 min ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee250x34a022b6faec60a7a4b5ef554bdec2493e82acf050.660376770980995071 FTM
0x54b182a606f14f82c96d3c571c0d40701b147516292925c3b25981de84bcbbf5192019702021-10-16 0:21:181 min ago Fantom Finance: Wrapped Fantom Token 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2550.660376770980995071 FTM
0x1cdb56ddcda5bb24aa576f9985b9f34433a45e841ac09d74adb85d3552b7e5e1192017232021-10-16 0:17:335 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token18.177605845224972352 FTM
0x1cdb56ddcda5bb24aa576f9985b9f34433a45e841ac09d74adb85d3552b7e5e1192017232021-10-16 0:17:335 mins ago 0xc4294c508d51888eda48a302a10b02047971e872 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2518.177605845224972352 FTM
0xbaf3e6f8403b9dbb3fbe78aae5ad74fc66d3fafd12a07aa2ec6fa1ba92b9d472192015762021-10-16 0:15:317 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee250xe208cb6c0cb24ef91b028c5e7860be974a7869170.018015343993538954 FTM
0xbaf3e6f8403b9dbb3fbe78aae5ad74fc66d3fafd12a07aa2ec6fa1ba92b9d472192015762021-10-16 0:15:317 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token1.999478792877210462 FTM
0xbaf3e6f8403b9dbb3fbe78aae5ad74fc66d3fafd12a07aa2ec6fa1ba92b9d472192015762021-10-16 0:15:317 mins ago 0xe208cb6c0cb24ef91b028c5e7860be974a786917 0x845e76a8691423fbc4ecb8dd77556cb61c09ee252.017494136870749416 FTM
0xea9a2ea2a4c8929b917fb8500d00b6cc5de98956d80c437ff1c02fca4346d0b6192013852021-10-16 0:11:1811 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee250xe0d43f5ad06c1643b31e3bb99234c87cfbe13bb124.334450160354778677 FTM
0xea9a2ea2a4c8929b917fb8500d00b6cc5de98956d80c437ff1c02fca4346d0b6192013852021-10-16 0:11:1811 mins ago Fantom Finance: Wrapped Fantom Token 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2524.334450160354778677 FTM
0x968b94bd1597c1d9c137331e093a1636dcc3cf297dfaa2b7f094be07fdbfb7ac192006072021-10-15 23:56:0126 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token9.688901685999618164 FTM
0x968b94bd1597c1d9c137331e093a1636dcc3cf297dfaa2b7f094be07fdbfb7ac192006072021-10-15 23:56:0126 mins ago 0x2260382b93858cf2e51ce30a2661e5b519c1fd76 0x845e76a8691423fbc4ecb8dd77556cb61c09ee259.688901685999618164 FTM
0x178fd9449d4b14770beb19e16641d26485b420f47ac28f5634a68bf5107107da192003752021-10-15 23:51:4331 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token9.5 FTM
0x178fd9449d4b14770beb19e16641d26485b420f47ac28f5634a68bf5107107da192003752021-10-15 23:51:4331 mins ago 0xeb5eb8a22d7ee85d571b75c41288a35eaa24571d 0x845e76a8691423fbc4ecb8dd77556cb61c09ee259.5 FTM
0xea01ee4ab63c65386eefd093471cce6d52a565aaa49eb8c01207cbbd642dcc6c192002202021-10-15 23:48:3434 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token51 FTM
0xea01ee4ab63c65386eefd093471cce6d52a565aaa49eb8c01207cbbd642dcc6c192002202021-10-15 23:48:3434 mins ago 0x34a022b6faec60a7a4b5ef554bdec2493e82acf0 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2551 FTM
0xf47329fd23c8f7db29ade80b0acc582c3428152248438e14f88a77219a385210191996682021-10-15 23:38:2144 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee250x16b00db74167b7469dda63b674ca9a3b1b70c4390.031557121858468812 FTM
0xf47329fd23c8f7db29ade80b0acc582c3428152248438e14f88a77219a385210191996682021-10-15 23:38:2144 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token11.229661023230920873 FTM
0xf47329fd23c8f7db29ade80b0acc582c3428152248438e14f88a77219a385210191996682021-10-15 23:38:2144 mins ago 0x16b00db74167b7469dda63b674ca9a3b1b70c439 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2511.261218145089389685 FTM
0xf7a58d9c71a732885a6ca86260eb51b74b83129939d85b172807f652830a0815191995602021-10-15 23:36:5046 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token8.650205709931675127 FTM
0xf7a58d9c71a732885a6ca86260eb51b74b83129939d85b172807f652830a0815191995602021-10-15 23:36:5046 mins ago 0x2e177a4acd44ad5a25ab3f177bba9d3d1e9f5e48 0x845e76a8691423fbc4ecb8dd77556cb61c09ee258.650205709931675127 FTM
0xf4283373ba57ee29e4335d91084c95a58e6ae5c6281b3e628824afd62a2efb07191995262021-10-15 23:36:2046 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee250x2e177a4acd44ad5a25ab3f177bba9d3d1e9f5e488.200536201823435396 FTM
0xf4283373ba57ee29e4335d91084c95a58e6ae5c6281b3e628824afd62a2efb07191995262021-10-15 23:36:2046 mins ago Fantom Finance: Wrapped Fantom Token 0x845e76a8691423fbc4ecb8dd77556cb61c09ee258.200536201823435396 FTM
0xe83638bd752e2c763962d8639302342e98da81d147069f280bb5d6d18126feb4191991432021-10-15 23:30:2752 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token15 FTM
0xe83638bd752e2c763962d8639302342e98da81d147069f280bb5d6d18126feb4191991432021-10-15 23:30:2752 mins ago 0xf24e40833396470636fcfc5df3139d20f58b17f4 0x845e76a8691423fbc4ecb8dd77556cb61c09ee2515 FTM
0x1a120a6562e400d3a7d321081f19e44896c09b6b47848cf10b0efa6cebd32bb5191988202021-10-15 23:25:2557 mins ago 0x845e76a8691423fbc4ecb8dd77556cb61c09ee25 Fantom Finance: Wrapped Fantom Token1 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JetswapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-09-07
*/

pragma solidity =0.6.6;

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

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

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

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

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

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

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

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

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

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

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

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

library JetswapLibrary {
    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, 'JetswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'JetswapLibrary: 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'a5e6089ea250dac750e4867fc4ce7f2a864bd94446564351fe9329f378963974' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IJetswapPair(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, 'JetswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'JetswapLibrary: 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, 'JetswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(999);
        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, 'JetswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(999);
        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, 'JetswapLibrary: 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, 'JetswapLibrary: 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);
        }
    }
}

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

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

contract JetswapRouter is IJetswapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

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

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

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = JetswapLibrary.sortTokens(input, output);
            IJetswapPair pair = IJetswapPair(JetswapLibrary.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 = JetswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? JetswapLibrary.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, JetswapLibrary.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,
            'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'JetswapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(JetswapLibrary.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,
            'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'JetswapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405162004762380380620047628339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145dd620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145dd6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061453c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260298152602001806144376029913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b60006132c5856103e763ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fa5e6089ea250dac750e4867fc4ce7f2a864bd94446564351fe9329f378963974609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145846024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602a8152602001806144a3602a913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e7613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260238152602001806144146023913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260238152602001806144606023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe4a657473776170526f757465723a20494e53554646494349454e545f425f414d4f554e544a657473776170526f757465723a20494e53554646494349454e545f415f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544a6574737761704c6962726172793a204944454e544943414c5f4144445245535345534a657473776170526f757465723a20494e56414c49445f5041544800000000004a6574737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f4c49515549444954594a657473776170526f757465723a2045585049524544000000000000000000004a657473776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444a657473776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212204cf14292e5f6e63a5f0a4f8973f7c5ba5eb5c92340192c254d903a9927b9f6e864736f6c63430006060033000000000000000000000000f6488205957f0b4497053d6422f49e27944ee3dd00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

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

000000000000000000000000f6488205957f0b4497053d6422f49e27944ee3dd00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Decoded View---------------
Arg [0] : _factory (address): 0xf6488205957f0b4497053d6422f49e27944ee3dd
Arg [1] : _WETH (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f6488205957f0b4497053d6422f49e27944ee3dd
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83


Deployed ByteCode Sourcemap

15443:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15917:10;-1:-1:-1;;;;;15931:4:0;15917:18;;15910:26;;;;15443:18405;;12:1:-1;9;2:12;20033:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20033:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20033:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32800:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32800:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32800:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27154:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27154:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27154:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27154:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27154:842:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27154:842:0;;-1:-1:-1;27154:842:0;-1:-1:-1;;;;;;27154:842: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;27154:842:0;;;;;;;;;;;;;;;;;33594:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33594:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33594:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33594:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33594:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33594:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33594:251:0;;-1:-1:-1;33594:251:0;;-1:-1:-1;;;;;33594:251:0:i;20712:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20712:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20712:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24399:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24399:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24399:622:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24399:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24399:622:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24399:622:0;;-1:-1:-1;24399:622:0;-1:-1:-1;;;;;;24399:622:0;;;;;;;;:::i;26328:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26328:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26328:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26328:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26328:820:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26328:820:0;;-1:-1:-1;26328:820:0;-1:-1:-1;;;;;;26328:820:0;;;;;;;;:::i;22841:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22841:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22841:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30159:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30159:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30159:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30159:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30159:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30159:710:0;;-1:-1:-1;30159:710:0;-1:-1:-1;;;;;;30159:710:0;;;;;;;;:::i;31725:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31725:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31725:837:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31725:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31725:837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31725:837:0;;-1:-1:-1;31725:837:0;-1:-1:-1;;;;;;31725:837:0;;;;;;;;:::i;25633:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25633:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25633:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25633:689:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25633:689:0;;-1:-1:-1;25633:689:0;-1:-1:-1;;;;;;25633:689:0;;;;;;;;:::i;33068:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33068:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33068:259:0;;;;;;;;;;;;:::i;25027:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25027:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25027:600:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25027:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25027:600:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25027:600:0;;-1:-1:-1;25027:600:0;-1:-1:-1;;;;;;25027:600:0;;;;;;;;:::i;15573:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15573:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15573:38:0;;;;;;;;;;;;;;32606:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32606:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32606:186:0;;;;;;;;;;;;:::i;22135:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22135:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22135:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30875:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30875:844:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30875:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30875:844:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30875:844:0;;-1:-1:-1;30875:844:0;-1:-1:-1;;;;;;30875:844:0;;;;;;;;:::i;19174:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19174:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19174:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15525:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15525:41:0;;;:::i;33335:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33335:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33335:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33335:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33335:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33335:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33335:251:0;;-1:-1:-1;33335:251:0;;-1:-1:-1;;;;;33335:251:0:i;21391:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21391:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21391:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17421:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17421:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17421:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18161:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18161:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28002:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28002:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28002:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28002:802:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28002:802:0;;-1:-1:-1;28002:802:0;-1:-1:-1;;;;;;28002:802:0;;;;;;;;:::i;20033:673::-;20270:16;20288:14;20251:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;20342:196:::1;20372:5;20392:4;20411:9;20435:14;20464:12;20499:4;20519:8;20342:15;:196::i;:::-;20315:223:::0;;-1:-1:-1;20315:223:0;-1:-1:-1;20549:51:0::1;20577:5:::0;20584:2;20315:223;20549:27:::1;:51::i;:::-;20617:4;-1:-1:-1::0;;;;;20611:20:0::1;;20632:9;20611:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20611:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20611:31:0;;;;20653:45;20684:2;20688:9;20653:30;:45::i;:::-;20033:673:::0;;;;;;;;;;:::o;32800:260::-;32953:14;32992:60;33020:8;33030:9;33041:10;32992:27;:60::i;:::-;32985:67;32800:260;-1:-1:-1;;;;32800:260:0:o;27154:842::-;27368:21;27340:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27440:4:0::1;27415:29;:4:::0;;-1:-1:-1;;27420:15:0;;27415:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27415:21:0::1;-1:-1:-1::0;;;;;27415:29:0::1;;27407:69;;;::::0;;-1:-1:-1;;;27407:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27407:69:0;;;;;;;;;;;;;::::1;;27497:53;27526:7;27535:8;27545:4;;27497:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27497:28:0::1;::::0;-1:-1:-1;;;27497:53:0:i:1;:::-;27487:63;;27600:12;27569:7;27594:1;27577:7;:14;:18;27569:27;;;;;;;;;;;;;;:43;;27561:97;;;;-1:-1:-1::0;;;27561:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:139;27715:4;;27720:1;27715:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27715:7:0::1;27724:10;27736:49;27759:7;27768:4;;27773:1;27768:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27768:7:0::1;27777:4;;27782:1;27777:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27777:7:0::1;27736:22;:49::i;:::-;27787:7;27795:1;27787:10;;;;;;;;;;;;;;27669:31;:139::i;:::-;27819:35;27825:7;27834:4;;27819:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27848:4:0::1;::::0;-1:-1:-1;27819:5:0::1;::::0;-1:-1:-1;;27819:35:0:i:1;:::-;27871:4;-1:-1:-1::0;;;;;27865:20:0::1;;27886:7;27911:1;27894:7;:14;:18;27886:27;;;;;;;;;;;;;;27865:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27865:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27865:49:0;;;;27925:63;27956:2;27960:7;27985:1;27968:7;:14;:18;27960:27;;;;;;;;;;;;;;27925:30;:63::i;:::-;27154:842:::0;;;;;;;;;:::o;33594:251::-;33738:21;33784:53;33812:7;33821:9;33832:4;33784:27;:53::i;:::-;33777:60;;33594:251;;;;;:::o;20712:673::-;21018:12;21032;21057;21072:47;21095:7;21104:6;21112;21072:22;:47::i;:::-;21057:62;;21130:10;21143;:33;;21167:9;21143:33;;;-1:-1:-1;;21143:33:0;21187:78;;;-1:-1:-1;;;21187:78:0;;21213:10;21187:78;;;;21233:4;21187:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21130:46;;-1:-1:-1;;;;;;21187:25:0;;;;;:78;;;;;-1:-1:-1;;21187:78:0;;;;;;;;-1:-1:-1;21187:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21187:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21187:78:0;;;;21297:80;21313:6;21321;21329:9;21340:10;21352;21364:2;21368:8;21297:15;:80::i;:::-;21276:101;;;;;;;;20712:673;;;;;;;;;;;;;;;;:::o;24399:622::-;24623:21;24604:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;24667:53:::1;24696:7;24705:8;24715:4;;24667:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24667:28:0::1;::::0;-1:-1:-1;;;24667:53:0:i:1;:::-;24657:63;;24770:12;24739:7;24764:1;24747:7;:14;:18;24739:27;;;;;;;;;;;;;;:43;;24731:97;;;;-1:-1:-1::0;;;24731:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24839:139;24885:4;;24890:1;24885:7;;;;;;24839:139;24989:24;24995:7;25004:4;;24989:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25010:2:0;;-1:-1:-1;24989:5:0::1;::::0;-1:-1:-1;;24989:24:0:i:1;26328:820::-:0;26542:21;26514:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26614:4:0::1;26589:29;:4:::0;;-1:-1:-1;;26594:15:0;;26589:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26589:21:0::1;-1:-1:-1::0;;;;;26589:29:0::1;;26581:69;;;::::0;;-1:-1:-1;;;26581:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26581:69:0;;;;;;;;;;;;;::::1;;26671:53;26699:7;26708:9;26719:4;;26671:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26671:27:0::1;::::0;-1:-1:-1;;;26671:53:0:i:1;:::-;26661:63;;26757:11;26743:7;26751:1;26743:10;;;;;;;;;;;;;;:25;;26735:75;;;;-1:-1:-1::0;;;26735:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22841:714:::0;23159:14;23186:12;23201:44;23224:7;23233:5;23240:4;23201:22;:44::i;:::-;23186:59;;23256:10;23269;:33;;23293:9;23269:33;;;-1:-1:-1;;23269:33:0;23313:78;;;-1:-1:-1;;;23313:78:0;;23339:10;23313:78;;;;23359:4;23313:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:46;;-1:-1:-1;;;;;;23313:25:0;;;;;:78;;;;;-1:-1:-1;;23313:78:0;;;;;;;;-1:-1:-1;23313:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23313:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23313:78:0;;;;23414:133;23476:5;23483:9;23494:14;23510:12;23524:2;23528:8;23414:47;:133::i;:::-;23402:145;22841:714;-1:-1:-1;;;;;;;;;;;;;22841:714:0:o;30159:710::-;30393:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;30414:137:::1;30460:4;;30465:1;30460:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30460:7:0::1;30469:10;30481:49;30504:7;30513:4;;30518:1;30513:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30513:7:0::1;30522:4;;30527:1;30522:7;;;;;;30481:49;30532:8;30414:31;:137::i;:::-;30562:18;30590:4:::0;;-1:-1:-1;;30595:15:0;;30590:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30590:21:0::1;-1:-1:-1::0;;;;;30583:39:0::1;;30623:2;30583:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30583:43:0::1;-1:-1:-1::0;;;;;30583:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30583:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30583:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30583:43:0;30637:44:::1;::::0;;30583:43:::1;30637:44:::0;;::::1;::::0;;;;;;;;;;;30583:43;;-1:-1:-1;30637:44:0::1;::::0;;;30672:4;;;;;;30637:44;::::1;::::0;30672:4;;30637:44;30672:4;30637:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30678:2:0;;-1:-1:-1;30637:34:0::1;::::0;-1:-1:-1;;30637:44:0:i:1;:::-;30780:12:::0;30714:62:::1;30762:13:::0;30721:4;;-1:-1:-1;;30726:15:0;;30721:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30721:21:0::1;-1:-1:-1::0;;;;;30714:39:0::1;;30754:2;30714:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30714:43:0::1;-1:-1:-1::0;;;;;30714:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30714:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30714:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30714:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30692:169;;;;-1:-1:-1::0;;;30692:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;30159:710:::0;;;;;;;:::o;31725:837::-;31992:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32051:4:0::1;32026:29;:4:::0;;-1:-1:-1;;32031:15:0;;32026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32026:21:0::1;-1:-1:-1::0;;;;;32026:29:0::1;;32018:69;;;::::0;;-1:-1:-1;;;32018:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32018:69:0;;;;;;;;;;;;;::::1;;32098:137;32144:4;;32149:1;32144:7;;;;;;32098:137;32246:55;32281:4;;32246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32295:4:0::1;::::0;-1:-1:-1;32246:34:0::1;::::0;-1:-1:-1;;32246:55:0:i:1;:::-;32329:37;::::0;;-1:-1:-1;;;32329:37:0;;32360:4:::1;32329:37;::::0;::::1;::::0;;;32312:14:::1;::::0;-1:-1:-1;;;;;32336:4:0::1;32329:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32329:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32329:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32329:37:0;;-1:-1:-1;32385:25:0;;::::1;;32377:79;;;;-1:-1:-1::0;;;32377:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32473:4;-1:-1:-1::0;;;;;32467:20:0::1;;32488:9;32467:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32467:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32467:31:0;;;;32509:45;32540:2;32544:9;32509:30;:45::i;25633:689::-:0;25849:21;25821:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25907:4:::1;-1:-1:-1::0;;;;;25896:15:0::1;:4;;25901:1;25896:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25896:7:0::1;-1:-1:-1::0;;;;;25896:15:0::1;;25888:55;;;::::0;;-1:-1:-1;;;25888:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25888:55:0;;;;;;;;;;;;;::::1;;25964:54;25993:7;26002:9;26013:4;;25964:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25964:28:0::1;::::0;-1:-1:-1;;;25964:54:0:i:1;:::-;25954:64;;26068:12;26037:7;26062:1;26045:7;:14;:18;26037:27;;;;;;;;;;;;;;:43;;26029:97;;;;-1:-1:-1::0;;;26029:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26143:4;-1:-1:-1::0;;;;;26137:19:0::1;;26164:7;26172:1;26164:10;;;;;;;;;;;;;;26137:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26137:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26137:40:0;;;;;26201:4;-1:-1:-1::0;;;;;26195:20:0::1;;26216:49;26239:7;26248:4;;26253:1;26248:7;;;;;;26216:49;26267:7;26275:1;26267:10;;;;;;;;;;;;;;26195:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26195:83:0::1;-1:-1:-1::0;;;;;26195:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26195:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26195:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26195:83:0;26188:91:::1;;;;26290:24;26296:7;26305:4;;26290:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26311:2:0;;-1:-1:-1;26290:5:0::1;::::0;-1:-1:-1;;26290:24:0:i:1;:::-;25633:689:::0;;;;;;;;:::o;33068:259::-;33221:13;33259:60;33286:9;33297;33308:10;33259:26;:60::i;25027:600::-;25251:21;25232:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25295:53:::1;25323:7;25332:9;25343:4;;25295:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25295:27:0::1;::::0;-1:-1:-1;;;25295:53:0:i:1;:::-;25285:63;;25381:11;25367:7;25375:1;25367:10;;;;;;;;;;;;;;:25;;25359:75;;;;-1:-1:-1::0;;;25359:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15573:38:::0;;;:::o;32606:186::-;32703:12;32735:49;32756:7;32765:8;32775;32735:20;:49::i;22135:700::-;22401:14;22382:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;22444:196:::1;22474:5;22494:4;22513:9;22537:14;22566:12;22601:4;22621:8;22444:15;:196::i;:::-;22690:38;::::0;;-1:-1:-1;;;22690:38:0;;22722:4:::1;22690:38;::::0;::::1;::::0;;;22428:212;;-1:-1:-1;22651:78:0::1;::::0;-1:-1:-1;22679:5:0;;22686:2;;-1:-1:-1;;;;;22690: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;22690:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22690:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22690:38:0;22651:27:::1;:78::i;:::-;22746:4;-1:-1:-1::0;;;;;22740:20:0::1;;22761:9;22740:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22740:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22740:31:0;;;;22782:45;22813:2;22817:9;22782:30;:45::i;30875:844::-:0;31135:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;31180:4:::1;-1:-1:-1::0;;;;;31169:15:0::1;:4;;31174:1;31169:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31169:7:0::1;-1:-1:-1::0;;;;;31169:15:0::1;;31161:55;;;::::0;;-1:-1:-1;;;31161:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31161:55:0;;;;;;;;;;;;;::::1;;31227:13;31243:9;31227:25;;31269:4;-1:-1:-1::0;;;;;31263:19:0::1;;31290:8;31263:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31263:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31263:38:0;;;;;31325:4;-1:-1:-1::0;;;;;31319:20:0::1;;31340:49;31363:7;31372:4;;31377:1;31372:7;;;;;;31340:49;31391:8;31319:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31319:81:0::1;-1:-1:-1::0;;;;;31319:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31319:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31319:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31319:81:0;31312:89:::1;;;;31412:18;31440:4:::0;;-1:-1:-1;;31445:15:0;;31440:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31440:21:0::1;-1:-1:-1::0;;;;;31433:39:0::1;;31473:2;31433:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31433:43:0::1;-1:-1:-1::0;;;;;31433:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31433:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31433:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31433:43:0;31487:44:::1;::::0;;31433:43:::1;31487:44:::0;;::::1;::::0;;;;;;;;;;;31433:43;;-1:-1:-1;31487:44:0::1;::::0;;;31522:4;;;;;;31487:44;::::1;::::0;31522:4;;31487:44;31522:4;31487:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31528:2:0;;-1:-1:-1;31487:34:0::1;::::0;-1:-1:-1;;31487:44:0:i:1;:::-;31630:12:::0;31564:62:::1;31612:13:::0;31571:4;;-1:-1:-1;;31576:15:0;;31571:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31571:21:0::1;-1:-1:-1::0;;;;;31564:39:0::1;;31604:2;31564:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31564:43:0::1;-1:-1:-1::0;;;;;31564:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19174:853:0::0;19428:12;19442;19409:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;19467:12:::1;19482:47;19505:7;19514:6;19522;19482:22;:47::i;:::-;19540:60;::::0;;-1:-1:-1;;;19540:60:0;;19572:10:::1;19540:60;::::0;::::1;::::0;-1:-1:-1;;;;;19540:31:0;::::1;:60:::0;;;;;;;;;;;;;;19467:62;;-1:-1:-1;19540:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19540:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19540:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19540:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19668:27:0::1;::::0;;-1:-1:-1;;;19668:27:0;;-1:-1:-1;;;;;19668:27:0;;::::1;;::::0;::::1;::::0;;;19638:12:::1;::::0;;;19668:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19638:12;19668:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19668:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19668:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19668:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19668:27:0;-1:-1:-1;19707:14:0::1;19726:41;19752:6:::0;19760;19726:25:::1;:41::i;:::-;19706:61;;;19809:6;-1:-1:-1::0;;;;;19799:16:0::1;:6;-1:-1:-1::0;;;;;19799:16:0::1;;:58;;19840:7;19849;19799:58;;;19819:7;19828;19799:58;19778:79:::0;;-1:-1:-1;19778:79:0;-1:-1:-1;19876:21:0;;::::1;;19868:70;;;;-1:-1:-1::0;;;19868:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19968:10;19957:7;:21;;19949:70;;;;-1:-1:-1::0;;;19949:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;;;;19174:853:::0;;;;;;;;;;;:::o;15525:41::-;;;:::o;33335:251::-;33479:21;33525:53;33554:7;33563:8;33573:4;33525:28;:53::i;21391:665::-;21680:16;21698:14;21725:12;21740:44;21763:7;21772:5;21779:4;21740:22;:44::i;:::-;21725:59;;21795:10;21808;:33;;21832:9;21808:33;;;-1:-1:-1;;21808:33:0;21852:78;;;-1:-1:-1;;;21852:78:0;;21878:10;21852:78;;;;21898:4;21852:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21795:46;;-1:-1:-1;;;;;;21852:25:0;;;;;:78;;;;;-1:-1:-1;;21852:78:0;;;;;;;;-1:-1:-1;21852:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21852:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21852:78:0;;;;21968:80;21987:5;21994:9;22005:14;22021:12;22035:2;22039:8;21968:18;:80::i;:::-;21941:107;;;;-1:-1:-1;21391:665:0;-1:-1:-1;;;;;;;;;;;;;21391:665:0:o;17421:734::-;17709:12;17723;17737:14;17690:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;17785:85:::1;17799:6;17807;17815:14;17831;17847:10;17859;17785:13;:85::i;:::-;17764:106:::0;;-1:-1:-1;17764:106:0;-1:-1:-1;17881:12:0::1;17896:47;17919:7;17928:6:::0;17936;17896:22:::1;:47::i;:::-;17881:62;;17954:66;17986:6;17994:10;18006:4;18012:7;17954:31;:66::i;:::-;18031;18063:6;18071:10;18083:4;18089:7;18031:31;:66::i;:::-;18133:4;-1:-1:-1::0;;;;;18120:23:0::1;;18144:2;18120:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18120:27:0::1;-1:-1:-1::0;;;;;18120:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18120:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18120:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18120:27:0;17421:734;;;;-1:-1:-1;18120:27:0;;-1:-1:-1;17421:734:0;;-1:-1:-1;;;;;;;;;17421:734:0:o;18161:970::-;18414:16;18432:14;18448;18395:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;18502:176:::1;18530:5;18550:4;18569:18;18602:9;18626:14;18655:12;18502:13;:176::i;:::-;18475:203:::0;;-1:-1:-1;18475:203:0;-1:-1:-1;18689:12:0::1;18704:44;18727:7;18736:5:::0;18743:4:::1;18704:22;:44::i;:::-;18689:59;;18759:69;18791:5;18798:10;18810:4;18816:11;18759:31;:69::i;:::-;18845:4;-1:-1:-1::0;;;;;18839:19:0::1;;18866:9;18839:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18839:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18839:39:0;;;;;18902:4;-1:-1:-1::0;;;;;18896:20:0::1;;18917:4;18923:9;18896:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18896:37:0::1;-1:-1:-1::0;;;;;18896:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18896:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18896:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18896:37:0;18889:45:::1;;;;18970:4;-1:-1:-1::0;;;;;18957:23:0::1;;18981:2;18957:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18957:27:0::1;-1:-1:-1::0;;;;;18957:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18957:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18957:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18957:27:0;;-1:-1:-1;19035:9:0::1;:21:::0;-1:-1:-1;19031:92:0::1;;;19058:65;19089:10;19113:9;19101;:21;19058:30;:65::i;:::-;15735:1;18161:970:::0;;;;;;;;;;;:::o;28002:802::-;28215:21;28187:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;28273:4:::1;-1:-1:-1::0;;;;;28262:15:0::1;:4;;28267:1;28262:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28262:7:0::1;-1:-1:-1::0;;;;;28262:15:0::1;;28254:55;;;::::0;;-1:-1:-1;;;28254:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28254:55:0;;;;;;;;;;;;;::::1;;28330:53;28358:7;28367:9;28378:4;;28330:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28330:27:0::1;::::0;-1:-1:-1;;;28330:53:0:i:1;:::-;28320:63;;28416:9;28402:7;28410:1;28402:10;;;;;;;;;;;;;;:23;;28394:73;;;;-1:-1:-1::0;;;28394:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28484:4;-1:-1:-1::0;;;;;28478:19:0::1;;28505:7;28513:1;28505:10;;;;;;;;;;;;;;28478:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28478:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28478:40:0;;;;;28542:4;-1:-1:-1::0;;;;;28536:20:0::1;;28557:49;28580:7;28589:4;;28594:1;28589:7;;;;;;28557:49;28608:7;28616:1;28608:10;;;;;;;;;;;;;;28536:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28536:83:0::1;-1:-1:-1::0;;;;;28536:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28536:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28536:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28536:83:0;28529:91:::1;;;;28631:24;28637:7;28646:4;;28631:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28652:2:0;;-1:-1:-1;28631:5:0::1;::::0;-1:-1:-1;;28631:24:0:i:1;:::-;28718:7;28726:1;28718:10;;;;;;;;;;;;;;28706:9;:22;28702:94;;;28730:66;28761:10;28785:7;28793:1;28785:10;;;;;;;;;;;;;;28773:9;:22;28730:30;:66::i;1185:361::-:0;1380:45;;;-1:-1:-1;;;;;1380:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1380:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1369:57:0;;;;1334:12;;1348:17;;1369:10;;;;1380:45;1369:57;;;25:18:-1;1369: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;;;1369: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;;1333:93:0;;;;1445:7;:57;;;;-1:-1:-1;1457:11:0;;:16;;:44;;;1488:4;1477:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1477:24:0;1457:44;1437:101;;;;;-1:-1:-1;;;1437:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:361;;;;;:::o;1964:195::-;2072:12;;;2034;2072;;;;;;;;;-1:-1:-1;;;;;2051:7:0;;;2065:5;;2051:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2051:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2033:52:0;;;2104:7;2096:55;;;;-1:-1:-1;;;2096:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1964:195;;;:::o;12141:513::-;12234:14;12280:1;12269:8;:12;12261:66;;;;-1:-1:-1;;;12261:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:1;12346:9;:13;:31;;;;;12376:1;12363:10;:14;12346:31;12338:82;;;;-1:-1:-1;;;12338:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:20;12454:17;:8;12467:3;12454:17;:12;:17;:::i;:::-;12431:40;-1:-1:-1;12482:14:0;12499:31;12431:40;12519:10;12499:31;:19;:31;:::i;:::-;12482:48;-1:-1:-1;12541:16:0;12560:40;12584:15;12560:19;:9;12574:4;12560:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12541:59;;12635:11;12623:9;:23;;;;;;;12141:513;-1:-1:-1;;;;;;;12141:513:0:o;13325:509::-;13426:21;13483:1;13468:4;:11;:16;;13460:57;;;;;-1:-1:-1;;;13460:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13549:4;:11;13538:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13538:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13538:23:0;;13528:33;;13585:8;13572:7;13580:1;13572:10;;;;;;;;;;;;;:21;;;;;13609:6;13604:223;13635:1;13621:4;:11;:15;13617:1;:19;13604:223;;;13659:14;13675:15;13694:42;13706:7;13715:4;13720:1;13715:7;;;;;;;;;;;;;;13724:4;13729:1;13733;13729:5;13724:11;;;;;;;;;;;;;;13694;:42::i;:::-;13658:78;;;;13768:47;13781:7;13789:1;13781:10;;;;;;;;;;;;;;13793:9;13804:10;13768:12;:47::i;:::-;13751:7;13759:1;13763;13759:5;13751:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13638:3:0;;13604:223;;;;13325:509;;;;;:::o;10621:478::-;10710:12;10736:14;10752;10770:26;10781:6;10789;10770:10;:26::i;:::-;10934:32;;;-1:-1:-1;;10934:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10934:32:0;;;;;10924:43;;;;;;-1:-1:-1;;;;;;10837:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10837:251:0;;;;;;;10827:262;;;;;;;;;10621:478;-1:-1:-1;;;;;10621:478:0:o;1554:402::-;1779:51;;;-1:-1:-1;;;;;1779:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1779:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1768:63:0;;;;1733:12;;1747:17;;1768:10;;;;1779:51;1768:63;;;25:18:-1;1768: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;;;1768: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;;1732:99:0;;;;1850:7;:57;;;;-1:-1:-1;1862:11:0;;:16;;:44;;;1893:4;1882:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1882:24:0;1862:44;1842:106;;;;-1:-1:-1;;;1842:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:402;;;;;;:::o;23666:727::-;23773:6;23768:618;23799:1;23785:4;:11;:15;23781:1;:19;23768:618;;;23823:13;23838:14;23857:4;23862:1;23857:7;;;;;;;;;;;;;;23866:4;23871:1;23875;23871:5;23866:11;;;;;;;;;;;;;;23822:56;;;;23894:14;23913:40;23939:5;23946:6;23913:25;:40::i;:::-;23893:60;;;23968:14;23985:7;23993:1;23997;23993:5;23985:14;;;;;;;;;;;;;;23968:31;;24015:15;24032;24060:6;-1:-1:-1;;;;;24051:15:0;:5;-1:-1:-1;;;;;24051:15:0;;:61;;24093:9;24109:1;24051:61;;;24075:1;24079:9;24051:61;24014:98;;;;24127:10;24158:1;24144:4;:11;:15;24140:1;:19;:80;;24217:3;24140:80;;;24162:52;24185:7;24194:6;24202:4;24207:1;24211;24207:5;24202:11;;;;;;;;;;;;;;24162:22;:52::i;:::-;24127:93;;24248:46;24271:7;24280:5;24287:6;24248:22;:46::i;:::-;-1:-1:-1;;;;;24235:65:0;;24319:10;24331;24343:2;24357:1;24347:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24347:12:0;87:42:-1;143:17;;-1:-1;24347:12:0;;24235:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24235:139:0;-1:-1:-1;;;;;24235:139: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;24235:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24235:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23802:3:0;;;;;-1:-1:-1;23768:618:0;;-1:-1:-1;;;;;;;;23768:618:0;;;23666:727;;;:::o;13915:530::-;14016:21;14073:1;14058:4;:11;:16;;14050:57;;;;;-1:-1:-1;;;14050:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14139:4;:11;14128:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14128:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14128:23:0;;14118:33;;14192:9;14162:7;14187:1;14170:7;:14;:18;14162:27;;;;;;;;;;;;;;;;;:39;14226:11;;-1:-1:-1;;14226:15:0;14212:226;14243:5;;14212:226;;14271:14;14287:15;14306:42;14318:7;14327:4;14336:1;14332;:5;14327:11;;;;;;;;;;;;;;14340:4;14345:1;14340:7;;;;;;;14306:42;14270:78;;;;14380:46;14392:7;14400:1;14392:10;;;;;;;;;;;;;;14404:9;14415:10;14380:11;:46::i;:::-;14363:7;14375:1;14371;:5;14363:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14250:3:0;14212:226;;28951:1202;29064:6;29059:1087;29090:1;29076:4;:11;:15;29072:1;:19;29059:1087;;;29114:13;29129:14;29148:4;29153:1;29148:7;;;;;;;;;;;;;;29157:4;29162:1;29166;29162:5;29157:11;;;;;;;;;;;;;;29113:56;;;;29185:14;29204:40;29230:5;29237:6;29204:25;:40::i;:::-;29184:60;;;29259:17;29292:46;29315:7;29324:5;29331:6;29292:22;:46::i;:::-;29259:80;;29354:16;29385:17;29473:13;29488;29506:4;-1:-1:-1;;;;;29506:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29506:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29506:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29506:18:0;;;;;;;-1:-1:-1;;;;;29472:52:0;;;;-1:-1:-1;29472:52:0;;-1:-1:-1;29540:17:0;;-1:-1:-1;;;;;29581:15:0;;;;;;;:61;;29623:8;29633;29581:61;;;29600:8;29610;29581:61;29539:103;;;;29671:56;29714:12;29678:5;-1:-1:-1;;;;;29671:23:0;;29703:4;29671:38;;;;;;;;;;;;;-1:-1:-1;;;;;29671:38:0;-1:-1:-1;;;;;29671:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29671:56:0;29657:70;;29757:69;29785:11;29798:12;29812:13;29757:27;:69::i;:::-;29742:84;;29059:1087;;;;29857:15;29874;29902:6;-1:-1:-1;;;;;29893:15:0;:5;-1:-1:-1;;;;;29893:15:0;;:67;;29938:12;29957:1;29893:67;;;29917:1;29921:12;29893:67;29856:104;;;;29975:10;30006:1;29992:4;:11;:15;29988:1;:19;:80;;30065:3;29988:80;;;30010:52;30033:7;30042:6;30050:4;30055:1;30059;30055:5;30050:11;;;;;;;30010:52;30121:12;;;30131:1;30121:12;;;;;;;;;;-1:-1:-1;;;30083:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30083:51:0;;;;;;;;;;;;;;;;;;;;;;29975:93;;-1:-1:-1;30083:9:0;;;;;;30093:10;;30105;;29975:93;;30121:12;;30083:51;;;;;;;;30121:12;;30083:51;;;;30121: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;30083:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30083:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29093:3:0;;;;;-1:-1:-1;29059:1087:0;;-1:-1:-1;;;;;;;;;;29059:1087:0;9735:129;9819:5;;;9814:16;;;;9806:50;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;;;12775:468;12868:13;12914:1;12902:9;:13;12894:68;;;;-1:-1:-1;;;12894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12993:1;12981:9;:13;:31;;;;;13011:1;12998:10;:14;12981:31;12973:82;;;;-1:-1:-1;;;12973:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13066:14;13083:34;13112:4;13083:24;:9;13097;13083:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13066:51;-1:-1:-1;13128:16:0;13147:34;13177:3;13147:25;:10;13162:9;13147:25;:14;:25;:::i;:34::-;13128:53;;13203:32;13233:1;13216:11;13204:9;:23;;;;;;;13203:32;:29;:32;:::i;:::-;13192:43;12775:468;-1:-1:-1;;;;;;12775:468:0:o;11702:317::-;11784:12;11827:1;11817:7;:11;11809:59;;;;-1:-1:-1;;;11809:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11898:1;11887:8;:12;:28;;;;;11914:1;11903:8;:12;11887:28;11879:79;;;;-1:-1:-1;;;11879:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12003:8;11979:21;:7;11991:8;11979:21;:11;:21;:::i;:::-;:32;;;;;;;11702:317;-1:-1:-1;;;;11702:317:0:o;10184:345::-;10259:14;10275;10320:6;-1:-1:-1;;;;;10310:16:0;:6;-1:-1:-1;;;;;10310:16:0;;;10302:64;;;;-1:-1:-1;;;10302:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10405:6;-1:-1:-1;;;;;10396:15:0;:6;-1:-1:-1;;;;;10396:15:0;;:53;;10434:6;10442;10396:53;;;10415:6;10423;10396:53;10377:72;;-1:-1:-1;10377:72:0;-1:-1:-1;;;;;;10468:20:0;;10460:61;;;;;-1:-1:-1;;;10460:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10184:345;;;;;:::o;16039:1376::-;16352:48;;;-1:-1:-1;;;16352:48:0;;-1:-1:-1;;;;;16352:48:0;;;;;;;;;;;;;;;;16257:12;;;;;;16368:7;16352:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16352:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16352:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16352:48:0;-1:-1:-1;;;;;16352:62:0;;16348:146;;;16431:51;;;-1:-1:-1;;;16431:51:0;;-1:-1:-1;;;;;16431:51:0;;;;;;;;;;;;;;;;16447:7;16431:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16431:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16431:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16431:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16348:146:0;16505:13;16520;16537:51;16564:7;16573:6;16581;16537:26;:51::i;:::-;16504:84;;;;16603:8;16615:1;16603:13;:30;;;;-1:-1:-1;16620:13:0;;16603:30;16599:809;;;16672:14;;-1:-1:-1;16688:14:0;;-1:-1:-1;16599:809:0;;;16736:19;16758:56;16779:14;16795:8;16805;16758:20;:56::i;:::-;16736:78;;16851:14;16833;:32;16829:568;;16912:10;16894:14;:28;;16886:77;;;;-1:-1:-1;;;16886:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17004:14;;-1:-1:-1;17020:14:0;-1:-1:-1;17020:14:0;16829:568;;;17076:19;17098:56;17119:14;17135:8;17145;17098:20;:56::i;:::-;17076:78;;17198:14;17180;:32;;17173:40;;;;17258:10;17240:14;:28;;17232:77;;;;-1:-1:-1;;;17232:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17350:14;-1:-1:-1;17366:14:0;;-1:-1:-1;16829:568:0;16599:809;;16039:1376;;;;;;;;;;;:::o;9872:142::-;9924:6;9951;;;:30;;-1:-1:-1;;9966:5:0;;;9980:1;9975;9966:5;9975:1;9961:15;;;;;:20;9951:30;9943:63;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;;;9599:128;9683:5;;;9678:16;;;;9670:49;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;;;11157:432;11250:13;11265;11292:14;11311:26;11322:6;11330;11311:10;:26::i;:::-;11291:46;;;11348:32;11356:7;11365:6;11373;11348:7;:32::i;:::-;;11392:13;11407;11438:32;11446:7;11455:6;11463;11438:7;:32::i;:::-;-1:-1:-1;;;;;11425:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11425:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11425:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11425:60:0;;;;;;;-1:-1:-1;;;;;11391:94:0;;;;-1:-1:-1;11391:94:0;;-1:-1:-1;;;;;;11519:16:0;;;;;;;:62;;11562:8;11572;11519:62;;;11539:8;11549;11519:62;11496:85;;;;-1:-1:-1;11157:432:0;-1:-1:-1;;;;;;;11157:432:0:o

Swarm Source

ipfs://4cf14292e5f6e63a5f0a4f8973f7c5ba5eb5c92340192c254d903a9927b9f6e8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.