Contract 0x3a1d87f206d12415f5b0a33e786967680aab4f6d 3

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xd68e25d4356ca3004053331ef7d98f3da0184a37c4e12d91ae26e62c05e06f4dRemove Liquidity407095762023-03-24 10:00:132 days 2 hrs ago0x0c2b8d0874437c2165686f31c52aa63e4fc1a8c1 IN  Wault Finance: WS Poly Router0 MATIC0.020135963703 131.294387268
0xa19987f4f222c5a19ce66bc064002064092389b1af3e1287d5c1a593310ff99dRemove Liquidity...396808092023-02-25 4:18:3929 days 7 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.003058787712 102.785298989
0x3619315e5b5552fd157ba89f3b10deba43e018059dff8b065896a3e8dd0181b6Remove Liquidity...396807592023-02-25 4:16:5329 days 7 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.003008762365 101.185887521
0x7e18af7e658f851dbf91baebae4a32573d34839ec040bb450a0aabbec4578382Remove Liquidity...396798812023-02-25 3:43:0829 days 8 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.003422620461 115.01127259
0xac1624bf23361d0a511932b3740c3e9006dc1e2dee12a8bb19549c47558e287dRemove Liquidity...396797462023-02-25 3:38:0229 days 8 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.003291435002 110.603010936
0xa3c51f0ce3939e7505f07f0726faa22b78b093cbbb15c9821aabcd75c77721d4Remove Liquidity...396793022023-02-25 3:21:1029 days 8 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.003698632168 124.286171184
0xa0dff33b648b87a1cc3796d7c6595427bd8c8b6f3212bd5d9128722645e4fc97Remove Liquidity...396791852023-02-25 3:16:3029 days 8 hrs ago0x6150b4d7b46a9e7e72343e4b0bb4b9db64e6077f IN  Wault Finance: WS Poly Router0 MATIC0.006486372508 123.19093895
0x01bb67da5ce04913706637299fdfd2d19d494c032dc2d26b861ad2affe9bc4ccRemove Liquidity...366100652022-12-09 7:50:01107 days 4 hrs ago0xf482404f0ee4bbc780199b2995a43882a8595ada IN  Wault Finance: WS Poly Router0 MATIC0.007486764959 35.460450714
0xe7a7276b8749453cbd316bf53917bf1bd325bcfa278062ae9305512da41da63eSwap Exact Token...361186492022-11-27 4:48:00119 days 7 hrs ago0x253ba6c8b005ae3989b5d02331518223222bdc96 IN  Wault Finance: WS Poly Router0 MATIC0.003360934784 30.906000025
0x91a79b5eca67edd59b0930fea8add34a403359477f9861a0de52d9fd9aacc1b9Add Liquidity351857732022-11-04 9:54:46142 days 2 hrs ago0xf465d66fe7c960bf1da323c0ee6dee54eedb6edb IN  Wault Finance: WS Poly Router0 MATIC0.050578918504 280.598036687
0x20ad6ebf436d4755fac34ef073dae2769a5f3f844de2332ae78c3ac4d6216a90Remove Liquidity...348633232022-10-27 12:50:03149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.053814884323 271.381161491
0xb137f21b8615a840c9028e1781c25377b29ab2520a57f71ce9fbede49056a2f9Remove Liquidity...348625892022-10-27 12:24:47149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.014706207529 71.044480817
0xb0910a335a9e95d5e5d4e1db73f934eaef12b2495e11c4597e0528d6ce33e43bRemove Liquidity348624942022-10-27 12:21:33149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.012541295003 82.749691557
0xa57eadcd4b04196d3d6c2732064be9131ec5f4ab6c5f7091c7dfdf8a3972483bRemove Liquidity...348623682022-10-27 12:17:13149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.016905167385 84.192434885
0xab2a6eb7836f384c8893a8775715a4663d5e79aa6a205a909dccb493241e0c52Remove Liquidity...348622952022-10-27 12:14:43149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.019983054218 104.998787383
0x3293a739d14f5878d2db11fa24eb0a0223455ae70f66c9ea402f09558b5f41ccRemove Liquidity348622472022-10-27 12:13:03149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.017621617188 100.014854353
0x9236b7f995466f853584d38dc0f9d0ed61672c9bc29edfcc92c13406a84c48deRemove Liquidity...348621832022-10-27 12:10:51149 days 23 hrs ago0x102cc79af72087613f69cc985261870d02e041a6 IN  Wault Finance: WS Poly Router0 MATIC0.026889924741 128.345511193
0xdef06021f442a540b036510172268289ff7d5b26d7106f9e18b93fb8fbf8542eRemove Liquidity339283542022-10-04 17:17:08172 days 18 hrs ago0x5b85988f0032ee818f911ec969dd9c649caa0a14 IN  Wault Finance: WS Poly Router0 MATIC0.005437739001 30.723772243
0x9053d5c5b48ed1c1c995bfd16199c36ee50b8760fc0626bac9f4fdb958be0689Remove Liquidity339278382022-10-04 16:59:24172 days 19 hrs ago0x5b85988f0032ee818f911ec969dd9c649caa0a14 IN  Wault Finance: WS Poly Router0 MATIC0.00090243 30.00000002
0x1b60256909852521e300bbacb83d09a980013ba9a4b312f147cdf38ba490586aRemove Liquidity339277302022-10-04 16:55:40172 days 19 hrs ago0x5b85988f0032ee818f911ec969dd9c649caa0a14 IN  Wault Finance: WS Poly Router0 MATIC0.00090387 30.000000017
0xbb1a4b5287bee67a6e4a173d7116dd22ca53e915101b10bac9ee4f5c31f99e99Swap Exact Token...329210412022-09-10 8:06:53197 days 3 hrs ago0x253ba6c8b005ae3989b5d02331518223222bdc96 IN  Wault Finance: WS Poly Router0 MATIC0.006184545146 31.622532374
0xd189624873a0348c375fecdc05ff970ffbbd54b0fe59f2a32f51370d31040f4cRemove Liquidity328423692022-09-08 10:27:56199 days 1 hr ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  Wault Finance: WS Poly Router0 MATIC0.006591654401 38.800000006
0x9182cd22c71528be5ba9cfb5dc8d07cd2e5d854581da835d8f51b008c68b79b6Remove Liquidity328423092022-09-08 10:25:52199 days 1 hr ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  Wault Finance: WS Poly Router0 MATIC0.006671989806 40.740000041
0x6bcc6b8ea4d043b5499403798d59ac9bf9cee7a7ee2c22665d0534102f66142fRemove Liquidity...328421812022-09-08 10:21:28199 days 1 hr ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  Wault Finance: WS Poly Router0 MATIC0.005924970003 30.000000017
0xfd81f3e062363620c374f910afc7de203fd496b48fdeb6538f2b4e361a9e63d3Remove Liquidity...328421362022-09-08 10:19:54199 days 1 hr ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  Wault Finance: WS Poly Router0 MATIC0.007106404855 35.434579183
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1128771d6731719458f87811c4ec85091f2311d41092c71d051db9252d5786ee407491362023-03-25 11:04:131 day 56 mins ago Wault Finance: WS Poly Router Polygon: WMATIC Token0.7976 MATIC
0x1128771d6731719458f87811c4ec85091f2311d41092c71d051db9252d5786ee407491362023-03-25 11:04:131 day 56 mins ago 0xf7a2f863299c17dfa11cd8a14e7c7dca92f315b9 Wault Finance: WS Poly Router0.7976 MATIC
0x85ef23add7a740b80d338aa0e69e43e34261254d8656e100339310861b559e8f407420912023-03-25 6:48:071 day 5 hrs ago Wault Finance: WS Poly Router0x750cc4f9a85a376fce8011928657df80f567ae6b1.11030695215488458 MATIC
0x85ef23add7a740b80d338aa0e69e43e34261254d8656e100339310861b559e8f407420912023-03-25 6:48:071 day 5 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router1.11030695215488458 MATIC
0x65c8b4b089aded98cf87d5dccd44ed96ad85d34215e26a1f40b355ee9989c505407403722023-03-25 5:44:491 day 6 hrs ago Wault Finance: WS Poly Router Polygon: WMATIC Token0.001 MATIC
0x65c8b4b089aded98cf87d5dccd44ed96ad85d34215e26a1f40b355ee9989c505407403722023-03-25 5:44:491 day 6 hrs ago 0x2286e63fd0701fc219686b5ba6bb4d4a6e8ed35b Wault Finance: WS Poly Router0.001 MATIC
0x90a55b2bc0b093ea5a4548eb47c6f988a8d9078e255aebec06cdaa45dc2e3675407403422023-03-25 5:43:451 day 6 hrs ago Wault Finance: WS Poly Router Polygon: WMATIC Token0.001 MATIC
0x90a55b2bc0b093ea5a4548eb47c6f988a8d9078e255aebec06cdaa45dc2e3675407403422023-03-25 5:43:451 day 6 hrs ago 0x2286e63fd0701fc219686b5ba6bb4d4a6e8ed35b Wault Finance: WS Poly Router0.001 MATIC
0xdf139330ad30c168d657da230b357ed04b3a8a1fbb9aef7f78906c915ad00d09407381762023-03-25 4:23:281 day 7 hrs ago Wault Finance: WS Poly Router0xc9707829cb1c0cce9cb8db44c9e750c0d1c019400.228195745368386317 MATIC
0xdf139330ad30c168d657da230b357ed04b3a8a1fbb9aef7f78906c915ad00d09407381762023-03-25 4:23:281 day 7 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router0.228195745368386317 MATIC
0x96b874658a75d1fd8c47cfe7c96a07eeaa209af36fc54a07c4f3ba73f5cccb51407373302023-03-25 3:52:071 day 8 hrs ago Wault Finance: WS Poly Router0x668580ebd8e00bdcae17e7ec1fba5ec1265c6e190.180801109562443241 MATIC
0x96b874658a75d1fd8c47cfe7c96a07eeaa209af36fc54a07c4f3ba73f5cccb51407373302023-03-25 3:52:071 day 8 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router0.180801109562443241 MATIC
0x135ba8e3a8187d9ccab676139a20ce010c772d36825d3c692bd3063b4edded2e407241242023-03-24 19:40:351 day 16 hrs ago Wault Finance: WS Poly Router0x3a7c6fde32e7f7e13ce75179d94df7f94657d8371.096659278108100583 MATIC
0x135ba8e3a8187d9ccab676139a20ce010c772d36825d3c692bd3063b4edded2e407241242023-03-24 19:40:351 day 16 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router1.096659278108100583 MATIC
0x9c5d59c96944a1646bf4b067cd23d2ca5bf4514689d643a7a9245ce963087a9b407137692023-03-24 12:49:011 day 23 hrs ago Wault Finance: WS Poly Router Polygon: WMATIC Token1.2961 MATIC
0x9c5d59c96944a1646bf4b067cd23d2ca5bf4514689d643a7a9245ce963087a9b407137692023-03-24 12:49:011 day 23 hrs ago 0xf7a2f863299c17dfa11cd8a14e7c7dca92f315b9 Wault Finance: WS Poly Router1.2961 MATIC
0x2d108a94e600e2f40ef8d74739865c4ebd0d2d584ea8e54dd320cb5eac50eace406930702023-03-24 0:03:102 days 11 hrs ago Wault Finance: WS Poly Router0x8b3b0b32a2c9df32bc579826688614f8144612e00.353016198568818468 MATIC
0x2d108a94e600e2f40ef8d74739865c4ebd0d2d584ea8e54dd320cb5eac50eace406930702023-03-24 0:03:102 days 11 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router0.353016198568818468 MATIC
0x20b195a92e481d861e987cc2a9fb0ca37270b36a6dbe99c833991830c89d293c406835532023-03-23 18:15:352 days 17 hrs ago Wault Finance: WS Poly Router Polygon: WMATIC Token0.1994 MATIC
0x20b195a92e481d861e987cc2a9fb0ca37270b36a6dbe99c833991830c89d293c406835532023-03-23 18:15:352 days 17 hrs ago 0xf7a2f863299c17dfa11cd8a14e7c7dca92f315b9 Wault Finance: WS Poly Router0.1994 MATIC
0x7e66edab66ff7b2cf9671bfa04e1f2756158c1bf57eb79acd41c90c4304ddd10406800802023-03-23 16:04:002 days 19 hrs ago Wault Finance: WS Poly Router0x2dfdfa2bfa2fa2524085269971acd850aa1f9afb0.699691540561600213 MATIC
0x7e66edab66ff7b2cf9671bfa04e1f2756158c1bf57eb79acd41c90c4304ddd10406800802023-03-23 16:04:002 days 19 hrs ago Polygon: WMATIC Token Wault Finance: WS Poly Router0.699691540561600213 MATIC
0x1d1a97ce250cc59e061c133210b2d954fb17c40df20c5d9b76843badbd66c1ba406777772023-03-23 14:39:482 days 21 hrs ago Wault Finance: WS Poly Router Polygon: WMATIC Token0.031904 MATIC
0x1d1a97ce250cc59e061c133210b2d954fb17c40df20c5d9b76843badbd66c1ba406777772023-03-23 14:39:482 days 21 hrs ago 0xf7a2f863299c17dfa11cd8a14e7c7dca92f315b9 Wault Finance: WS Poly Router0.031904 MATIC
0x99d56b10e394a6be2c2258352cfb3025a3489f6f493de4452cbca18c65a2f876406714912023-03-23 10:41:123 days 1 hr ago Wault Finance: WS Poly Router0x407f713ad95e99b982e497a68fbf4c0417dc79e60.354434278312860584 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WaultSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIТ

