Contract 0x790d4b443edb9ce9a8d1aec585edd89e51132d2c 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x782d4169115817fed7d3ffceaa56540ad4a6f33c4d34af51d650c7f83614727cSwap Exact Token...51312592023-09-17 17:56:544 days 13 hrs ago0xe845b30d6fb2785700034e2c2401e5979cd6af63 IN  PADSwap: Router0 MOVR0.00063350028
0x93c3432dad68827310fed6b56bdfabbcd999d3d19e8131f097b11863bf23b4d1Swap Exact Token...51260352023-09-17 0:19:545 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.000833866
0xf8b89f0d60d41e5ccdac258701efa37439869e908e18ac51145836407709d0a1Swap Exact Token...51260332023-09-17 0:19:305 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.000793837
0x61c98ffe41143dff1b7615410de5343d70265ad4a810771d9aae3c7e7ae70b65Remove Liquidity51260072023-09-17 0:14:125 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.00086566896
0x6f431e891f7297f1dd1070c4c54a1079da7f60660c501d06748cf0a2896e2430Remove Liquidity51259642023-09-17 0:05:365 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.000850712491
0x2e6522dc137fbc08ab12ce5f4b554932dd3654ac6e9a06c59508ecc1884bd9fcRemove Liquidity51259632023-09-17 0:05:245 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.00080328807
0x482780a8f88686f4ce205d1ce8e188c186a9cdac4448d3272988e9fb9e0ad21fRemove Liquidity51259622023-09-17 0:05:125 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.00086566896
0x2c0f3bb57d95c19d742f37f4e14451a7632408fbd0293f778d01af02fa7164e1Remove Liquidity51259232023-09-16 23:57:125 days 7 hrs ago0x2d4ef1325d48496eceddb103378949cbb357f895 IN  PADSwap: Router0 MOVR0.000747246832
0x79a65d23409ed7c59d4bb1034fa4e9d1bbf344af4119a3d84fb28e7b2b05e3c9Swap Exact Token...51172682023-09-15 18:42:426 days 12 hrs ago0x94f605c40bde8beaa2f99d6be080fa9c6e9ca793 IN  PADSwap: Router0 MOVR0.00095613363
0x98fcb82889339c193efdbafb8e380f4d7a6b925ec77257133713525639872673Remove Liquidity51172602023-09-15 18:41:066 days 12 hrs ago0x94f605c40bde8beaa2f99d6be080fa9c6e9ca793 IN  PADSwap: Router0 MOVR0.00090857277
0x41f18b42860e64c94061432ab69a57b8a12c5a720d100d575926ba9c311ab358Swap Exact Token...51068882023-09-14 7:42:007 days 23 hrs ago0xf096239b1344f7389fcdca544485b5966400aa63 IN  PADSwap: Router0 MOVR0.000500177886
0x4be32cfabd14193d7547c26a5992f07c7cece5df44cf5136e4f9cb7c4a714cabRemove Liquidity51068282023-09-14 7:30:007 days 23 hrs ago0xf096239b1344f7389fcdca544485b5966400aa63 IN  PADSwap: Router0 MOVR0.000747246832
0x81ad28f3ae29e71119fa58c612dc6f724935ab25e5e429462e4164e7667d4d36Swap Exact Token...51037462023-09-13 21:06:488 days 10 hrs ago0x4f90d2be0c3b79802c97be6bb3c164b3523e9608 IN  PADSwap: Router0 MOVR0.00063350028
0x939f0f8dacfa343804814d4bfe65ee2f83083f381777a2def55133eb103f577bRemove Liquidity50925172023-09-12 7:19:4810 days 5 mins ago0x63220b5e9272ec6421f9993d5cbb3cab66038ed4 IN  PADSwap: Router0 MOVR0.00090857277
0x567540f502ff01be72b053c3814f151680b5ad5352c0284e7f70c998aacba784Swap Exact Token...50791082023-09-10 10:17:0611 days 21 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 MOVR0.0005334975
0x8ba204b4b4d0d735c8bb514b241f679f15c6ca20b60caaca69806e7bfb8ca6dbSwap Exact Token...50563052023-09-07 5:41:5415 days 1 hr ago0xe845b30d6fb2785700034e2c2401e5979cd6af63 IN  PADSwap: Router0 MOVR0.00063350028
0x020b73a8494a28f2758f793eccae106e56a043d16d406799b2d49f633e44741bSwap Exact Token...50385422023-09-04 18:08:2417 days 13 hrs ago0x1ff810c7929a137d9222f18e48b382fccef018c0 IN  PADSwap: Router0 MOVR0.00083569386
0x63dc6661406dd9e46e7eeeb31f9bc1e70152f854473ca87bb038994ddc7a0cbeRemove Liquidity50385322023-09-04 18:06:2417 days 13 hrs ago0x1ff810c7929a137d9222f18e48b382fccef018c0 IN  PADSwap: Router0 MOVR0.00085024992
0x137144c9a8e234464004f78f49720f59a06b9546a4c7900695243166adc5a441Swap Exact Token...50303722023-09-03 14:41:0018 days 16 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 MOVR0.000524280075
0x0565c67e99694974236b0d6051f26058a48e4911f2bdf5549f7ff57c03311c8bSwap Exact Token...49929942023-08-28 21:00:0624 days 10 hrs ago0x4f90d2be0c3b79802c97be6bb3c164b3523e9608 IN  PADSwap: Router0 MOVR0.000990759
0x657888ade5e97f4ba52f3020d3d8cd42ef3f90976344eb930c26aefe0bbd0188Swap Exact Token...49929902023-08-28 20:59:1624 days 10 hrs ago0x4f90d2be0c3b79802c97be6bb3c164b3523e9608 IN  PADSwap: Router0 MOVR0.00064009
0x5b9b45fd00cc67f02e8087efa8d43f6043e79ad524d76478b1c4d9bc23f37816Swap Exact Token...49929772023-08-28 20:56:4224 days 10 hrs ago0x4f90d2be0c3b79802c97be6bb3c164b3523e9608 IN  PADSwap: Router0 MOVR0.000990759
0x15594cafa59c84354c89c124f2d5c6308d38a4d5042d9a7c14bf413144942e7fRemove Liquidity49929712023-08-28 20:55:1824 days 10 hrs ago0x4f90d2be0c3b79802c97be6bb3c164b3523e9608 IN  PADSwap: Router0 MOVR0.000856702
0xa68876168ea94fd3a02243c635a768e758933eba7629888b74533501b48f9946Swap Exact Token...49756732023-08-26 10:34:0026 days 20 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 MOVR0.0005334975
0xc3fb91ade78fd19c0779913b901d620104efcea5e7e9fc3255e865fea3312b76Swap Exact Token...49752642023-08-26 9:11:1826 days 22 hrs ago0x0eeda225ed01e60573480b32f239f76a6ce84e6f IN  PADSwap: Router0 MOVR0.000591052
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x41f18b42860e64c94061432ab69a57b8a12c5a720d100d575926ba9c311ab35851068882023-09-14 7:42:007 days 23 hrs ago PADSwap: Router0xf096239b1344f7389fcdca544485b5966400aa630.138700821135678121 MOVR
0x41f18b42860e64c94061432ab69a57b8a12c5a720d100d575926ba9c311ab35851068882023-09-14 7:42:007 days 23 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.138700821135678121 MOVR
0x567540f502ff01be72b053c3814f151680b5ad5352c0284e7f70c998aacba78450791082023-09-10 10:17:0611 days 21 hrs ago PADSwap: Router0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda0.173926251946013107 MOVR
0x567540f502ff01be72b053c3814f151680b5ad5352c0284e7f70c998aacba78450791082023-09-10 10:17:0611 days 21 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.173926251946013107 MOVR
0x137144c9a8e234464004f78f49720f59a06b9546a4c7900695243166adc5a44150303722023-09-03 14:41:0018 days 16 hrs ago PADSwap: Router0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda0.216091377219475329 MOVR
0x137144c9a8e234464004f78f49720f59a06b9546a4c7900695243166adc5a44150303722023-09-03 14:41:0018 days 16 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.216091377219475329 MOVR
0xa68876168ea94fd3a02243c635a768e758933eba7629888b74533501b48f994649756732023-08-26 10:34:0026 days 20 hrs ago PADSwap: Router0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda0.108935663059417259 MOVR
0xa68876168ea94fd3a02243c635a768e758933eba7629888b74533501b48f994649756732023-08-26 10:34:0026 days 20 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.108935663059417259 MOVR
0xfd8bbb1194d2b59316cdf5913d767d7c73b8825d7c72111b5f1a21140924e2fe49562842023-08-23 17:02:4229 days 14 hrs ago PADSwap: Router0x2c772eef4aa4af21bab416654bbaa25cf341c1bf18 wei
0xfd8bbb1194d2b59316cdf5913d767d7c73b8825d7c72111b5f1a21140924e2fe49562842023-08-23 17:02:4229 days 14 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.301407927544446601 MOVR
0x991ebd04de103ee8b5bfc95a47d9082f7c7500b7096c3072a1021ceb36a4a09749562582023-08-23 16:57:3029 days 14 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.301486801319555409 MOVR
0x67d03b3806c226a0bbd4c7b9d7c9ac85c4d2d85ba0941341ec4614dd6fd05c2649247502023-08-19 6:50:0134 days 34 mins ago PADSwap: Router0xd5612dd045399350f27eef4a198ee26d15ca7ac90.020603655595966028 MOVR
0x67d03b3806c226a0bbd4c7b9d7c9ac85c4d2d85ba0941341ec4614dd6fd05c2649247502023-08-19 6:50:0134 days 34 mins ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.020603655595966028 MOVR
0x5c9905bada49a5c51640825aaef257022e065634264aa08180f8406dba39700247530762023-07-26 4:52:5458 days 2 hrs ago PADSwap: Router0x2893e8995c59662b2b9fa579582af3dc5a6c58840.000020200578036677 MOVR
0x5c9905bada49a5c51640825aaef257022e065634264aa08180f8406dba39700247530762023-07-26 4:52:5458 days 2 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.002020057803667704 MOVR
0x4af71c3fb62ba3118a87f9e17b88d6b332d6d4fc55c92a77df86e0b903f39b9047524212023-07-26 2:39:3758 days 4 hrs ago PADSwap: Router0x349a55e99455c33dfbc42e591529c9c52fcfe29a0.168837898827957469 MOVR
0x4af71c3fb62ba3118a87f9e17b88d6b332d6d4fc55c92a77df86e0b903f39b9047524212023-07-26 2:39:3758 days 4 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.168837898827957469 MOVR
0xb09bc203258a7d30aabddf73307f30b0420da8e8b365510c368af23f0cdb75c547524182023-07-26 2:39:0058 days 4 hrs ago 0x663a07a2648296f1a3c02ee86a126fe1407888e5 PADSwap: Router0.168837898827957469 MOVR
0xc23b602959c3fb84de2130926cbdf076b42d852da34fb473768a0dd5157da57447524102023-07-26 2:37:1858 days 4 hrs ago PADSwap: Router0x349a55e99455c33dfbc42e591529c9c52fcfe29a1 wei
0xc23b602959c3fb84de2130926cbdf076b42d852da34fb473768a0dd5157da57447524102023-07-26 2:37:1858 days 4 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.000000214540309606 MOVR
0x637f01705020f43e6c543dab26c14bdea6bfbc4e2de1cb2e23e20f43dc90f15747523952023-07-26 2:34:1858 days 4 hrs ago PADSwap: Router0x349a55e99455c33dfbc42e591529c9c52fcfe29a0.000000002149702488 MOVR
0x637f01705020f43e6c543dab26c14bdea6bfbc4e2de1cb2e23e20f43dc90f15747523952023-07-26 2:34:1858 days 4 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.00000021497024879 MOVR
0x1bfe67f51b38a5642155010dc6eaf983cbae049aa0b748dc37837f4abc60be1247523922023-07-26 2:33:4258 days 4 hrs ago PADSwap: Router0x349a55e99455c33dfbc42e591529c9c52fcfe29a0.001695146223076546 MOVR
0x1bfe67f51b38a5642155010dc6eaf983cbae049aa0b748dc37837f4abc60be1247523922023-07-26 2:33:4258 days 4 hrs ago PADSwap: Router 0x663a07a2648296f1a3c02ee86a126fe1407888e50.169514622307652816 MOVR
0x086a2cc504d04b76c20525f64479e028317f6f732e442f817d492d09f047b0c647402782023-07-24 9:35:1259 days 21 hrs ago PADSwap: Router0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda2.302371176470363242 MOVR
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PadRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-11-01
*/

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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

