Contract 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 19

Contract Overview

Balance:
0 MOVR

MOVR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb40a12538e42b41b82a625be1ade5f5d8ddf56bc5cf904920cdb6c82848aa15dAdd Liquidity ET...18932702022-05-25 6:36:3230 mins ago0x90036c2f2c4cf5958eb0a9a841aaeb734e786516 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060.100240713658758 MOVR0.0002168001
0x25fcd7dd000c58b008894e834c30f0ccdab0903b612c88d255ea24c39a6040f7Swap Exact Token...18932692022-05-25 6:36:0031 mins ago0x90036c2f2c4cf5958eb0a9a841aaeb734e786516 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0001685387
0x62c871e08fc9217aedc344c877c952252efc3493acf3e358b9fae9f8105a1817Swap Exact ETH F...18932372022-05-25 6:28:2439 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.0018135
0x88a6eabab4540ea2c8b64fe3d37ac14203efd5da3d7c174240ca9a0fec6eb837Swap Exact ETH F...18932352022-05-25 6:27:5539 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.0006045
0x48ef2f17626022eba46f787942e630243109caab601666c0043b30e351d14f6aSwap Exact ETH F...18932342022-05-25 6:27:0640 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.002418
0x3b7c8186bea4cb36a72abf521744acbe345052733c547387999cb33c263d4048Swap Exact ETH F...18931642022-05-25 6:10:0657 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.0010075
0x93ed33183cd59db00fc8f54b6afa80f2247a1b0528721e6d83e5c61bddd7071fSwap Exact Token...18931442022-05-25 6:05:241 hr 2 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.000086063938
0xbd3f341723e49e85e6a534ca32b423615aa7b78dfb64011ac1c2a9c5278cb205Swap Exact ETH F...18931432022-05-25 6:05:121 hr 2 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.003097024
0xa27e4535e710fadf6542e8dfce0fbcd80c3d2db51682b6792e9fed905aa40643Swap Exact ETH F...18931432022-05-25 6:05:121 hr 2 mins ago0x2849ef9c4f4f8a2ba98279dcb4d61b7a4a982b32 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.013699416
0x026dde74f3abb53d2409f7bd8b347b03e539a0c1deb4c88987eb5dad6adf9ac5Swap Exact ETH F...18931162022-05-25 5:59:361 hr 7 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.00241776
0x835bc6767573bdbedbe69f9230b27977a81df366a6e6edc6a8e5284124ef5dabSwap Exact Token...18930742022-05-25 5:49:481 hr 17 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.000086063938
0x5cec870c72a8363a2fca251228f1679dca6d9f8a18ac99b5c87959e697ce9b2dSwap Exact ETH F...18930712022-05-25 5:49:001 hr 18 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.00010075
0x58299185fdb2e339878763f6429aa733692d9b1e8747c151a39d3b18b3aaeb1aSwap Exact ETH F...18930362022-05-25 5:41:241 hr 26 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.00312325
0x49c7e37c454eda5dec0bca2cdbcf854b380f94eb373b93fdcffab8c91c560a17Swap Exact ETH F...18930102022-05-25 5:35:421 hr 31 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b4799750640 MOVR0.00312325
0xdb546e427d39d6745d112ef2000bacf5ef898460ac8560a798c1bd1f7909feceSwap Exact Token...18929432022-05-25 5:19:181 hr 48 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.000131882083
0x6b5551c2067bc04d7380cc54df236b1967a7d52d6b0ce868ece51f9361924715Swap Tokens For ...18929432022-05-25 5:19:181 hr 48 mins ago0x2849ef9c4f4f8a2ba98279dcb4d61b7a4a982b32 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0151504
0x62db4d7a8b645a22849bcf4c72a077671f8e9c75483bfa89e6110de5475efa70Swap Tokens For ...18929422022-05-25 5:19:001 hr 48 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0111409
0xa79d9efead403e1467c220d6af0516562f87c83a09cb1fdc0b9a99c8a95c65faSwap Tokens For ...18929412022-05-25 5:18:481 hr 48 mins ago0x2849ef9c4f4f8a2ba98279dcb4d61b7a4a982b32 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0151504
0xdd1c740af5d10447fe4ab2f1e61845e162aa3931b08ccda8f6f4a79cbfb09142Swap Tokens For ...18929402022-05-25 5:18:361 hr 48 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0111409
0x3b9d1731fe3b3119f3427d154a64f593e7fc8a94ab52205b546cae54c5a5a8fcSwap Tokens For ...18929382022-05-25 5:17:541 hr 49 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0107451
0x493b5fd901a45b2e630cff948824a7e8d49d42c97729dec156995e9a23b3cd6eSwap Tokens For ...18929382022-05-25 5:17:541 hr 49 mins ago0x2849ef9c4f4f8a2ba98279dcb4d61b7a4a982b32 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0151504
0x5acc8fedc0b61e61707f40db529be19d6c61375cd4d2b7348295ce960eec810dSwap Tokens For ...18929362022-05-25 5:17:241 hr 50 mins ago0xc0ca1cf613b3b479372b8f31cc4b8ec94c77d13c IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0107451
0x9de7cd4cf57bf501277ea8f78f37c6862cecda15d9a2722d752ba1ac6eafc06dSwap Tokens For ...18929362022-05-25 5:17:241 hr 50 mins ago0x2849ef9c4f4f8a2ba98279dcb4d61b7a4a982b32 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0151504
0xeeb97148e9c08168ad63fa01382f5e2abc674e3ad45cf63241ca846a6dffd49fSwap Exact Token...18929152022-05-25 5:12:421 hr 54 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.000181088556
0x9b262cac4061422294ae75971403648882a8beb0f03be4fc6dc9fd525fddf024Swap Tokens For ...18928272022-05-25 4:52:422 hrs 14 mins ago0x4cf0602a77a4243b768ee28aa52994ad5dfdbe46 IN  0x1b02da8cb0d097eb8d57a175b88c7d8b479975060 MOVR0.0002785225
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc5cccfbea5283c605aacad5be47904c1989b40697e532cd49a271d174b6c3bc318933612022-05-25 6:57:309 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060xbd83c7286c7a01db3a0c00a05e8b91220b41db602.1 MOVR
0xc5cccfbea5283c605aacad5be47904c1989b40697e532cd49a271d174b6c3bc318933612022-05-25 6:57:309 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975062.1 MOVR
0x6b5639ab1c08c51d258631277fc80bc95b5b2556cb423e7e66700b629a195fa718933572022-05-25 6:56:3110 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060xbd83c7286c7a01db3a0c00a05e8b91220b41db602.1 MOVR
0x6b5639ab1c08c51d258631277fc80bc95b5b2556cb423e7e66700b629a195fa718933572022-05-25 6:56:3110 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975062.1 MOVR
0x4a7de7c344c2ebc8943e0d5e98ae23887423b99218933d89487efed42888295018933122022-05-25 6:46:3020 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060xbd83c7286c7a01db3a0c00a05e8b91220b41db604.2 MOVR
0x4a7de7c344c2ebc8943e0d5e98ae23887423b99218933d89487efed42888295018933122022-05-25 6:46:3020 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975064.2 MOVR
0x180769d33307cc9a64cb63739f0e91cc0c503ffeb18abee782589121c358a23a18933102022-05-25 6:46:0621 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060xbd83c7286c7a01db3a0c00a05e8b91220b41db604.2 MOVR
0x180769d33307cc9a64cb63739f0e91cc0c503ffeb18abee782589121c358a23a18933102022-05-25 6:46:0621 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975064.2 MOVR
0x5a501fd45ae08a932277d4862f16e192c7f9e89e8232ea10969b1a41af3ec32a18933082022-05-25 6:45:1822 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060xbd83c7286c7a01db3a0c00a05e8b91220b41db604.2 MOVR
0x5a501fd45ae08a932277d4862f16e192c7f9e89e8232ea10969b1a41af3ec32a18933082022-05-25 6:45:1822 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975064.2 MOVR
0x8bcffaeed030c3d95d60cdd4478ac1c707c705adabb68337b8628bcd1244634618932842022-05-25 6:40:1227 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d5.55155034096131694 MOVR
0x8bcffaeed030c3d95d60cdd4478ac1c707c705adabb68337b8628bcd1244634618932842022-05-25 6:40:1227 mins ago 0x0e682221302cea425c4c8f989e66e9e4b897c6e0 0x1b02da8cb0d097eb8d57a175b88c7d8b479975065.55155034096131694 MOVR
0x5701576daf6bc85311d25de03ce8a0a9c0afd433ec5a3609bdfcf6b44551789118932782022-05-25 6:38:1829 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.000471140397935792 MOVR
0x5701576daf6bc85311d25de03ce8a0a9c0afd433ec5a3609bdfcf6b44551789118932782022-05-25 6:38:1829 mins ago 0xb2dc6a4462128e00e459fd3eff092c9a2f7f6aec 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060.000471140397935792 MOVR
0x5701576daf6bc85311d25de03ce8a0a9c0afd433ec5a3609bdfcf6b44551789118932782022-05-25 6:38:1829 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xb2dc6a4462128e00e459fd3eff092c9a2f7f6aec0.000471140397935792 MOVR
0x5701576daf6bc85311d25de03ce8a0a9c0afd433ec5a3609bdfcf6b44551789118932782022-05-25 6:38:1829 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d 0x1b02da8cb0d097eb8d57a175b88c7d8b479975060.000471140397935792 MOVR
0xb40a12538e42b41b82a625be1ade5f5d8ddf56bc5cf904920cdb6c82848aa15d18932702022-05-25 6:36:3230 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.100240713658758244 MOVR
0x62c871e08fc9217aedc344c877c952252efc3493acf3e358b9fae9f8105a181718932372022-05-25 6:28:2439 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
0x88a6eabab4540ea2c8b64fe3d37ac14203efd5da3d7c174240ca9a0fec6eb83718932352022-05-25 6:27:5539 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
0x48ef2f17626022eba46f787942e630243109caab601666c0043b30e351d14f6a18932342022-05-25 6:27:0640 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
0x3b7c8186bea4cb36a72abf521744acbe345052733c547387999cb33c263d404818931642022-05-25 6:10:0657 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
0x0b82d4eb3287e6899830713fd24adff07dc5c82850e90171b79df654dcc4ca7118931432022-05-25 6:05:121 hr 2 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d4.2 MOVR
0x0b82d4eb3287e6899830713fd24adff07dc5c82850e90171b79df654dcc4ca7118931432022-05-25 6:05:121 hr 2 mins ago 0xbd83c7286c7a01db3a0c00a05e8b91220b41db60 0x1b02da8cb0d097eb8d57a175b88c7d8b479975064.2 MOVR
0xbd3f341723e49e85e6a534ca32b423615aa7b78dfb64011ac1c2a9c5278cb20518931432022-05-25 6:05:121 hr 2 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
0xa27e4535e710fadf6542e8dfce0fbcd80c3d2db51682b6792e9fed905aa4064318931432022-05-25 6:05:121 hr 2 mins ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d40 MOVR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2020-09-04
*/