pragma solidity =0.6.6;


interface IWaultSwapFactory {
    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 IWaultSwapRouter01 {
    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 IWaultSwapRouter02 is IWaultSwapRouter01 {
    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 IWaultSwapPair {
    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 WaultSwapLibrary {
    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, 'WaultSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'WaultSwapLibrary: 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'1cdc2246d318ab84d8bc7ae2a3d81c235f3db4e113f4c6fdc1e2211a9291be47' // 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,) = IWaultSwapPair(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, 'WaultSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'WaultSwapLibrary: 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, 'WaultSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WaultSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        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, 'WaultSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WaultSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        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, 'WaultSwapLibrary: 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, 'WaultSwapLibrary: 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 WaultSwapRouter is IWaultSwapRouter02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'WaultSwapRouter: 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 (IWaultSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IWaultSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = WaultSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = WaultSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'WaultSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = WaultSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'WaultSwapRouter: 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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        IWaultSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IWaultSwapPair(pair).burn(to);
        (address token0,) = WaultSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'WaultSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'WaultSwapRouter: 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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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,) = WaultSwapLibrary.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 ? WaultSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IWaultSwapPair(WaultSwapLibrary.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 = WaultSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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 = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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,) = WaultSwapLibrary.sortTokens(input, output);
            IWaultSwapPair pair = IWaultSwapPair(WaultSwapLibrary.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 = WaultSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? WaultSwapLibrary.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, WaultSwapLibrary.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,
            'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'WaultSwapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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,
            'WaultSwapRouter: 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, 'WaultSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'WaultSwapRouter: 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 WaultSwapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return WaultSwapLibrary.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"}]

60c060405234801561001057600080fd5b5060405162004840380380620048408339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6146bb620001856000398061019f5280610d245280610d5f5280610e56528061108652806114105280611588528061194f5280611a5b5280611b115280611bdf5280611d375280611dbf5280612004528061207f528061212e52806121fa52806122a1528061231552806128135280612a865280612adc5280612b105280612b845280612d245280612e795280612f01525080610ef65280610fcd528061114c528061118552806112c052806114b0528061156652806116d65280611c845280611df15280611f54528061234752806125a0528061279852806127c152806127f1528061295e5280612aba5280612dc95280612f3352806137f252806138355280613b185280613c9e52806140d65280614184528061420452506146bb6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610b8d578063f305d71914610c0d578063fb3bdb4114610c53576101c8565b8063c45a015514610a50578063d06ca61f14610a65578063ded9382a14610b1a576101c8565b8063af2979eb116100b0578063af2979eb1461091c578063b6f9de951461096f578063baa2abde146109f3576101c8565b80638803dbee1461081f578063ad5c4648146108b5578063ad615dec146108e6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106cf5780637ff36ab51461076557806385f8c259146107e9576101c8565b80634a25d94a146105305780635b0d5984146105c65780635c11d79514610639576101c8565b80631f00ca74116101695780631f00ca74146103675780632195995c1461041c57806338ed17391461049a576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cd7565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610df1565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610317600480360360a08110156102a457600080fd5b813591602081013591810190606081016040820135600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b91935091506001600160a01b038135169060200135610e06565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035357818101518382015260200161033b565b505050509050019250505060405180910390f35b34801561037357600080fd5b506103176004803603604081101561038a57600080fd5b81359190810190604081016020820135600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460208302840111600160201b831117156103de57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611145945050505050565b34801561042857600080fd5b50610220600480360361016081101561044057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561117b565b3480156104a657600080fd5b50610317600480360360a08110156104bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e357600080fd5b8201836020820111156104f557600080fd5b803590602001918460208302840111600160201b8311171561051657600080fd5b91935091506001600160a01b038135169060200135611275565b34801561053c57600080fd5b50610317600480360360a081101561055357600080fd5b813591602081013591810190606081016040820135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460208302840111600160201b831117156105ac57600080fd5b91935091506001600160a01b0381351690602001356113c0565b3480156105d257600080fd5b5061026f60048036036101408110156105ea57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561155e565b34801561064557600080fd5b506101c6600480360360a081101561065c57600080fd5b813591602081013591810190606081016040820135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b91935091506001600160a01b03813516906020013561166c565b3480156106db57600080fd5b506101c6600480360360a08110156106f257600080fd5b813591602081013591810190606081016040820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b91935091506001600160a01b038135169060200135611901565b6103176004803603608081101561077b57600080fd5b81359190810190604081016020820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b038135169060200135611b97565b3480156107f557600080fd5b5061026f6004803603606081101561080c57600080fd5b5080359060208101359060400135611efc565b34801561082b57600080fd5b50610317600480360360a081101561084257600080fd5b813591602081013591810190606081016040820135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460208302840111600160201b8311171561089b57600080fd5b91935091506001600160a01b038135169060200135611f09565b3480156108c157600080fd5b506108ca612002565b604080516001600160a01b039092168252519081900360200190f35b3480156108f257600080fd5b5061026f6004803603606081101561090957600080fd5b5080359060208101359060400135612026565b34801561092857600080fd5b5061026f600480360360c081101561093f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612033565b6101c66004803603608081101561098557600080fd5b81359190810190604081016020820135600160201b8111156109a657600080fd5b8201836020820111156109b857600080fd5b803590602001918460208302840111600160201b831117156109d957600080fd5b91935091506001600160a01b0381351690602001356121b4565b3480156109ff57600080fd5b50610220600480360360e0811015610a1657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612552565b348015610a5c57600080fd5b506108ca612796565b348015610a7157600080fd5b5061031760048036036040811015610a8857600080fd5b81359190810190604081016020820135600160201b811115610aa957600080fd5b820183602082011115610abb57600080fd5b803590602001918460208302840111600160201b83111715610adc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127ba945050505050565b348015610b2657600080fd5b506102206004803603610140811015610b3e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127e7565b348015610b9957600080fd5b50610bef6004803603610100811015610bb157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128fb565b60408051938452602084019290925282820152519081900360600190f35b610bef600480360360c0811015610c2357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a37565b61031760048036036080811015610c6957600080fd5b81359190810190604081016020820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b038135169060200135612cdc565b6000808242811015610d1e576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b610d4d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612552565b9093509150610d5d898685613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050610de585836131da565b50965096945050505050565b6000610dfe8484846132d2565b949350505050565b60608142811015610e4c576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e8657fe5b905060200201356001600160a01b03166001600160a01b031614610ef1576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610f4f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110610f6257fe5b60200260200101511015610fa75760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b61104586866000818110610fb757fe5b905060200201356001600160a01b03163361102b7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ff957fe5b905060200201356001600160a01b03168b8b600181811061101657fe5b905060200201356001600160a01b031661350e565b8560008151811061103857fe5b60200260200101516135e6565b61108482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613743915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110c357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050505061113a848360018551038151811061112d57fe5b60200260200101516131da565b509695505050505050565b60606111727f00000000000000000000000000000000000000000000000000000000000000008484613989565b90505b92915050565b60008060006111ab7f00000000000000000000000000000000000000000000000000000000000000008f8f61350e565b90506000876111ba578c6111be565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050505061125b8f8f8f8f8f8f8f612552565b809450819550505050509b509b9950505050505050505050565b606081428110156112bb576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6113197f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b9150868260018451038151811061132c57fe5b602002602001015110156113715760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b61138186866000818110610fb757fe5b61113a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b60608142811015611406576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061144057fe5b905060200201356001600160a01b03166001600160a01b0316146114ab576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6115097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b9150868260008151811061151957fe5b60200260200101511115610fa75760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b6000806115ac7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061350e565b90506000866115bb578b6115bf565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561163557600080fd5b505af1158015611649573d6000803e3d6000fd5b5050505061165b8d8d8d8d8d8d612033565b9d9c50505050505050505050505050565b80428110156116b0576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b611725858560008181106116c057fe5b905060200201356001600160a01b03163361171f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b905060200201356001600160a01b03168a8a600181811061101657fe5b8a6135e6565b60008585600019810181811061173757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561179c57600080fd5b505afa1580156117b0573d6000803e3d6000fd5b505050506040513d60208110156117c657600080fd5b50516040805160208881028281018201909352888252929350611808929091899189918291850190849080828437600092019190915250889250613ac1915050565b866118ba828888600019810181811061181d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b505afa158015611896573d6000803e3d6000fd5b505050506040513d60208110156118ac57600080fd5b50519063ffffffff613dd316565b10156118f75760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b5050505050505050565b8042811015611945576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197f57fe5b905060200201356001600160a01b03166001600160a01b0316146119ea576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6119fa858560008181106116c057fe5b611a38858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ac1915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611aa257600080fd5b505afa158015611ab6573d6000803e3d6000fd5b505050506040513d6020811015611acc57600080fd5b5051905086811015611b0f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7557600080fd5b505af1158015611b89573d6000803e3d6000fd5b505050506118f784826131da565b60608142811015611bdd576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c1457fe5b905060200201356001600160a01b03166001600160a01b031614611c7f576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611cdd7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110611cf057fe5b60200260200101511015611d355760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d7157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da457600080fd5b505af1158015611db8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e1d7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110611e2a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b505050506040513d6020811015611eab57600080fd5b5051611eb357fe5b611ef282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b5095945050505050565b6000610dfe848484613e2b565b60608142811015611f4f576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b611fad7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91508682600081518110611fbd57fe5b602002602001015111156113715760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dfe848484613f1b565b60008142811015612079576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6120a8887f00000000000000000000000000000000000000000000000000000000000000008989893089612552565b604080516370a0823160e01b8152306004820152905191945061212c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120fb57600080fd5b505afa15801561210f573d6000803e3d6000fd5b505050506040513d602081101561212557600080fd5b5051613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561219257600080fd5b505af11580156121a6573d6000803e3d6000fd5b5050505061113a84836131da565b80428110156121f8576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061222f57fe5b905060200201356001600160a01b03166001600160a01b03161461229a576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123737f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b505050506040513d60208110156123ed57600080fd5b50516123f557fe5b60008686600019810181811061240757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561246c57600080fd5b505afa158015612480573d6000803e3d6000fd5b505050506040513d602081101561249657600080fd5b505160408051602089810282810182019093528982529293506124d89290918a918a918291850190849080828437600092019190915250899250613ac1915050565b876118ba82898960001981018181106124ed57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b6000808242811015612599576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b60006125c67f00000000000000000000000000000000000000000000000000000000000000008c8c61350e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561262157600080fd5b505af1158015612635573d6000803e3d6000fd5b505050506040513d602081101561264b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561269857600080fd5b505af11580156126ac573d6000803e3d6000fd5b505050506040513d60408110156126c257600080fd5b508051602090910151909250905060006126dc8e8e613fc7565b509050806001600160a01b03168e6001600160a01b0316146126ff578183612702565b82825b90975095508a8710156127465760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b898610156127855760405162461bcd60e51b81526004018080602001828103825260268152602001806144df6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111727f000000000000000000000000000000000000000000000000000000000000000084846133c2565b60008060006128377f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050600087612846578c61284a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128c057600080fd5b505af11580156128d4573d6000803e3d6000fd5b505050506128e68e8e8e8e8e8e610cd7565b909f909e509c50505050505050505050505050565b60008060008342811015612944576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6129528c8c8c8c8c8c6140a5565b909450925060006129847f00000000000000000000000000000000000000000000000000000000000000008e8e61350e565b90506129928d3383886135e6565b61299e8c3383876135e6565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129f657600080fd5b505af1158015612a0a573d6000803e3d6000fd5b505050506040513d6020811015612a2057600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a80576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b612aae8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140a5565b90945092506000612b007f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050612b0e8b3383886135e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050506040513d6020811015612c2c57600080fd5b5051612c3457fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c8c57600080fd5b505af1158015612ca0573d6000803e3d6000fd5b505050506040513d6020811015612cb657600080fd5b5051925034841015612cce57612cce338534036131da565b505096509650969350505050565b60608142811015612d22576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d5957fe5b905060200201356001600160a01b03166001600160a01b031614612dc4576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b612e227f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91503482600081518110612e3257fe5b60200260200101511115612e775760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612eb357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f5f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110612f6c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fc357600080fd5b505af1158015612fd7573d6000803e3d6000fd5b505050506040513d6020811015612fed57600080fd5b5051612ff557fe5b61303482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b8160008151811061304157fe5b6020026020010151341115611ef257611ef2338360008151811061306157fe5b602002602001015134036131da565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130ed5780518252601f1990920191602091820191016130ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461314f576040519150601f19603f3d011682016040523d82523d6000602084013e613154565b606091505b5091509150818015613182575080511580613182575080806020019051602081101561317f57600080fd5b50515b6131d3576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132265780518252601f199092019160209182019101613207565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b50509050806132cd5760405162461bcd60e51b81526004018080602001828103825260238152602001806145ec6023913960400191505060405180910390fd5b505050565b60008084116133125760405162461bcd60e51b815260040180806020018281038252602b81526020018061456f602b913960400191505060405180910390fd5b6000831180156133225750600082115b61335d5760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b6000613371856103e663ffffffff61431916565b90506000613385828563ffffffff61431916565b905060006133ab8361339f886103e863ffffffff61431916565b9063ffffffff61438516565b90508082816133b657fe5b04979650505050505050565b606060028251101561341b576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561343357600080fd5b5060405190808252806020026020018201604052801561345d578160200160208202803683370190505b509050828160008151811061346e57fe5b60200260200101818152505060005b6001835103811015613506576000806134c08786858151811061349c57fe5b60200260200101518786600101815181106134b357fe5b60200260200101516143dd565b915091506134e28484815181106134d357fe5b602002602001015183836132d2565b8484600101815181106134f157fe5b6020908102919091010152505060010161347d565b509392505050565b600080600061351d8585613fc7565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f1cdc2246d318ab84d8bc7ae2a3d81c235f3db4e113f4c6fdc1e2211a9291be47609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061366b5780518252601f19909201916020918201910161364c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b509150915081801561370057508051158061370057508080602001905160208110156136fd57600080fd5b50515b61373b5760405162461bcd60e51b815260040180806020018281038252602481526020018061463a6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139835760008084838151811061376157fe5b602002602001015185846001018151811061377857fe5b60200260200101519150915060006137908383613fc7565b50905060008785600101815181106137a457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137d2578260006137d6565b6000835b91509150600060028a510388106137ed578861382e565b61382e7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061382157fe5b602002602001015161350e565b905061385b7f0000000000000000000000000000000000000000000000000000000000000000888861350e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613898576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139095781810151838201526020016138f1565b50505050905090810190601f1680156139365780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561395857600080fd5b505af115801561396c573d6000803e3d6000fd5b505060019099019850613746975050505050505050565b50505050565b60606002825110156139e2576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156139fa57600080fd5b50604051908082528060200260200182016040528015613a24578160200160208202803683370190505b5090508281600183510381518110613a3857fe5b60209081029190910101528151600019015b801561350657600080613a7a87866001860381518110613a6657fe5b60200260200101518786815181106134b357fe5b91509150613a9c848481518110613a8d57fe5b60200260200101518383613e2b565b846001850381518110613aab57fe5b6020908102919091010152505060001901613a4a565b60005b60018351038110156132cd57600080848381518110613adf57fe5b6020026020010151858460010181518110613af657fe5b6020026020010151915091506000613b0e8383613fc7565b5090506000613b3e7f0000000000000000000000000000000000000000000000000000000000000000858561350e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b7f57600080fd5b505afa158015613b93573d6000803e3d6000fd5b505050506040513d6060811015613ba957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613be6578284613be9565b83835b91509150613c47828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b9550613c548683836132d2565b945050505050600080856001600160a01b0316886001600160a01b031614613c7e57826000613c82565b6000835b91509150600060028c51038a10613c99578a613ccd565b613ccd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061382157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d57578181015183820152602001613d3f565b50505050905090810190601f168015613d845780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613da657600080fd5b505af1158015613dba573d6000803e3d6000fd5b50506001909b019a50613ac49950505050505050505050565b80820382811115611175576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e6b5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145c0602c913960400191505060405180910390fd5b600083118015613e7b5750600082115b613eb65760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b6000613eda6103e8613ece868863ffffffff61431916565b9063ffffffff61431916565b90506000613ef46103e6613ece868963ffffffff613dd316565b9050613f116001828481613f0457fe5b049063ffffffff61438516565b9695505050505050565b6000808411613f5b5760405162461bcd60e51b81526004018080602001828103825260258152602001806145256025913960400191505060405180910390fd5b600083118015613f6b5750600082115b613fa65760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b82613fb7858463ffffffff61431916565b81613fbe57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561401b5760405162461bcd60e51b815260040180806020018281038252602581526020018061454a6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061403b57828461403e565b83835b90925090506001600160a01b03821661409e576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561411f57600080fd5b505afa158015614133573d6000803e3d6000fd5b505050506040513d602081101561414957600080fd5b50516001600160a01b031614156141fc57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141cf57600080fd5b505af11580156141e3573d6000803e3d6000fd5b505050506040513d60208110156141f957600080fd5b50505b60008061422a7f00000000000000000000000000000000000000000000000000000000000000008b8b6143dd565b9150915081600014801561423c575080155b1561424c5787935086925061430c565b6000614259898484613f1b565b90508781116142ac57858110156142a15760405162461bcd60e51b81526004018080602001828103825260268152602001806144df6026913960400191505060405180910390fd5b88945092508261430a565b60006142b9898486613f1b565b9050898111156142c557fe5b878110156143045760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143345750508082028282828161433157fe5b04145b611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143ec8585613fc7565b5090506143fa86868661350e565b5060008061440988888861350e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561444157600080fd5b505afa158015614455573d6000803e3d6000fd5b505050506040513d606081101561446b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146144a55780826144a8565b81815b9099909850965050505050505056fe5761756c7453776170526f757465723a204558434553534956455f494e5055545f414d4f554e545761756c7453776170526f757465723a20494e53554646494349454e545f425f414d4f554e545761756c7453776170526f757465723a204558504952454400000000000000005761756c74537761704c6962726172793a20494e53554646494349454e545f414d4f554e545761756c74537761704c6962726172793a204944454e544943414c5f4144445245535345535761756c74537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545761756c7453776170526f757465723a20494e53554646494349454e545f415f414d4f554e545761756c74537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445761756c7453776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445761756c74537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459a26469706673582212200eebd901eaf7ebaf4a9e5cba30a9be54cad5369431946a2a3ed5b268ce707d1e64736f6c63430006060033000000000000000000000000a98ea6356a316b44bf710d5f9b6b4ea0081409ef0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

000000000000000000000000a98ea6356a316b44bf710d5f9b6b4ea0081409ef0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

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


Deployed ByteCode Sourcemap

15515:18547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15995:10;-1:-1:-1;;;;;16009:4:0;15995:18;;15988:26;;;;15515:18547;;12:1:-1;9;2:12;20145:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20145:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20145:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33006:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33006:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33006:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27314:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27314:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27314:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27314:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27314:850: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;27314:850:0;;-1:-1:-1;27314:850:0;-1:-1:-1;;;;;;27314:850: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;27314:850:0;;;;;;;;;;;;;;;;;33806:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33806:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33806:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33806:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33806:253: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;33806:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33806:253:0;;-1:-1:-1;33806:253:0;;-1:-1:-1;;;;;33806:253:0:i;20824:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20824:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20824:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24531:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24531:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24531:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24531:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24531:628: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;24531:628:0;;-1:-1:-1;24531:628:0;-1:-1:-1;;;;;;24531:628:0;;;;;;;;:::i;26480:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26480:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26480:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26480:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26480:828: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;26480:828:0;;-1:-1:-1;26480:828:0;-1:-1:-1;;;;;;26480:828:0;;;;;;;;:::i;22961:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22961:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22961:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30347:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30347:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30347:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30347:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30347:714: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;30347:714:0;;-1:-1:-1;30347:714:0;-1:-1:-1;;;;;;30347:714:0;;;;;;;;:::i;31923:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31923:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31923:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31923:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31923:843: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;31923:843:0;;-1:-1:-1;31923:843:0;-1:-1:-1;;;;;;31923:843:0;;;;;;;;:::i;25777:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25777:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25777:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25777:697: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;25777:697:0;;-1:-1:-1;25777:697:0;-1:-1:-1;;;;;;25777:697:0;;;;;;;;:::i;33276:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33276:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33276:261:0;;;;;;;;;;;;:::i;25165:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25165:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25165:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25165:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25165:606: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;25165:606:0;;-1:-1:-1;25165:606:0;-1:-1:-1;;;;;;25165:606:0;;;;;;;;:::i;15649:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15649:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15649:38:0;;;;;;;;;;;;;;32810:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32810:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32810:188:0;;;;;;;;;;;;:::i;22255:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22255:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22255:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31067:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31067:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31067:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31067:850: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;31067:850:0;;-1:-1:-1;31067:850:0;-1:-1:-1;;;;;;31067:850:0;;;;;;;;:::i;19274:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19274:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19274:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15601:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15601:41:0;;;:::i;33545:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33545:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33545:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33545:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33545:253: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;33545:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33545:253:0;;-1:-1:-1;33545:253:0;;-1:-1:-1;;;;;33545:253:0:i;21507:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21507:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21507:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17513:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17513:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17513:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18257:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18257:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28170:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28170:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28170:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28170:810: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;28170:810:0;;-1:-1:-1;28170:810:0;-1:-1:-1;;;;;;28170:810:0;;;;;;;;:::i;20145:673::-;20382:16;20400:14;20363:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;20454:196:::1;20484:5;20504:4;20523:9;20547:14;20576:12;20611:4;20631:8;20454:15;:196::i;:::-;20427:223:::0;;-1:-1:-1;20427:223:0;-1:-1:-1;20661:51:0::1;20689:5:::0;20696:2;20427:223;20661:27:::1;:51::i;:::-;20729:4;-1:-1:-1::0;;;;;20723:20:0::1;;20744:9;20723:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20723:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20723:31:0;;;;20765:45;20796:2;20800:9;20765:30;:45::i;:::-;20145:673:::0;;;;;;;;;;:::o;33006:262::-;33159:14;33198:62;33228:8;33238:9;33249:10;33198:29;:62::i;:::-;33191:69;33006:262;-1:-1:-1;;;;33006:262:0:o;27314:850::-;27528:21;27500:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27600:4:0::1;27575:29;:4:::0;;-1:-1:-1;;27580:15:0;;27575:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27575:21:0::1;-1:-1:-1::0;;;;;27575:29:0::1;;27567:71;;;::::0;;-1:-1:-1;;;27567:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27659:55;27690:7;27699:8;27709:4;;27659:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27659:30:0::1;::::0;-1:-1:-1;;;27659:55:0:i:1;:::-;27649:65;;27764:12;27733:7;27758:1;27741:7;:14;:18;27733:27;;;;;;;;;;;;;;:43;;27725:99;;;;-1:-1:-1::0;;;27725:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27835:141;27881:4;;27886:1;27881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27881:7:0::1;27890:10;27902:51;27927:7;27936:4;;27941:1;27936:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27936:7:0::1;27945:4;;27950:1;27945:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27945:7:0::1;27902:24;:51::i;:::-;27955:7;27963:1;27955:10;;;;;;;;;;;;;;27835:31;:141::i;:::-;27987:35;27993:7;28002:4;;27987:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28016:4:0::1;::::0;-1:-1:-1;27987:5:0::1;::::0;-1:-1:-1;;27987:35:0:i:1;:::-;28039:4;-1:-1:-1::0;;;;;28033:20:0::1;;28054:7;28079:1;28062:7;:14;:18;28054:27;;;;;;;;;;;;;;28033:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28033:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28033:49:0;;;;28093:63;28124:2;28128:7;28153:1;28136:7;:14;:18;28128:27;;;;;;;;;;;;;;28093:30;:63::i;:::-;27314:850:::0;;;;;;;;;:::o;33806:253::-;33950:21;33996:55;34026:7;34035:9;34046:4;33996:29;:55::i;:::-;33989:62;;33806:253;;;;;:::o;20824:677::-;21130:12;21144;21169;21184:49;21209:7;21218:6;21226;21184:24;:49::i;:::-;21169:64;;21244:10;21257;:33;;21281:9;21257:33;;;-1:-1:-1;;21257:33:0;21301:80;;;-1:-1:-1;;;21301:80:0;;21329:10;21301:80;;;;21349:4;21301:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21244:46;;-1:-1:-1;;;;;;21301:27:0;;;;;:80;;;;;-1:-1:-1;;21301:80:0;;;;;;;;-1:-1:-1;21301:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21301:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21301:80:0;;;;21413;21429:6;21437;21445:9;21456:10;21468;21480:2;21484:8;21413:15;:80::i;:::-;21392:101;;;;;;;;20824:677;;;;;;;;;;;;;;;;:::o;24531:628::-;24755:21;24736:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;24799:55:::1;24830:7;24839:8;24849:4;;24799:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24799:30:0::1;::::0;-1:-1:-1;;;24799:55:0:i:1;:::-;24789:65;;24904:12;24873:7;24898:1;24881:7;:14;:18;24873:27;;;;;;;;;;;;;;:43;;24865:99;;;;-1:-1:-1::0;;;24865:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24975:141;25021:4;;25026:1;25021:7;;;;;;24975:141;25127:24;25133:7;25142:4;;25127:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25148:2:0;;-1:-1:-1;25127:5:0::1;::::0;-1:-1:-1;;25127:24:0:i:1;26480:828::-:0;26694:21;26666:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26766:4:0::1;26741:29;:4:::0;;-1:-1:-1;;26746:15:0;;26741:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26741:21:0::1;-1:-1:-1::0;;;;;26741:29:0::1;;26733:71;;;::::0;;-1:-1:-1;;;26733:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26825:55;26855:7;26864:9;26875:4;;26825:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26825:29:0::1;::::0;-1:-1:-1;;;26825:55:0:i:1;:::-;26815:65;;26913:11;26899:7;26907:1;26899:10;;;;;;;;;;;;;;:25;;26891:77;;;;-1:-1:-1::0;;;26891:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22961:718:::0;23279:14;23306:12;23321:46;23346:7;23355:5;23362:4;23321:24;:46::i;:::-;23306:61;;23378:10;23391;:33;;23415:9;23391:33;;;-1:-1:-1;;23391:33:0;23435:80;;;-1:-1:-1;;;23435:80:0;;23463:10;23435:80;;;;23483:4;23435:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23378:46;;-1:-1:-1;;;;;;23435:27:0;;;;;:80;;;;;-1:-1:-1;;23435:80:0;;;;;;;;-1:-1:-1;23435:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;23435:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23435:80:0;;;;23538:133;23600:5;23607:9;23618:14;23634:12;23648:2;23652:8;23538:47;:133::i;:::-;23526:145;22961:718;-1:-1:-1;;;;;;;;;;;;;22961:718:0:o;30347:714::-;30581:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;30602:139:::1;30648:4;;30653:1;30648:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30648:7:0::1;30657:10;30669:51;30694:7;30703:4;;30708:1;30703:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30703:7:0::1;30712:4;;30717:1;30712:7;;;;;;30669:51;30722:8;30602:31;:139::i;:::-;30752:18;30780:4:::0;;-1:-1:-1;;30785:15:0;;30780:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30780:21:0::1;-1:-1:-1::0;;;;;30773:39:0::1;;30813:2;30773:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30773:43:0::1;-1:-1:-1::0;;;;;30773:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30773:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30773:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30773:43:0;30827:44:::1;::::0;;30773:43:::1;30827:44:::0;;::::1;::::0;;;;;;;;;;;30773:43;;-1:-1:-1;30827:44:0::1;::::0;;;30862:4;;;;;;30827:44;::::1;::::0;30862:4;;30827:44;30862:4;30827:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30868:2:0;;-1:-1:-1;30827:34:0::1;::::0;-1:-1:-1;;30827:44:0:i:1;:::-;30970:12:::0;30904:62:::1;30952:13:::0;30911:4;;-1:-1:-1;;30916:15:0;;30911:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30911:21:0::1;-1:-1:-1::0;;;;;30904:39:0::1;;30944:2;30904:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30904:43:0::1;-1:-1:-1::0;;;;;30904:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30904:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30904:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30904:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30882:171;;;;-1:-1:-1::0;;;30882:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15813:1;30347:714:::0;;;;;;;:::o;31923:843::-;32190:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32249:4:0::1;32224:29;:4:::0;;-1:-1:-1;;32229:15:0;;32224:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32224:21:0::1;-1:-1:-1::0;;;;;32224:29:0::1;;32216:71;;;::::0;;-1:-1:-1;;;32216:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32298:139;32344:4;;32349:1;32344:7;;;;;;32298:139;32448:55;32483:4;;32448:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32497:4:0::1;::::0;-1:-1:-1;32448:34:0::1;::::0;-1:-1:-1;;32448:55:0:i:1;:::-;32531:37;::::0;;-1:-1:-1;;;32531:37:0;;32562:4:::1;32531:37;::::0;::::1;::::0;;;32514:14:::1;::::0;-1:-1:-1;;;;;32538:4:0::1;32531:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32531:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32531:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32531:37:0;;-1:-1:-1;32587:25:0;;::::1;;32579:81;;;;-1:-1:-1::0;;;32579:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32677:4;-1:-1:-1::0;;;;;32671:20:0::1;;32692:9;32671:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32671:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32671:31:0;;;;32713:45;32744:2;32748:9;32713:30;:45::i;25777:697::-:0;25993:21;25965:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;26051:4:::1;-1:-1:-1::0;;;;;26040:15:0::1;:4;;26045:1;26040:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26040:7:0::1;-1:-1:-1::0;;;;;26040:15:0::1;;26032:57;;;::::0;;-1:-1:-1;;;26032:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26110:56;26141:7;26150:9;26161:4;;26110:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26110:30:0::1;::::0;-1:-1:-1;;;26110:56:0:i:1;:::-;26100:66;;26216:12;26185:7;26210:1;26193:7;:14;:18;26185:27;;;;;;;;;;;;;;:43;;26177:99;;;;-1:-1:-1::0;;;26177:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26293:4;-1:-1:-1::0;;;;;26287:19:0::1;;26314:7;26322:1;26314:10;;;;;;;;;;;;;;26287:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26287:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26287:40:0;;;;;26351:4;-1:-1:-1::0;;;;;26345:20:0::1;;26366:51;26391:7;26400:4;;26405:1;26400:7;;;;;;26366:51;26419:7;26427:1;26419:10;;;;;;;;;;;;;;26345:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;26345:85:0::1;-1:-1:-1::0;;;;;26345:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26345:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26345:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26345:85:0;26338:93:::1;;;;26442:24;26448:7;26457:4;;26442:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26463:2:0;;-1:-1:-1;26442:5:0::1;::::0;-1:-1:-1;;26442:24:0:i:1;:::-;25777:697:::0;;;;;;;;:::o;33276:261::-;33429:13;33467:62;33496:9;33507;33518:10;33467:28;:62::i;25165:606::-;25389:21;25370:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;25433:55:::1;25463:7;25472:9;25483:4;;25433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25433:29:0::1;::::0;-1:-1:-1;;;25433:55:0:i:1;:::-;25423:65;;25521:11;25507:7;25515:1;25507:10;;;;;;;;;;;;;;:25;;25499:77;;;;-1:-1:-1::0;;;25499:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15649:38:::0;;;:::o;32810:188::-;32907:12;32939:51;32962:7;32971:8;32981;32939:22;:51::i;22255:700::-;22521:14;22502:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;22564:196:::1;22594:5;22614:4;22633:9;22657:14;22686:12;22721:4;22741:8;22564:15;:196::i;:::-;22810:38;::::0;;-1:-1:-1;;;22810:38:0;;22842:4:::1;22810:38;::::0;::::1;::::0;;;22548:212;;-1:-1:-1;22771:78:0::1;::::0;-1:-1:-1;22799:5:0;;22806:2;;-1:-1:-1;;;;;22810: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;22810:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22810:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22810:38:0;22771:27:::1;:78::i;:::-;22866:4;-1:-1:-1::0;;;;;22860:20:0::1;;22881:9;22860:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22860:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22860:31:0;;;;22902:45;22933:2;22937:9;22902:30;:45::i;31067:850::-:0;31327:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;31372:4:::1;-1:-1:-1::0;;;;;31361:15:0::1;:4;;31366:1;31361:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31361:7:0::1;-1:-1:-1::0;;;;;31361:15:0::1;;31353:57;;;::::0;;-1:-1:-1;;;31353:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31421:13;31437:9;31421:25;;31463:4;-1:-1:-1::0;;;;;31457:19:0::1;;31484:8;31457:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31457:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31457:38:0;;;;;31519:4;-1:-1:-1::0;;;;;31513:20:0::1;;31534:51;31559:7;31568:4;;31573:1;31568:7;;;;;;31534:51;31587:8;31513:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;31513:83:0::1;-1:-1:-1::0;;;;;31513:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31513:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31513:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31513:83:0;31506:91:::1;;;;31608:18;31636:4:::0;;-1:-1:-1;;31641:15:0;;31636:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31636:21:0::1;-1:-1:-1::0;;;;;31629:39:0::1;;31669:2;31629:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31629:43:0::1;-1:-1:-1::0;;;;;31629:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31629:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31629:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31629:43:0;31683:44:::1;::::0;;31629:43:::1;31683:44:::0;;::::1;::::0;;;;;;;;;;;31629:43;;-1:-1:-1;31683:44:0::1;::::0;;;31718:4;;;;;;31683:44;::::1;::::0;31718:4;;31683:44;31718:4;31683:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31724:2:0;;-1:-1:-1;31683:34:0::1;::::0;-1:-1:-1;;31683:44:0:i:1;:::-;31826:12:::0;31760:62:::1;31808:13:::0;31767:4;;-1:-1:-1;;31772:15:0;;31767:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31767:21:0::1;-1:-1:-1::0;;;;;31760:39:0::1;;31800:2;31760:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31760:43:0::1;-1:-1:-1::0;;;;;31760:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19274:865:0::0;19528:12;19542;19509:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;19567:12:::1;19582:49;19607:7;19616:6;19624;19582:24;:49::i;:::-;19642:62;::::0;;-1:-1:-1;;;19642:62:0;;19676:10:::1;19642:62;::::0;::::1;::::0;-1:-1:-1;;;;;19642:33:0;::::1;:62:::0;;;;;;;;;;;;;;19567:64;;-1:-1:-1;19642:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19642:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19642:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19642:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19772:29:0::1;::::0;;-1:-1:-1;;;19772:29:0;;-1:-1:-1;;;;;19772:29:0;;::::1;;::::0;::::1;::::0;;;19742:12:::1;::::0;;;19772:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;19742:12;19772:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19772:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19772:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19772:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19772:29:0;-1:-1:-1;19813:14:0::1;19832:43;19860:6:::0;19868;19832:27:::1;:43::i;:::-;19812:63;;;19917:6;-1:-1:-1::0;;;;;19907:16:0::1;:6;-1:-1:-1::0;;;;;19907:16:0::1;;:58;;19948:7;19957;19907:58;;;19927:7;19936;19907:58;19886:79:::0;;-1:-1:-1;19886:79:0;-1:-1:-1;19984:21:0;;::::1;;19976:72;;;;-1:-1:-1::0;;;19976:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20078:10;20067:7;:21;;20059:72;;;;-1:-1:-1::0;;;20059:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15813:1;;;;19274:865:::0;;;;;;;;;;;:::o;15601:41::-;;;:::o;33545:253::-;33689:21;33735:55;33766:7;33775:8;33785:4;33735:30;:55::i;21507:669::-;21796:16;21814:14;21841:12;21856:46;21881:7;21890:5;21897:4;21856:24;:46::i;:::-;21841:61;;21913:10;21926;:33;;21950:9;21926:33;;;-1:-1:-1;;21926:33:0;21970:80;;;-1:-1:-1;;;21970:80:0;;21998:10;21970:80;;;;22018:4;21970:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21913:46;;-1:-1:-1;;;;;;21970:27:0;;;;;:80;;;;;-1:-1:-1;;21970:80:0;;;;;;;;-1:-1:-1;21970:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21970:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21970:80:0;;;;22088;22107:5;22114:9;22125:14;22141:12;22155:2;22159:8;22088:18;:80::i;:::-;22061:107;;;;-1:-1:-1;21507:669:0;-1:-1:-1;;;;;;;;;;;;;21507:669:0:o;17513:738::-;17801:12;17815;17829:14;17782:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;17877:85:::1;17891:6;17899;17907:14;17923;17939:10;17951;17877:13;:85::i;:::-;17856:106:::0;;-1:-1:-1;17856:106:0;-1:-1:-1;17973:12:0::1;17988:49;18013:7;18022:6:::0;18030;17988:24:::1;:49::i;:::-;17973:64;;18048:66;18080:6;18088:10;18100:4;18106:7;18048:31;:66::i;:::-;18125;18157:6;18165:10;18177:4;18183:7;18125:31;:66::i;:::-;18229:4;-1:-1:-1::0;;;;;18214:25:0::1;;18240:2;18214:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;18214:29:0::1;-1:-1:-1::0;;;;;18214:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18214:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18214:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18214:29:0;17513:738;;;;-1:-1:-1;18214:29:0;;-1:-1:-1;17513:738:0;;-1:-1:-1;;;;;;;;;17513:738:0:o;18257:974::-;18510:16;18528:14;18544;18491:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;18598:176:::1;18626:5;18646:4;18665:18;18698:9;18722:14;18751:12;18598:13;:176::i;:::-;18571:203:::0;;-1:-1:-1;18571:203:0;-1:-1:-1;18785:12:0::1;18800:46;18825:7;18834:5:::0;18841:4:::1;18800:24;:46::i;:::-;18785:61;;18857:69;18889:5;18896:10;18908:4;18914:11;18857:31;:69::i;:::-;18943:4;-1:-1:-1::0;;;;;18937:19:0::1;;18964:9;18937:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18937:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18937:39:0;;;;;19000:4;-1:-1:-1::0;;;;;18994:20:0::1;;19015:4;19021:9;18994:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18994:37:0::1;-1:-1:-1::0;;;;;18994:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18994:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18994:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18994:37:0;18987:45:::1;;;;19070:4;-1:-1:-1::0;;;;;19055:25:0::1;;19081:2;19055:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19055:29:0::1;-1:-1:-1::0;;;;;19055:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19055:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19055:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19055:29:0;;-1:-1:-1;19135:9:0::1;:21:::0;-1:-1:-1;19131:92:0::1;;;19158:65;19189:10;19213:9;19201;:21;19158:30;:65::i;:::-;15813:1;18257:974:::0;;;;;;;;;;;:::o;28170:810::-;28383:21;28355:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;28441:4:::1;-1:-1:-1::0;;;;;28430:15:0::1;:4;;28435:1;28430:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28430:7:0::1;-1:-1:-1::0;;;;;28430:15:0::1;;28422:57;;;::::0;;-1:-1:-1;;;28422:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28500:55;28530:7;28539:9;28550:4;;28500:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28500:29:0::1;::::0;-1:-1:-1;;;28500:55:0:i:1;:::-;28490:65;;28588:9;28574:7;28582:1;28574:10;;;;;;;;;;;;;;:23;;28566:75;;;;-1:-1:-1::0;;;28566:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28658:4;-1:-1:-1::0;;;;;28652:19:0::1;;28679:7;28687:1;28679:10;;;;;;;;;;;;;;28652:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28652:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28652:40:0;;;;;28716:4;-1:-1:-1::0;;;;;28710:20:0::1;;28731:51;28756:7;28765:4;;28770:1;28765:7;;;;;;28731:51;28784:7;28792:1;28784:10;;;;;;;;;;;;;;28710:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28710:85:0::1;-1:-1:-1::0;;;;;28710:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28710:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28710:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28710:85:0;28703:93:::1;;;;28807:24;28813:7;28822:4;;28807:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28828:2:0;;-1:-1:-1;28807:5:0::1;::::0;-1:-1:-1;;28807:24:0:i:1;:::-;28894:7;28902:1;28894:10;;;;;;;;;;;;;;28882:9;:22;28878:94;;;28906:66;28937:10;28961:7;28969:1;28961:10;;;;;;;;;;;;;;28949:9;:22;28906:30;:66::i;1225:361::-:0;1420:45;;;-1:-1:-1;;;;;1420:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1420:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1409:57:0;;;;1374:12;;1388:17;;1409:10;;;;1420:45;1409:57;;;25:18:-1;1409: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;;;1409: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;;1373:93:0;;;;1485:7;:57;;;;-1:-1:-1;1497:11:0;;:16;;:44;;;1528:4;1517:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1517:24:0;1497:44;1477:101;;;;;-1:-1:-1;;;1477:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:361;;;;;:::o;2004:195::-;2112:12;;;2074;2112;;;;;;;;;-1:-1:-1;;;;;2091:7:0;;;2105:5;;2091: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;;;2091: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;;2073:52:0;;;2144:7;2136:55;;;;-1:-1:-1;;;2136:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:195;;;:::o;12201:517::-;12294:14;12340:1;12329:8;:12;12321:68;;;;-1:-1:-1;;;12321:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:1;12408:9;:13;:31;;;;;12438:1;12425:10;:14;12408:31;12400:84;;;;-1:-1:-1;;;12400:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12495:20;12518:17;:8;12531:3;12518:17;:12;:17;:::i;:::-;12495:40;-1:-1:-1;12546:14:0;12563:31;12495:40;12583:10;12563:31;:19;:31;:::i;:::-;12546:48;-1:-1:-1;12605:16:0;12624:40;12648:15;12624:19;:9;12638:4;12624:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12605:59;;12699:11;12687:9;:23;;;;;;;12201:517;-1:-1:-1;;;;;;;12201:517:0:o;13393:511::-;13494:21;13551:1;13536:4;:11;:16;;13528:59;;;;;-1:-1:-1;;;13528:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13619:4;:11;13608:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13608:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13608:23:0;;13598:33;;13655:8;13642:7;13650:1;13642:10;;;;;;;;;;;;;:21;;;;;13679:6;13674:223;13705:1;13691:4;:11;:15;13687:1;:19;13674:223;;;13729:14;13745:15;13764:42;13776:7;13785:4;13790:1;13785:7;;;;;;;;;;;;;;13794:4;13799:1;13803;13799:5;13794:11;;;;;;;;;;;;;;13764;:42::i;:::-;13728:78;;;;13838:47;13851:7;13859:1;13851:10;;;;;;;;;;;;;;13863:9;13874:10;13838:12;:47::i;:::-;13821:7;13829:1;13833;13829:5;13821:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13708:3:0;;13674:223;;;;13393:511;;;;;:::o;10675:478::-;10764:12;10790:14;10806;10824:26;10835:6;10843;10824:10;:26::i;:::-;10988:32;;;-1:-1:-1;;10988:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10988:32:0;;;;;10978:43;;;;;;10891:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10891:251:0;;;;;;;10881:262;;;;;;;;;10675:478;-1:-1:-1;;;;;10675:478:0:o;1594:402::-;1819:51;;;-1:-1:-1;;;;;1819:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1819:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1808:63:0;;;;1773:12;;1787:17;;1808:10;;;;1819:51;1808:63;;;25:18:-1;1808: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;;;1808: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;;1772:99:0;;;;1890:7;:57;;;;-1:-1:-1;1902:11:0;;:16;;:44;;;1933:4;1922:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1922:24:0;1902:44;1882:106;;;;-1:-1:-1;;;1882:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1594:402;;;;;;:::o;23790:735::-;23897:6;23892:626;23923:1;23909:4;:11;:15;23905:1;:19;23892:626;;;23947:13;23962:14;23981:4;23986:1;23981:7;;;;;;;;;;;;;;23990:4;23995:1;23999;23995:5;23990:11;;;;;;;;;;;;;;23946:56;;;;24018:14;24037:42;24065:5;24072:6;24037:27;:42::i;:::-;24017:62;;;24094:14;24111:7;24119:1;24123;24119:5;24111:14;;;;;;;;;;;;;;24094:31;;24141:15;24158;24186:6;-1:-1:-1;;;;;24177:15:0;:5;-1:-1:-1;;;;;24177:15:0;;:61;;24219:9;24235:1;24177:61;;;24201:1;24205:9;24177:61;24140:98;;;;24253:10;24284:1;24270:4;:11;:15;24266:1;:19;:82;;24345:3;24266:82;;;24288:54;24313:7;24322:6;24330:4;24335:1;24339;24335:5;24330:11;;;;;;;;;;;;;;24288:24;:54::i;:::-;24253:95;;24378:48;24403:7;24412:5;24419:6;24378:24;:48::i;:::-;-1:-1:-1;;;;;24363:69:0;;24451:10;24463;24475:2;24489:1;24479:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24479:12:0;87:42:-1;143:17;;-1:-1;24479:12:0;;24363:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24363:143:0;-1:-1:-1;;;;;24363:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24363:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24363:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23926:3:0;;;;;-1:-1:-1;23892:626:0;;-1:-1:-1;;;;;;;;23892:626:0;;;23790:735;;;:::o;13985:532::-;14086:21;14143:1;14128:4;:11;:16;;14120:59;;;;;-1:-1:-1;;;14120:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14211:4;:11;14200:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14200:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14200:23:0;;14190:33;;14264:9;14234:7;14259:1;14242:7;:14;:18;14234:27;;;;;;;;;;;;;;;;;:39;14298:11;;-1:-1:-1;;14298:15:0;14284:226;14315:5;;14284:226;;14343:14;14359:15;14378:42;14390:7;14399:4;14408:1;14404;:5;14399:11;;;;;;;;;;;;;;14412:4;14417:1;14412:7;;;;;;;14378:42;14342:78;;;;14452:46;14464:7;14472:1;14464:10;;;;;;;;;;;;;;14476:9;14487:10;14452:11;:46::i;:::-;14435:7;14447:1;14443;:5;14435:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14322:3:0;14284:226;;29127:1214;29240:6;29235:1099;29266:1;29252:4;:11;:15;29248:1;:19;29235:1099;;;29290:13;29305:14;29324:4;29329:1;29324:7;;;;;;;;;;;;;;29333:4;29338:1;29342;29338:5;29333:11;;;;;;;;;;;;;;29289:56;;;;29361:14;29380:42;29408:5;29415:6;29380:27;:42::i;:::-;29360:62;;;29437:19;29474:48;29499:7;29508:5;29515:6;29474:24;:48::i;:::-;29437:86;;29538:16;29569:17;29657:13;29672;29690:4;-1:-1:-1;;;;;29690:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29690:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29690:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29690:18:0;;;;;;;29656:52;;;;;-1:-1:-1;29656:52:0;;-1:-1:-1;29724:17:0;;-1:-1:-1;;;;;29765:15:0;;;;;;;:61;;29807:8;29817;29765:61;;;29784:8;29794;29765:61;29723:103;;;;29855:56;29898:12;29862:5;-1:-1:-1;;;;;29855:23:0;;29887:4;29855:38;;;;;;;;;;;;;-1:-1:-1;;;;;29855:38:0;-1:-1:-1;;;;;29855:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29855:56:0;29841:70;;29941:71;29971:11;29984:12;29998:13;29941:29;:71::i;:::-;29926:86;;29235:1099;;;;30043:15;30060;30088:6;-1:-1:-1;;;;;30079:15:0;:5;-1:-1:-1;;;;;30079:15:0;;:67;;30124:12;30143:1;30079:67;;;30103:1;30107:12;30079:67;30042:104;;;;30161:10;30192:1;30178:4;:11;:15;30174:1;:19;:82;;30253:3;30174:82;;;30196:54;30221:7;30230:6;30238:4;30243:1;30247;30243:5;30238:11;;;;;;;30196:54;30309:12;;;30319:1;30309:12;;;;;;;;;;-1:-1:-1;;;30271:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30271:51:0;;;;;;;;;;;;;;;;;;;;;;30161:95;;-1:-1:-1;30271:9:0;;;;;;30281:10;;30293;;30161:95;;30309:12;;30271:51;;;;;;;;30309:12;;30271:51;;;;30309: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;30271:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30271:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29269:3:0;;;;;-1:-1:-1;29235:1099:0;;-1:-1:-1;;;;;;;;;;29235:1099:0;9783:129;9867:5;;;9862:16;;;;9854:50;;;;;-1:-1:-1;;;9854:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12839:472;12932:13;12978:1;12966:9;:13;12958:70;;;;-1:-1:-1;;;12958:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13059:1;13047:9;:13;:31;;;;;13077:1;13064:10;:14;13047:31;13039:84;;;;-1:-1:-1;;;13039:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13134:14;13151:34;13180:4;13151:24;:9;13165;13151:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13134:51;-1:-1:-1;13196:16:0;13215:34;13245:3;13215:25;:10;13230:9;13215:25;:14;:25;:::i;:34::-;13196:53;;13271:32;13301:1;13284:11;13272:9;:23;;;;;;;13271:32;:29;:32;:::i;:::-;13260:43;12839:472;-1:-1:-1;;;;;;12839:472:0:o;11758:321::-;11840:12;11883:1;11873:7;:11;11865:61;;;;-1:-1:-1;;;11865:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11956:1;11945:8;:12;:28;;;;;11972:1;11961:8;:12;11945:28;11937:81;;;;-1:-1:-1;;;11937:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12063:8;12039:21;:7;12051:8;12039:21;:11;:21;:::i;:::-;:32;;;;;;;11758:321;-1:-1:-1;;;;11758:321:0:o;10234:349::-;10309:14;10325;10370:6;-1:-1:-1;;;;;10360:16:0;:6;-1:-1:-1;;;;;10360:16:0;;;10352:66;;;;-1:-1:-1;;;10352:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10457:6;-1:-1:-1;;;;;10448:15:0;:6;-1:-1:-1;;;;;10448:15:0;;:53;;10486:6;10494;10448:53;;;10467:6;10475;10448:53;10429:72;;-1:-1:-1;10429:72:0;-1:-1:-1;;;;;;10520:20:0;;10512:63;;;;;-1:-1:-1;;;10512:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10234:349;;;;;:::o;16117:1390::-;16430:50;;;-1:-1:-1;;;16430:50:0;;-1:-1:-1;;;;;16430:50:0;;;;;;;;;;;;;;;;16335:12;;;;;;16448:7;16430:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;16430:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16430:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16430:50:0;-1:-1:-1;;;;;16430:64:0;;16426:150;;;16511:53;;;-1:-1:-1;;;16511:53:0;;-1:-1:-1;;;;;16511:53:0;;;;;;;;;;;;;;;;16529:7;16511:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;16511:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;16511:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16511:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16426:150:0;16587:13;16602;16619:53;16648:7;16657:6;16665;16619:28;:53::i;:::-;16586:86;;;;16687:8;16699:1;16687:13;:30;;;;-1:-1:-1;16704:13:0;;16687:30;16683:817;;;16756:14;;-1:-1:-1;16772:14:0;;-1:-1:-1;16683:817:0;;;16820:19;16842:58;16865:14;16881:8;16891;16842:22;:58::i;:::-;16820:80;;16937:14;16919;:32;16915:574;;16998:10;16980:14;:28;;16972:79;;;;-1:-1:-1;;;16972:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17092:14;;-1:-1:-1;17108:14:0;-1:-1:-1;17108:14:0;16915:574;;;17164:19;17186:58;17209:14;17225:8;17235;17186:22;:58::i;:::-;17164:80;;17288:14;17270;:32;;17263:40;;;;17348:10;17330:14;:28;;17322:79;;;;-1:-1:-1;;;17322:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17442:14;-1:-1:-1;17458:14:0;;-1:-1:-1;16915:574:0;16683:817;;16117:1390;;;;;;;;;;;:::o;9920:142::-;9972:6;9999;;;:30;;-1:-1:-1;;10014:5:0;;;10028:1;10023;10014:5;10023:1;10009:15;;;;;:20;9999:30;9991:63;;;;;-1:-1:-1;;;9991:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9647:128;9731:5;;;9726:16;;;;9718:49;;;;;-1:-1:-1;;;9718:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:434;11304:13;11319;11346:14;11365:26;11376:6;11384;11365:10;:26::i;:::-;11345:46;;;11402:32;11410:7;11419:6;11427;11402:7;:32::i;:::-;;11446:13;11461;11494:32;11502:7;11511:6;11519;11494:7;:32::i;:::-;-1:-1:-1;;;;;11479:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11479:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11479:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11479:62:0;;;;;;;11445:96;;;;;-1:-1:-1;11445:96:0;;-1:-1:-1;;;;;;11575:16:0;;;;;;;:62;;11618:8;11628;11575:62;;;11595:8;11605;11575:62;11552:85;;;;-1:-1:-1;11211:434:0;-1:-1:-1;;;;;;;11211:434:0:o

Swarm Source

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