Contract 0xfc0d2d06efe8d44f3eecc8e1df7c1509f7ba8e31

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbc281b7207831b4a649832e14fa0097f89b25d37947626b2af05336b829c4f8fSwap Exact Token...49144722022-10-03 6:27:152 hrs 23 mins ago0x46dff191646ba20453c6f6d9c7ff60431c17f07b IN  Stronghands Money: Swap Router0 CRO0.82317040
0x6f5ecce15b488f37a304903b1ffd5e9a91a635b9e741bebbb68bba1c16d3c3bcAdd Liquidity49142462022-10-03 6:05:432 hrs 45 mins ago0xf2ee306c702cd9063455f7e4aa7add076309f2b1 IN  Stronghands Money: Swap Router0 CRO1.041459958121 4,907.361835236
0x828135be0e91b91b83c193d26f35c7cae82325bba0dd438c2d8635002c20b7d4Add Liquidity ET...49141922022-10-03 6:00:372 hrs 50 mins ago0x49e55a0edd1c8fdea2baf3851fff54c4a52f49c1 IN  Stronghands Money: Swap Router326.241035193036473 CRO1.024004991938 4,907.364326601
0x4694f8a104ddfa55ffc241ccedab6ac4167a80b680ef510dc308a7eeac5db259Add Liquidity49108762022-10-03 0:47:228 hrs 3 mins ago0xa535d27afd10b915f75e5151312d40e4e642160e IN  Stronghands Money: Swap Router0 CRO1.0411062099530
0x6915f4cd63c722e066237ff453bfb55bca859efc0cbde7cd23fcb78ddd7516ebSwap Exact Token...49108662022-10-03 0:46:258 hrs 4 mins ago0xa535d27afd10b915f75e5151312d40e4e642160e IN  Stronghands Money: Swap Router0 CRO0.7268365325730
0xf6ac0fadbdb590a9fb638faf487476d059cb11db73071d6944af9122dd01442dSwap Exact Token...49072732022-10-02 19:06:3013 hrs 44 mins ago0x46dff191646ba20453c6f6d9c7ff60431c17f07b IN  Stronghands Money: Swap Router0 CRO0.79001520
0xebc240b1eeea155d154a8f60802e9837b6521a1fa652ac23c07e672639d00aa1Swap Exact Token...49072382022-10-02 19:03:1313 hrs 47 mins ago0x46dff191646ba20453c6f6d9c7ff60431c17f07b IN  Stronghands Money: Swap Router0 CRO0.74523280
0xb2dd98341495014af0a4654b8fe3d0e59efffca96a5b11bc4f53d392b7602cbfAdd Liquidity49014862022-10-02 9:59:0222 hrs 51 mins ago0x76e883d43c63718d40052a3749a43ae9002b35f0 IN  Stronghands Money: Swap Router0 CRO1.430803663487 4,907.945938256
0xb0f4dc54e46c423bb5b741605afa016fe300cd0103c1c5e1e0ba13de8fab0df2Swap Exact Token...48972912022-10-02 3:22:321 day 5 hrs ago0x1265a989b92bdcb9a5cb86d86f3701fca5514cb7 IN  Stronghands Money: Swap Router0 CRO0.689489187276 4,907.64085952
0xc4bc70454ecebb1a0f1bc0f97d526c1693418d34d8fc2c0fbfdd9aa35b5afb7bAdd Liquidity48963632022-10-02 1:54:531 day 6 hrs ago0xb1fc41cbad16cafdfc2ed196c7fe515dfb6a1577 IN  Stronghands Money: Swap Router0 CRO1.008759374158 4,908.183753677
0x188136b5b7a48ec03b4db7b9cb384578a361febb2c37f362e84f5ce38e2292ddAdd Liquidity48963142022-10-02 1:50:151 day 7 hrs ago0xb1fc41cbad16cafdfc2ed196c7fe515dfb6a1577 IN  Stronghands Money: Swap Router0 CRO1.041811566894 4,908.186030786
0xf5e87c585185c6b95d3759a9f8354de71642000b87dbdf793ae65bd29778b5fcSwap Exact ETH F...48962872022-10-02 1:47:421 day 7 hrs ago0xb1fc41cbad16cafdfc2ed196c7fe515dfb6a1577 IN  Stronghands Money: Swap Router2,500 CRO0.647331002696 4,908.187270232
0x72e7552e9a717518f01d84817d3ef1af619c686abac141e8721b4a34fe7524f6Swap Exact Token...48962792022-10-02 1:46:571 day 7 hrs ago0xb1fc41cbad16cafdfc2ed196c7fe515dfb6a1577 IN  Stronghands Money: Swap Router0 CRO0.65353500152 4,908.1876466
0x6e0b6bdb36c7621c600dc8db954889eafc4f07464c056602a155b5ba62053246Swap Exact Token...48959522022-10-02 1:16:041 day 7 hrs ago0xa535d27afd10b915f75e5151312d40e4e642160e IN  Stronghands Money: Swap Router0 CRO0.6998136168310
0x8f2b0b3e97f91d2048773171877c6c25bd64b0cb5cecd51d44834cc930cb4b80Add Liquidity48951652022-10-02 0:01:361 day 8 hrs ago0xa535d27afd10b915f75e5151312d40e4e642160e IN  Stronghands Money: Swap Router0 CRO1.0413865895540
0x21f4bf0055ecb27007118eac69aeb607357fb59ab5a58c552302701e191fbb84Swap Exact Token...48951542022-10-02 0:00:341 day 8 hrs ago0xa535d27afd10b915f75e5151312d40e4e642160e IN  Stronghands Money: Swap Router0 CRO0.7270020954550
0x8650966eac3939bb5019e442149a2a1eb6d404768f803ebb2dd190c9f7c631c7Add Liquidity48947032022-10-01 23:17:531 day 9 hrs ago0xf9aa2b8b6fc1ba884a10a677767cef449e529c72 IN  Stronghands Money: Swap Router0 CRO1.041404977627 4,908.259153465
0x2b5c1f44738c7a5411982e612740e77cc9fee7639272935af8ab3323b873eba2Swap Exact Token...48946832022-10-01 23:15:581 day 9 hrs ago0xf9aa2b8b6fc1ba884a10a677767cef449e529c72 IN  Stronghands Money: Swap Router0 CRO0.688530715105 4,908.260016438
0x124b29e0d9da0692d68c13e16904f3f1bb8d2d4bd45d83578d369d33043fa52bSwap Exact Token...48945512022-10-01 23:03:291 day 9 hrs ago0x0edb17996dabd08ae5551bafca04085932a32b4b IN  Stronghands Money: Swap Router0 CRO0.579980350322 4,908.266056691
0x63e9a52d3f58a0c9b7d5bf278b73aec91116439ae92abd34e21c5b4f35168bb4Swap Exact Token...48932462022-10-01 20:59:501 day 11 hrs ago0x991b76cc6bf004ba17c1e181d2bbe81a5d81be52 IN  Stronghands Money: Swap Router0 CRO0.653612165152 4,908.324811155
0x92ad4e1bc6c24f29393ee1593008d56da488a9d50b377665088cacd5d5ceb87eAdd Liquidity48870442022-10-01 11:13:041 day 21 hrs ago0xf2ee306c702cd9063455f7e4aa7add076309f2b1 IN  Stronghands Money: Swap Router0 CRO0.975752712096 4,908.607896491
0xc5aaf72f931064420b620f83c539f0dda4d6a315962df8391e94c8b2633d4f9eAdd Liquidity48870152022-10-01 11:10:201 day 21 hrs ago0x8ffcca0415998712b842e07f4ac805fc19e83847 IN  Stronghands Money: Swap Router0 CRO1.114215032251 4,908.609256058
0xd32a929621a060469974412cfbeb8bf49341007977c24bbfd8cd0b937e19799bSwap Exact Token...48870052022-10-01 11:09:231 day 21 hrs ago0xf1b8099cd49f8f924b2e925270584f54cda10ca6 IN  Stronghands Money: Swap Router0 CRO0.653709008445 4,908.609722813
0x06557d847192a4b34f643d7d4c9478edb740252eae2ce537a015b2b5b8f9e2ddSwap Exact Token...48869972022-10-01 11:08:381 day 21 hrs ago0x4027b11844b401dbfaaa54aca8e990680aa43c3d IN  Stronghands Money: Swap Router0 CRO0.653709056109 4,908.610080717
0x3b73849dcda544f96b74f57c9d9a5ac6395db3e4301c5ec3ea53144d380245f2Swap Exact Token...48860682022-10-01 9:41:001 day 23 hrs ago0x46dff191646ba20453c6f6d9c7ff60431c17f07b IN  Stronghands Money: Swap Router0 CRO0.7294560
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x828135be0e91b91b83c193d26f35c7cae82325bba0dd438c2d8635002c20b7d449141922022-10-03 6:00:372 hrs 50 mins ago Stronghands Money: Swap Router Cronos: WCRO Token326.241035193036473149 CRO
0xf6ac0fadbdb590a9fb638faf487476d059cb11db73071d6944af9122dd01442d49072732022-10-02 19:06:3013 hrs 44 mins ago Stronghands Money: Swap Router0x46dff191646ba20453c6f6d9c7ff60431c17f07b935.164047993407562726 CRO
0xf6ac0fadbdb590a9fb638faf487476d059cb11db73071d6944af9122dd01442d49072732022-10-02 19:06:3013 hrs 44 mins ago Cronos: WCRO Token Stronghands Money: Swap Router935.164047993407562726 CRO
0xb0f4dc54e46c423bb5b741605afa016fe300cd0103c1c5e1e0ba13de8fab0df248972912022-10-02 3:22:321 day 5 hrs ago Stronghands Money: Swap Router0x1265a989b92bdcb9a5cb86d86f3701fca5514cb718.381491435484243941 CRO
0xb0f4dc54e46c423bb5b741605afa016fe300cd0103c1c5e1e0ba13de8fab0df248972912022-10-02 3:22:321 day 5 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router18.381491435484243941 CRO
0xf5e87c585185c6b95d3759a9f8354de71642000b87dbdf793ae65bd29778b5fc48962872022-10-02 1:47:421 day 7 hrs ago Stronghands Money: Swap Router Cronos: WCRO Token2,500 CRO
0x6e0b6bdb36c7621c600dc8db954889eafc4f07464c056602a155b5ba6205324648959522022-10-02 1:16:041 day 7 hrs ago Stronghands Money: Swap Router0xa535d27afd10b915f75e5151312d40e4e642160e2.941319896636845724 CRO
0x6e0b6bdb36c7621c600dc8db954889eafc4f07464c056602a155b5ba6205324648959522022-10-02 1:16:041 day 7 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router2.941319896636845724 CRO
0x2b5c1f44738c7a5411982e612740e77cc9fee7639272935af8ab3323b873eba248946832022-10-01 23:15:581 day 9 hrs ago Stronghands Money: Swap Router0xf9aa2b8b6fc1ba884a10a677767cef449e529c72427.799674548400579838 CRO
0x2b5c1f44738c7a5411982e612740e77cc9fee7639272935af8ab3323b873eba248946832022-10-01 23:15:581 day 9 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router427.799674548400579838 CRO
0x3b73849dcda544f96b74f57c9d9a5ac6395db3e4301c5ec3ea53144d380245f248860682022-10-01 9:41:001 day 23 hrs ago Stronghands Money: Swap Router0x46dff191646ba20453c6f6d9c7ff60431c17f07b2,360.239394176907687861 CRO
0x3b73849dcda544f96b74f57c9d9a5ac6395db3e4301c5ec3ea53144d380245f248860682022-10-01 9:41:001 day 23 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router2,360.239394176907687861 CRO
0x5944297cf86753e80edfd0c218ab4690c0e40b09a72f50b68cf6892e7dbb3b4448785272022-09-30 21:48:202 days 11 hrs ago Stronghands Money: Swap Router Cronos: WCRO Token1.180797137820035494 CRO
0xb55bdce761cc3ef0c6b690ced123aca6fa1ed3e7072439859f959a41d7687da948775082022-09-30 20:11:542 days 12 hrs ago Stronghands Money: Swap Router Cronos: WCRO Token2 CRO
0xc5efe7fc51d05660ea81eed701866da48cbc4bd6b416665e29a7a55686d7b9e848764642022-09-30 18:32:522 days 14 hrs ago Stronghands Money: Swap Router0xf10b394bb8a39dfd23ca43d074ae42d8487392c2196.59457186733461931 CRO
0xc5efe7fc51d05660ea81eed701866da48cbc4bd6b416665e29a7a55686d7b9e848764642022-09-30 18:32:522 days 14 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router196.59457186733461931 CRO
0x7e7bfd1f446bed17fd07e4d9895b4603b7b12b487144b15707956dcf5630c0ea48727432022-09-30 12:40:082 days 20 hrs ago Stronghands Money: Swap Router0x48d6f4e110872a2e0e7ada60785ce56040391cd857.4554178018662657 CRO
0x7e7bfd1f446bed17fd07e4d9895b4603b7b12b487144b15707956dcf5630c0ea48727432022-09-30 12:40:082 days 20 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router57.4554178018662657 CRO
0xa392a7535fc5f6b8ea6ebcf0224366f357f87212ed32838709ecd0c23f2c472548670402022-09-30 3:40:563 days 5 hrs ago Stronghands Money: Swap Router0x74320548da1495c19b21897bd1a7abdf7bd5b9364.382508590163941511 CRO
0xa392a7535fc5f6b8ea6ebcf0224366f357f87212ed32838709ecd0c23f2c472548670402022-09-30 3:40:563 days 5 hrs ago Stronghands Money: Swap Router Cronos: WCRO Token796.275467884978443912 CRO
0x6737e447d807785b525b84d9bb02bfa0b8794e9f0931082a07bf57fcdd28247c48669952022-09-30 3:36:403 days 5 hrs ago Stronghands Money: Swap Router0x46dff191646ba20453c6f6d9c7ff60431c17f07b2,412.149903737620555862 CRO
0x6737e447d807785b525b84d9bb02bfa0b8794e9f0931082a07bf57fcdd28247c48669952022-09-30 3:36:403 days 5 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router2,412.149903737620555862 CRO
0xf0ef8646c6d38483c1f4884a1881c2a47aea8b377dc3546258af92142ee4a46f48668022022-09-30 3:18:263 days 5 hrs ago Stronghands Money: Swap Router0x46dff191646ba20453c6f6d9c7ff60431c17f07b609.162390662275667306 CRO
0xf0ef8646c6d38483c1f4884a1881c2a47aea8b377dc3546258af92142ee4a46f48668022022-09-30 3:18:263 days 5 hrs ago Cronos: WCRO Token Stronghands Money: Swap Router609.162390662275667306 CRO
0x5b21789706f95d8a429835ce47b5bda3d600a1a5bdafccd66903668dde65b80948590892022-09-29 15:07:023 days 17 hrs ago Stronghands Money: Swap Router0xe636ead63e11e049b50ea87d1d595057cd0053ea1 basecro
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-05-14
*/