// File: contracts/interfaces/IPadPair.sol

pragma solidity >=0.6.6;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/libraries/PadLibrary.sol

pragma solidity >=0.5.0;



library PadLibrary {
    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, 'PadLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PadLibrary: 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'c5443539aede6901cfc8cbd4f358bb6c6524f2d1bd7ecd1f6ebea4d34498726d' // 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,) = IPadPair(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, 'PadLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PadLibrary: 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, 'PadLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PadLibrary: 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, 'PadLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PadLibrary: 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, 'PadLibrary: 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, 'PadLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/interfaces/IPadRouter01.sol

pragma solidity >=0.6.2;

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

// File: contracts/interfaces/IPadRouter02.sol

pragma solidity >=0.6.2;


interface IPadRouter02 is IPadRouter01 {
    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;
}

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol



pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/IPadFactory.sol

pragma solidity >=0.6.6;

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

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

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

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

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

// File: contracts/PadRouter.sol

pragma solidity =0.6.6;








contract PadRouter is IPadRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

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"}]

60c060405234801561001057600080fd5b506040516200476f3803806200476f8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145ea620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b52806127a55280612a185280612a6e5280612aa25280612b165280612cb65280612df95280612e81525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad5280612506528061272a5280612753528061278352806128f05280612a4c5280612d495280612eb3528061373f52806137825280613a605280613bdf528061403b52806140e9528061416952506145ea6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a612728565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061274c945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612779565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561288d565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129c9565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c6e565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da58583613144565b50965096945050505050565b6000610dbe84848461323c565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613473565b85600081518110610fe657fe5b6020026020010151613533565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613690915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b6020026020010151613144565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138d6565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613473565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613473565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613533565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a09915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d1416565b10156118935760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a09915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b505050506118938482613144565b60608142811015611b67576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b5095945050505050565b6000610dbe848484613d64565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e54565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e88483613144565b8042811015612170576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a09915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613473565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f16565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126c2576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612717576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461332c565b60008060006127c97f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613473565b90506000876127d8578c6127dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561285257600080fd5b505af1158015612866573d6000803e3d6000fd5b505050506128788e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128d6576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6128e48c8c8c8c8c8c61400a565b909450925060006129167f00000000000000000000000000000000000000000000000000000000000000008e8e613473565b90506129248d338388613533565b6129308c338387613533565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a12576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b612a408a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61400a565b90945092506000612a927f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613473565b9050612aa08b338388613533565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b505050506040513d6020811015612bbe57600080fd5b5051612bc657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b505050506040513d6020811015612c4857600080fd5b5051925034841015612c6057612c6033853403613144565b505096509650969350505050565b60608142811015612cb4576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612ceb57fe5b905060200201356001600160a01b03166001600160a01b031614612d44576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b612da27f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b91503482600081518110612db257fe5b60200260200101511115612df75760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e3357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6657600080fd5b505af1158015612e7a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612edf7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612eec57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b505050506040513d6020811015612f6d57600080fd5b5051612f7557fe5b612fb482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b81600081518110612fc157fe5b6020026020010151341115611e6a57611e6a3383600081518110612fe157fe5b60200260200101513403613144565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061306d5780518252601f19909201916020918201910161304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130cf576040519150601f19603f3d011682016040523d82523d6000602084013e6130d4565b606091505b509150915081801561310257508051158061310257508080602001905160208110156130ff57600080fd5b50515b61313d5760405162461bcd60e51b815260040180806020018281038252602d815260200180614566602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131905780518252601f199092019160209182019101613171565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f2576040519150601f19603f3d011682016040523d82523d6000602084013e6131f7565b606091505b50509050806132375760405162461bcd60e51b81526004018080602001828103825260348152602001806144816034913960400191505060405180910390fd5b505050565b600080841161327c5760405162461bcd60e51b81526004018080602001828103825260258152602001806144fb6025913960400191505060405180910390fd5b60008311801561328c5750600082115b6132c75760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b60006132db856103e663ffffffff6142aa16565b905060006132ef828563ffffffff6142aa16565b9050600061331583613309886103e863ffffffff6142aa16565b9063ffffffff61430d16565b905080828161332057fe5b04979650505050505050565b6060600282511015613380576040805162461bcd60e51b81526020600482015260186024820152770a0c2c898d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561339857600080fd5b506040519080825280602002602001820160405280156133c2578160200160208202803683370190505b50905082816000815181106133d357fe5b60200260200101818152505060005b600183510381101561346b576000806134258786858151811061340157fe5b602002602001015187866001018151811061341857fe5b602002602001015161435c565b9150915061344784848151811061343857fe5b6020026020010151838361323c565b84846001018151811061345657fe5b602090810291909101015250506001016133e2565b509392505050565b60008060006134828585613f16565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fc5443539aede6901cfc8cbd4f358bb6c6524f2d1bd7ecd1f6ebea4d34498726d609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135b85780518252601f199092019160209182019101613599565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461361a576040519150601f19603f3d011682016040523d82523d6000602084013e61361f565b606091505b509150915081801561364d57508051158061364d575080806020019051602081101561364a57600080fd5b50515b6136885760405162461bcd60e51b81526004018080602001828103825260318152602001806144506031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138d0576000808483815181106136ae57fe5b60200260200101518584600101815181106136c557fe5b60200260200101519150915060006136dd8383613f16565b50905060008785600101815181106136f157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461371f57826000613723565b6000835b91509150600060028a5103881061373a578861377b565b61377b7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061376e57fe5b6020026020010151613473565b90506137a87f00000000000000000000000000000000000000000000000000000000000000008888613473565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137e5576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561385657818101518382015260200161383e565b50505050905090810190601f1680156138835780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138a557600080fd5b505af11580156138b9573d6000803e3d6000fd5b505060019099019850613693975050505050505050565b50505050565b606060028251101561392a576040805162461bcd60e51b81526020600482015260186024820152770a0c2c898d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561394257600080fd5b5060405190808252806020026020018201604052801561396c578160200160208202803683370190505b509050828160018351038151811061398057fe5b60209081029190910101528151600019015b801561346b576000806139c2878660018603815181106139ae57fe5b602002602001015187868151811061341857fe5b915091506139e48484815181106139d557fe5b60200260200101518383613d64565b8460018503815181106139f357fe5b6020908102919091010152505060001901613992565b60005b600183510381101561323757600080848381518110613a2757fe5b6020026020010151858460010181518110613a3e57fe5b6020026020010151915091506000613a568383613f16565b5090506000613a867f00000000000000000000000000000000000000000000000000000000000000008585613473565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ac757600080fd5b505afa158015613adb573d6000803e3d6000fd5b505050506040513d6060811015613af157600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b27578284613b2a565b83835b91509150613b88828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b9586838361323c565b945050505050600080856001600160a01b0316886001600160a01b031614613bbf57826000613bc3565b6000835b91509150600060028c51038a10613bda578a613c0e565b613c0e7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061376e57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c98578181015183820152602001613c80565b50505050905090810190601f168015613cc55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ce757600080fd5b505af1158015613cfb573d6000803e3d6000fd5b50506001909b019a50613a0c9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613da45760405162461bcd60e51b81526004018080602001828103825260268152602001806144d56026913960400191505060405180910390fd5b600083118015613db45750600082115b613def5760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b6000613e136103e8613e07868863ffffffff6142aa16565b9063ffffffff6142aa16565b90506000613e2d6103e6613e07868963ffffffff613d1416565b9050613e4a6001828481613e3d57fe5b049063ffffffff61430d16565b9695505050505050565b6000808411613eaa576040805162461bcd60e51b815260206004820152601f60248201527f5061644c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015613eba5750600082115b613ef55760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b82613f06858463ffffffff6142aa16565b81613f0d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f80576040805162461bcd60e51b815260206004820152601f60248201527f5061644c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613fa0578284613fa3565b83835b90925090506001600160a01b038216614003576040805162461bcd60e51b815260206004820152601860248201527f5061644c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561408457600080fd5b505afa158015614098573d6000803e3d6000fd5b505050506040513d60208110156140ae57600080fd5b50516001600160a01b0316141561416157604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561413457600080fd5b505af1158015614148573d6000803e3d6000fd5b505050506040513d602081101561415e57600080fd5b50505b60008061418f7f00000000000000000000000000000000000000000000000000000000000000008b8b61435c565b915091508160001480156141a1575080155b156141b15787935086925061429d565b60006141be898484613e54565b9050878111614227578581101561421c576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b88945092508261429b565b6000614234898486613e54565b90508981111561424057fe5b87811015614295576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806142c5575050808202828282816142c257fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061436b8585613f16565b509050614379868686613473565b50600080614388888888613473565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143c057600080fd5b505afa1580156143d4573d6000803e3d6000fd5b505050506040513d60608110156143ea57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461441d578082614420565b81815b9099909850965050505050505056fe506164526f757465723a20494e56414c49445f504154480000000000000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564506164526f757465723a204558504952454400000000000000000000000000005061644c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545061644c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54506164526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54506164526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645061644c6962726172793a20494e53554646494349454e545f4c4951554944495459a26469706673582212203a07a5bd7e3638f07c450d9f7dbc47ecb318ae0c6573484bde75228ae69674eb64736f6c63430006060033000000000000000000000000760d2bdb232027ab3b1594405077f9a1b91c04c1000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5

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

000000000000000000000000760d2bdb232027ab3b1594405077f9a1b91c04c1000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5

-----Decoded View---------------
Arg [0] : _factory (address): 0x760d2bdb232027ab3b1594405077f9a1b91c04c1
Arg [1] : _WETH (address): 0x663a07a2648296f1a3c02ee86a126fe1407888e5

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000760d2bdb232027ab3b1594405077f9a1b91c04c1
Arg [1] : 000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5


Deployed ByteCode Sourcemap

16422:18121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16884:10;-1:-1:-1;;;;;16898:4:0;16884:18;;16877:26;;;;16422:18121;;12:1:-1;9;2:12;20932:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20932:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20932:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33511:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33511:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33511:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27957:826;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27957:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27957:826:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27957:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27957:826: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;27957:826:0;;-1:-1:-1;27957:826:0;-1:-1:-1;;;;;;27957:826: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;27957:826:0;;;;;;;;;;;;;;;;;34293:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34293:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34293:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34293:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34293:247: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;34293:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34293:247:0;;-1:-1:-1;34293:247:0;;-1:-1:-1;;;;;34293:247:0:i;21611:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21611:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21611:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25258:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25258:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25258:610:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25258:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25258:610: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;25258:610:0;;-1:-1:-1;25258:610:0;-1:-1:-1;;;;;;25258:610:0;;;;;;;;:::i;27147:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27147:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27147:804:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27147:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27147:804: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;27147:804:0;;-1:-1:-1;27147:804:0;-1:-1:-1;;;;;;27147:804:0;;;;;;;;:::i;23724:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23724:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23724:706:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30906:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30906:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30906:702:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30906:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30906:702: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;30906:702:0;;-1:-1:-1;30906:702:0;-1:-1:-1;;;;;;30906:702:0;;;;;;;;:::i;32452:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32452:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32452:825:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32452:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32452:825: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;32452:825:0;;-1:-1:-1;32452:825:0;-1:-1:-1;;;;;;32452:825:0;;;;;;;;:::i;26468:673::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26468:673:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26468:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26468:673: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;26468:673:0;;-1:-1:-1;26468:673:0;-1:-1:-1;;;;;;26468:673:0;;;;;;;;:::i;33775:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33775:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33775:255:0;;;;;;;;;;;;:::i;25874:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25874:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25874:588:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25874:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25874:588: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;25874:588:0;;-1:-1:-1;25874:588:0;-1:-1:-1;;;;;;25874:588:0;;;;;;;;:::i;16544:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16544:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16544:38:0;;;;;;;;;;;;;;33321:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33321:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33321:182:0;;;;;;;;;;;;:::i;23018:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23018:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23018:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31614:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31614:832:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31614:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31614:832: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;31614:832:0;;-1:-1:-1;31614:832:0;-1:-1:-1;;;;;;31614:832:0;;;;;;;;:::i;20097:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20097:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20097:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16496:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16496:41:0;;;:::i;34038:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34038:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34038:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34038:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34038:247: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;34038:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34038:247:0;;-1:-1:-1;34038:247:0;;-1:-1:-1;;;;;34038:247:0:i;22282:657::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22282:657:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22282:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18360:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18360:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18360:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19092:962;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19092:962:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28789:786::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28789:786:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28789:786:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28789:786: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;28789:786:0;;-1:-1:-1;28789:786:0;-1:-1:-1;;;;;;28789:786:0;;;;;;;;:::i;20932:673::-;21169:16;21187:14;21150:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;21241:196:::1;21271:5;21291:4;21310:9;21334:14;21363:12;21398:4;21418:8;21241:15;:196::i;:::-;21214:223:::0;;-1:-1:-1;21214:223:0;-1:-1:-1;21448:51:0::1;21476:5:::0;21483:2;21214:223;21448:27:::1;:51::i;:::-;21516:4;-1:-1:-1::0;;;;;21510:20:0::1;;21531:9;21510:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21510:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21510:31:0;;;;21552:45;21583:2;21587:9;21552:30;:45::i;:::-;20932:673:::0;;;;;;;;;;:::o;33511:256::-;33664:14;33703:56;33727:8;33737:9;33748:10;33703:23;:56::i;:::-;33696:63;33511:256;-1:-1:-1;;;;33511:256:0:o;27957:826::-;28171:21;28143:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28243:4:0::1;28218:29;:4:::0;;-1:-1:-1;;28223:15:0;;28218:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28218:21:0::1;-1:-1:-1::0;;;;;28218:29:0::1;;28210:65;;;::::0;;-1:-1:-1;;;28210:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28210:65:0;;;;;;;;;;;;;::::1;;28296:49;28321:7;28330:8;28340:4;;28296:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28296:24:0::1;::::0;-1:-1:-1;;;28296:49:0:i:1;:::-;28286:59;;28395:12;28364:7;28389:1;28372:7;:14;:18;28364:27;;;;;;;;;;;;;;:43;;28356:93;;;;-1:-1:-1::0;;;28356:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28460:135;28506:4;;28511:1;28506:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28506:7:0::1;28515:10;28527:45;28546:7;28555:4;;28560:1;28555:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28555:7:0::1;28564:4;;28569:1;28564:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28564:7:0::1;28527:18;:45::i;:::-;28574:7;28582:1;28574:10;;;;;;;;;;;;;;28460:31;:135::i;:::-;28606:35;28612:7;28621:4;;28606:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28635:4:0::1;::::0;-1:-1:-1;28606:5:0::1;::::0;-1:-1:-1;;28606:35:0:i:1;:::-;28658:4;-1:-1:-1::0;;;;;28652:20:0::1;;28673:7;28698:1;28681:7;:14;:18;28673:27;;;;;;;;;;;;;;28652:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28652:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28652:49:0;;;;28712:63;28743:2;28747:7;28772:1;28755:7;:14;:18;28747:27;;;;;;;;;;;;;;28712:30;:63::i;:::-;27957:826:::0;;;;;;;;;:::o;34293:247::-;34437:21;34483:49;34507:7;34516:9;34527:4;34483:23;:49::i;:::-;34476:56;;34293:247;;;;;:::o;21611:665::-;21917:12;21931;21956;21971:43;21990:7;21999:6;22007;21971:18;:43::i;:::-;21956:58;;22025:10;22038;:33;;22062:9;22038:33;;;-1:-1:-1;;22038:33:0;22082:74;;;-1:-1:-1;;;22082:74:0;;22104:10;22082:74;;;;22124:4;22082:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22025:46;;-1:-1:-1;;;;;;22082:21:0;;;;;:74;;;;;-1:-1:-1;;22082:74:0;;;;;;;;-1:-1:-1;22082:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22082:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22082:74:0;;;;22188:80;22204:6;22212;22220:9;22231:10;22243;22255:2;22259:8;22188:15;:80::i;:::-;22167:101;;;;;;;;21611:665;;;;;;;;;;;;;;;;:::o;25258:610::-;25482:21;25463:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;25526:49:::1;25551:7;25560:8;25570:4;;25526:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25526:24:0::1;::::0;-1:-1:-1;;;25526:49:0:i:1;:::-;25516:59;;25625:12;25594:7;25619:1;25602:7;:14;:18;25594:27;;;;;;;;;;;;;;:43;;25586:93;;;;-1:-1:-1::0;;;25586:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25690:135;25736:4;;25741:1;25736:7;;;;;;25690:135;25836:24;25842:7;25851:4;;25836:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25857:2:0;;-1:-1:-1;25836:5:0::1;::::0;-1:-1:-1;;25836:24:0:i:1;27147:804::-:0;27361:21;27333:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27433:4:0::1;27408:29;:4:::0;;-1:-1:-1;;27413:15:0;;27408:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27408:21:0::1;-1:-1:-1::0;;;;;27408:29:0::1;;27400:65;;;::::0;;-1:-1:-1;;;27400:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27400:65:0;;;;;;;;;;;;;::::1;;27486:49;27510:7;27519:9;27530:4;;27486:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27486:23:0::1;::::0;-1:-1:-1;;;27486:49:0:i:1;:::-;27476:59;;27568:11;27554:7;27562:1;27554:10;;;;;;;;;;;;;;:25;;27546:71;;;;-1:-1:-1::0;;;27546:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23724:706:::0;24042:14;24069:12;24084:40;24103:7;24112:5;24119:4;24084:18;:40::i;:::-;24069:55;;24135:10;24148;:33;;24172:9;24148:33;;;-1:-1:-1;;24148:33:0;24192:74;;;-1:-1:-1;;;24192:74:0;;24214:10;24192:74;;;;24234:4;24192:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24135:46;;-1:-1:-1;;;;;;24192:21:0;;;;;:74;;;;;-1:-1:-1;;24192:74:0;;;;;;;;-1:-1:-1;24192:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24192:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24192:74:0;;;;24289:133;24351:5;24358:9;24369:14;24385:12;24399:2;24403:8;24289:47;:133::i;:::-;24277:145;23724:706;-1:-1:-1;;;;;;;;;;;;;23724:706:0:o;30906:702::-;31140:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;31161:133:::1;31207:4;;31212:1;31207:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31207:7:0::1;31216:10;31228:45;31247:7;31256:4;;31261:1;31256:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31256:7:0::1;31265:4;;31270:1;31265:7;;;;;;31228:45;31275:8;31161:31;:133::i;:::-;31305:18;31333:4:::0;;-1:-1:-1;;31338:15:0;;31333:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31333:21:0::1;-1:-1:-1::0;;;;;31326:39:0::1;;31366:2;31326:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:43:0::1;-1:-1:-1::0;;;;;31326:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:43:0;31380:44:::1;::::0;;31326:43:::1;31380:44:::0;;::::1;::::0;;;;;;;;;;;31326:43;;-1:-1:-1;31380:44:0::1;::::0;;;31415:4;;;;;;31380:44;::::1;::::0;31415:4;;31380:44;31415:4;31380:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31421:2:0;;-1:-1:-1;31380:34:0::1;::::0;-1:-1:-1;;31380:44:0:i:1;:::-;31523:12:::0;31457:62:::1;31505:13:::0;31464:4;;-1:-1:-1;;31469:15:0;;31464:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31464:21:0::1;-1:-1:-1::0;;;;;31457:39:0::1;;31497:2;31457:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31457:43:0::1;-1:-1:-1::0;;;;;31457:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31457:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31457:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31457:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31435:165;;;;-1:-1:-1::0;;;31435:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16702:1;30906:702:::0;;;;;;;:::o;32452:825::-;32719:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32778:4:0::1;32753:29;:4:::0;;-1:-1:-1;;32758:15:0;;32753:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32753:21:0::1;-1:-1:-1::0;;;;;32753:29:0::1;;32745:65;;;::::0;;-1:-1:-1;;;32745:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32745:65:0;;;;;;;;;;;;;::::1;;32821:133;32867:4;;32872:1;32867:7;;;;;;32821:133;32965:55;33000:4;;32965:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33014:4:0::1;::::0;-1:-1:-1;32965:34:0::1;::::0;-1:-1:-1;;32965:55:0:i:1;:::-;33048:37;::::0;;-1:-1:-1;;;33048:37:0;;33079:4:::1;33048:37;::::0;::::1;::::0;;;33031:14:::1;::::0;-1:-1:-1;;;;;33055:4:0::1;33048:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33048:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33048:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33048:37:0;;-1:-1:-1;33104:25:0;;::::1;;33096:75;;;;-1:-1:-1::0;;;33096:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33188:4;-1:-1:-1::0;;;;;33182:20:0::1;;33203:9;33182:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33182:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33182:31:0;;;;33224:45;33255:2;33259:9;33224:30;:45::i;26468:673::-:0;26684:21;26656:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;26742:4:::1;-1:-1:-1::0;;;;;26731:15:0::1;:4;;26736:1;26731:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26731:7:0::1;-1:-1:-1::0;;;;;26731:15:0::1;;26723:51;;;::::0;;-1:-1:-1;;;26723:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26723:51:0;;;;;;;;;;;;;::::1;;26795:50;26820:7;26829:9;26840:4;;26795:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26795:24:0::1;::::0;-1:-1:-1;;;26795:50:0:i:1;:::-;26785:60;;26895:12;26864:7;26889:1;26872:7;:14;:18;26864:27;;;;;;;;;;;;;;:43;;26856:93;;;;-1:-1:-1::0;;;26856:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26966:4;-1:-1:-1::0;;;;;26960:19:0::1;;26987:7;26995:1;26987:10;;;;;;;;;;;;;;26960:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26960:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26960:40:0;;;;;27024:4;-1:-1:-1::0;;;;;27018:20:0::1;;27039:45;27058:7;27067:4;;27072:1;27067:7;;;;;;27039:45;27086:7;27094:1;27086:10;;;;;;;;;;;;;;27018:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;27018:79:0::1;-1:-1:-1::0;;;;;27018:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27018:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27018:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27018:79:0;27011:87:::1;;;;27109:24;27115:7;27124:4;;27109:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27130:2:0;;-1:-1:-1;27109:5:0::1;::::0;-1:-1:-1;;27109:24:0:i:1;:::-;26468:673:::0;;;;;;;;:::o;33775:255::-;33928:13;33966:56;33989:9;34000;34011:10;33966:22;:56::i;25874:588::-;26098:21;26079:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;26142:49:::1;26166:7;26175:9;26186:4;;26142:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26142:23:0::1;::::0;-1:-1:-1;;;26142:49:0:i:1;:::-;26132:59;;26224:11;26210:7;26218:1;26210:10;;;;;;;;;;;;;;:25;;26202:71;;;;-1:-1:-1::0;;;26202:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16544:38:::0;;;:::o;33321:182::-;33418:12;33450:45;33467:7;33476:8;33486;33450:16;:45::i;23018:700::-;23284:14;23265:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;23327:196:::1;23357:5;23377:4;23396:9;23420:14;23449:12;23484:4;23504:8;23327:15;:196::i;:::-;23573:38;::::0;;-1:-1:-1;;;23573:38:0;;23605:4:::1;23573:38;::::0;::::1;::::0;;;23311:212;;-1:-1:-1;23534:78:0::1;::::0;-1:-1:-1;23562:5:0;;23569:2;;-1:-1:-1;;;;;23573: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;23573:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23573:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23573:38:0;23534:27:::1;:78::i;:::-;23629:4;-1:-1:-1::0;;;;;23623:20:0::1;;23644:9;23623:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23623:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23623:31:0;;;;23665:45;23696:2;23700:9;23665:30;:45::i;31614:832::-:0;31874:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;31919:4:::1;-1:-1:-1::0;;;;;31908:15:0::1;:4;;31913:1;31908:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31908:7:0::1;-1:-1:-1::0;;;;;31908:15:0::1;;31900:51;;;::::0;;-1:-1:-1;;;31900:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31900:51:0;;;;;;;;;;;;;::::1;;31962:13;31978:9;31962:25;;32004:4;-1:-1:-1::0;;;;;31998:19:0::1;;32025:8;31998:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31998:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31998:38:0;;;;;32060:4;-1:-1:-1::0;;;;;32054:20:0::1;;32075:45;32094:7;32103:4;;32108:1;32103:7;;;;;;32075:45;32122:8;32054:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;32054:77:0::1;-1:-1:-1::0;;;;;32054:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32054:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32054:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32054:77:0;32047:85:::1;;;;32143:18;32171:4:::0;;-1:-1:-1;;32176:15:0;;32171:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32171:21:0::1;-1:-1:-1::0;;;;;32164:39:0::1;;32204:2;32164:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32164:43:0::1;-1:-1:-1::0;;;;;32164:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32164:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32164:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32164:43:0;32218:44:::1;::::0;;32164:43:::1;32218:44:::0;;::::1;::::0;;;;;;;;;;;32164:43;;-1:-1:-1;32218:44:0::1;::::0;;;32253:4;;;;;;32218:44;::::1;::::0;32253:4;;32218:44;32253:4;32218:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32259:2:0;;-1:-1:-1;32218:34:0::1;::::0;-1:-1:-1;;32218:44:0:i:1;:::-;32361:12:::0;32295:62:::1;32343:13:::0;32302:4;;-1:-1:-1;;32307:15:0;;32302:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32302:21:0::1;-1:-1:-1::0;;;;;32295:39:0::1;;32335:2;32295:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32295:43:0::1;-1:-1:-1::0;;;;;32295:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20097:829:0::0;20351:12;20365;20332:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;20390:12:::1;20405:43;20424:7;20433:6;20441;20405:18;:43::i;:::-;20459:56;::::0;;-1:-1:-1;;;20459:56:0;;20487:10:::1;20459:56;::::0;::::1;::::0;-1:-1:-1;;;;;20459:27:0;::::1;:56:::0;;;;;;;;;;;;;;20390:58;;-1:-1:-1;20459:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20459:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20459:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20459:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20583:23:0::1;::::0;;-1:-1:-1;;;20583:23:0;;-1:-1:-1;;;;;20583:23:0;;::::1;;::::0;::::1;::::0;;;20553:12:::1;::::0;;;20583:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20553:12;20583:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20583:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20583:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20583:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20583:23:0;-1:-1:-1;20618:14:0::1;20637:37;20659:6:::0;20667;20637:21:::1;:37::i;:::-;20617:57;;;20716:6;-1:-1:-1::0;;;;;20706:16:0::1;:6;-1:-1:-1::0;;;;;20706:16:0::1;;:58;;20747:7;20756;20706:58;;;20726:7;20735;20706:58;20685:79:::0;;-1:-1:-1;20685:79:0;-1:-1:-1;20783:21:0;;::::1;;20775:66;;;::::0;;-1:-1:-1;;;20775:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20871:10;20860:7;:21;;20852:66;;;::::0;;-1:-1:-1;;;20852:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16702:1;;;;20097:829:::0;;;;;;;;;;;:::o;16496:41::-;;;:::o;34038:247::-;34182:21;34228:49;34253:7;34262:8;34272:4;34228:24;:49::i;22282:657::-;22571:16;22589:14;22616:12;22631:40;22650:7;22659:5;22666:4;22631:18;:40::i;:::-;22616:55;;22682:10;22695;:33;;22719:9;22695:33;;;-1:-1:-1;;22695:33:0;22739:74;;;-1:-1:-1;;;22739:74:0;;22761:10;22739:74;;;;22781:4;22739:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22682:46;;-1:-1:-1;;;;;;22739:21:0;;;;;:74;;;;;-1:-1:-1;;22739:74:0;;;;;;;;-1:-1:-1;22739:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22739:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22739:74:0;;;;22851:80;22870:5;22877:9;22888:14;22904:12;22918:2;22922:8;22851:18;:80::i;:::-;22824:107;;;;-1:-1:-1;22282:657:0;-1:-1:-1;;;;;;;;;;;;;22282:657:0:o;18360:726::-;18648:12;18662;18676:14;18629:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;18724:85:::1;18738:6;18746;18754:14;18770;18786:10;18798;18724:13;:85::i;:::-;18703:106:::0;;-1:-1:-1;18703:106:0;-1:-1:-1;18820:12:0::1;18835:43;18854:7;18863:6:::0;18871;18835:18:::1;:43::i;:::-;18820:58;;18889:66;18921:6;18929:10;18941:4;18947:7;18889:31;:66::i;:::-;18966;18998:6;19006:10;19018:4;19024:7;18966:31;:66::i;:::-;19064:4;-1:-1:-1::0;;;;;19055:19:0::1;;19075:2;19055:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19055:23:0::1;-1:-1:-1::0;;;;;19055:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19055:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19055:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19055:23:0;18360:726;;;;-1:-1:-1;19055:23:0;;-1:-1:-1;18360:726:0;;-1:-1:-1;;;;;;;;;18360:726:0:o;19092:962::-;19345:16;19363:14;19379;19326:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;19433:176:::1;19461:5;19481:4;19500:18;19533:9;19557:14;19586:12;19433:13;:176::i;:::-;19406:203:::0;;-1:-1:-1;19406:203:0;-1:-1:-1;19620:12:0::1;19635:40;19654:7;19663:5:::0;19670:4:::1;19635:18;:40::i;:::-;19620:55;;19686:69;19718:5;19725:10;19737:4;19743:11;19686:31;:69::i;:::-;19772:4;-1:-1:-1::0;;;;;19766:19:0::1;;19793:9;19766:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19766:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19766:39:0;;;;;19829:4;-1:-1:-1::0;;;;;19823:20:0::1;;19844:4;19850:9;19823:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19823:37:0::1;-1:-1:-1::0;;;;;19823:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19823:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19823:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19823:37:0;19816:45:::1;;;;19893:4;-1:-1:-1::0;;;;;19884:19:0::1;;19904:2;19884:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19884:23:0::1;-1:-1:-1::0;;;;;19884:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19884:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19884:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19884:23:0;;-1:-1:-1;19958:9:0::1;:21:::0;-1:-1:-1;19954:92:0::1;;;19981:65;20012:10;20036:9;20024;:21;19981:30;:65::i;:::-;16702:1;19092:962:::0;;;;;;;;;;;:::o;28789:786::-;29002:21;28974:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;29060:4:::1;-1:-1:-1::0;;;;;29049:15:0::1;:4;;29054:1;29049:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29049:7:0::1;-1:-1:-1::0;;;;;29049:15:0::1;;29041:51;;;::::0;;-1:-1:-1;;;29041:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29041:51:0;;;;;;;;;;;;;::::1;;29113:49;29137:7;29146:9;29157:4;;29113:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29113:23:0::1;::::0;-1:-1:-1;;;29113:49:0:i:1;:::-;29103:59;;29195:9;29181:7;29189:1;29181:10;;;;;;;;;;;;;;:23;;29173:69;;;;-1:-1:-1::0;;;29173:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29259:4;-1:-1:-1::0;;;;;29253:19:0::1;;29280:7;29288:1;29280:10;;;;;;;;;;;;;;29253:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29253:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29253:40:0;;;;;29317:4;-1:-1:-1::0;;;;;29311:20:0::1;;29332:45;29351:7;29360:4;;29365:1;29360:7;;;;;;29332:45;29379:7;29387:1;29379:10;;;;;;;;;;;;;;29311:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;29311:79:0::1;-1:-1:-1::0;;;;;29311:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29311:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29311:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29311:79:0;29304:87:::1;;;;29402:24;29408:7;29417:4;;29402:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29423:2:0;;-1:-1:-1;29402:5:0::1;::::0;-1:-1:-1;;29402:24:0:i:1;:::-;29489:7;29497:1;29489:10;;;;;;;;;;;;;;29477:9;:22;29473:94;;;29501:66;29532:10;29556:7;29564:1;29556:10;;;;;;;;;;;;;;29544:9;:22;29501:30;:66::i;14435:449::-:0;14667:45;;;-1:-1:-1;;;;;14667:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14667:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14656:57:0;;;;14621:12;;14635:17;;14656:10;;;;14667:45;14656:57;;;25:18:-1;14656: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;;;14656: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;;14620:93:0;;;;14746:7;:57;;;;-1:-1:-1;14758:11:0;;:16;;:44;;;14789:4;14778:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14778:24:0;14758:44;14724:152;;;;-1:-1:-1;;;14724:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14435:449;;;;;:::o;15398:217::-;15511:12;;;15471;15511;;;;;;;;;-1:-1:-1;;;;;15489:7:0;;;15504:5;;15489:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15489:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;15470:54:0;;;15543:7;15535:72;;;;-1:-1:-1;;;15535:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15398:217;;;:::o;6456:505::-;6549:14;6595:1;6584:8;:12;6576:62;;;;-1:-1:-1;;;6576:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6669:1;6657:9;:13;:31;;;;;6687:1;6674:10;:14;6657:31;6649:78;;;;-1:-1:-1;;;6649:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6738:20;6761:17;:8;6774:3;6761:17;:12;:17;:::i;:::-;6738:40;-1:-1:-1;6789:14:0;6806:31;6738:40;6826:10;6806:31;:19;:31;:::i;:::-;6789:48;-1:-1:-1;6848:16:0;6867:40;6891:15;6867:19;:9;6881:4;6867:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;6848:59;;6942:11;6930:9;:23;;;;;;;6456:505;-1:-1:-1;;;;;;;6456:505:0:o;7624:::-;7725:21;7782:1;7767:4;:11;:16;;7759:53;;;;;-1:-1:-1;;;7759:53:0;;;;;;;;;;;;-1:-1:-1;;;7759:53:0;;;;;;;;;;;;;;;7844:4;:11;7833:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7833:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;7833:23:0;;7823:33;;7880:8;7867:7;7875:1;7867:10;;;;;;;;;;;;;:21;;;;;7904:6;7899:223;7930:1;7916:4;:11;:15;7912:1;:19;7899:223;;;7954:14;7970:15;7989:42;8001:7;8010:4;8015:1;8010:7;;;;;;;;;;;;;;8019:4;8024:1;8028;8024:5;8019:11;;;;;;;;;;;;;;7989;:42::i;:::-;7953:78;;;;8063:47;8076:7;8084:1;8076:10;;;;;;;;;;;;;;8088:9;8099:10;8063:12;:47::i;:::-;8046:7;8054:1;8058;8054:5;8046:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7933:3:0;;7899:223;;;;7624:505;;;;;:::o;4945:481::-;5034:12;5060:14;5076;5094:26;5105:6;5113;5094:10;:26::i;:::-;5258:32;;;-1:-1:-1;;5258:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;5258:32:0;;;;;5248:43;;;;;;-1:-1:-1;;;;;;5161:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5161:251:0;;;;;;;5151:262;;;;;;;;;4945:481;-1:-1:-1;;;;;4945:481:0:o;14892:498::-;15163:51;;;-1:-1:-1;;;;;15163:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15163:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15152:63:0;;;;15117:12;;15131:17;;15152:10;;;;15163:51;15152:63;;;25:18:-1;15152: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;;;15152: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;;15116:99:0;;;;15248:7;:57;;;;-1:-1:-1;15260:11:0;;:16;;:44;;;15291:4;15280:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15280:24:0;15260:44;15226:156;;;;-1:-1:-1;;;15226:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14892:498;;;;;;:::o;24541:711::-;24648:6;24643:602;24674:1;24660:4;:11;:15;24656:1;:19;24643:602;;;24698:13;24713:14;24732:4;24737:1;24732:7;;;;;;;;;;;;;;24741:4;24746:1;24750;24746:5;24741:11;;;;;;;;;;;;;;24697:56;;;;24769:14;24788:36;24810:5;24817:6;24788:21;:36::i;:::-;24768:56;;;24839:14;24856:7;24864:1;24868;24864:5;24856:14;;;;;;;;;;;;;;24839:31;;24886:15;24903;24931:6;-1:-1:-1;;;;;24922:15:0;:5;-1:-1:-1;;;;;24922:15:0;;:61;;24964:9;24980:1;24922:61;;;24946:1;24950:9;24922:61;24885:98;;;;24998:10;25029:1;25015:4;:11;:15;25011:1;:19;:76;;25084:3;25011:76;;;25033:48;25052:7;25061:6;25069:4;25074:1;25078;25074:5;25069:11;;;;;;;;;;;;;;25033:18;:48::i;:::-;24998:89;;25111:42;25130:7;25139:5;25146:6;25111:18;:42::i;:::-;-1:-1:-1;;;;;25102:57:0;;25178:10;25190;25202:2;25216:1;25206:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25206:12:0;87:42:-1;143:17;;-1:-1;25206:12:0;;25102:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25102:131:0;-1:-1:-1;;;;;25102:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25102:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25102:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24677:3:0;;;;;-1:-1:-1;24643:602:0;;-1:-1:-1;;;;;;;;24643:602:0;;;24541:711;;;:::o;8210:526::-;8311:21;8368:1;8353:4;:11;:16;;8345:53;;;;;-1:-1:-1;;;8345:53:0;;;;;;;;;;;;-1:-1:-1;;;8345:53:0;;;;;;;;;;;;;;;8430:4;:11;8419:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8419:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;8419:23:0;;8409:33;;8483:9;8453:7;8478:1;8461:7;:14;:18;8453:27;;;;;;;;;;;;;;;;;:39;8517:11;;-1:-1:-1;;8517:15:0;8503:226;8534:5;;8503:226;;8562:14;8578:15;8597:42;8609:7;8618:4;8627:1;8623;:5;8618:11;;;;;;;;;;;;;;8631:4;8636:1;8631:7;;;;;;;8597:42;8561:78;;;;8671:46;8683:7;8691:1;8683:10;;;;;;;;;;;;;;8695:9;8706:10;8671:11;:46::i;:::-;8654:7;8666:1;8662;:5;8654:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;8541:3:0;8503:226;;29722:1178;29835:6;29830:1063;29861:1;29847:4;:11;:15;29843:1;:19;29830:1063;;;29885:13;29900:14;29919:4;29924:1;29919:7;;;;;;;;;;;;;;29928:4;29933:1;29937;29933:5;29928:11;;;;;;;;;;;;;;29884:56;;;;29956:14;29975:36;29997:5;30004:6;29975:21;:36::i;:::-;29955:56;;;30026:13;30051:42;30070:7;30079:5;30086:6;30051:18;:42::i;:::-;30026:68;;30109:16;30140:17;30228:13;30243;30261:4;-1:-1:-1;;;;;30261:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30261:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30261:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30261:18:0;;;;;;;-1:-1:-1;;;;;30227:52:0;;;;-1:-1:-1;30227:52:0;;-1:-1:-1;30295:17:0;;-1:-1:-1;;;;;30336:15:0;;;;;;;:61;;30378:8;30388;30336:61;;;30355:8;30365;30336:61;30294:103;;;;30426:56;30469:12;30433:5;-1:-1:-1;;;;;30426:23:0;;30458:4;30426:38;;;;;;;;;;;;;-1:-1:-1;;;;;30426:38:0;-1:-1:-1;;;;;30426:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30426:56:0;30412:70;;30512:65;30536:11;30549:12;30563:13;30512:23;:65::i;:::-;30497:80;;29830:1063;;;;30608:15;30625;30653:6;-1:-1:-1;;;;;30644:15:0;:5;-1:-1:-1;;;;;30644:15:0;;:67;;30689:12;30708:1;30644:67;;;30668:1;30672:12;30644:67;30607:104;;;;30726:10;30757:1;30743:4;:11;:15;30739:1;:19;:76;;30812:3;30739:76;;;30761:48;30780:7;30789:6;30797:4;30802:1;30806;30802:5;30797:11;;;;;;;30761:48;30868:12;;;30878:1;30868:12;;;;;;;;;;-1:-1:-1;;;30830:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30830:51:0;;;;;;;;;;;;;;;;;;;;;;30726:89;;-1:-1:-1;30830:9:0;;;;;;30840:10;;30852;;30726:89;;30868:12;;30830:51;;;;;;;;30868:12;;30830:51;;;;30868: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;30830:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30830:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29864:3:0;;;;;-1:-1:-1;29830:1063:0;;-1:-1:-1;;;;;;;;;;29830:1063:0;1474:129;1558:5;;;1553:16;;;;1545:50;;;;;-1:-1:-1;;;1545:50:0;;;;;;;;;;;;-1:-1:-1;;;1545:50:0;;;;;;;;;;;;;;7082:460;7175:13;7221:1;7209:9;:13;7201:64;;;;-1:-1:-1;;;7201:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7296:1;7284:9;:13;:31;;;;;7314:1;7301:10;:14;7284:31;7276:78;;;;-1:-1:-1;;;7276:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7365:14;7382:34;7411:4;7382:24;:9;7396;7382:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;7365:51;-1:-1:-1;7427:16:0;7446:34;7476:3;7446:25;:10;7461:9;7446:25;:14;:25;:::i;:34::-;7427:53;;7502:32;7532:1;7515:11;7503:9;:23;;;;;;;7502:32;:29;:32;:::i;:::-;7491:43;7082:460;-1:-1:-1;;;;;;7082:460:0:o;6025:309::-;6107:12;6150:1;6140:7;:11;6132:55;;;;;-1:-1:-1;;;6132:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6217:1;6206:8;:12;:28;;;;;6233:1;6222:8;:12;6206:28;6198:75;;;;-1:-1:-1;;;6198:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6318:8;6294:21;:7;6306:8;6294:21;:11;:21;:::i;:::-;:32;;;;;;;6025:309;-1:-1:-1;;;;6025:309:0:o;4516:337::-;4591:14;4607;4652:6;-1:-1:-1;;;;;4642:16:0;:6;-1:-1:-1;;;;;4642:16:0;;;4634:60;;;;;-1:-1:-1;;;4634:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4733:6;-1:-1:-1;;;;;4724:15:0;:6;-1:-1:-1;;;;;4724:15:0;;:53;;4762:6;4770;4724:53;;;4743:6;4751;4724:53;4705:72;;-1:-1:-1;4705:72:0;-1:-1:-1;;;;;;4796:20:0;;4788:57;;;;;-1:-1:-1;;;4788:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4516:337;;;;;:::o;17006:1348::-;17319:44;;;-1:-1:-1;;;17319:44:0;;-1:-1:-1;;;;;17319:44:0;;;;;;;;;;;;;;;;17224:12;;;;;;17331:7;17319:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17319:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17319:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17319:44:0;-1:-1:-1;;;;;17319:58:0;;17315:138;;;17394:47;;;-1:-1:-1;;;17394:47:0;;-1:-1:-1;;;;;17394:47:0;;;;;;;;;;;;;;;;17406:7;17394:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17394:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17394:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17394:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17315:138:0;17464:13;17479;17496:47;17519:7;17528:6;17536;17496:22;:47::i;:::-;17463:80;;;;17558:8;17570:1;17558:13;:30;;;;-1:-1:-1;17575:13:0;;17558:30;17554:793;;;17627:14;;-1:-1:-1;17643:14:0;;-1:-1:-1;17554:793:0;;;17691:19;17713:52;17730:14;17746:8;17756;17713:16;:52::i;:::-;17691:74;;17802:14;17784;:32;17780:556;;17863:10;17845:14;:28;;17837:73;;;;;-1:-1:-1;;;17837:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17951:14;;-1:-1:-1;17967:14:0;-1:-1:-1;17967:14:0;17780:556;;;18023:19;18045:52;18062:14;18078:8;18088;18045:16;:52::i;:::-;18023:74;;18141:14;18123;:32;;18116:40;;;;18201:10;18183:14;:28;;18175:73;;;;;-1:-1:-1;;;18175:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18289:14;-1:-1:-1;18305:14:0;;-1:-1:-1;17780:556:0;17554:793;;17006:1348;;;;;;;;;;;:::o;1611:142::-;1663:6;1690;;;:30;;-1:-1:-1;;1705:5:0;;;1719:1;1714;1705:5;1714:1;1700:15;;;;;:20;1690:30;1682:63;;;;;-1:-1:-1;;;1682:63:0;;;;;;;;;;;;-1:-1:-1;;;1682:63:0;;;;;;;;;;;;;;1338:128;1422:5;;;1417:16;;;;1409:49;;;;;-1:-1:-1;;;1409:49:0;;;;;;;;;;;;-1:-1:-1;;;1409:49:0;;;;;;;;;;;;;;5484:428;5577:13;5592;5619:14;5638:26;5649:6;5657;5638:10;:26::i;:::-;5618:46;;;5675:32;5683:7;5692:6;5700;5675:7;:32::i;:::-;;5719:13;5734;5761:32;5769:7;5778:6;5786;5761:7;:32::i;:::-;-1:-1:-1;;;;;5752:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5752:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5752:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5752:56:0;;;;;;;-1:-1:-1;;;;;5718:90:0;;;;-1:-1:-1;5718:90:0;;-1:-1:-1;;;;;;5842:16:0;;;;;;;:62;;5885:8;5895;5842:62;;;5862:8;5872;5842:62;5819:85;;;;-1:-1:-1;5484:428:0;-1:-1:-1;;;;;;;5484:428:0:o

Swarm Source

ipfs://3a07a5bd7e3638f07c450d9f7dbc47ecb318ae0c6573484bde75228ae69674eb
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.