// File: contracts/uniswapv2/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

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

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

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

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

// File: contracts/uniswapv2/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    using SafeMathUniswap for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/uniswapv2/libraries/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, 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');
    }
}

// File: contracts/uniswapv2/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts/uniswapv2/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() 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;
    function setMigrator(address) external;
}

// File: contracts/uniswapv2/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/uniswapv2/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/uniswapv2/UniswapV2Router02.sol

pragma solidity =0.6.12;








contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMathUniswap for uint;

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

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

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

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

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

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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, IERC20Uniswap(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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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,) = UniswapV2Library.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 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.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 = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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 = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.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,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.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 = IERC20Uniswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.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, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: 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, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20Uniswap(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: 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 UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

60c060405234801561001057600080fd5b50604051620046e7380380620046e78339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614562620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136c0528061370352806139dd5280613b535280613f445280613ffd52806140b052506145626000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133f4565b85600081518110610fe657fe5b60200260200101516134b4565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613611915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461384e565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133f4565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a6134b4565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b929091899189918291850190849080828437600092019190915250889250613986915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c88565b101561187b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b5095945050505050565b6000610dbe848484613cd8565b60608142811015611eab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613db0565b60008142811015611fd5576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a918291850190849080828437600092019190915250899250613986915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133f4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133f4565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613f34565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133f4565b90506128c68d3383886134b4565b6128d28c3383876134b4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050612a398b3383886134b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f3282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144706023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e2602b913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613269856103e56141c5565b9050600061327782856141c5565b905060006132918361328b886103e86141c5565b90614228565b905080828161329c57fe5b04979650505050505050565b6060600282511015613301576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561331957600080fd5b50604051908082528060200260200182016040528015613343578160200160208202803683370190505b509050828160008151811061335457fe5b60200260200101818152505060005b60018351038110156133ec576000806133a68786858151811061338257fe5b602002602001015187866001018151811061339957fe5b6020026020010151614277565b915091506133c88484815181106133b957fe5b602002602001015183836131d0565b8484600101815181106133d757fe5b60209081029190910101525050600101613363565b509392505050565b60008060006134038585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135395780518252601f19909201916020918201910161351a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461359b576040519150601f19603f3d011682016040523d82523d6000602084013e6135a0565b606091505b50915091508180156135ce5750805115806135ce57508080602001905160208110156135cb57600080fd5b50515b6136095760405162461bcd60e51b81526004018080602001828103825260248152602001806144be6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138485760008084838151811061362f57fe5b602002602001015185846001018151811061364657fe5b602002602001015191509150600061365e8383613e56565b509050600087856001018151811061367257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136a0578260006136a4565b6000835b91509150600060028a510388106136bb57886136fc565b6136fc7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136ef57fe5b60200260200101516133f4565b90506137297f000000000000000000000000000000000000000000000000000000000000000088886133f4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613766576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137ce5781810151838201526020016137b6565b50505050905090810190601f1680156137fb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505060019099019850613614975050505050505050565b50505050565b60606002825110156138a7576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156138bf57600080fd5b506040519080825280602002602001820160405280156138e9578160200160208202803683370190505b50905082816001835103815181106138fd57fe5b60209081029190910101528151600019015b80156133ec5760008061393f8786600186038151811061392b57fe5b602002602001015187868151811061339957fe5b9150915061396184848151811061395257fe5b60200260200101518383613cd8565b84600185038151811061397057fe5b602090810291909101015250506000190161390f565b60005b60018351038110156131cb576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e56565b5090506000613a037f000000000000000000000000000000000000000000000000000000000000000085856133f4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613b098683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136ef57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d185760405162461bcd60e51b815260040180806020018281038252602c81526020018061433f602c913960400191505060405180910390fd5b600083118015613d285750600082115b613d635760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613d7b6103e8613d7586886141c5565b906141c5565b90506000613d8f6103e5613d758689613c88565b9050613da66001828481613d9f57fe5b0490614228565b9695505050505050565b6000808411613df05760405162461bcd60e51b81526004018080602001828103825260258152602001806143de6025913960400191505060405180910390fd5b600083118015613e005750600082115b613e3b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b82613e4685846141c5565b81613e4d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061436b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613db0565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613db0565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b5090506000806142978888886133f4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212201046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b7871164736f6c634300060c0033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _WETH (address): 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d


Deployed ByteCode Sourcemap

16551:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17040:10;-1:-1:-1;;;;;17054:4:0;17040:18;;17033:26;;;;16551:18605;;;;;21190:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21190:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34100:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34100:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28366:850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28366:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28366:850:0;;;;;;;;;;;;-1:-1:-1;28366:850:0;-1:-1:-1;;;;;;28366:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34900:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34900:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34900:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34900:253:0;;-1:-1:-1;34900:253:0;;-1:-1:-1;;;;;34900:253:0:i;21869:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21869:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25583:628::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25583:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25583:628:0;;;;;;;;;;;;-1:-1:-1;25583:628:0;-1:-1:-1;;;;;;25583:628:0;;;;;;;;:::i;27532:828::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27532:828:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27532:828:0;;;;;;;;;;;;-1:-1:-1;27532:828:0;-1:-1:-1;;;;;;27532:828:0;;;;;;;;:::i;24013:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24013:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31406:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31406:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31406:728:0;;;;;;;;;;;;-1:-1:-1;31406:728:0;-1:-1:-1;;;;;;31406:728:0;;;;;;;;:::i;33010:850::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33010:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33010:850:0;;;;;;;;;;;;-1:-1:-1;33010:850:0;-1:-1:-1;;;;;;33010:850:0;;;;;;;;:::i;26829:697::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26829:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26829:697:0;;;;;;;;;;;;-1:-1:-1;26829:697:0;-1:-1:-1;;;;;;26829:697:0;;;;;;;;:::i;34370:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34370:261:0;;;;;;;;;;;;:::i;26217:606::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26217:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26217:606:0;;;;;;;;;;;;-1:-1:-1;26217:606:0;-1:-1:-1;;;;;;26217:606:0;;;;;;;;:::i;16694:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16694:38:0;;;;;;;;;;;;;;33904:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33904:188:0;;;;;;;;;;;;:::i;23300:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23300:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32140:864::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32140:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32140:864:0;;;;;;;;;;;;-1:-1:-1;32140:864:0;-1:-1:-1;;;;;;32140:864:0;;;;;;;;:::i;20319:865::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20319:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16646:41::-;;;;;;;;;;;;;:::i;34639:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34639:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34639:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34639:253:0;;-1:-1:-1;34639:253:0;;-1:-1:-1;;;;;34639:253:0:i;22552:669::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22552:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18558:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18558:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19302:974;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19302:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29222:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29222:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29222:810:0;;;;;;;;;;;;-1:-1:-1;29222:810:0;-1:-1:-1;;;;;;29222:810:0;;;;;;;;:::i;21190:673::-;21427:16;21445:14;21408:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;21499:196:::1;21529:5;21549:4;21568:9;21592:14;21621:12;21656:4;21676:8;21499:15;:196::i;:::-;21472:223:::0;;-1:-1:-1;21472:223:0;-1:-1:-1;21706:51:0::1;21734:5:::0;21741:2;21472:223;21706:27:::1;:51::i;:::-;21774:4;-1:-1:-1::0;;;;;21768:20:0::1;;21789:9;21768:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21810:45;21841:2;21845:9;21810:30;:45::i;:::-;21190:673:::0;;;;;;;;;;:::o;34100:262::-;34253:14;34292:62;34322:8;34332:9;34343:10;34292:29;:62::i;:::-;34285:69;34100:262;-1:-1:-1;;;;34100:262:0:o;28366:850::-;28580:21;28552:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28652:4:0::1;28627:29;:4:::0;;-1:-1:-1;;28632:15:0;;28627:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28627:21:0::1;-1:-1:-1::0;;;;;28627:29:0::1;;28619:71;;;::::0;;-1:-1:-1;;;28619:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28619:71:0;;;;;;;;;;;;;::::1;;28711:55;28742:7;28751:8;28761:4;;28711:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28711:30:0::1;::::0;-1:-1:-1;;;28711:55:0:i:1;:::-;28701:65;;28816:12;28785:7;28810:1;28793:7;:14;:18;28785:27;;;;;;;;;;;;;;:43;;28777:99;;;;-1:-1:-1::0;;;28777:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28887:141;28933:4;;28938:1;28933:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28933:7:0::1;28942:10;28954:51;28979:7;28988:4;;28993:1;28988:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28988:7:0::1;28997:4;;29002:1;28997:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28997:7:0::1;28954:24;:51::i;:::-;29007:7;29015:1;29007:10;;;;;;;;;;;;;;28887:31;:141::i;:::-;29039:35;29045:7;29054:4;;29039:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29068:4:0::1;::::0;-1:-1:-1;29039:5:0::1;::::0;-1:-1:-1;;29039:35:0:i:1;:::-;29091:4;-1:-1:-1::0;;;;;29085:20:0::1;;29106:7;29131:1;29114:7;:14;:18;29106:27;;;;;;;;;;;;;;29085:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29145:63;29176:2;29180:7;29205:1;29188:7;:14;:18;29180:27;;;;;;;;;;;;;;29145:30;:63::i;:::-;28366:850:::0;;;;;;;;;:::o;34900:253::-;35044:21;35090:55;35120:7;35129:9;35140:4;35090:29;:55::i;:::-;35083:62;;34900:253;;;;;:::o;21869:677::-;22175:12;22189;22214;22229:49;22254:7;22263:6;22271;22229:24;:49::i;:::-;22214:64;;22289:10;22302;:33;;22326:9;22302:33;;;-1:-1:-1;;22302:33:0;22346:80;;;-1:-1:-1;;;22346:80:0;;22374:10;22346:80;;;;22394:4;22346:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22289:46;;-1:-1:-1;;;;;;22346:27:0;;;;;:80;;;;;-1:-1:-1;;22346:80:0;;;;;;;;-1:-1:-1;22346:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22458;22474:6;22482;22490:9;22501:10;22513;22525:2;22529:8;22458:15;:80::i;:::-;22437:101;;;;;;;;21869:677;;;;;;;;;;;;;;;;:::o;25583:628::-;25807:21;25788:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;25851:55:::1;25882:7;25891:8;25901:4;;25851:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25851:30:0::1;::::0;-1:-1:-1;;;25851:55:0:i:1;:::-;25841:65;;25956:12;25925:7;25950:1;25933:7;:14;:18;25925:27;;;;;;;;;;;;;;:43;;25917:99;;;;-1:-1:-1::0;;;25917:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26027:141;26073:4;;26078:1;26073:7;;;;;;26027:141;26179:24;26185:7;26194:4;;26179:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26200:2:0;;-1:-1:-1;26179:5:0::1;::::0;-1:-1:-1;;26179:24:0:i:1;27532:828::-:0;27746:21;27718:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27818:4:0::1;27793:29;:4:::0;;-1:-1:-1;;27798:15:0;;27793:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27793:21:0::1;-1:-1:-1::0;;;;;27793:29:0::1;;27785:71;;;::::0;;-1:-1:-1;;;27785:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27785:71:0;;;;;;;;;;;;;::::1;;27877:55;27907:7;27916:9;27927:4;;27877:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27877:29:0::1;::::0;-1:-1:-1;;;27877:55:0:i:1;:::-;27867:65;;27965:11;27951:7;27959:1;27951:10;;;;;;;;;;;;;;:25;;27943:77;;;;-1:-1:-1::0;;;27943:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24013:718:::0;24331:14;24358:12;24373:46;24398:7;24407:5;24414:4;24373:24;:46::i;:::-;24358:61;;24430:10;24443;:33;;24467:9;24443:33;;;-1:-1:-1;;24443:33:0;24487:80;;;-1:-1:-1;;;24487:80:0;;24515:10;24487:80;;;;24535:4;24487:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24430:46;;-1:-1:-1;;;;;;24487:27:0;;;;;:80;;;;;-1:-1:-1;;24487:80:0;;;;;;;;-1:-1:-1;24487:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24590:133;24652:5;24659:9;24670:14;24686:12;24700:2;24704:8;24590:47;:133::i;:::-;24578:145;24013:718;-1:-1:-1;;;;;;;;;;;;;24013:718:0:o;31406:728::-;31640:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;31661:139:::1;31707:4;;31712:1;31707:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:7:0::1;31716:10;31728:51;31753:7;31762:4;;31767:1;31762:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31762:7:0::1;31771:4;;31776:1;31771:7;;;;;;31728:51;31781:8;31661:31;:139::i;:::-;31811:18;31846:4:::0;;-1:-1:-1;;31851:15:0;;31846:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31846:21:0::1;-1:-1:-1::0;;;;;31832:46:0::1;;31879:2;31832:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31832:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31832:50:0;31893:44:::1;::::0;;31832:50:::1;31893:44:::0;;::::1;::::0;;;;;;;;;;;31832:50;;-1:-1:-1;31893:44:0::1;::::0;;;31928:4;;;;;;31893:44;::::1;::::0;31928:4;;31893:44;31928:4;31893:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31934:2:0;;-1:-1:-1;31893:34:0::1;::::0;-1:-1:-1;;31893:44:0:i:1;:::-;32043:12:::0;31970:69:::1;32025:13:::0;31984:4;;-1:-1:-1;;31989:15:0;;31984:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31984:21:0::1;-1:-1:-1::0;;;;;31970:46:0::1;;32017:2;31970:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31970:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31970:50:0;;:54:::1;:69::i;:::-;:85;;31948:178;;;;-1:-1:-1::0;;;31948:178:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16858:1;31406:728:::0;;;;;;;:::o;33010:850::-;33277:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:4:0::1;33311:29;:4:::0;;-1:-1:-1;;33316:15:0;;33311:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33311:21:0::1;-1:-1:-1::0;;;;;33311:29:0::1;;33303:71;;;::::0;;-1:-1:-1;;;33303:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33303:71:0;;;;;;;;;;;;;::::1;;33385:139;33431:4;;33436:1;33431:7;;;;;;33385:139;33535:55;33570:4;;33535:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33584:4:0::1;::::0;-1:-1:-1;33535:34:0::1;::::0;-1:-1:-1;;33535:55:0:i:1;:::-;33601:14;33632:4;-1:-1:-1::0;;;;;33618:29:0::1;;33656:4;33618:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33618:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33618:44:0;;-1:-1:-1;33681:25:0;;::::1;;33673:81;;;;-1:-1:-1::0;;;33673:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33771:4;-1:-1:-1::0;;;;;33765:20:0::1;;33786:9;33765:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33807:45;33838:2;33842:9;33807:30;:45::i;26829:697::-:0;27045:21;27017:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;27103:4:::1;-1:-1:-1::0;;;;;27092:15:0::1;:4;;27097:1;27092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27092:7:0::1;-1:-1:-1::0;;;;;27092:15:0::1;;27084:57;;;::::0;;-1:-1:-1;;;27084:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27084:57:0;;;;;;;;;;;;;::::1;;27162:56;27193:7;27202:9;27213:4;;27162:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27162:30:0::1;::::0;-1:-1:-1;;;27162:56:0:i:1;:::-;27152:66;;27268:12;27237:7;27262:1;27245:7;:14;:18;27237:27;;;;;;;;;;;;;;:43;;27229:99;;;;-1:-1:-1::0;;;27229:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27345:4;-1:-1:-1::0;;;;;27339:19:0::1;;27366:7;27374:1;27366:10;;;;;;;;;;;;;;27339:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27403:4;-1:-1:-1::0;;;;;27397:20:0::1;;27418:51;27443:7;27452:4;;27457:1;27452:7;;;;;;27418:51;27471:7;27479:1;27471:10;;;;;;;;;;;;;;27397:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27397:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27397:85:0;27390:93:::1;;;;27494:24;27500:7;27509:4;;27494:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27515:2:0;;-1:-1:-1;27494:5:0::1;::::0;-1:-1:-1;;27494:24:0:i:1;:::-;26829:697:::0;;;;;;;;:::o;34370:261::-;34523:13;34561:62;34590:9;34601;34612:10;34561:28;:62::i;26217:606::-;26441:21;26422:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;26485:55:::1;26515:7;26524:9;26535:4;;26485:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26485:29:0::1;::::0;-1:-1:-1;;;26485:55:0:i:1;:::-;26475:65;;26573:11;26559:7;26567:1;26559:10;;;;;;;;;;;;;;:25;;26551:77;;;;-1:-1:-1::0;;;26551:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16694:38:::0;;;:::o;33904:188::-;34001:12;34033:51;34056:7;34065:8;34075;34033:22;:51::i;23300:707::-;23566:14;23547:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;23609:196:::1;23639:5;23659:4;23678:9;23702:14;23731:12;23766:4;23786:8;23609:15;:196::i;:::-;23593:212;;;;;;23816:85;23844:5;23851:2;23869:5;-1:-1:-1::0;;;;;23855:30:0::1;;23894:4;23855:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23855:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23855:45:0;23816:27:::1;:85::i;:::-;23918:4;-1:-1:-1::0;;;;;23912:20:0::1;;23933:9;23912:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23954:45;23985:2;23989:9;23954:30;:45::i;32140:864::-:0;32400:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;32445:4:::1;-1:-1:-1::0;;;;;32434:15:0::1;:4;;32439:1;32434:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32434:7:0::1;-1:-1:-1::0;;;;;32434:15:0::1;;32426:57;;;::::0;;-1:-1:-1;;;32426:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32426:57:0;;;;;;;;;;;;;::::1;;32494:13;32510:9;32494:25;;32536:4;-1:-1:-1::0;;;;;32530:19:0::1;;32557:8;32530:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32592:4;-1:-1:-1::0;;;;;32586:20:0::1;;32607:51;32632:7;32641:4;;32646:1;32641:7;;;;;;32607:51;32660:8;32586:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32586:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32586:83:0;32579:91:::1;;;;32681:18;32716:4:::0;;-1:-1:-1;;32721:15:0;;32716:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32716:21:0::1;-1:-1:-1::0;;;;;32702:46:0::1;;32749:2;32702:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32702:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32702:50:0;32763:44:::1;::::0;;32702:50:::1;32763:44:::0;;::::1;::::0;;;;;;;;;;;32702:50;;-1:-1:-1;32763:44:0::1;::::0;;;32798:4;;;;;;32763:44;::::1;::::0;32798:4;;32763:44;32798:4;32763:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32804:2:0;;-1:-1:-1;32763:34:0::1;::::0;-1:-1:-1;;32763:44:0:i:1;:::-;32913:12:::0;32840:69:::1;32895:13:::0;32854:4;;-1:-1:-1;;32859:15:0;;32854:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32854:21:0::1;-1:-1:-1::0;;;;;32840:46:0::1;;32887:2;32840:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32840:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20319:865:::0;20573:12;20587;20554:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;20612:12:::1;20627:49;20652:7;20661:6;20669;20627:24;:49::i;:::-;20687:62;::::0;;-1:-1:-1;;;20687:62:0;;20721:10:::1;20687:62;::::0;::::1;::::0;-1:-1:-1;;;;;20687:33:0;::::1;:62:::0;;;;;;;;;;;;;;20612:64;;-1:-1:-1;20687:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20687:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20817:29:0::1;::::0;;-1:-1:-1;;;20817:29:0;;-1:-1:-1;;;;;20817:29:0;;::::1;;::::0;::::1;::::0;;;20787:12:::1;::::0;;;20817:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20787:12;20817:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20817:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20817:29:0;-1:-1:-1;20858:14:0::1;20877:43;20905:6:::0;20913;20877:27:::1;:43::i;:::-;20857:63;;;20962:6;-1:-1:-1::0;;;;;20952:16:0::1;:6;-1:-1:-1::0;;;;;20952:16:0::1;;:58;;20993:7;21002;20952:58;;;20972:7;20981;20952:58;20931:79:::0;;-1:-1:-1;20931:79:0;-1:-1:-1;21029:21:0;;::::1;;21021:72;;;;-1:-1:-1::0;;;21021:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21123:10;21112:7;:21;;21104:72;;;;-1:-1:-1::0;;;21104:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16858:1;;;;20319:865:::0;;;;;;;;;;;:::o;16646:41::-;;;:::o;34639:253::-;34783:21;34829:55;34860:7;34869:8;34879:4;34829:30;:55::i;22552:669::-;22841:16;22859:14;22886:12;22901:46;22926:7;22935:5;22942:4;22901:24;:46::i;:::-;22886:61;;22958:10;22971;:33;;22995:9;22971:33;;;-1:-1:-1;;22971:33:0;23015:80;;;-1:-1:-1;;;23015:80:0;;23043:10;23015:80;;;;23063:4;23015:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:46;;-1:-1:-1;;;;;;23015:27:0;;;;;:80;;;;;-1:-1:-1;;23015:80:0;;;;;;;;-1:-1:-1;23015:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133;23152:5;23159:9;23170:14;23186:12;23200:2;23204:8;23133:18;:80::i;:::-;23106:107;;;;-1:-1:-1;22552:669:0;-1:-1:-1;;;;;;;;;;;;;22552:669:0:o;18558:738::-;18846:12;18860;18874:14;18827:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;18922:85:::1;18936:6;18944;18952:14;18968;18984:10;18996;18922:13;:85::i;:::-;18901:106:::0;;-1:-1:-1;18901:106:0;-1:-1:-1;19018:12:0::1;19033:49;19058:7;19067:6:::0;19075;19033:24:::1;:49::i;:::-;19018:64;;19093:66;19125:6;19133:10;19145:4;19151:7;19093:31;:66::i;:::-;19170;19202:6;19210:10;19222:4;19228:7;19170:31;:66::i;:::-;19274:4;-1:-1:-1::0;;;;;19259:25:0::1;;19285:2;19259:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19259:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19259:29:0;18558:738;;;;-1:-1:-1;19259:29:0;;-1:-1:-1;18558:738:0;;-1:-1:-1;;;;;;;;;18558:738:0:o;19302:974::-;19555:16;19573:14;19589;19536:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;19643:176:::1;19671:5;19691:4;19710:18;19743:9;19767:14;19796:12;19643:13;:176::i;:::-;19616:203:::0;;-1:-1:-1;19616:203:0;-1:-1:-1;19830:12:0::1;19845:46;19870:7;19879:5:::0;19886:4:::1;19845:24;:46::i;:::-;19830:61;;19902:69;19934:5;19941:10;19953:4;19959:11;19902:31;:69::i;:::-;19988:4;-1:-1:-1::0;;;;;19982:19:0::1;;20009:9;19982:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20045:4;-1:-1:-1::0;;;;;20039:20:0::1;;20060:4;20066:9;20039:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20039:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20039:37:0;20032:45:::1;;;;20115:4;-1:-1:-1::0;;;;;20100:25:0::1;;20126:2;20100:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20100:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20100:29:0;;-1:-1:-1;20180:9:0::1;:21:::0;-1:-1:-1;20176:92:0::1;;;20203:65;20234:10;20258:9;20246;:21;20203:30;:65::i;:::-;16858:1;19302:974:::0;;;;;;;;;;;:::o;29222:810::-;29435:21;29407:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;29493:4:::1;-1:-1:-1::0;;;;;29482:15:0::1;:4;;29487:1;29482:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29482:7:0::1;-1:-1:-1::0;;;;;29482:15:0::1;;29474:57;;;::::0;;-1:-1:-1;;;29474:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29474:57:0;;;;;;;;;;;;;::::1;;29552:55;29582:7;29591:9;29602:4;;29552:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29552:29:0::1;::::0;-1:-1:-1;;;29552:55:0:i:1;:::-;29542:65;;29640:9;29626:7;29634:1;29626:10;;;;;;;;;;;;;;:23;;29618:75;;;;-1:-1:-1::0;;;29618:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29710:4;-1:-1:-1::0;;;;;29704:19:0::1;;29731:7;29739:1;29731:10;;;;;;;;;;;;;;29704:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29768:4;-1:-1:-1::0;;;;;29762:20:0::1;;29783:51;29808:7;29817:4;;29822:1;29817:7;;;;;;29783:51;29836:7;29844:1;29836:10;;;;;;;;;;;;;;29762:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29762:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29762:85:0;29755:93:::1;;;;29859:24;29865:7;29874:4;;29859:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29880:2:0;;-1:-1:-1;29859:5:0::1;::::0;-1:-1:-1;;29859:24:0:i:1;:::-;29946:7;29954:1;29946:10;;;;;;;;;;;;;;29934:9;:22;29930:94;;;29958:66;29989:10;30013:7;30021:1;30013:10;;;;;;;;;;;;;;30001:9;:22;29958:30;:66::i;8414:361::-:0;8609:45;;;-1:-1:-1;;;;;8609:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8609:45:0;-1:-1:-1;;;8609:45:0;;;8598:57;;;;8563:12;;8577:17;;8598:10;;;;8609:45;8598:57;;;8609:45;8598:57;;8609:45;8598:57;;;;;;;;;;-1:-1:-1;;8598:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8562:93;;;;8674:7;:57;;;;-1:-1:-1;8686:11:0;;:16;;:44;;;8717:4;8706:24;;;;;;;;;;;;;;;-1:-1:-1;8706:24:0;8686:44;8666:101;;;;;-1:-1:-1;;;8666:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8414:361;;;;;:::o;9193:195::-;9301:12;;;9263;9301;;;;;;;;;-1:-1:-1;;;;;9280:7:0;;;9294:5;;9280:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9280:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9262:52;;;9333:7;9325:55;;;;-1:-1:-1;;;9325:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9193:195;;;:::o;5446:517::-;5539:14;5585:1;5574:8;:12;5566:68;;;;-1:-1:-1;;;5566:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5665:1;5653:9;:13;:31;;;;;5683:1;5670:10;:14;5653:31;5645:84;;;;-1:-1:-1;;;5645:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:20;5763:17;:8;5776:3;5763:12;:17::i;:::-;5740:40;-1:-1:-1;5791:14:0;5808:31;5740:40;5828:10;5808:19;:31::i;:::-;5791:48;-1:-1:-1;5850:16:0;5869:40;5893:15;5869:19;:9;5883:4;5869:13;:19::i;:::-;:23;;:40::i;:::-;5850:59;;5944:11;5932:9;:23;;;;;;;5446:517;-1:-1:-1;;;;;;;5446:517:0:o;6638:511::-;6739:21;6796:1;6781:4;:11;:16;;6773:59;;;;;-1:-1:-1;;;6773:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:4;:11;6853:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6853:23:0;;6843:33;;6900:8;6887:7;6895:1;6887:10;;;;;;;;;;;;;:21;;;;;6924:6;6919:223;6950:1;6936:4;:11;:15;6932:1;:19;6919:223;;;6974:14;6990:15;7009:42;7021:7;7030:4;7035:1;7030:7;;;;;;;;;;;;;;7039:4;7044:1;7048;7044:5;7039:11;;;;;;;;;;;;;;7009;:42::i;:::-;6973:78;;;;7083:47;7096:7;7104:1;7096:10;;;;;;;;;;;;;;7108:9;7119:10;7083:12;:47::i;:::-;7066:7;7074:1;7078;7074:5;7066:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6953:3:0;;6919:223;;;;6638:511;;;;;:::o;3963:478::-;4052:12;4078:14;4094;4112:26;4123:6;4131;4112:10;:26::i;:::-;4276:32;;;-1:-1:-1;;4276:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4266:43;;;;;;-1:-1:-1;;;;;;4179:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4169:262;;;;;;;;;3963:478;-1:-1:-1;;;;;3963:478:0:o;8783:402::-;9008:51;;;-1:-1:-1;;;;;9008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9008:51:0;-1:-1:-1;;;9008:51:0;;;8997:63;;;;8962:12;;8976:17;;8997:10;;;;9008:51;8997:63;;;9008:51;8997:63;;9008:51;8997:63;;;;;;;;;;-1:-1:-1;;8997:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8961:99;;;;9079:7;:57;;;;-1:-1:-1;9091:11:0;;:16;;:44;;;9122:4;9111:24;;;;;;;;;;;;;;;-1:-1:-1;9111:24:0;9091:44;9071:106;;;;-1:-1:-1;;;9071:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8783:402;;;;;;:::o;24842:735::-;24949:6;24944:626;24975:1;24961:4;:11;:15;24957:1;:19;24944:626;;;24999:13;25014:14;25033:4;25038:1;25033:7;;;;;;;;;;;;;;25042:4;25047:1;25051;25047:5;25042:11;;;;;;;;;;;;;;24998:56;;;;25070:14;25089:42;25117:5;25124:6;25089:27;:42::i;:::-;25069:62;;;25146:14;25163:7;25171:1;25175;25171:5;25163:14;;;;;;;;;;;;;;25146:31;;25193:15;25210;25238:6;-1:-1:-1;;;;;25229:15:0;:5;-1:-1:-1;;;;;25229:15:0;;:61;;25271:9;25287:1;25229:61;;;25253:1;25257:9;25229:61;25192:98;;;;25305:10;25336:1;25322:4;:11;:15;25318:1;:19;:82;;25397:3;25318:82;;;25340:54;25365:7;25374:6;25382:4;25387:1;25391;25387:5;25382:11;;;;;;;;;;;;;;25340:24;:54::i;:::-;25305:95;;25430:48;25455:7;25464:5;25471:6;25430:24;:48::i;:::-;-1:-1:-1;;;;;25415:69:0;;25503:10;25515;25527:2;25541:1;25531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25531:12:0;;25415:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25415:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24978:3:0;;;;;-1:-1:-1;24944:626:0;;-1:-1:-1;;;;;;;;24944:626:0;;;24842:735;;;:::o;7230:532::-;7331:21;7388:1;7373:4;:11;:16;;7365:59;;;;;-1:-1:-1;;;7365:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7456:4;:11;7445:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7445:23:0;;7435:33;;7509:9;7479:7;7504:1;7487:7;:14;:18;7479:27;;;;;;;;;;;;;;;;;:39;7543:11;;-1:-1:-1;;7543:15:0;7529:226;7560:5;;7529:226;;7588:14;7604:15;7623:42;7635:7;7644:4;7653:1;7649;:5;7644:11;;;;;;;;;;;;;;7657:4;7662:1;7657:7;;;;;;;7623:42;7587:78;;;;7697:46;7709:7;7717:1;7709:10;;;;;;;;;;;;;;7721:9;7732:10;7697:11;:46::i;:::-;7680:7;7692:1;7688;:5;7680:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7567:3:0;7529:226;;30179:1221;30292:6;30287:1106;30318:1;30304:4;:11;:15;30300:1;:19;30287:1106;;;30342:13;30357:14;30376:4;30381:1;30376:7;;;;;;;;;;;;;;30385:4;30390:1;30394;30390:5;30385:11;;;;;;;;;;;;;;30341:56;;;;30413:14;30432:42;30460:5;30467:6;30432:27;:42::i;:::-;30412:62;;;30489:19;30526:48;30551:7;30560:5;30567:6;30526:24;:48::i;:::-;30489:86;;30590:16;30621:17;30709:13;30724;30742:4;-1:-1:-1;;;;;30742:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30742:18:0;;;;;;;-1:-1:-1;;;;;30708:52:0;;;;-1:-1:-1;30708:52:0;;-1:-1:-1;30776:17:0;;-1:-1:-1;;;;;30817:15:0;;;;;;;:61;;30859:8;30869;30817:61;;;30836:8;30846;30817:61;30775:103;;;;30907:63;30957:12;30921:5;-1:-1:-1;;;;;30907:30:0;;30946:4;30907:45;;;;;;;;;;;;;-1:-1:-1;;;;;30907:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30893:77;;31000:71;31030:11;31043:12;31057:13;31000:29;:71::i;:::-;30985:86;;30287:1106;;;;31102:15;31119;31147:6;-1:-1:-1;;;;;31138:15:0;:5;-1:-1:-1;;;;;31138:15:0;;:67;;31183:12;31202:1;31138:67;;;31162:1;31166:12;31138:67;31101:104;;;;31220:10;31251:1;31237:4;:11;:15;31233:1;:19;:82;;31312:3;31233:82;;;31255:54;31280:7;31289:6;31297:4;31302:1;31306;31302:5;31297:11;;;;;;;31255:54;31368:12;;;31378:1;31368:12;;;;;;;;;;-1:-1:-1;;;31330:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31330:51:0;;;;;;;;;;;;;;;;;;;;;;31220:95;;-1:-1:-1;31330:9:0;;;;;;31340:10;;31352;;31220:95;;31368:12;;31330:51;;;;;;;;31368:12;;31330:51;;;;31368:12;;31330:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30321:3:0;;;;;-1:-1:-1;30287:1106:0;;-1:-1:-1;;;;;;;;;;30287:1106:0;2969:129;3053:5;;;3048:16;;;;3040:50;;;;;-1:-1:-1;;;3040:50:0;;;;;;;;;;;;-1:-1:-1;;;3040:50:0;;;;;;;;;;;;;;6084:472;6177:13;6223:1;6211:9;:13;6203:70;;;;-1:-1:-1;;;6203:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6304:1;6292:9;:13;:31;;;;;6322:1;6309:10;:14;6292:31;6284:84;;;;-1:-1:-1;;;6284:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6379:14;6396:34;6425:4;6396:24;:9;6410;6396:13;:24::i;:::-;:28;;:34::i;:::-;6379:51;-1:-1:-1;6441:16:0;6460:34;6490:3;6460:25;:10;6475:9;6460:14;:25::i;:34::-;6441:53;;6516:32;6546:1;6529:11;6517:9;:23;;;;;;;6516:29;:32::i;:::-;6505:43;6084:472;-1:-1:-1;;;;;;6084:472:0:o;5003:321::-;5085:12;5128:1;5118:7;:11;5110:61;;;;-1:-1:-1;;;5110:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5201:1;5190:8;:12;:28;;;;;5217:1;5206:8;:12;5190:28;5182:81;;;;-1:-1:-1;;;5182:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5308:8;5284:21;:7;5296:8;5284:11;:21::i;:::-;:32;;;;;;;5003:321;-1:-1:-1;;;;5003:321:0:o;3522:349::-;3597:14;3613;3658:6;-1:-1:-1;;;;;3648:16:0;:6;-1:-1:-1;;;;;3648:16:0;;;3640:66;;;;-1:-1:-1;;;3640:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:6;-1:-1:-1;;;;;3736:15:0;:6;-1:-1:-1;;;;;3736:15:0;;:53;;3774:6;3782;3736:53;;;3755:6;3763;3736:53;3717:72;;-1:-1:-1;3717:72:0;-1:-1:-1;;;;;;3808:20:0;;3800:63;;;;;-1:-1:-1;;;3800:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:349;;;;;:::o;17162:1390::-;17380:12;17394;17537:1;-1:-1:-1;;;;;17475:64:0;17493:7;-1:-1:-1;;;;;17475:34:0;;17510:6;17518;17475:50;;;;;;;;;;;;;-1:-1:-1;;;;;17475:50:0;;;;;;-1:-1:-1;;;;;17475:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17475:50:0;-1:-1:-1;;;;;17475:64:0;;17471:150;;;17574:7;-1:-1:-1;;;;;17556:37:0;;17594:6;17602;17556:53;;;;;;;;;;;;;-1:-1:-1;;;;;17556:53:0;;;;;;-1:-1:-1;;;;;17556:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17471:150:0;17632:13;17647;17664:53;17693:7;17702:6;17710;17664:28;:53::i;:::-;17631:86;;;;17732:8;17744:1;17732:13;:30;;;;-1:-1:-1;17749:13:0;;17732:30;17728:817;;;17801:14;;-1:-1:-1;17817:14:0;;-1:-1:-1;17728:817:0;;;17865:19;17887:58;17910:14;17926:8;17936;17887:22;:58::i;:::-;17865:80;;17982:14;17964;:32;17960:574;;18043:10;18025:14;:28;;18017:79;;;;-1:-1:-1;;;18017:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18137:14;;-1:-1:-1;18153:14:0;-1:-1:-1;18153:14:0;17960:574;;;18209:19;18231:58;18254:14;18270:8;18280;18231:22;:58::i;:::-;18209:80;;18333:14;18315;:32;;18308:40;;;;18393:10;18375:14;:28;;18367:79;;;;-1:-1:-1;;;18367:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18487:14;-1:-1:-1;18503:14:0;;-1:-1:-1;17960:574:0;17728:817;;17162:1390;;;;;;;;;;;:::o;3106:142::-;3158:6;3185;;;:30;;-1:-1:-1;;3200:5:0;;;3214:1;3209;3200:5;3209:1;3195:15;;;;;:20;3185:30;3177:63;;;;;-1:-1:-1;;;3177:63:0;;;;;;;;;;;;-1:-1:-1;;;3177:63:0;;;;;;;;;;;;;;2833:128;2917:5;;;2912:16;;;;2904:49;;;;;-1:-1:-1;;;2904:49:0;;;;;;;;;;;;-1:-1:-1;;;2904:49:0;;;;;;;;;;;;;;4499:391;4592:13;4607;4634:14;4653:26;4664:6;4672;4653:10;:26::i;:::-;4633:46;;;4691:13;4706;4739:32;4747:7;4756:6;4764;4739:7;:32::i;:::-;-1:-1:-1;;;;;4724:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4724:62:0;;;;;;;-1:-1:-1;;;;;4690:96:0;;;;-1:-1:-1;4690:96:0;;-1:-1:-1;;;;;;4820:16:0;;;;;;;:62;;4863:8;4873;4820:62;;;4840:8;4850;4820:62;4797:85;;;;-1:-1:-1;4499:391:0;-1:-1:-1;;;;;;;4499:391:0:o

Swarm Source

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