pragma solidity =0.6.6;

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

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

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

library SwapLibrary {
    using SafeMath for uint;

    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'SwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'SwapLibrary: ZERO_ADDRESS');
    }

    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'd6569072202055363469dfae94a01f8dfe2b7af06d867f3f2ddf4d95a9d2a716' // init code hash
            ))));
    }

    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,) = ISwapPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'SwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'SwapLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'SwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'SwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        amountIn = (numerator / denominator).add(1);
    }

    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'SwapLibrary: 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);
        }
    }

    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'SwapLibrary: 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);
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

interface ISwapRouter02 is ISwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

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

contract SwapRouter is ISwapRouter02 {
    using SafeMath for uint;

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

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

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

    receive() external payable {
        assert(msg.sender == WETH);
    }

    // **** 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 (ISwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ISwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = SwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = SwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'SwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = SwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'SwapRouter: 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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ISwapPair(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 = SwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ISwapPair(pair).mint(to);
        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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        ISwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ISwapPair(pair).burn(to);
        (address token0,) = SwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'SwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'SwapRouter: 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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(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 = SwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(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 = SwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(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,) = SwapLibrary.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 ? SwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ISwapPair(SwapLibrary.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 = SwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, SwapLibrary.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 = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'SwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, SwapLibrary.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, 'SwapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(SwapLibrary.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, 'SwapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'SwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, SwapLibrary.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, 'SwapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, SwapLibrary.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, 'SwapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'SwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(SwapLibrary.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,) = SwapLibrary.sortTokens(input, output);
            ISwapPair pair = ISwapPair(SwapLibrary.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 = SwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? SwapLibrary.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, SwapLibrary.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, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) {
        require(path[0] == WETH, 'SwapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(SwapLibrary.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, 'SwapRouter: 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, 'SwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amountIn);
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'SwapRouter: 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 SwapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

60c060405234801561001057600080fd5b50604051620047e1380380620047e18339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61465c620001856000398061019f5280610d245280610d5f5280610e565280611081528061140b528061157e52806119455280611a4c5280611b025280611bd05280611d235280611dab5280611ff0528061206b528061211a52806121e6528061228852806122fc52806127fa5280612a6d5280612ac35280612af75280612b6b5280612d0b5280612e5b5280612ee3525080610ef15280610fc85280611147528061118052806112bb52806114a6528061155c52806116cc5280611c705280611ddd5280611f40528061232e5280612587528061277f52806127a852806127d852806129455280612aa15280612dab5280612f1552806137d452806138175280613afa5280613c8052806140e452806141925280614212525061465c6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610b8d578063f305d71914610c0d578063fb3bdb4114610c53576101c8565b8063c45a015514610a50578063d06ca61f14610a65578063ded9382a14610b1a576101c8565b8063af2979eb116100b0578063af2979eb1461091c578063b6f9de951461096f578063baa2abde146109f3576101c8565b80638803dbee1461081f578063ad5c4648146108b5578063ad615dec146108e6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106cf5780637ff36ab51461076557806385f8c259146107e9576101c8565b80634a25d94a146105305780635b0d5984146105c65780635c11d79514610639576101c8565b80631f00ca74116101695780631f00ca74146103675780632195995c1461041c57806338ed17391461049a576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cd7565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610df1565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610317600480360360a08110156102a457600080fd5b813591602081013591810190606081016040820135600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b91935091506001600160a01b038135169060200135610e06565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035357818101518382015260200161033b565b505050509050019250505060405180910390f35b34801561037357600080fd5b506103176004803603604081101561038a57600080fd5b81359190810190604081016020820135600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460208302840111600160201b831117156103de57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611140945050505050565b34801561042857600080fd5b50610220600480360361016081101561044057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611176565b3480156104a657600080fd5b50610317600480360360a08110156104bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e357600080fd5b8201836020820111156104f557600080fd5b803590602001918460208302840111600160201b8311171561051657600080fd5b91935091506001600160a01b038135169060200135611270565b34801561053c57600080fd5b50610317600480360360a081101561055357600080fd5b813591602081013591810190606081016040820135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460208302840111600160201b831117156105ac57600080fd5b91935091506001600160a01b0381351690602001356113bb565b3480156105d257600080fd5b5061026f60048036036101408110156105ea57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611554565b34801561064557600080fd5b506101c6600480360360a081101561065c57600080fd5b813591602081013591810190606081016040820135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b91935091506001600160a01b038135169060200135611662565b3480156106db57600080fd5b506101c6600480360360a08110156106f257600080fd5b813591602081013591810190606081016040820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b91935091506001600160a01b0381351690602001356118f7565b6103176004803603608081101561077b57600080fd5b81359190810190604081016020820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b038135169060200135611b88565b3480156107f557600080fd5b5061026f6004803603606081101561080c57600080fd5b5080359060208101359060400135611ee8565b34801561082b57600080fd5b50610317600480360360a081101561084257600080fd5b813591602081013591810190606081016040820135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460208302840111600160201b8311171561089b57600080fd5b91935091506001600160a01b038135169060200135611ef5565b3480156108c157600080fd5b506108ca611fee565b604080516001600160a01b039092168252519081900360200190f35b3480156108f257600080fd5b5061026f6004803603606081101561090957600080fd5b5080359060208101359060400135612012565b34801561092857600080fd5b5061026f600480360360c081101561093f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561201f565b6101c66004803603608081101561098557600080fd5b81359190810190604081016020820135600160201b8111156109a657600080fd5b8201836020820111156109b857600080fd5b803590602001918460208302840111600160201b831117156109d957600080fd5b91935091506001600160a01b0381351690602001356121a0565b3480156109ff57600080fd5b50610220600480360360e0811015610a1657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612539565b348015610a5c57600080fd5b506108ca61277d565b348015610a7157600080fd5b5061031760048036036040811015610a8857600080fd5b81359190810190604081016020820135600160201b811115610aa957600080fd5b820183602082011115610abb57600080fd5b803590602001918460208302840111600160201b83111715610adc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127a1945050505050565b348015610b2657600080fd5b506102206004803603610140811015610b3e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127ce565b348015610b9957600080fd5b50610bef6004803603610100811015610bb157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128e2565b60408051938452602084019290925282820152519081900360600190f35b610bef600480360360c0811015610c2357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a1e565b61031760048036036080811015610c6957600080fd5b81359190810190604081016020820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b038135169060200135612cc3565b6000808242811015610d1e576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b610d4d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612539565b9093509150610d5d898685613052565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050610de585836131bc565b50965096945050505050565b6000610dfe8484846132b4565b949350505050565b60608142811015610e4c576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e8657fe5b905060200201356001600160a01b03166001600160a01b031614610eec576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b610f4a7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133a492505050565b91508682600184510381518110610f5d57fe5b60200260200101511015610fa25760405162461bcd60e51b81526004018080602001828103825260268152602001806145306026913960400191505060405180910390fd5b61104086866000818110610fb257fe5b905060200201356001600160a01b0316336110267f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ff457fe5b905060200201356001600160a01b03168b8b600181811061101157fe5b905060200201356001600160a01b03166134f0565b8560008151811061103357fe5b60200260200101516135c8565b61107f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613725915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110be57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110fc57600080fd5b505af1158015611110573d6000803e3d6000fd5b50505050611135848360018551038151811061112857fe5b60200260200101516131bc565b509695505050505050565b606061116d7f0000000000000000000000000000000000000000000000000000000000000000848461396b565b90505b92915050565b60008060006111a67f00000000000000000000000000000000000000000000000000000000000000008f8f6134f0565b90506000876111b5578c6111b9565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561122f57600080fd5b505af1158015611243573d6000803e3d6000fd5b505050506112568f8f8f8f8f8f8f612539565b809450819550505050509b509b9950505050505050505050565b606081428110156112b6576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b6113147f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133a492505050565b9150868260018451038151811061132757fe5b6020026020010151101561136c5760405162461bcd60e51b81526004018080602001828103825260268152602001806145306026913960400191505060405180910390fd5b61137c86866000818110610fb257fe5b61113582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613725915050565b60608142811015611401576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061143b57fe5b905060200201356001600160a01b03166001600160a01b0316146114a1576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b6114ff7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396b92505050565b9150868260008151811061150f57fe5b60200260200101511115610fa25760405162461bcd60e51b81526004018080602001828103825260228152602001806145c06022913960400191505060405180910390fd5b6000806115a27f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006134f0565b90506000866115b1578b6115b5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b505050506116518d8d8d8d8d8d61201f565b9d9c50505050505050505050505050565b80428110156116a6576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b61171b858560008181106116b657fe5b905060200201356001600160a01b0316336117157f0000000000000000000000000000000000000000000000000000000000000000898960008181106116f857fe5b905060200201356001600160a01b03168a8a600181811061101157fe5b8a6135c8565b60008585600019810181811061172d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561179257600080fd5b505afa1580156117a6573d6000803e3d6000fd5b505050506040513d60208110156117bc57600080fd5b505160408051602088810282810182019093528882529293506117fe929091899189918291850190849080828437600092019190915250889250613aa3915050565b866118b0828888600019810181811061181357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b50519063ffffffff613db516565b10156118ed5760405162461bcd60e51b81526004018080602001828103825260268152602001806145306026913960400191505060405180910390fd5b5050505050505050565b804281101561193b576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197557fe5b905060200201356001600160a01b03166001600160a01b0316146119db576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b6119eb858560008181106116b657fe5b611a29858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613aa3915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a9357600080fd5b505afa158015611aa7573d6000803e3d6000fd5b505050506040513d6020811015611abd57600080fd5b5051905086811015611b005760405162461bcd60e51b81526004018080602001828103825260268152602001806145306026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b505050506118ed84826131bc565b60608142811015611bce576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c0557fe5b905060200201356001600160a01b03166001600160a01b031614611c6b576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b611cc97f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133a492505050565b91508682600184510381518110611cdc57fe5b60200260200101511015611d215760405162461bcd60e51b81526004018080602001828103825260268152602001806145306026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d5d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d9057600080fd5b505af1158015611da4573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e097f0000000000000000000000000000000000000000000000000000000000000000898960008181106116f857fe5b84600081518110611e1657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e6d57600080fd5b505af1158015611e81573d6000803e3d6000fd5b505050506040513d6020811015611e9757600080fd5b5051611e9f57fe5b611ede82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613725915050565b5095945050505050565b6000610dfe848484613e0d565b60608142811015611f3b576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b611f997f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396b92505050565b91508682600081518110611fa957fe5b6020026020010151111561136c5760405162461bcd60e51b81526004018080602001828103825260228152602001806145c06022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dfe848484613efd565b60008142811015612065576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b612094887f00000000000000000000000000000000000000000000000000000000000000008989893089612539565b604080516370a0823160e01b8152306004820152905191945061211892508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120e757600080fd5b505afa1580156120fb573d6000803e3d6000fd5b505050506040513d602081101561211157600080fd5b5051613052565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561217e57600080fd5b505af1158015612192573d6000803e3d6000fd5b5050505061113584836131bc565b80428110156121e4576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061221b57fe5b905060200201356001600160a01b03166001600160a01b031614612281576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122e157600080fd5b505af11580156122f5573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61235a7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116f857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b505050506040513d60208110156123d457600080fd5b50516123dc57fe5b6000868660001981018181106123ee57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561245357600080fd5b505afa158015612467573d6000803e3d6000fd5b505050506040513d602081101561247d57600080fd5b505160408051602089810282810182019093528982529293506124bf9290918a918a918291850190849080828437600092019190915250899250613aa3915050565b876118b082898960001981018181106124d457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187857600080fd5b6000808242811015612580576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b60006125ad7f00000000000000000000000000000000000000000000000000000000000000008c8c6134f0565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561260857600080fd5b505af115801561261c573d6000803e3d6000fd5b505050506040513d602081101561263257600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60408110156126a957600080fd5b508051602090910151909250905060006126c38e8e613fbf565b509050806001600160a01b03168e6001600160a01b0316146126e65781836126e9565b82825b90975095508a87101561272d5760405162461bcd60e51b81526004018080602001828103825260218152602001806146066021913960400191505060405180910390fd5b8986101561276c5760405162461bcd60e51b815260040180806020018281038252602181526020018061450f6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606061116d7f000000000000000000000000000000000000000000000000000000000000000084846133a4565b600080600061281e7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006134f0565b905060008761282d578c612831565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506128cd8e8e8e8e8e8e610cd7565b909f909e509c50505050505050505050505050565b6000806000834281101561292b576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b6129398c8c8c8c8c8c6140b3565b9094509250600061296b7f00000000000000000000000000000000000000000000000000000000000000008e8e6134f0565b90506129798d3383886135c8565b6129858c3383876135c8565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129dd57600080fd5b505af11580156129f1573d6000803e3d6000fd5b505050506040513d6020811015612a0757600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a67576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b612a958a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140b3565b90945092506000612ae77f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006134f0565b9050612af58b3383886135c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5057600080fd5b505af1158015612b64573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612be957600080fd5b505af1158015612bfd573d6000803e3d6000fd5b505050506040513d6020811015612c1357600080fd5b5051612c1b57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c7357600080fd5b505af1158015612c87573d6000803e3d6000fd5b505050506040513d6020811015612c9d57600080fd5b5051925034841015612cb557612cb5338534036131bc565b505096509650969350505050565b60608142811015612d09576040805162461bcd60e51b8152602060048201526013602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d4057fe5b905060200201356001600160a01b03166001600160a01b031614612da6576040805162461bcd60e51b81526020600482015260186024820152770a6eec2e0a4deeae8cae47440929cac82989288bea082a8960431b604482015290519081900360640190fd5b612e047f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396b92505050565b91503482600081518110612e1457fe5b60200260200101511115612e595760405162461bcd60e51b81526004018080602001828103825260228152602001806145c06022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e9557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ec857600080fd5b505af1158015612edc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f417f0000000000000000000000000000000000000000000000000000000000000000898960008181106116f857fe5b84600081518110612f4e57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fa557600080fd5b505af1158015612fb9573d6000803e3d6000fd5b505050506040513d6020811015612fcf57600080fd5b5051612fd757fe5b61301682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613725915050565b8160008151811061302357fe5b6020026020010151341115611ede57611ede338360008151811061304357fe5b602002602001015134036131bc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130cf5780518252601f1990920191602091820191016130b0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613131576040519150601f19603f3d011682016040523d82523d6000602084013e613136565b606091505b5091509150818015613164575080511580613164575080806020019051602081101561316157600080fd5b50515b6131b5576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132085780518252601f1990920191602091820191016131e9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461326a576040519150601f19603f3d011682016040523d82523d6000602084013e61326f565b606091505b50509050806132af5760405162461bcd60e51b815260040180806020018281038252602381526020018061459d6023913960400191505060405180910390fd5b505050565b60008084116132f45760405162461bcd60e51b81526004018080602001828103825260268152602001806144e96026913960400191505060405180910390fd5b6000831180156133045750600082115b61333f5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c66023913960400191505060405180910390fd5b6000613353856103e663ffffffff61432716565b90506000613367828563ffffffff61432716565b9050600061338d83613381886103e863ffffffff61432716565b9063ffffffff61439316565b905080828161339857fe5b04979650505050505050565b60606002825110156133fd576040805162461bcd60e51b815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561341557600080fd5b5060405190808252806020026020018201604052801561343f578160200160208202803683370190505b509050828160008151811061345057fe5b60200260200101818152505060005b60018351038110156134e8576000806134a28786858151811061347e57fe5b602002602001015187866001018151811061349557fe5b60200260200101516143eb565b915091506134c48484815181106134b557fe5b602002602001015183836132b4565b8484600101815181106134d357fe5b6020908102919091010152505060010161345f565b509392505050565b60008060006134ff8585613fbf565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fd6569072202055363469dfae94a01f8dfe2b7af06d867f3f2ddf4d95a9d2a716609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061364d5780518252601f19909201916020918201910161362e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136af576040519150601f19603f3d011682016040523d82523d6000602084013e6136b4565b606091505b50915091508180156136e25750805115806136e257508080602001905160208110156136df57600080fd5b50515b61371d5760405162461bcd60e51b81526004018080602001828103825260248152602001806145e26024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139655760008084838151811061374357fe5b602002602001015185846001018151811061375a57fe5b60200260200101519150915060006137728383613fbf565b509050600087856001018151811061378657fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137b4578260006137b8565b6000835b91509150600060028a510388106137cf5788613810565b6138107f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061380357fe5b60200260200101516134f0565b905061383d7f000000000000000000000000000000000000000000000000000000000000000088886134f0565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561387a576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138eb5781810151838201526020016138d3565b50505050905090810190601f1680156139185780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561393a57600080fd5b505af115801561394e573d6000803e3d6000fd5b505060019099019850613728975050505050505050565b50505050565b60606002825110156139c4576040805162461bcd60e51b815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156139dc57600080fd5b50604051908082528060200260200182016040528015613a06578160200160208202803683370190505b5090508281600183510381518110613a1a57fe5b60209081029190910101528151600019015b80156134e857600080613a5c87866001860381518110613a4857fe5b602002602001015187868151811061349557fe5b91509150613a7e848481518110613a6f57fe5b60200260200101518383613e0d565b846001850381518110613a8d57fe5b6020908102919091010152505060001901613a2c565b60005b60018351038110156132af57600080848381518110613ac157fe5b6020026020010151858460010181518110613ad857fe5b6020026020010151915091506000613af08383613fbf565b5090506000613b207f000000000000000000000000000000000000000000000000000000000000000085856134f0565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b6157600080fd5b505afa158015613b75573d6000803e3d6000fd5b505050506040513d6060811015613b8b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613bc8578284613bcb565b83835b91509150613c29828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187857600080fd5b9550613c368683836132b4565b945050505050600080856001600160a01b0316886001600160a01b031614613c6057826000613c64565b6000835b91509150600060028c51038a10613c7b578a613caf565b613caf7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061380357fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d39578181015183820152602001613d21565b50505050905090810190601f168015613d665780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d8857600080fd5b505af1158015613d9c573d6000803e3d6000fd5b50506001909b019a50613aa69950505050505050505050565b80820382811115611170576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e4d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145566027913960400191505060405180910390fd5b600083118015613e5d5750600082115b613e985760405162461bcd60e51b81526004018080602001828103825260238152602001806144c66023913960400191505060405180910390fd5b6000613ebc6103e8613eb0868863ffffffff61432716565b9063ffffffff61432716565b90506000613ed66103e6613eb0868963ffffffff613db516565b9050613ef36001828481613ee657fe5b049063ffffffff61439316565b9695505050505050565b6000808411613f53576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015613f635750600082115b613f9e5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c66023913960400191505060405180910390fd5b82613faf858463ffffffff61432716565b81613fb657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614029576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061404957828461404c565b83835b90925090506001600160a01b0382166140ac576040805162461bcd60e51b815260206004820152601960248201527f537761704c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561412d57600080fd5b505afa158015614141573d6000803e3d6000fd5b505050506040513d602081101561415757600080fd5b50516001600160a01b0316141561420a57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141dd57600080fd5b505af11580156141f1573d6000803e3d6000fd5b505050506040513d602081101561420757600080fd5b50505b6000806142387f00000000000000000000000000000000000000000000000000000000000000008b8b6143eb565b9150915081600014801561424a575080155b1561425a5787935086925061431a565b6000614267898484613efd565b90508781116142ba57858110156142af5760405162461bcd60e51b815260040180806020018281038252602181526020018061450f6021913960400191505060405180910390fd5b889450925082614318565b60006142c7898486613efd565b9050898111156142d357fe5b878110156143125760405162461bcd60e51b81526004018080602001828103825260218152602001806146066021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143425750508082028282828161433f57fe5b04145b611170576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611170576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143fa8585613fbf565b5090506144088686866134f0565b506000806144178888886134f0565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561444f57600080fd5b505afa158015614463573d6000803e3d6000fd5b505050506040513d606081101561447957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146144b35780826144b6565b81815b9099909850965050505050505056fe537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5453776170526f757465723a20494e53554646494349454e545f425f414d4f554e5453776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5453776170526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454453776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454453776170526f757465723a20494e53554646494349454e545f415f414d4f554e54a2646970667358221220375d1a530df98c8b2dae6bd2704468dd15bf48587845fa1eb3086d118a03a3d064736f6c634300060600330000000000000000000000001ed37e4323e429c3fbc28461c14a181cd20fc4e80000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

0000000000000000000000001ed37e4323e429c3fbc28461c14a181cd20fc4e80000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : _factory (address): 0x1ed37e4323e429c3fbc28461c14a181cd20fc4e8
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ed37e4323e429c3fbc28461c14a181cd20fc4e8
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

13511:16287:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13976:10;-1:-1:-1;;;;;13990:4:0;13976:18;;13969:26;;;;13511:16287;;12:1:-1;9;2:12;17596:510:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17596:510:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17596:510:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28962:207;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28962:207:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28962:207:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23811:756;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23811:756:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23811:756:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23811:756:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23811:756: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;23811:756:0;;-1:-1:-1;23811:756:0;-1:-1:-1;;;;;;23811:756: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;23811:756:0;;;;;;;;;;;;;;;;;29597:198;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29597:198:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29597:198:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29597:198:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29597:198: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;29597:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29597:198:0;;-1:-1:-1;29597:198:0;;-1:-1:-1;;;;;29597:198:0:i;18114:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18114:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18114:588:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21371:537::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21371:537:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21371:537:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21371:537:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21371:537: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;21371:537:0;;-1:-1:-1;21371:537:0;-1:-1:-1;;;;;;21371:537:0;;;;;;;;:::i;23069:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23069:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23069:734:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23069:734:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23069:734: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;23069:734:0;;-1:-1:-1;23069:734:0;-1:-1:-1;;;;;;23069:734:0;;;;;;;;:::i;19923:614::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19923:614:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19923:614:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26704:591::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26704:591:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26704:591:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26704:591:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26704:591: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;26704:591:0;;-1:-1:-1;26704:591:0;-1:-1:-1;;;;;;26704:591:0;;;;;;;;:::i;28016:711::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28016:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28016:711:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28016:711:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28016:711: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;28016:711:0;;-1:-1:-1;28016:711:0;-1:-1:-1;;;;;;28016:711:0;;;;;;;;:::i;22443:618::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22443:618:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22443:618:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22443:618: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;22443:618:0;;-1:-1:-1;22443:618:0;-1:-1:-1;;;;;;22443:618:0;;;;;;;;:::i;29177:206::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29177:206:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29177:206:0;;;;;;;;;;;;:::i;21916:515::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21916:515:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21916:515:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21916:515:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21916:515: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;21916:515:0;;-1:-1:-1;21916:515:0;-1:-1:-1;;;;;;21916:515:0;;;;;;;;:::i;13635:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13635:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;13635:38:0;;;;;;;;;;;;;;28771:183;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28771:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28771:183:0;;;;;;;;;;;;:::i;19378:537::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19378:537:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19378:537:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27303:705::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27303:705:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27303:705:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27303:705: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;27303:705:0;;-1:-1:-1;27303:705:0;-1:-1:-1;;;;;;27303:705:0;;;;;;;;:::i;16823:765::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16823:765:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16823:765:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13587:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13587:41:0;;;:::i;29391:198::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29391:198:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29391:198:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29391:198:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29391:198: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;29391:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29391:198:0;;-1:-1:-1;29391:198:0;;-1:-1:-1;;;;;29391:198:0:i;18710:589::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18710:589:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18710:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15345:649::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15345:649:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15345:649:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16002:778;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16002:778:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24575:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24575:790:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24575:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24575:790: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;24575:790:0;;-1:-1:-1;24575:790:0;-1:-1:-1;;;;;;24575:790:0;;;;;;;;:::i;17596:510::-;17772:16;17790:14;17753:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;17844:94:::1;17860:5;17867:4;17873:9;17884:14;17900:12;17922:4;17929:8;17844:15;:94::i;:::-;17817:121:::0;;-1:-1:-1;17817:121:0;-1:-1:-1;17949:51:0::1;17977:5:::0;17984:2;17817:121;17949:27:::1;:51::i;:::-;18017:4;-1:-1:-1::0;;;;;18011:20:0::1;;18032:9;18011:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18011:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18011:31:0;;;;18053:45;18084:2;18088:9;18053:30;:45::i;:::-;17596:510:::0;;;;;;;;;;:::o;28962:207::-;29070:14;29104:57;29129:8;29139:9;29150:10;29104:24;:57::i;:::-;29097:64;28962:207;-1:-1:-1;;;;28962:207:0:o;23811:756::-;23980:21;23961:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24047:4:0::1;24022:29;:4:::0;;-1:-1:-1;;24027:15:0;;24022:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24022:21:0::1;-1:-1:-1::0;;;;;24022:29:0::1;;24014:66;;;::::0;;-1:-1:-1;;;24014:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24014:66:0;;;;;;;;;;;;;::::1;;24101:50;24127:7;24136:8;24146:4;;24101:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24101:25:0::1;::::0;-1:-1:-1;;;24101:50:0:i:1;:::-;24091:60;;24201:12;24170:7;24195:1;24178:7;:14;:18;24170:27;;;;;;;;;;;;;;:43;;24162:94;;;;-1:-1:-1::0;;;24162:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24267:112;24299:4;;24304:1;24299:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24299:7:0::1;24308:10;24320:46;24340:7;24349:4;;24354:1;24349:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24349:7:0::1;24358:4;;24363:1;24358:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24358:7:0::1;24320:19;:46::i;:::-;24368:7;24376:1;24368:10;;;;;;;;;;;;;;24267:31;:112::i;:::-;24390:35;24396:7;24405:4;;24390:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24419:4:0::1;::::0;-1:-1:-1;24390:5:0::1;::::0;-1:-1:-1;;24390:35:0:i:1;:::-;24442:4;-1:-1:-1::0;;;;;24436:20:0::1;;24457:7;24482:1;24465:7;:14;:18;24457:27;;;;;;;;;;;;;;24436:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24436:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24436:49:0;;;;24496:63;24527:2;24531:7;24556:1;24539:7;:14;:18;24531:27;;;;;;;;;;;;;;24496:30;:63::i;:::-;23811:756:::0;;;;;;;;;:::o;29597:198::-;29696:21;29737:50;29762:7;29771:9;29782:4;29737:24;:50::i;:::-;29730:57;;29597:198;;;;;:::o;18114:588::-;18341:12;18355;18380;18395:44;18415:7;18424:6;18432;18395:19;:44::i;:::-;18380:59;;18450:10;18463;:33;;18487:9;18463:33;;;-1:-1:-1;;18463:33:0;18507:75;;;-1:-1:-1;;;18507:75:0;;18530:10;18507:75;;;;18550:4;18507:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18450:46;;-1:-1:-1;;;;;;18507:22:0;;;;;:75;;;;;-1:-1:-1;;18507:75:0;;;;;;;;-1:-1:-1;18507:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;18507:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18507:75:0;;;;18614:80;18630:6;18638;18646:9;18657:10;18669;18681:2;18685:8;18614:15;:80::i;:::-;18593:101;;;;;;;;18114:588;;;;;;;;;;;;;;;;:::o;21371:537::-;21543:21;21524:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;21587:50:::1;21613:7;21622:8;21632:4;;21587:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21587:25:0::1;::::0;-1:-1:-1;;;21587:50:0:i:1;:::-;21577:60;;21687:12;21656:7;21681:1;21664:7;:14;:18;21656:27;;;;;;;;;;;;;;:43;;21648:94;;;;-1:-1:-1::0;;;21648:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21753:112;21785:4;;21790:1;21785:7;;;;;;21753:112;21876:24;21882:7;21891:4;;21876:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21897:2:0;;-1:-1:-1;21876:5:0::1;::::0;-1:-1:-1;;21876:24:0:i:1;23069:734::-:0;23238:21;23219:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23305:4:0::1;23280:29;:4:::0;;-1:-1:-1;;23285:15:0;;23280:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;23280:21:0::1;-1:-1:-1::0;;;;;23280:29:0::1;;23272:66;;;::::0;;-1:-1:-1;;;23272:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23272:66:0;;;;;;;;;;;;;::::1;;23359:50;23384:7;23393:9;23404:4;;23359:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23359:24:0::1;::::0;-1:-1:-1;;;23359:50:0:i:1;:::-;23349:60;;23442:11;23428:7;23436:1;23428:10;;;;;;;;;;;;;;:25;;23420:72;;;;-1:-1:-1::0;;;23420:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19923:614:::0;20171:14;20198:12;20213:41;20233:7;20242:5;20249:4;20213:19;:41::i;:::-;20198:56;;20265:10;20278;:33;;20302:9;20278:33;;;-1:-1:-1;;20278:33:0;20322:75;;;-1:-1:-1;;;20322:75:0;;20345:10;20322:75;;;;20365:4;20322:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20265:46;;-1:-1:-1;;;;;;20322:22:0;;;;;:75;;;;;-1:-1:-1;;20322:75:0;;;;;;;;-1:-1:-1;20322:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;20322:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20322:75:0;;;;20420:109;20468:5;20475:9;20486:14;20502:12;20516:2;20520:8;20420:47;:109::i;:::-;20408:121;19923:614;-1:-1:-1;;;;;;;;;;;;;19923:614:0:o;26704:591::-;26886:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;26907:110:::1;26939:4;;26944:1;26939:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26939:7:0::1;26948:10;26960:46;26980:7;26989:4;;26994:1;26989:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26989:7:0::1;26998:4;;27003:1;26998:7;;;;;;26960:46;27008:8;26907:31;:110::i;:::-;27028:18;27056:4:::0;;-1:-1:-1;;27061:15:0;;27056:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27056:21:0::1;-1:-1:-1::0;;;;;27049:39:0::1;;27089:2;27049:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27049:43:0::1;-1:-1:-1::0;;;;;27049:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27049:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27049:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27049:43:0;27103:44:::1;::::0;;27049:43:::1;27103:44:::0;;::::1;::::0;;;;;;;;;;;27049:43;;-1:-1:-1;27103:44:0::1;::::0;;;27138:4;;;;;;27103:44;::::1;::::0;27138:4;;27103:44;27138:4;27103:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27144:2:0;;-1:-1:-1;27103:34:0::1;::::0;-1:-1:-1;;27103:44:0:i:1;:::-;27232:12:::0;27166:62:::1;27214:13:::0;27173:4;;-1:-1:-1;;27178:15:0;;27173:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27173:21:0::1;-1:-1:-1::0;;;;;27166:39:0::1;;27206:2;27166:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27166:43:0::1;-1:-1:-1::0;;;;;27166:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27166:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27166:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27166:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;27158:129;;;;-1:-1:-1::0;;;27158:129:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13794:1;26704:591:::0;;;;;;;:::o;28016:711::-;28195:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28249:4:0::1;28224:29;:4:::0;;-1:-1:-1;;28229:15:0;;28224:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28224:21:0::1;-1:-1:-1::0;;;;;28224:29:0::1;;28216:66;;;::::0;;-1:-1:-1;;;28216:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28216:66:0;;;;;;;;;;;;;::::1;;28293:110;28325:4;;28330:1;28325:7;;;;;;28293:110;28414:55;28449:4;;28414:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28463:4:0::1;::::0;-1:-1:-1;28414:34:0::1;::::0;-1:-1:-1;;28414:55:0:i:1;:::-;28497:37;::::0;;-1:-1:-1;;;28497:37:0;;28528:4:::1;28497:37;::::0;::::1;::::0;;;28480:14:::1;::::0;-1:-1:-1;;;;;28504:4:0::1;28497:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28497:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28497:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28497:37:0;;-1:-1:-1;28553:25:0;;::::1;;28545:76;;;;-1:-1:-1::0;;;28545:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28638:4;-1:-1:-1::0;;;;;28632:20:0::1;;28653:9;28632:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28632:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28632:31:0;;;;28674:45;28705:2;28709:9;28674:30;:45::i;22443:618::-:0;22605:21;22586:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;22658:4:::1;-1:-1:-1::0;;;;;22647:15:0::1;:4;;22652:1;22647:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;22647:7:0::1;-1:-1:-1::0;;;;;22647:15:0::1;;22639:52;;;::::0;;-1:-1:-1;;;22639:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22639:52:0;;;;;;;;;;;;;::::1;;22712:51;22738:7;22747:9;22758:4;;22712:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22712:25:0::1;::::0;-1:-1:-1;;;22712:51:0:i:1;:::-;22702:61;;22813:12;22782:7;22807:1;22790:7;:14;:18;22782:27;;;;;;;;;;;;;;:43;;22774:94;;;;-1:-1:-1::0;;;22774:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22885:4;-1:-1:-1::0;;;;;22879:19:0::1;;22906:7;22914:1;22906:10;;;;;;;;;;;;;;22879:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22879:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22879:40:0;;;;;22943:4;-1:-1:-1::0;;;;;22937:20:0::1;;22958:46;22978:7;22987:4;;22992:1;22987:7;;;;;;22958:46;23006:7;23014:1;23006:10;;;;;;;;;;;;;;22937:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;22937:80:0::1;-1:-1:-1::0;;;;;22937:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22937:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22937:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22937:80:0;22930:88:::1;;;;23029:24;23035:7;23044:4;;23029:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23050:2:0;;-1:-1:-1;23029:5:0::1;::::0;-1:-1:-1;;23029:24:0:i:1;:::-;22443:618:::0;;;;;;;;:::o;29177:206::-;29285:13;29318:57;29342:9;29353;29364:10;29318:23;:57::i;21916:515::-;22088:21;22069:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;22132:50:::1;22157:7;22166:9;22177:4;;22132:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22132:24:0::1;::::0;-1:-1:-1;;;22132:50:0:i:1;:::-;22122:60;;22215:11;22201:7;22209:1;22201:10;;;;;;;;;;;;;;:25;;22193:72;;;;-1:-1:-1::0;;;22193:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13635:38:::0;;;:::o;28771:183::-;28868:12;28900:46;28918:7;28927:8;28937;28900:17;:46::i;19378:537::-;19583:14;19564:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;19626:94:::1;19642:5;19649:4;19655:9;19666:14;19682:12;19704:4;19711:8;19626:15;:94::i;:::-;19770:38;::::0;;-1:-1:-1;;;19770:38:0;;19802:4:::1;19770:38;::::0;::::1;::::0;;;19610:110;;-1:-1:-1;19731:78:0::1;::::0;-1:-1:-1;19759:5:0;;19766:2;;-1:-1:-1;;;;;19770: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;19770:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19770:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19770:38:0;19731:27:::1;:78::i;:::-;19826:4;-1:-1:-1::0;;;;;19820:20:0::1;;19841:9;19820:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19820:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19820:31:0;;;;19862:45;19893:2;19897:9;19862:30;:45::i;27303:705::-:0;27475:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;27515:4:::1;-1:-1:-1::0;;;;;27504:15:0::1;:4;;27509:1;27504:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27504:7:0::1;-1:-1:-1::0;;;;;27504:15:0::1;;27496:52;;;::::0;;-1:-1:-1;;;27496:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27496:52:0;;;;;;;;;;;;;::::1;;27559:13;27575:9;27559:25;;27601:4;-1:-1:-1::0;;;;;27595:19:0::1;;27622:8;27595:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27595:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27595:38:0;;;;;27657:4;-1:-1:-1::0;;;;;27651:20:0::1;;27672:46;27692:7;27701:4;;27706:1;27701:7;;;;;;27672:46;27720:8;27651:78;;;;;;;;;;;;;-1:-1:-1::0;;;;;27651:78:0::1;-1:-1:-1::0;;;;;27651:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27651:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27651:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27651:78:0;27644:86:::1;;;;27741:18;27769:4:::0;;-1:-1:-1;;27774:15:0;;27769:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27769:21:0::1;-1:-1:-1::0;;;;;27762:39:0::1;;27802:2;27762:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27762:43:0::1;-1:-1:-1::0;;;;;27762:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27762:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27762:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27762:43:0;27816:44:::1;::::0;;27762:43:::1;27816:44:::0;;::::1;::::0;;;;;;;;;;;27762:43;;-1:-1:-1;27816:44:0::1;::::0;;;27851:4;;;;;;27816:44;::::1;::::0;27851:4;;27816:44;27851:4;27816:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27857:2:0;;-1:-1:-1;27816:34:0::1;::::0;-1:-1:-1;;27816:44:0:i:1;:::-;27945:12:::0;27879:62:::1;27927:13:::0;27886:4;;-1:-1:-1;;27891:15:0;;27886:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27886:21:0::1;-1:-1:-1::0;;;;;27879:39:0::1;;27919:2;27879:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27879:43:0::1;-1:-1:-1::0;;;;;27879:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;16823:765:0::0;17007:12;17021;16988:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;17046:12:::1;17061:44;17081:7;17090:6;17098;17061:19;:44::i;:::-;17116:57;::::0;;-1:-1:-1;;;17116:57:0;;17145:10:::1;17116:57;::::0;::::1;::::0;-1:-1:-1;;;;;17116:28:0;::::1;:57:::0;;;;;;;;;;;;;;17046:59;;-1:-1:-1;17116:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;17116:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;17116:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17116:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;17241:24:0::1;::::0;;-1:-1:-1;;;17241:24:0;;-1:-1:-1;;;;;17241:24:0;;::::1;;::::0;::::1;::::0;;;17211:12:::1;::::0;;;17241:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;17211:12;17241:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;17241:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17241:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17241:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;17241:24:0;-1:-1:-1;17277:14:0::1;17296:38;17319:6:::0;17327;17296:22:::1;:38::i;:::-;17276:58;;;17376:6;-1:-1:-1::0;;;;;17366:16:0::1;:6;-1:-1:-1::0;;;;;17366:16:0::1;;:58;;17407:7;17416;17366:58;;;17386:7;17395;17366:58;17345:79:::0;;-1:-1:-1;17345:79:0;-1:-1:-1;17443:21:0;;::::1;;17435:67;;;;-1:-1:-1::0;;;17435:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17532:10;17521:7;:21;;17513:67;;;;-1:-1:-1::0;;;17513:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13794:1;;;;16823:765:::0;;;;;;;;;;;:::o;13587:41::-;;;:::o;29391:198::-;29490:21;29531:50;29557:7;29566:8;29576:4;29531:25;:50::i;18710:589::-;18929:16;18947:14;18974:12;18989:41;19009:7;19018:5;19025:4;18989:19;:41::i;:::-;18974:56;;19041:10;19054;:33;;19078:9;19054:33;;;-1:-1:-1;;19054:33:0;19098:75;;;-1:-1:-1;;;19098:75:0;;19121:10;19098:75;;;;19141:4;19098:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19041:46;;-1:-1:-1;;;;;;19098:22:0;;;;;:75;;;;;-1:-1:-1;;19098:75:0;;;;;;;;-1:-1:-1;19098:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;19098:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19098:75:0;;;;19211:80;19230:5;19237:9;19248:14;19264:12;19278:2;19282:8;19211:18;:80::i;:::-;19184:107;;;;-1:-1:-1;18710:589:0;-1:-1:-1;;;;;;;;;;;;;18710:589:0:o;15345:649::-;15554:12;15568;15582:14;15535:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;15630:85:::1;15644:6;15652;15660:14;15676;15692:10;15704;15630:13;:85::i;:::-;15609:106:::0;;-1:-1:-1;15609:106:0;-1:-1:-1;15726:12:0::1;15741:44;15761:7;15770:6:::0;15778;15741:19:::1;:44::i;:::-;15726:59;;15796:66;15828:6;15836:10;15848:4;15854:7;15796:31;:66::i;:::-;15873;15905:6;15913:10;15925:4;15931:7;15873:31;:66::i;:::-;15972:4;-1:-1:-1::0;;;;;15962:20:0::1;;15983:2;15962:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;15962:24:0::1;-1:-1:-1::0;;;;;15962:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15962:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15962:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15962:24:0;15345:649;;;;-1:-1:-1;15962:24:0;;-1:-1:-1;15345:649:0;;-1:-1:-1;;;;;;;;;15345:649:0:o;16002:778::-;16194:16;16212:14;16228;16175:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;16282:87:::1;16296:5;16303:4;16309:18;16329:9;16340:14;16356:12;16282:13;:87::i;:::-;16255:114:::0;;-1:-1:-1;16255:114:0;-1:-1:-1;16380:12:0::1;16395:41;16415:7;16424:5:::0;16431:4:::1;16395:19;:41::i;:::-;16380:56;;16447:69;16479:5;16486:10;16498:4;16504:11;16447:31;:69::i;:::-;16533:4;-1:-1:-1::0;;;;;16527:19:0::1;;16554:9;16527:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16527:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16527:39:0;;;;;16590:4;-1:-1:-1::0;;;;;16584:20:0::1;;16605:4;16611:9;16584:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;16584:37:0::1;-1:-1:-1::0;;;;;16584:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16584:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16584:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16584:37:0;16577:45:::1;;;;16655:4;-1:-1:-1::0;;;;;16645:20:0::1;;16666:2;16645:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;16645:24:0::1;-1:-1:-1::0;;;;;16645:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16645:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16645:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16645:24:0;;-1:-1:-1;16684:9:0::1;:21:::0;-1:-1:-1;16680:92:0::1;;;16707:65;16738:10;16762:9;16750;:21;16707:30;:65::i;:::-;13794:1;16002:778:::0;;;;;;;;;;;:::o;24575:790::-;24788:21;24760:8;13744:15;13732:8;:27;;13724:59;;;;;-1:-1:-1;;;13724:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13724:59:0;;;;;;;;;;;;;;;24846:4:::1;-1:-1:-1::0;;;;;24835:15:0::1;:4;;24840:1;24835:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24835:7:0::1;-1:-1:-1::0;;;;;24835:15:0::1;;24827:52;;;::::0;;-1:-1:-1;;;24827:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24827:52:0;;;;;;;;;;;;;::::1;;24900:50;24925:7;24934:9;24945:4;;24900:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24900:24:0::1;::::0;-1:-1:-1;;;24900:50:0:i:1;:::-;24890:60;;24983:9;24969:7;24977:1;24969:10;;;;;;;;;;;;;;:23;;24961:70;;;;-1:-1:-1::0;;;24961:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25048:4;-1:-1:-1::0;;;;;25042:19:0::1;;25069:7;25077:1;25069:10;;;;;;;;;;;;;;25042:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25042:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25042:40:0;;;;;25106:4;-1:-1:-1::0;;;;;25100:20:0::1;;25121:46;25141:7;25150:4;;25155:1;25150:7;;;;;;25121:46;25169:7;25177:1;25169:10;;;;;;;;;;;;;;25100:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;25100:80:0::1;-1:-1:-1::0;;;;;25100:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25100:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25100:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25100:80:0;25093:88:::1;;;;25192:24;25198:7;25207:4;;25192:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25213:2:0;;-1:-1:-1;25192:5:0::1;::::0;-1:-1:-1;;25192:24:0:i:1;:::-;25279:7;25287:1;25279:10;;;;;;;;;;;;;;25267:9;:22;25263:94;;;25291:66;25322:10;25346:7;25354:1;25346:10;;;;;;;;;;;;;;25334:9;:22;25291:30;:66::i;4550:361::-:0;4745:45;;;-1:-1:-1;;;;;4745:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4745:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;4734:57:0;;;;4699:12;;4713:17;;4734:10;;;;4745:45;4734:57;;;25:18:-1;4734: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;;;4734: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;;4698:93:0;;;;4810:7;:57;;;;-1:-1:-1;4822:11:0;;:16;;:44;;;4853:4;4842:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4842:24:0;4822:44;4802:101;;;;;-1:-1:-1;;;4802:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4550:361;;;;;:::o;5329:195::-;5437:12;;;5399;5437;;;;;;;;;-1:-1:-1;;;;;5416:7:0;;;5430:5;;5416:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5416:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;5398:52:0;;;5469:7;5461:55;;;;-1:-1:-1;;;5461:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5329:195;;;:::o;2121:507::-;2214:14;2260:1;2249:8;:12;2241:63;;;;-1:-1:-1;;;2241:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2335:1;2323:9;:13;:31;;;;;2353:1;2340:10;:14;2323:31;2315:79;;;;-1:-1:-1;;;2315:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2405:20;2428:17;:8;2441:3;2428:17;:12;:17;:::i;:::-;2405:40;-1:-1:-1;2456:14:0;2473:31;2405:40;2493:10;2473:31;:19;:31;:::i;:::-;2456:48;-1:-1:-1;2515:16:0;2534:40;2558:15;2534:19;:9;2548:4;2534:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2515:59;;2609:11;2597:9;:23;;;;;;;2121:507;-1:-1:-1;;;;;;;2121:507:0:o;3106:506::-;3207:21;3264:1;3249:4;:11;:16;;3241:54;;;;;-1:-1:-1;;;3241:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3327:4;:11;3316:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3316:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;3316:23:0;;3306:33;;3363:8;3350:7;3358:1;3350:10;;;;;;;;;;;;;:21;;;;;3387:6;3382:223;3413:1;3399:4;:11;:15;3395:1;:19;3382:223;;;3437:14;3453:15;3472:42;3484:7;3493:4;3498:1;3493:7;;;;;;;;;;;;;;3502:4;3507:1;3511;3507:5;3502:11;;;;;;;;;;;;;;3472;:42::i;:::-;3436:78;;;;3546:47;3559:7;3567:1;3559:10;;;;;;;;;;;;;;3571:9;3582:10;3546:12;:47::i;:::-;3529:7;3537:1;3541;3537:5;3529:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;3416:3:0;;3382:223;;;;3106:506;;;;;:::o;879:478::-;968:12;994:14;1010;1028:26;1039:6;1047;1028:10;:26::i;:::-;1192:32;;;-1:-1:-1;;1192:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1192:32:0;;;;;1182:43;;;;;;1095:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1095:251:0;;;;;;;1085:262;;;;;;;;;879:478;-1:-1:-1;;;;;879:478:0:o;4919:402::-;5144:51;;;-1:-1:-1;;;;;5144:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5144:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5133:63:0;;;;5098:12;;5112:17;;5133:10;;;;5144:51;5133:63;;;25:18:-1;5133: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;;;5133: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;;5097:99:0;;;;5215:7;:57;;;;-1:-1:-1;5227:11:0;;:16;;:44;;;5258:4;5247:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5247:24:0;5227:44;5207:106;;;;-1:-1:-1;;;5207:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4919:402;;;;;;:::o;20648:715::-;20755:6;20750:606;20781:1;20767:4;:11;:15;20763:1;:19;20750:606;;;20805:13;20820:14;20839:4;20844:1;20839:7;;;;;;;;;;;;;;20848:4;20853:1;20857;20853:5;20848:11;;;;;;;;;;;;;;20804:56;;;;20876:14;20895:37;20918:5;20925:6;20895:22;:37::i;:::-;20875:57;;;20947:14;20964:7;20972:1;20976;20972:5;20964:14;;;;;;;;;;;;;;20947:31;;20994:15;21011;21039:6;-1:-1:-1;;;;;21030:15:0;:5;-1:-1:-1;;;;;21030:15:0;;:61;;21072:9;21088:1;21030:61;;;21054:1;21058:9;21030:61;20993:98;;;;21106:10;21137:1;21123:4;:11;:15;21119:1;:19;:77;;21193:3;21119:77;;;21141:49;21161:7;21170:6;21178:4;21183:1;21187;21183:5;21178:11;;;;;;;;;;;;;;21141:19;:49::i;:::-;21106:90;;21221:43;21241:7;21250:5;21257:6;21221:19;:43::i;:::-;-1:-1:-1;;;;;21211:59:0;;21289:10;21301;21313:2;21327:1;21317:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;21317:12:0;87:42:-1;143:17;;-1:-1;21317:12:0;;21211:133;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21211:133:0;-1:-1:-1;;;;;21211:133: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;21211:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21211:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20784:3:0;;;;;-1:-1:-1;20750:606:0;;-1:-1:-1;;;;;;;;20750:606:0;;;20648:715;;;:::o;3620:527::-;3721:21;3778:1;3763:4;:11;:16;;3755:54;;;;;-1:-1:-1;;;3755:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:4;:11;3830:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3830:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;3830:23:0;;3820:33;;3894:9;3864:7;3889:1;3872:7;:14;:18;3864:27;;;;;;;;;;;;;;;;;:39;3928:11;;-1:-1:-1;;3928:15:0;3914:226;3945:5;;3914:226;;3973:14;3989:15;4008:42;4020:7;4029:4;4038:1;4034;:5;4029:11;;;;;;;;;;;;;;4042:4;4047:1;4042:7;;;;;;;4008:42;3972:78;;;;4082:46;4094:7;4102:1;4094:10;;;;;;;;;;;;;;4106:9;4117:10;4082:11;:46::i;:::-;4065:7;4077:1;4073;:5;4065:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;3952:3:0;3914:226;;25512:1184;25625:6;25620:1069;25651:1;25637:4;:11;:15;25633:1;:19;25620:1069;;;25675:13;25690:14;25709:4;25714:1;25709:7;;;;;;;;;;;;;;25718:4;25723:1;25727;25723:5;25718:11;;;;;;;;;;;;;;25674:56;;;;25746:14;25765:37;25788:5;25795:6;25765:22;:37::i;:::-;25745:57;;;25817:14;25844:43;25864:7;25873:5;25880:6;25844:19;:43::i;:::-;25817:71;;25903:16;25934:17;26022:13;26037;26055:4;-1:-1:-1;;;;;26055:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26055:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26055:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26055:18:0;;;;;;;26021:52;;;;;-1:-1:-1;26021:52:0;;-1:-1:-1;26089:17:0;;-1:-1:-1;;;;;26130:15:0;;;;;;;:61;;26172:8;26182;26130:61;;;26149:8;26159;26130:61;26088:103;;;;26220:56;26263:12;26227:5;-1:-1:-1;;;;;26220:23:0;;26252:4;26220:38;;;;;;;;;;;;;-1:-1:-1;;;;;26220:38:0;-1:-1:-1;;;;;26220:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;26220:56:0;26206:70;;26306:66;26331:11;26344:12;26358:13;26306:24;:66::i;:::-;26291:81;;25620:1069;;;;26403:15;26420;26448:6;-1:-1:-1;;;;;26439:15:0;:5;-1:-1:-1;;;;;26439:15:0;;:67;;26484:12;26503:1;26439:67;;;26463:1;26467:12;26439:67;26402:104;;;;26521:10;26552:1;26538:4;:11;:15;26534:1;:19;:77;;26608:3;26534:77;;;26556:49;26576:7;26585:6;26593:4;26598:1;26602;26598:5;26593:11;;;;;;;26556:49;26664:12;;;26674:1;26664:12;;;;;;;;;;-1:-1:-1;;;26626:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26626:51:0;;;;;;;;;;;;;;;;;;;;;;26521:90;;-1:-1:-1;26626:9:0;;;;;;26636:10;;26648;;26521:90;;26664:12;;26626:51;;;;;;;;26664:12;;26626:51;;;;26664: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;26626:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26626:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25654:3:0;;;;;-1:-1:-1;25620:1069:0;;-1:-1:-1;;;;;;;;;;25620:1069:0;187:129;271:5;;;266:16;;;;258:50;;;;;-1:-1:-1;;;258:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2636:462;2729:13;2775:1;2763:9;:13;2755:65;;;;-1:-1:-1;;;2755:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2851:1;2839:9;:13;:31;;;;;2869:1;2856:10;:14;2839:31;2831:79;;;;-1:-1:-1;;;2831:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2921:14;2938:34;2967:4;2938:24;:9;2952;2938:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;2921:51;-1:-1:-1;2983:16:0;3002:34;3032:3;3002:25;:10;3017:9;3002:25;:14;:25;:::i;:34::-;2983:53;;3058:32;3088:1;3071:11;3059:9;:23;;;;;;;3058:32;:29;:32;:::i;:::-;3047:43;2636:462;-1:-1:-1;;;;;;2636:462:0:o;1802:311::-;1884:12;1927:1;1917:7;:11;1909:56;;;;;-1:-1:-1;;;1909:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:1;1984:8;:12;:28;;;;;2011:1;2000:8;:12;1984:28;1976:76;;;;-1:-1:-1;;;1976:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2097:8;2073:21;:7;2085:8;2073:21;:11;:21;:::i;:::-;:32;;;;;;;1802:311;-1:-1:-1;;;;1802:311:0:o;532:339::-;607:14;623;668:6;-1:-1:-1;;;;;658:16:0;:6;-1:-1:-1;;;;;658:16:0;;;650:61;;;;;-1:-1:-1;;;650:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;750:6;-1:-1:-1;;;;;741:15:0;:6;-1:-1:-1;;;;;741:15:0;;:53;;779:6;787;741:53;;;760:6;768;741:53;722:72;;-1:-1:-1;722:72:0;-1:-1:-1;;;;;;813:20:0;;805:58;;;;;-1:-1:-1;;;805:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;532:339;;;;;:::o;14043:1294::-;14295:45;;;-1:-1:-1;;;14295:45:0;;-1:-1:-1;;;;;14295:45:0;;;;;;;;;;;;;;;;14200:12;;;;;;14308:7;14295:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;14295:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14295:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14295:45:0;-1:-1:-1;;;;;14295:59:0;;14291:140;;;14371:48;;;-1:-1:-1;;;14371:48:0;;-1:-1:-1;;;;;14371:48:0;;;;;;;;;;;;;;;;14384:7;14371:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;14371:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;14371:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14371:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;14291:140:0;14442:13;14457;14474:48;14498:7;14507:6;14515;14474:23;:48::i;:::-;14441:81;;;;14537:8;14549:1;14537:13;:30;;;;-1:-1:-1;14554:13:0;;14537:30;14533:797;;;14606:14;;-1:-1:-1;14622:14:0;;-1:-1:-1;14533:797:0;;;14670:19;14692:53;14710:14;14726:8;14736;14692:17;:53::i;:::-;14670:75;;14782:14;14764;:32;14760:559;;14843:10;14825:14;:28;;14817:74;;;;-1:-1:-1;;;14817:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14932:14;;-1:-1:-1;14948:14:0;-1:-1:-1;14948:14:0;14760:559;;;15004:19;15026:53;15044:14;15060:8;15070;15026:17;:53::i;:::-;15004:75;;15123:14;15105;:32;;15098:40;;;;15183:10;15165:14;:28;;15157:74;;;;-1:-1:-1;;;15157:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15272:14;-1:-1:-1;15288:14:0;;-1:-1:-1;14760:559:0;14533:797;;14043:1294;;;;;;;;;;;:::o;324:142::-;376:6;403;;;:30;;-1:-1:-1;;418:5:0;;;432:1;427;418:5;427:1;413:15;;;;;:20;403:30;395:63;;;;;-1:-1:-1;;;395:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;51:128;135:5;;;130:16;;;;122:49;;;;;-1:-1:-1;;;122:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1365:429;1458:13;1473;1500:14;1519:26;1530:6;1538;1519:10;:26::i;:::-;1499:46;;;1556:32;1564:7;1573:6;1581;1556:7;:32::i;:::-;;1600:13;1615;1643:32;1651:7;1660:6;1668;1643:7;:32::i;:::-;-1:-1:-1;;;;;1633:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1633:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1633:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1633:57:0;;;;;;;1599:91;;;;;-1:-1:-1;1599:91:0;;-1:-1:-1;;;;;;1724:16:0;;;;;;;:62;;1767:8;1777;1724:62;;;1744:8;1754;1724:62;1701:85;;;;-1:-1:-1;1365:429:0;-1:-1:-1;;;;;;;1365:429:0:o

Swarm Source

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