Contract 0x05ff2b0db69458a0750badebc4f9e13add608c7f

 

Contract Overview

PancakeSwap: Router
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xf3e818df92e80081b4909bc896950787727e0fab7f2f1fac01b84e14db785e4683447452021-06-16 10:48:486 secs ago0x3882dcf26f1f643ad011460671e2648c0afb027a IN  PancakeSwap: Router0 BNB0.000872345
0xd87d33cca738207c632ad8407596baf781869fc0df6b71f442c8fef5e63878d183447452021-06-16 10:48:486 secs ago0x837539ab3b8e73bda81fc0766b72c141a75b75ab IN  PancakeSwap: Router0 BNB0.00048245
0x6105a097ef9671d5fc4b59008a5ab3f0c414c5f58a4329cff644ef39ad86661583447442021-06-16 10:48:459 secs ago0x25dbfa5fc75a4ef7fb32b4bca0b36dd114d20eb3 IN  PancakeSwap: Router0 BNB0.00154861
0xc8a5e7dd17cab82800e52edeb64db24b99b2c8ff00582d4f3c197cd3535c5ab083447442021-06-16 10:48:459 secs ago0x9183d5a019a364b5aa6c6b80c11ffa82c5dd543d IN  PancakeSwap: Router0.09006634 BNB0.0008586
0x764c6cabe5e95d84cff126ff77142f29dc6fb13937e11fa3c8869a34fee3bb8583447432021-06-16 10:48:4212 secs ago0x46610a3b49f5a96188b14975426f07621763e14d IN  PancakeSwap: Router0.004 BNB0.000913205
0x3ab3ccecbed799d5f27ae8215039a866de473b583c279f33a9f337f237f0c4c183447432021-06-16 10:48:4212 secs ago0xfc11822d8b1ca7de471410bed9d0999f2fed7bd3 IN  PancakeSwap: Router0 BNB0.00057363
0x280ddf11d7b0e994b71eaa8948f52b332ab821a8257275da87ff895e7bb0be5283447432021-06-16 10:48:4212 secs ago0x0f5d15f36166a4e4d73c1856032fa85058e7fe95 IN  PancakeSwap: Router0 BNB0.00097879
0x2e363cfef0da606e19ff37a26753a4fa34db23bbc0963be06e4fbd41084b18b583447432021-06-16 10:48:4212 secs ago0xef575087f1e7bec54046f98119c8c392a37c51dd IN  PancakeSwap: Router0 BNB0.00156951
0xacad48982db332a2f29ec8b42bbbaaa4e02bd370ea8b8033241737faf24cb35c83447412021-06-16 10:48:3618 secs ago0x2cba1fb99fb97952b7afcd9139154c580ef294b8 IN  PancakeSwap: Router0.04 BNB0.00063103
0x71b699e66bceea6f8ffb4f9db6406f2137aeb7bcc39e5cc29b18589f8ea5f88b83447392021-06-16 10:48:3024 secs ago0xd01a36465363974bde472b876d47421ee1c51de4 IN  PancakeSwap: Router0 BNB0.000797345
0xd1b84e1611ccb588df2fffbc6f6d653e68aabe05eb1073d6779bdd73c6bd42ac83447382021-06-16 10:48:2727 secs ago0xae58ba76dabfafb6b713ac28f5048537d4e3d1e6 IN  PancakeSwap: Router0 BNB0.00064761
0x310d2c9890a9482d810a14ea186445b65c887f8cb7b4e898f7e7211a1e7e381783447382021-06-16 10:48:2727 secs ago0x304913e30e781538c213a423419b11b007962a7b IN  PancakeSwap: Router0.12 BNB0.00105949
0x6265e21bad82cdbb6dcef968b7dcf6c337fe9f5257fc4ef7ec671c10026bc1c583447372021-06-16 10:48:2430 secs ago0x3c4c3b0fcbc8d00b9b344873fdb87d249085451c IN  PancakeSwap: Router0 BNB0.00085875
0x53130f2a3505d8a77ddab30b188f385163016ed750efacbc916301c095cd33a083447362021-06-16 10:48:2133 secs ago0x16be512e1229fdfe3a6e243bf9ffce8158dbbcce IN  PancakeSwap: Router1 BNB0.000916675
0xf5c372eb22d6be94145d4baa263ac8eb7aed65651d49a56ccc13eddbbd17424a83447352021-06-16 10:48:1836 secs ago0x96c2366f8fdf6569a3e62c7a7facc427ce5e11b2 IN  PancakeSwap: Router0 BNB0.001917487
0x513464f2a968fa0ef46c13f7701e37ad8b5271a1af7700c826ea4cd65110a84683447342021-06-16 10:48:1539 secs ago0x059611153b80579618cc3080e84a38c02b5af825 IN  PancakeSwap: Router0.00007510874841 BNB0.000893615
0x51036b6593688061effa9f27b557a19caca2e8b972191c2e13a88dacfa45a21b83447332021-06-16 10:48:1242 secs ago0x982c6d7aed2c492a5876b23bc120129f39337819 IN  PancakeSwap: Router0 BNB0.00155583
0x500a431d03b774afeebc479af876fe5bab8acf1100ef68bac150347e8ecc32e683447332021-06-16 10:48:1242 secs ago0x25dbfa5fc75a4ef7fb32b4bca0b36dd114d20eb3 IN  PancakeSwap: Router0 BNB0.000989675
0x3de4168c58dd5536055480e39a195bc0e265e942df84981ff92a4814bf723e3883447312021-06-16 10:48:0648 secs ago0x53bcb3ff4b580ef990cc46f31d7dbc00f36c247c IN  PancakeSwap: Router0 BNB0.00048251
0x9e9cbf3621450caa82e29eb59dcaf255bb536f1a205de2fe8aa0851e85fffb0083447312021-06-16 10:48:0648 secs ago0x2354cbaeed67b41522e8bf2445b904c8f1631dc6 IN  PancakeSwap: Router0 BNB0.000576864
0x530fc92a2028b68297bfae90011295fd7746beb54eca806dcffa2c5f0146058683447292021-06-16 10:48:0054 secs ago0x43693b690f107640543b096e4d55f6004161e6c8 IN  PancakeSwap: Router0 BNB0.00080994
0x33884c1204eb09f111e8f4fb3629db9209e351bace0f88338bb58ec5cb1efade83447272021-06-16 10:47:541 min ago0xb460293a9ef1cefaa3585a069e4de505e865481b IN  PancakeSwap: Router0 BNB0.002136015
0x39e99fc035d6c91ae333b45b0076d2f365ea72873b1a9c672a3f071828426c4283447262021-06-16 10:47:511 min ago0x9cddd8bde37b7235adc09f7b368109c99a0a1b33 IN  PancakeSwap: Router0 BNB0.00058556
0x4b2ed4e426f15e76dfa2934a55683059629b604f87ded41bfd180b5e492cd08783447252021-06-16 10:47:481 min ago0xdcfdb8e59be37206be77b354be44a411afa841c7 IN  PancakeSwap: Router0 BNB0.00115486
0xe69ceb72ef37438e192395e7a72b49672298048b8fbc8d414fb952766bbeea3683447252021-06-16 10:47:481 min ago0xd01a36465363974bde472b876d47421ee1c51de4 IN  PancakeSwap: Router0 BNB0.00055751
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x53130f2a3505d8a77ddab30b188f385163016ed750efacbc916301c095cd33a083447362021-06-16 10:48:2133 secs ago PancakeSwap: Router Binance: WBNB Token1 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago PancakeSwap: Router Binance: WBNB Token0.200000000000000042 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago 0xa64552ede8f5fea01e7bebaa204db43adcfddc14 PancakeSwap: Router0.200000000000000042 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago PancakeSwap: Router Binance: WBNB Token0.200000000000000042 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago 0xa64552ede8f5fea01e7bebaa204db43adcfddc14 PancakeSwap: Router0.200000000000000042 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago PancakeSwap: Router Binance: WBNB Token0.200000000000000042 BNB
0x86a0512817ec7e8c390777377b0db35f6c02380d6c8a964d4ef3260c79369be683447362021-06-16 10:48:2133 secs ago 0xa64552ede8f5fea01e7bebaa204db43adcfddc14 PancakeSwap: Router0.200000000000000042 BNB
0x513464f2a968fa0ef46c13f7701e37ad8b5271a1af7700c826ea4cd65110a84683447342021-06-16 10:48:1539 secs ago PancakeSwap: Router0x059611153b80579618cc3080e84a38c02b5af8250.000000670763149032 BNB
0x513464f2a968fa0ef46c13f7701e37ad8b5271a1af7700c826ea4cd65110a84683447342021-06-16 10:48:1539 secs ago PancakeSwap: Router Binance: WBNB Token0.000074437985261088 BNB
0x51036b6593688061effa9f27b557a19caca2e8b972191c2e13a88dacfa45a21b83447332021-06-16 10:48:1242 secs ago PancakeSwap: Router0x982c6d7aed2c492a5876b23bc120129f393378190.000000000059016521 BNB
0x51036b6593688061effa9f27b557a19caca2e8b972191c2e13a88dacfa45a21b83447332021-06-16 10:48:1242 secs ago Binance: WBNB Token PancakeSwap: Router0.000000000059016521 BNB
0x39e99fc035d6c91ae333b45b0076d2f365ea72873b1a9c672a3f071828426c4283447262021-06-16 10:47:511 min ago PancakeSwap: Router0x9cddd8bde37b7235adc09f7b368109c99a0a1b330.277460781394595722 BNB
0x39e99fc035d6c91ae333b45b0076d2f365ea72873b1a9c672a3f071828426c4283447262021-06-16 10:47:511 min ago Binance: WBNB Token PancakeSwap: Router0.277460781394595722 BNB
0xaa884606e2df9fdb394beb3f07ab7f533063498d5549dd2490234a59c5c1d63683447252021-06-16 10:47:481 min ago PancakeSwap: Router 0xc590175e458b83680867afd273527ff58f74c02b0.030060709608652917 BNB
0xaa884606e2df9fdb394beb3f07ab7f533063498d5549dd2490234a59c5c1d63683447252021-06-16 10:47:481 min ago Binance: WBNB Token PancakeSwap: Router0.030060709608652917 BNB
0x7cb282886f2a1e8d24a532f203006c18a6817f1a7c27274bda038ed584a94c2383447242021-06-16 10:47:451 min ago PancakeSwap: Router0x6c64105cff216f1f051fcea6cb553cc88e3d58cf0.020462985507743294 BNB
0x7cb282886f2a1e8d24a532f203006c18a6817f1a7c27274bda038ed584a94c2383447242021-06-16 10:47:451 min ago Binance: WBNB Token PancakeSwap: Router0.020462985507743294 BNB
0x151dfd9c426ed851659c610f77e59a6bc33235543c915fff93897c5cb31302fe83447242021-06-16 10:47:451 min ago PancakeSwap: Router Binance: WBNB Token0.01 BNB
0xc56b0557d2315135ede421f6a18ddf16f247c3b887c8ce34e2dc12193a0c02e183447232021-06-16 10:47:421 min ago PancakeSwap: Router Binance: WBNB Token0.02 BNB
0xb601ea8578325dd6e1c233f915a2d3cd260363554b7341c329f35d462142333383447222021-06-16 10:47:391 min ago PancakeSwap: Router0x5d503c0aea3664a663c3348d7a752bc8fcfb1aa70.6 BNB
0xb601ea8578325dd6e1c233f915a2d3cd260363554b7341c329f35d462142333383447222021-06-16 10:47:391 min ago Binance: WBNB Token PancakeSwap: Router0.6 BNB
0x8311479b99a21f8eb1c2e3ec4503e4515381a35ccfbeda4d251e4b6cc8b1d4bb83447192021-06-16 10:47:301 min ago PancakeSwap: Router Binance: WBNB Token0.16 BNB
0x7b29b0d438246c7d04554aae653328e060983222220572d891a36d077229688583447162021-06-16 10:47:211 min ago PancakeSwap: Router Binance: WBNB Token0.01 BNB
0x8c733df72918bcf94739658b66b01758659402715eadbb37a32391ad700c936183447162021-06-16 10:47:211 min ago PancakeSwap: Router0x88ff592f8d718827e804bf8c4e48b6ef7babfe810.178283924998122693 BNB
0x8c733df72918bcf94739658b66b01758659402715eadbb37a32391ad700c936183447162021-06-16 10:47:211 min ago Binance: WBNB Token PancakeSwap: Router0.178283924998122693 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PancakeRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-09-19
*/

pragma solidity =0.6.6;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

library PancakeLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: 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'd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66' // init code hash
            ))));
    }

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

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

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

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

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

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

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

contract PancakeRouter is IPancakeRouter02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'PancakeRouter: 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 (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IPancakeFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'PancakeRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'PancakeRouter: 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 = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IPancakePair(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 = PancakeLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IPancakePair(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 = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IPancakePair(pair).burn(to);
        (address token0,) = PancakeLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'PancakeRouter: 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 = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(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 = PancakeLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(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,) = PancakeLibrary.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 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IPancakePair(PancakeLibrary.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 = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.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 = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.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, 'PancakeRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(PancakeLibrary.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, 'PancakeRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.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, 'PancakeRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.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, 'PancakeRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(PancakeLibrary.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,) = PancakeLibrary.sortTokens(input, output);
            IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? PancakeLibrary.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, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'PancakeRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'PancakeRouter: 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, 'PancakeRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'PancakeRouter: 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 PancakeLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

60c060405234801561001057600080fd5b506040516200482e3803806200482e8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6146a9620001856000398061019f5280610d245280610d5f5280610e56528061108652806114105280611588528061194f5280611a5b5280611b115280611bdf5280611d375280611dbf5280612004528061207f528061212e52806121fa52806122a1528061231552806128135280612a865280612adc5280612b105280612b845280612d245280612e795280612f01525080610ef65280610fcd528061114c528061118552806112c052806114b0528061156652806116d65280611c845280611df15280611f54528061234752806125a0528061279852806127c152806127f1528061295e5280612aba5280612dc95280612f3352806137f252806138355280613b185280613c9e52806140d65280614184528061420452506146a96000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610b8d578063f305d71914610c0d578063fb3bdb4114610c53576101c8565b8063c45a015514610a50578063d06ca61f14610a65578063ded9382a14610b1a576101c8565b8063af2979eb116100b0578063af2979eb1461091c578063b6f9de951461096f578063baa2abde146109f3576101c8565b80638803dbee1461081f578063ad5c4648146108b5578063ad615dec146108e6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106cf5780637ff36ab51461076557806385f8c259146107e9576101c8565b80634a25d94a146105305780635b0d5984146105c65780635c11d79514610639576101c8565b80631f00ca74116101695780631f00ca74146103675780632195995c1461041c57806338ed17391461049a576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cd7565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610df1565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610317600480360360a08110156102a457600080fd5b813591602081013591810190606081016040820135600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b91935091506001600160a01b038135169060200135610e06565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035357818101518382015260200161033b565b505050509050019250505060405180910390f35b34801561037357600080fd5b506103176004803603604081101561038a57600080fd5b81359190810190604081016020820135600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460208302840111600160201b831117156103de57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611145945050505050565b34801561042857600080fd5b50610220600480360361016081101561044057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561117b565b3480156104a657600080fd5b50610317600480360360a08110156104bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e357600080fd5b8201836020820111156104f557600080fd5b803590602001918460208302840111600160201b8311171561051657600080fd5b91935091506001600160a01b038135169060200135611275565b34801561053c57600080fd5b50610317600480360360a081101561055357600080fd5b813591602081013591810190606081016040820135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460208302840111600160201b831117156105ac57600080fd5b91935091506001600160a01b0381351690602001356113c0565b3480156105d257600080fd5b5061026f60048036036101408110156105ea57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561155e565b34801561064557600080fd5b506101c6600480360360a081101561065c57600080fd5b813591602081013591810190606081016040820135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b91935091506001600160a01b03813516906020013561166c565b3480156106db57600080fd5b506101c6600480360360a08110156106f257600080fd5b813591602081013591810190606081016040820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b91935091506001600160a01b038135169060200135611901565b6103176004803603608081101561077b57600080fd5b81359190810190604081016020820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b038135169060200135611b97565b3480156107f557600080fd5b5061026f6004803603606081101561080c57600080fd5b5080359060208101359060400135611efc565b34801561082b57600080fd5b50610317600480360360a081101561084257600080fd5b813591602081013591810190606081016040820135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460208302840111600160201b8311171561089b57600080fd5b91935091506001600160a01b038135169060200135611f09565b3480156108c157600080fd5b506108ca612002565b604080516001600160a01b039092168252519081900360200190f35b3480156108f257600080fd5b5061026f6004803603606081101561090957600080fd5b5080359060208101359060400135612026565b34801561092857600080fd5b5061026f600480360360c081101561093f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612033565b6101c66004803603608081101561098557600080fd5b81359190810190604081016020820135600160201b8111156109a657600080fd5b8201836020820111156109b857600080fd5b803590602001918460208302840111600160201b831117156109d957600080fd5b91935091506001600160a01b0381351690602001356121b4565b3480156109ff57600080fd5b50610220600480360360e0811015610a1657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612552565b348015610a5c57600080fd5b506108ca612796565b348015610a7157600080fd5b5061031760048036036040811015610a8857600080fd5b81359190810190604081016020820135600160201b811115610aa957600080fd5b820183602082011115610abb57600080fd5b803590602001918460208302840111600160201b83111715610adc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127ba945050505050565b348015610b2657600080fd5b506102206004803603610140811015610b3e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127e7565b348015610b9957600080fd5b50610bef6004803603610100811015610bb157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128fb565b60408051938452602084019290925282820152519081900360600190f35b610bef600480360360c0811015610c2357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a37565b61031760048036036080811015610c6957600080fd5b81359190810190604081016020820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b038135169060200135612cdc565b6000808242811015610d1e576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b610d4d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612552565b9093509150610d5d898685613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050610de585836131da565b50965096945050505050565b6000610dfe8484846132d2565b949350505050565b60608142811015610e4c576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e8657fe5b905060200201356001600160a01b03166001600160a01b031614610ef1576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b610f4f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110610f6257fe5b60200260200101511015610fa75760405162461bcd60e51b815260040180806020018281038252602981526020018061452b6029913960400191505060405180910390fd5b61104586866000818110610fb757fe5b905060200201356001600160a01b03163361102b7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ff957fe5b905060200201356001600160a01b03168b8b600181811061101657fe5b905060200201356001600160a01b031661350e565b8560008151811061103857fe5b60200260200101516135e6565b61108482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613743915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110c357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050505061113a848360018551038151811061112d57fe5b60200260200101516131da565b509695505050505050565b60606111727f00000000000000000000000000000000000000000000000000000000000000008484613989565b90505b92915050565b60008060006111ab7f00000000000000000000000000000000000000000000000000000000000000008f8f61350e565b90506000876111ba578c6111be565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050505061125b8f8f8f8f8f8f8f612552565b809450819550505050509b509b9950505050505050505050565b606081428110156112bb576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6113197f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b9150868260018451038151811061132c57fe5b602002602001015110156113715760405162461bcd60e51b815260040180806020018281038252602981526020018061452b6029913960400191505060405180910390fd5b61138186866000818110610fb757fe5b61113a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b60608142811015611406576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061144057fe5b905060200201356001600160a01b03166001600160a01b0316146114ab576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6115097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b9150868260008151811061151957fe5b60200260200101511115610fa75760405162461bcd60e51b81526004018080602001828103825260258152602001806145e16025913960400191505060405180910390fd5b6000806115ac7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061350e565b90506000866115bb578b6115bf565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561163557600080fd5b505af1158015611649573d6000803e3d6000fd5b5050505061165b8d8d8d8d8d8d612033565b9d9c50505050505050505050505050565b80428110156116b0576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b611725858560008181106116c057fe5b905060200201356001600160a01b03163361171f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b905060200201356001600160a01b03168a8a600181811061101657fe5b8a6135e6565b60008585600019810181811061173757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561179c57600080fd5b505afa1580156117b0573d6000803e3d6000fd5b505050506040513d60208110156117c657600080fd5b50516040805160208881028281018201909352888252929350611808929091899189918291850190849080828437600092019190915250889250613ac1915050565b866118ba828888600019810181811061181d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b505afa158015611896573d6000803e3d6000fd5b505050506040513d60208110156118ac57600080fd5b50519063ffffffff613dd316565b10156118f75760405162461bcd60e51b815260040180806020018281038252602981526020018061452b6029913960400191505060405180910390fd5b5050505050505050565b8042811015611945576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197f57fe5b905060200201356001600160a01b03166001600160a01b0316146119ea576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6119fa858560008181106116c057fe5b611a38858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ac1915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611aa257600080fd5b505afa158015611ab6573d6000803e3d6000fd5b505050506040513d6020811015611acc57600080fd5b5051905086811015611b0f5760405162461bcd60e51b815260040180806020018281038252602981526020018061452b6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7557600080fd5b505af1158015611b89573d6000803e3d6000fd5b505050506118f784826131da565b60608142811015611bdd576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c1457fe5b905060200201356001600160a01b03166001600160a01b031614611c7f576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611cdd7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110611cf057fe5b60200260200101511015611d355760405162461bcd60e51b815260040180806020018281038252602981526020018061452b6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d7157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da457600080fd5b505af1158015611db8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e1d7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110611e2a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b505050506040513d6020811015611eab57600080fd5b5051611eb357fe5b611ef282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b5095945050505050565b6000610dfe848484613e2b565b60608142811015611f4f576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b611fad7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91508682600081518110611fbd57fe5b602002602001015111156113715760405162461bcd60e51b81526004018080602001828103825260258152602001806145e16025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dfe848484613f1b565b60008142811015612079576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6120a8887f00000000000000000000000000000000000000000000000000000000000000008989893089612552565b604080516370a0823160e01b8152306004820152905191945061212c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120fb57600080fd5b505afa15801561210f573d6000803e3d6000fd5b505050506040513d602081101561212557600080fd5b5051613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561219257600080fd5b505af11580156121a6573d6000803e3d6000fd5b5050505061113a84836131da565b80428110156121f8576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061222f57fe5b905060200201356001600160a01b03166001600160a01b03161461229a576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123737f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b505050506040513d60208110156123ed57600080fd5b50516123f557fe5b60008686600019810181811061240757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561246c57600080fd5b505afa158015612480573d6000803e3d6000fd5b505050506040513d602081101561249657600080fd5b505160408051602089810282810182019093528982529293506124d89290918a918a918291850190849080828437600092019190915250899250613ac1915050565b876118ba82898960001981018181106124ed57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b6000808242811015612599576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b60006125c67f00000000000000000000000000000000000000000000000000000000000000008c8c61350e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561262157600080fd5b505af1158015612635573d6000803e3d6000fd5b505050506040513d602081101561264b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561269857600080fd5b505af11580156126ac573d6000803e3d6000fd5b505050506040513d60408110156126c257600080fd5b508051602090910151909250905060006126dc8e8e613fc7565b509050806001600160a01b03168e6001600160a01b0316146126ff578183612702565b82825b90975095508a8710156127465760405162461bcd60e51b81526004018080602001828103825260248152602001806145776024913960400191505060405180910390fd5b898610156127855760405162461bcd60e51b81526004018080602001828103825260248152602001806146506024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111727f000000000000000000000000000000000000000000000000000000000000000084846133c2565b60008060006128377f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050600087612846578c61284a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128c057600080fd5b505af11580156128d4573d6000803e3d6000fd5b505050506128e68e8e8e8e8e8e610cd7565b909f909e509c50505050505050505050505050565b60008060008342811015612944576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b6129528c8c8c8c8c8c6140a5565b909450925060006129847f00000000000000000000000000000000000000000000000000000000000000008e8e61350e565b90506129928d3383886135e6565b61299e8c3383876135e6565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129f657600080fd5b505af1158015612a0a573d6000803e3d6000fd5b505050506040513d6020811015612a2057600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a80576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b612aae8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140a5565b90945092506000612b007f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050612b0e8b3383886135e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050506040513d6020811015612c2c57600080fd5b5051612c3457fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c8c57600080fd5b505af1158015612ca0573d6000803e3d6000fd5b505050506040513d6020811015612cb657600080fd5b5051925034841015612cce57612cce338534036131da565b505096509650969350505050565b60608142811015612d22576040805162461bcd60e51b8152602060048201526016602482015260008051602061450b833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d5957fe5b905060200201356001600160a01b03166001600160a01b031614612dc4576040805162461bcd60e51b815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b612e227f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91503482600081518110612e3257fe5b60200260200101511115612e775760405162461bcd60e51b81526004018080602001828103825260258152602001806145e16025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612eb357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f5f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110612f6c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fc357600080fd5b505af1158015612fd7573d6000803e3d6000fd5b505050506040513d6020811015612fed57600080fd5b5051612ff557fe5b61303482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b8160008151811061304157fe5b6020026020010151341115611ef257611ef2338360008151811061306157fe5b602002602001015134036131da565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130ed5780518252601f1990920191602091820191016130ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461314f576040519150601f19603f3d011682016040523d82523d6000602084013e613154565b606091505b5091509150818015613182575080511580613182575080806020019051602081101561317f57600080fd5b50515b6131d3576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132265780518252601f199092019160209182019101613207565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b50509050806132cd5760405162461bcd60e51b81526004018080602001828103825260238152602001806145be6023913960400191505060405180910390fd5b505050565b60008084116133125760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6000831180156133225750600082115b61335d5760405162461bcd60e51b81526004018080602001828103825260268152602001806146066026913960400191505060405180910390fd5b6000613371856103e663ffffffff61431916565b90506000613385828563ffffffff61431916565b905060006133ab8361339f886103e863ffffffff61431916565b9063ffffffff61438516565b90508082816133b657fe5b04979650505050505050565b606060028251101561341b576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561343357600080fd5b5060405190808252806020026020018201604052801561345d578160200160208202803683370190505b509050828160008151811061346e57fe5b60200260200101818152505060005b6001835103811015613506576000806134c08786858151811061349c57fe5b60200260200101518786600101815181106134b357fe5b60200260200101516143dd565b915091506134e28484815181106134d357fe5b602002602001015183836132d2565b8484600101815181106134f157fe5b6020908102919091010152505060010161347d565b509392505050565b600080600061351d8585613fc7565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061366b5780518252601f19909201916020918201910161364c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b509150915081801561370057508051158061370057508080602001905160208110156136fd57600080fd5b50515b61373b5760405162461bcd60e51b815260040180806020018281038252602481526020018061462c6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139835760008084838151811061376157fe5b602002602001015185846001018151811061377857fe5b60200260200101519150915060006137908383613fc7565b50905060008785600101815181106137a457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137d2578260006137d6565b6000835b91509150600060028a510388106137ed578861382e565b61382e7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061382157fe5b602002602001015161350e565b905061385b7f0000000000000000000000000000000000000000000000000000000000000000888861350e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613898576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139095781810151838201526020016138f1565b50505050905090810190601f1680156139365780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561395857600080fd5b505af115801561396c573d6000803e3d6000fd5b505060019099019850613746975050505050505050565b50505050565b60606002825110156139e2576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156139fa57600080fd5b50604051908082528060200260200182016040528015613a24578160200160208202803683370190505b5090508281600183510381518110613a3857fe5b60209081029190910101528151600019015b801561350657600080613a7a87866001860381518110613a6657fe5b60200260200101518786815181106134b357fe5b91509150613a9c848481518110613a8d57fe5b60200260200101518383613e2b565b846001850381518110613aab57fe5b6020908102919091010152505060001901613a4a565b60005b60018351038110156132cd57600080848381518110613adf57fe5b6020026020010151858460010181518110613af657fe5b6020026020010151915091506000613b0e8383613fc7565b5090506000613b3e7f0000000000000000000000000000000000000000000000000000000000000000858561350e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b7f57600080fd5b505afa158015613b93573d6000803e3d6000fd5b505050506040513d6060811015613ba957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613be6578284613be9565b83835b91509150613c47828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b9550613c548683836132d2565b945050505050600080856001600160a01b0316886001600160a01b031614613c7e57826000613c82565b6000835b91509150600060028c51038a10613c99578a613ccd565b613ccd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061382157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d57578181015183820152602001613d3f565b50505050905090810190601f168015613d845780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613da657600080fd5b505af1158015613dba573d6000803e3d6000fd5b50506001909b019a50613ac49950505050505050505050565b80820382811115611175576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e6b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144e1602a913960400191505060405180910390fd5b600083118015613e7b5750600082115b613eb65760405162461bcd60e51b81526004018080602001828103825260268152602001806146066026913960400191505060405180910390fd5b6000613eda6103e8613ece868863ffffffff61431916565b9063ffffffff61431916565b90506000613ef46103e6613ece868963ffffffff613dd316565b9050613f116001828481613f0457fe5b049063ffffffff61438516565b9695505050505050565b6000808411613f5b5760405162461bcd60e51b815260040180806020018281038252602381526020018061459b6023913960400191505060405180910390fd5b600083118015613f6b5750600082115b613fa65760405162461bcd60e51b81526004018080602001828103825260268152602001806146066026913960400191505060405180910390fd5b82613fb7858463ffffffff61431916565b81613fbe57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561401b5760405162461bcd60e51b81526004018080602001828103825260238152602001806145546023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061403b57828461403e565b83835b90925090506001600160a01b03821661409e576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561411f57600080fd5b505afa158015614133573d6000803e3d6000fd5b505050506040513d602081101561414957600080fd5b50516001600160a01b031614156141fc57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141cf57600080fd5b505af11580156141e3573d6000803e3d6000fd5b505050506040513d60208110156141f957600080fd5b50505b60008061422a7f00000000000000000000000000000000000000000000000000000000000000008b8b6143dd565b9150915081600014801561423c575080155b1561424c5787935086925061430c565b6000614259898484613f1b565b90508781116142ac57858110156142a15760405162461bcd60e51b81526004018080602001828103825260248152602001806146506024913960400191505060405180910390fd5b88945092508261430a565b60006142b9898486613f1b565b9050898111156142c557fe5b878110156143045760405162461bcd60e51b81526004018080602001828103825260248152602001806145776024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143345750508082028282828161433157fe5b04145b611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143ec8585613fc7565b5090506143fa86868661350e565b5060008061440988888861350e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561444157600080fd5b505afa158015614455573d6000803e3d6000fd5b505050506040513d606081101561446b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146144a55780826144a8565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b65526f757465723a20455850495245440000000000000000000050616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212203b803403a94f473095a153d2129bf59ed437dd70b00b4456870e00de0693f26e64736f6c63430006060033000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15445:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15919:10;-1:-1:-1;;;;;15933:4:0;15919:18;;15912:26;;;;15445:18405;;12:1:-1;9;2:12;20035:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20035:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20035:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32802:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32802:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32802:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27156:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27156:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27156:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27156:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27156:842:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27156:842:0;;-1:-1:-1;27156:842:0;-1:-1:-1;;;;;;27156:842:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27156:842:0;;;;;;;;;;;;;;;;;33596:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33596:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33596:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33596:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33596:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33596:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33596:251:0;;-1:-1:-1;33596:251:0;;-1:-1:-1;;;;;33596:251:0:i;20714:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20714:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20714:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24401:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24401:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24401:622:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24401:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24401:622:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24401:622:0;;-1:-1:-1;24401:622:0;-1:-1:-1;;;;;;24401:622:0;;;;;;;;:::i;26330:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26330:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26330:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26330:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26330:820:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26330:820:0;;-1:-1:-1;26330:820:0;-1:-1:-1;;;;;;26330:820:0;;;;;;;;:::i;22843:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22843:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22843:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30161:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30161:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30161:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30161:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30161:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30161:710:0;;-1:-1:-1;30161:710:0;-1:-1:-1;;;;;;30161:710:0;;;;;;;;:::i;31727:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31727:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31727:837:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31727:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31727:837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31727:837:0;;-1:-1:-1;31727:837:0;-1:-1:-1;;;;;;31727:837:0;;;;;;;;:::i;25635:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25635:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25635:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25635:689:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25635:689:0;;-1:-1:-1;25635:689:0;-1:-1:-1;;;;;;25635:689:0;;;;;;;;:::i;33070:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33070:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33070:259:0;;;;;;;;;;;;:::i;25029:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25029:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25029:600:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25029:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25029:600:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25029:600:0;;-1:-1:-1;25029:600:0;-1:-1:-1;;;;;;25029:600:0;;;;;;;;:::i;15575:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15575:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15575:38:0;;;;;;;;;;;;;;32608:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32608:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32608:186:0;;;;;;;;;;;;:::i;22137:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22137:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22137:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30877:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30877:844:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30877:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30877:844:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30877:844:0;;-1:-1:-1;30877:844:0;-1:-1:-1;;;;;;30877:844:0;;;;;;;;:::i;19176:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19176:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19176:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15527:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15527:41:0;;;:::i;33337:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33337:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33337:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33337:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33337:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33337:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33337:251:0;;-1:-1:-1;33337:251:0;;-1:-1:-1;;;;;33337:251:0:i;21393:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21393:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21393:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17423:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17423:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17423:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18163:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18163:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28004:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28004:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28004:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28004:802:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28004:802:0;;-1:-1:-1;28004:802:0;-1:-1:-1;;;;;;28004:802:0;;;;;;;;:::i;20035:673::-;20272:16;20290:14;20253:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;20344:196:::1;20374:5;20394:4;20413:9;20437:14;20466:12;20501:4;20521:8;20344:15;:196::i;:::-;20317:223:::0;;-1:-1:-1;20317:223:0;-1:-1:-1;20551:51:0::1;20579:5:::0;20586:2;20317:223;20551:27:::1;:51::i;:::-;20619:4;-1:-1:-1::0;;;;;20613:20:0::1;;20634:9;20613:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20613:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20613:31:0;;;;20655:45;20686:2;20690:9;20655:30;:45::i;:::-;20035:673:::0;;;;;;;;;;:::o;32802:260::-;32955:14;32994:60;33022:8;33032:9;33043:10;32994:27;:60::i;:::-;32987:67;32802:260;-1:-1:-1;;;;32802:260:0:o;27156:842::-;27370:21;27342:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27442:4:0::1;27417:29;:4:::0;;-1:-1:-1;;27422:15:0;;27417:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27417:21:0::1;-1:-1:-1::0;;;;;27417:29:0::1;;27409:69;;;::::0;;-1:-1:-1;;;27409:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27499:53;27528:7;27537:8;27547:4;;27499:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27499:28:0::1;::::0;-1:-1:-1;;;27499:53:0:i:1;:::-;27489:63;;27602:12;27571:7;27596:1;27579:7;:14;:18;27571:27;;;;;;;;;;;;;;:43;;27563:97;;;;-1:-1:-1::0;;;27563:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27671:139;27717:4;;27722:1;27717:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27717:7:0::1;27726:10;27738:49;27761:7;27770:4;;27775:1;27770:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27770:7:0::1;27779:4;;27784:1;27779:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27779:7:0::1;27738:22;:49::i;:::-;27789:7;27797:1;27789:10;;;;;;;;;;;;;;27671:31;:139::i;:::-;27821:35;27827:7;27836:4;;27821:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27850:4:0::1;::::0;-1:-1:-1;27821:5:0::1;::::0;-1:-1:-1;;27821:35:0:i:1;:::-;27873:4;-1:-1:-1::0;;;;;27867:20:0::1;;27888:7;27913:1;27896:7;:14;:18;27888:27;;;;;;;;;;;;;;27867:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27867:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27867:49:0;;;;27927:63;27958:2;27962:7;27987:1;27970:7;:14;:18;27962:27;;;;;;;;;;;;;;27927:30;:63::i;:::-;27156:842:::0;;;;;;;;;:::o;33596:251::-;33740:21;33786:53;33814:7;33823:9;33834:4;33786:27;:53::i;:::-;33779:60;;33596:251;;;;;:::o;20714:673::-;21020:12;21034;21059;21074:47;21097:7;21106:6;21114;21074:22;:47::i;:::-;21059:62;;21132:10;21145;:33;;21169:9;21145:33;;;-1:-1:-1;;21145:33:0;21189:78;;;-1:-1:-1;;;21189:78:0;;21215:10;21189:78;;;;21235:4;21189:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21132:46;;-1:-1:-1;;;;;;21189:25:0;;;;;:78;;;;;-1:-1:-1;;21189:78:0;;;;;;;;-1:-1:-1;21189:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21189:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21189:78:0;;;;21299:80;21315:6;21323;21331:9;21342:10;21354;21366:2;21370:8;21299:15;:80::i;:::-;21278:101;;;;;;;;20714:673;;;;;;;;;;;;;;;;:::o;24401:622::-;24625:21;24606:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;24669:53:::1;24698:7;24707:8;24717:4;;24669:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24669:28:0::1;::::0;-1:-1:-1;;;24669:53:0:i:1;:::-;24659:63;;24772:12;24741:7;24766:1;24749:7;:14;:18;24741:27;;;;;;;;;;;;;;:43;;24733:97;;;;-1:-1:-1::0;;;24733:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24841:139;24887:4;;24892:1;24887:7;;;;;;24841:139;24991:24;24997:7;25006:4;;24991:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25012:2:0;;-1:-1:-1;24991:5:0::1;::::0;-1:-1:-1;;24991:24:0:i:1;26330:820::-:0;26544:21;26516:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26616:4:0::1;26591:29;:4:::0;;-1:-1:-1;;26596:15:0;;26591:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26591:21:0::1;-1:-1:-1::0;;;;;26591:29:0::1;;26583:69;;;::::0;;-1:-1:-1;;;26583:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26673:53;26701:7;26710:9;26721:4;;26673:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26673:27:0::1;::::0;-1:-1:-1;;;26673:53:0:i:1;:::-;26663:63;;26759:11;26745:7;26753:1;26745:10;;;;;;;;;;;;;;:25;;26737:75;;;;-1:-1:-1::0;;;26737:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22843:714:::0;23161:14;23188:12;23203:44;23226:7;23235:5;23242:4;23203:22;:44::i;:::-;23188:59;;23258:10;23271;:33;;23295:9;23271:33;;;-1:-1:-1;;23271:33:0;23315:78;;;-1:-1:-1;;;23315:78:0;;23341:10;23315:78;;;;23361:4;23315:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23258:46;;-1:-1:-1;;;;;;23315:25:0;;;;;:78;;;;;-1:-1:-1;;23315:78:0;;;;;;;;-1:-1:-1;23315:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23315:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23315:78:0;;;;23416:133;23478:5;23485:9;23496:14;23512:12;23526:2;23530:8;23416:47;:133::i;:::-;23404:145;22843:714;-1:-1:-1;;;;;;;;;;;;;22843:714:0:o;30161:710::-;30395:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;30416:137:::1;30462:4;;30467:1;30462:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30462:7:0::1;30471:10;30483:49;30506:7;30515:4;;30520:1;30515:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30515:7:0::1;30524:4;;30529:1;30524:7;;;;;;30483:49;30534:8;30416:31;:137::i;:::-;30564:18;30592:4:::0;;-1:-1:-1;;30597:15:0;;30592:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30592:21:0::1;-1:-1:-1::0;;;;;30585:39:0::1;;30625:2;30585:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30585:43:0::1;-1:-1:-1::0;;;;;30585:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30585:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30585:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30585:43:0;30639:44:::1;::::0;;30585:43:::1;30639:44:::0;;::::1;::::0;;;;;;;;;;;30585:43;;-1:-1:-1;30639:44:0::1;::::0;;;30674:4;;;;;;30639:44;::::1;::::0;30674:4;;30639:44;30674:4;30639:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30680:2:0;;-1:-1:-1;30639:34:0::1;::::0;-1:-1:-1;;30639:44:0:i:1;:::-;30782:12:::0;30716:62:::1;30764:13:::0;30723:4;;-1:-1:-1;;30728:15:0;;30723:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30723:21:0::1;-1:-1:-1::0;;;;;30716:39:0::1;;30756:2;30716:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30716:43:0::1;-1:-1:-1::0;;;;;30716:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30716:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30716:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30716:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30694:169;;;;-1:-1:-1::0;;;30694:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15737:1;30161:710:::0;;;;;;;:::o;31727:837::-;31994:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32053:4:0::1;32028:29;:4:::0;;-1:-1:-1;;32033:15:0;;32028:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32028:21:0::1;-1:-1:-1::0;;;;;32028:29:0::1;;32020:69;;;::::0;;-1:-1:-1;;;32020:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32100:137;32146:4;;32151:1;32146:7;;;;;;32100:137;32248:55;32283:4;;32248:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32297:4:0::1;::::0;-1:-1:-1;32248:34:0::1;::::0;-1:-1:-1;;32248:55:0:i:1;:::-;32331:37;::::0;;-1:-1:-1;;;32331:37:0;;32362:4:::1;32331:37;::::0;::::1;::::0;;;32314:14:::1;::::0;-1:-1:-1;;;;;32338:4:0::1;32331:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32331:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32331:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32331:37:0;;-1:-1:-1;32387:25:0;;::::1;;32379:79;;;;-1:-1:-1::0;;;32379:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32475:4;-1:-1:-1::0;;;;;32469:20:0::1;;32490:9;32469:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32469:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32469:31:0;;;;32511:45;32542:2;32546:9;32511:30;:45::i;25635:689::-:0;25851:21;25823:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;25909:4:::1;-1:-1:-1::0;;;;;25898:15:0::1;:4;;25903:1;25898:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25898:7:0::1;-1:-1:-1::0;;;;;25898:15:0::1;;25890:55;;;::::0;;-1:-1:-1;;;25890:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25966:54;25995:7;26004:9;26015:4;;25966:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25966:28:0::1;::::0;-1:-1:-1;;;25966:54:0:i:1;:::-;25956:64;;26070:12;26039:7;26064:1;26047:7;:14;:18;26039:27;;;;;;;;;;;;;;:43;;26031:97;;;;-1:-1:-1::0;;;26031:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26145:4;-1:-1:-1::0;;;;;26139:19:0::1;;26166:7;26174:1;26166:10;;;;;;;;;;;;;;26139:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26139:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26139:40:0;;;;;26203:4;-1:-1:-1::0;;;;;26197:20:0::1;;26218:49;26241:7;26250:4;;26255:1;26250:7;;;;;;26218:49;26269:7;26277:1;26269:10;;;;;;;;;;;;;;26197:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26197:83:0::1;-1:-1:-1::0;;;;;26197:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26197:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26197:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26197:83:0;26190:91:::1;;;;26292:24;26298:7;26307:4;;26292:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26313:2:0;;-1:-1:-1;26292:5:0::1;::::0;-1:-1:-1;;26292:24:0:i:1;:::-;25635:689:::0;;;;;;;;:::o;33070:259::-;33223:13;33261:60;33288:9;33299;33310:10;33261:26;:60::i;25029:600::-;25253:21;25234:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;25297:53:::1;25325:7;25334:9;25345:4;;25297:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25297:27:0::1;::::0;-1:-1:-1;;;25297:53:0:i:1;:::-;25287:63;;25383:11;25369:7;25377:1;25369:10;;;;;;;;;;;;;;:25;;25361:75;;;;-1:-1:-1::0;;;25361:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15575:38:::0;;;:::o;32608:186::-;32705:12;32737:49;32758:7;32767:8;32777;32737:20;:49::i;22137:700::-;22403:14;22384:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;22446:196:::1;22476:5;22496:4;22515:9;22539:14;22568:12;22603:4;22623:8;22446:15;:196::i;:::-;22692:38;::::0;;-1:-1:-1;;;22692:38:0;;22724:4:::1;22692:38;::::0;::::1;::::0;;;22430:212;;-1:-1:-1;22653:78:0::1;::::0;-1:-1:-1;22681:5:0;;22688:2;;-1:-1:-1;;;;;22692:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22692:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22692:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22692:38:0;22653:27:::1;:78::i;:::-;22748:4;-1:-1:-1::0;;;;;22742:20:0::1;;22763:9;22742:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22742:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22742:31:0;;;;22784:45;22815:2;22819:9;22784:30;:45::i;30877:844::-:0;31137:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;31182:4:::1;-1:-1:-1::0;;;;;31171:15:0::1;:4;;31176:1;31171:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31171:7:0::1;-1:-1:-1::0;;;;;31171:15:0::1;;31163:55;;;::::0;;-1:-1:-1;;;31163:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31229:13;31245:9;31229:25;;31271:4;-1:-1:-1::0;;;;;31265:19:0::1;;31292:8;31265:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31265:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31265:38:0;;;;;31327:4;-1:-1:-1::0;;;;;31321:20:0::1;;31342:49;31365:7;31374:4;;31379:1;31374:7;;;;;;31342:49;31393:8;31321:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31321:81:0::1;-1:-1:-1::0;;;;;31321:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31321:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31321:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31321:81:0;31314:89:::1;;;;31414:18;31442:4:::0;;-1:-1:-1;;31447:15:0;;31442:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31442:21:0::1;-1:-1:-1::0;;;;;31435:39:0::1;;31475:2;31435:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31435:43:0::1;-1:-1:-1::0;;;;;31435:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31435:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31435:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31435:43:0;31489:44:::1;::::0;;31435:43:::1;31489:44:::0;;::::1;::::0;;;;;;;;;;;31435:43;;-1:-1:-1;31489:44:0::1;::::0;;;31524:4;;;;;;31489:44;::::1;::::0;31524:4;;31489:44;31524:4;31489:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31530:2:0;;-1:-1:-1;31489:34:0::1;::::0;-1:-1:-1;;31489:44:0:i:1;:::-;31632:12:::0;31566:62:::1;31614:13:::0;31573:4;;-1:-1:-1;;31578:15:0;;31573:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31573:21:0::1;-1:-1:-1::0;;;;;31566:39:0::1;;31606:2;31566:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31566:43:0::1;-1:-1:-1::0;;;;;31566:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19176:853:0::0;19430:12;19444;19411:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;19469:12:::1;19484:47;19507:7;19516:6;19524;19484:22;:47::i;:::-;19542:60;::::0;;-1:-1:-1;;;19542:60:0;;19574:10:::1;19542:60;::::0;::::1;::::0;-1:-1:-1;;;;;19542:31:0;::::1;:60:::0;;;;;;;;;;;;;;19469:62;;-1:-1:-1;19542:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19542:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19542:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19542:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19670:27:0::1;::::0;;-1:-1:-1;;;19670:27:0;;-1:-1:-1;;;;;19670:27:0;;::::1;;::::0;::::1;::::0;;;19640:12:::1;::::0;;;19670:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19640:12;19670:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19670:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19670:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19670:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19670:27:0;-1:-1:-1;19709:14:0::1;19728:41;19754:6:::0;19762;19728:25:::1;:41::i;:::-;19708:61;;;19811:6;-1:-1:-1::0;;;;;19801:16:0::1;:6;-1:-1:-1::0;;;;;19801:16:0::1;;:58;;19842:7;19851;19801:58;;;19821:7;19830;19801:58;19780:79:::0;;-1:-1:-1;19780:79:0;-1:-1:-1;19878:21:0;;::::1;;19870:70;;;;-1:-1:-1::0;;;19870:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19970:10;19959:7;:21;;19951:70;;;;-1:-1:-1::0;;;19951:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15737:1;;;;19176:853:::0;;;;;;;;;;;:::o;15527:41::-;;;:::o;33337:251::-;33481:21;33527:53;33556:7;33565:8;33575:4;33527:28;:53::i;21393:665::-;21682:16;21700:14;21727:12;21742:44;21765:7;21774:5;21781:4;21742:22;:44::i;:::-;21727:59;;21797:10;21810;:33;;21834:9;21810:33;;;-1:-1:-1;;21810:33:0;21854:78;;;-1:-1:-1;;;21854:78:0;;21880:10;21854:78;;;;21900:4;21854:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21797:46;;-1:-1:-1;;;;;;21854:25:0;;;;;:78;;;;;-1:-1:-1;;21854:78:0;;;;;;;;-1:-1:-1;21854:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21854:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21854:78:0;;;;21970:80;21989:5;21996:9;22007:14;22023:12;22037:2;22041:8;21970:18;:80::i;:::-;21943:107;;;;-1:-1:-1;21393:665:0;-1:-1:-1;;;;;;;;;;;;;21393:665:0:o;17423:734::-;17711:12;17725;17739:14;17692:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;17787:85:::1;17801:6;17809;17817:14;17833;17849:10;17861;17787:13;:85::i;:::-;17766:106:::0;;-1:-1:-1;17766:106:0;-1:-1:-1;17883:12:0::1;17898:47;17921:7;17930:6:::0;17938;17898:22:::1;:47::i;:::-;17883:62;;17956:66;17988:6;17996:10;18008:4;18014:7;17956:31;:66::i;:::-;18033;18065:6;18073:10;18085:4;18091:7;18033:31;:66::i;:::-;18135:4;-1:-1:-1::0;;;;;18122:23:0::1;;18146:2;18122:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18122:27:0::1;-1:-1:-1::0;;;;;18122:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18122:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18122:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18122:27:0;17423:734;;;;-1:-1:-1;18122:27:0;;-1:-1:-1;17423:734:0;;-1:-1:-1;;;;;;;;;17423:734:0:o;18163:970::-;18416:16;18434:14;18450;18397:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;18504:176:::1;18532:5;18552:4;18571:18;18604:9;18628:14;18657:12;18504:13;:176::i;:::-;18477:203:::0;;-1:-1:-1;18477:203:0;-1:-1:-1;18691:12:0::1;18706:44;18729:7;18738:5:::0;18745:4:::1;18706:22;:44::i;:::-;18691:59;;18761:69;18793:5;18800:10;18812:4;18818:11;18761:31;:69::i;:::-;18847:4;-1:-1:-1::0;;;;;18841:19:0::1;;18868:9;18841:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18841:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18841:39:0;;;;;18904:4;-1:-1:-1::0;;;;;18898:20:0::1;;18919:4;18925:9;18898:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18898:37:0::1;-1:-1:-1::0;;;;;18898:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18898:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18898:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18898:37:0;18891:45:::1;;;;18972:4;-1:-1:-1::0;;;;;18959:23:0::1;;18983:2;18959:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18959:27:0::1;-1:-1:-1::0;;;;;18959:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18959:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18959:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18959:27:0;;-1:-1:-1;19037:9:0::1;:21:::0;-1:-1:-1;19033:92:0::1;;;19060:65;19091:10;19115:9;19103;:21;19060:30;:65::i;:::-;15737:1;18163:970:::0;;;;;;;;;;;:::o;28004:802::-;28217:21;28189:8;15684:15;15672:8;:27;;15664:62;;;;;-1:-1:-1;;;15664:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15664:62:0;;;;;;;;;;;;;;;28275:4:::1;-1:-1:-1::0;;;;;28264:15:0::1;:4;;28269:1;28264:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28264:7:0::1;-1:-1:-1::0;;;;;28264:15:0::1;;28256:55;;;::::0;;-1:-1:-1;;;28256:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28332:53;28360:7;28369:9;28380:4;;28332:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28332:27:0::1;::::0;-1:-1:-1;;;28332:53:0:i:1;:::-;28322:63;;28418:9;28404:7;28412:1;28404:10;;;;;;;;;;;;;;:23;;28396:73;;;;-1:-1:-1::0;;;28396:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28486:4;-1:-1:-1::0;;;;;28480:19:0::1;;28507:7;28515:1;28507:10;;;;;;;;;;;;;;28480:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28480:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28480:40:0;;;;;28544:4;-1:-1:-1::0;;;;;28538:20:0::1;;28559:49;28582:7;28591:4;;28596:1;28591:7;;;;;;28559:49;28610:7;28618:1;28610:10;;;;;;;;;;;;;;28538:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28538:83:0::1;-1:-1:-1::0;;;;;28538:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28538:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28538:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28538:83:0;28531:91:::1;;;;28633:24;28639:7;28648:4;;28633:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28654:2:0;;-1:-1:-1;28633:5:0::1;::::0;-1:-1:-1;;28633:24:0:i:1;:::-;28720:7;28728:1;28720:10;;;;;;;;;;;;;;28708:9;:22;28704:94;;;28732:66;28763:10;28787:7;28795:1;28787:10;;;;;;;;;;;;;;28775:9;:22;28732:30;:66::i;1187:361::-:0;1382:45;;;-1:-1:-1;;;;;1382:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1382:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1371:57:0;;;;1336:12;;1350:17;;1371:10;;;;1382:45;1371:57;;;25:18:-1;1371:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1371:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1335:93:0;;;;1447:7;:57;;;;-1:-1:-1;1459:11:0;;:16;;:44;;;1490:4;1479:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1479:24:0;1459:44;1439:101;;;;;-1:-1:-1;;;1439:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1187:361;;;;;:::o;1966:195::-;2074:12;;;2036;2074;;;;;;;;;-1:-1:-1;;;;;2053:7:0;;;2067:5;;2053:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2053:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2035:52:0;;;2106:7;2098:55;;;;-1:-1:-1;;;2098:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1966:195;;;:::o;12143:513::-;12236:14;12282:1;12271:8;:12;12263:66;;;;-1:-1:-1;;;12263:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12360:1;12348:9;:13;:31;;;;;12378:1;12365:10;:14;12348:31;12340:82;;;;-1:-1:-1;;;12340:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12433:20;12456:17;:8;12469:3;12456:17;:12;:17;:::i;:::-;12433:40;-1:-1:-1;12484:14:0;12501:31;12433:40;12521:10;12501:31;:19;:31;:::i;:::-;12484:48;-1:-1:-1;12543:16:0;12562:40;12586:15;12562:19;:9;12576:4;12562:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12543:59;;12637:11;12625:9;:23;;;;;;;12143:513;-1:-1:-1;;;;;;;12143:513:0:o;13327:509::-;13428:21;13485:1;13470:4;:11;:16;;13462:57;;;;;-1:-1:-1;;;13462:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13551:4;:11;13540:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13540:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13540:23:0;;13530:33;;13587:8;13574:7;13582:1;13574:10;;;;;;;;;;;;;:21;;;;;13611:6;13606:223;13637:1;13623:4;:11;:15;13619:1;:19;13606:223;;;13661:14;13677:15;13696:42;13708:7;13717:4;13722:1;13717:7;;;;;;;;;;;;;;13726:4;13731:1;13735;13731:5;13726:11;;;;;;;;;;;;;;13696;:42::i;:::-;13660:78;;;;13770:47;13783:7;13791:1;13783:10;;;;;;;;;;;;;;13795:9;13806:10;13770:12;:47::i;:::-;13753:7;13761:1;13765;13761:5;13753:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13640:3:0;;13606:223;;;;13327:509;;;;;:::o;10623:478::-;10712:12;10738:14;10754;10772:26;10783:6;10791;10772:10;:26::i;:::-;10936:32;;;-1:-1:-1;;10936:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10936:32:0;;;;;10926:43;;;;;;10839:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10839:251:0;;;;;;;10829:262;;;;;;;;;10623:478;-1:-1:-1;;;;;10623:478:0:o;1556:402::-;1781:51;;;-1:-1:-1;;;;;1781:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1781:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1770:63:0;;;;1735:12;;1749:17;;1770:10;;;;1781:51;1770:63;;;25:18:-1;1770:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1770:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1734:99:0;;;;1852:7;:57;;;;-1:-1:-1;1864:11:0;;:16;;:44;;;1895:4;1884:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1884:24:0;1864:44;1844:106;;;;-1:-1:-1;;;1844:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1556:402;;;;;;:::o;23668:727::-;23775:6;23770:618;23801:1;23787:4;:11;:15;23783:1;:19;23770:618;;;23825:13;23840:14;23859:4;23864:1;23859:7;;;;;;;;;;;;;;23868:4;23873:1;23877;23873:5;23868:11;;;;;;;;;;;;;;23824:56;;;;23896:14;23915:40;23941:5;23948:6;23915:25;:40::i;:::-;23895:60;;;23970:14;23987:7;23995:1;23999;23995:5;23987:14;;;;;;;;;;;;;;23970:31;;24017:15;24034;24062:6;-1:-1:-1;;;;;24053:15:0;:5;-1:-1:-1;;;;;24053:15:0;;:61;;24095:9;24111:1;24053:61;;;24077:1;24081:9;24053:61;24016:98;;;;24129:10;24160:1;24146:4;:11;:15;24142:1;:19;:80;;24219:3;24142:80;;;24164:52;24187:7;24196:6;24204:4;24209:1;24213;24209:5;24204:11;;;;;;;;;;;;;;24164:22;:52::i;:::-;24129:93;;24250:46;24273:7;24282:5;24289:6;24250:22;:46::i;:::-;-1:-1:-1;;;;;24237:65:0;;24321:10;24333;24345:2;24359:1;24349:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24349:12:0;87:42:-1;143:17;;-1:-1;24349:12:0;;24237:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24237:139:0;-1:-1:-1;;;;;24237:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24237:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24237:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23804:3:0;;;;;-1:-1:-1;23770:618:0;;-1:-1:-1;;;;;;;;23770:618:0;;;23668:727;;;:::o;13917:530::-;14018:21;14075:1;14060:4;:11;:16;;14052:57;;;;;-1:-1:-1;;;14052:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14141:4;:11;14130:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14130:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14130:23:0;;14120:33;;14194:9;14164:7;14189:1;14172:7;:14;:18;14164:27;;;;;;;;;;;;;;;;;:39;14228:11;;-1:-1:-1;;14228:15:0;14214:226;14245:5;;14214:226;;14273:14;14289:15;14308:42;14320:7;14329:4;14338:1;14334;:5;14329:11;;;;;;;;;;;;;;14342:4;14347:1;14342:7;;;;;;;14308:42;14272:78;;;;14382:46;14394:7;14402:1;14394:10;;;;;;;;;;;;;;14406:9;14417:10;14382:11;:46::i;:::-;14365:7;14377:1;14373;:5;14365:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14252:3:0;14214:226;;28953:1202;29066:6;29061:1087;29092:1;29078:4;:11;:15;29074:1;:19;29061:1087;;;29116:13;29131:14;29150:4;29155:1;29150:7;;;;;;;;;;;;;;29159:4;29164:1;29168;29164:5;29159:11;;;;;;;;;;;;;;29115:56;;;;29187:14;29206:40;29232:5;29239:6;29206:25;:40::i;:::-;29186:60;;;29261:17;29294:46;29317:7;29326:5;29333:6;29294:22;:46::i;:::-;29261:80;;29356:16;29387:17;29475:13;29490;29508:4;-1:-1:-1;;;;;29508:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29508:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29508:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29508:18:0;;;;;;;29474:52;;;;;-1:-1:-1;29474:52:0;;-1:-1:-1;29542:17:0;;-1:-1:-1;;;;;29583:15:0;;;;;;;:61;;29625:8;29635;29583:61;;;29602:8;29612;29583:61;29541:103;;;;29673:56;29716:12;29680:5;-1:-1:-1;;;;;29673:23:0;;29705:4;29673:38;;;;;;;;;;;;;-1:-1:-1;;;;;29673:38:0;-1:-1:-1;;;;;29673:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29673:56:0;29659:70;;29759:69;29787:11;29800:12;29814:13;29759:27;:69::i;:::-;29744:84;;29061:1087;;;;29859:15;29876;29904:6;-1:-1:-1;;;;;29895:15:0;:5;-1:-1:-1;;;;;29895:15:0;;:67;;29940:12;29959:1;29895:67;;;29919:1;29923:12;29895:67;29858:104;;;;29977:10;30008:1;29994:4;:11;:15;29990:1;:19;:80;;30067:3;29990:80;;;30012:52;30035:7;30044:6;30052:4;30057:1;30061;30057:5;30052:11;;;;;;;30012:52;30123:12;;;30133:1;30123:12;;;;;;;;;;-1:-1:-1;;;30085:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30085:51:0;;;;;;;;;;;;;;;;;;;;;;29977:93;;-1:-1:-1;30085:9:0;;;;;;30095:10;;30107;;29977:93;;30123:12;;30085:51;;;;;;;;30123:12;;30085:51;;;;30123:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30085:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30085:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29095:3:0;;;;;-1:-1:-1;29061:1087:0;;-1:-1:-1;;;;;;;;;;29061:1087:0;9737:129;9821:5;;;9816:16;;;;9808:50;;;;;-1:-1:-1;;;9808:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12777:468;12870:13;12916:1;12904:9;:13;12896:68;;;;-1:-1:-1;;;12896:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12995:1;12983:9;:13;:31;;;;;13013:1;13000:10;:14;12983:31;12975:82;;;;-1:-1:-1;;;12975:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13068:14;13085:34;13114:4;13085:24;:9;13099;13085:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13068:51;-1:-1:-1;13130:16:0;13149:34;13179:3;13149:25;:10;13164:9;13149:25;:14;:25;:::i;:34::-;13130:53;;13205:32;13235:1;13218:11;13206:9;:23;;;;;;;13205:32;:29;:32;:::i;:::-;13194:43;12777:468;-1:-1:-1;;;;;;12777:468:0:o;11704:317::-;11786:12;11829:1;11819:7;:11;11811:59;;;;-1:-1:-1;;;11811:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11900:1;11889:8;:12;:28;;;;;11916:1;11905:8;:12;11889:28;11881:79;;;;-1:-1:-1;;;11881:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12005:8;11981:21;:7;11993:8;11981:21;:11;:21;:::i;:::-;:32;;;;;;;11704:317;-1:-1:-1;;;;11704:317:0:o;10186:345::-;10261:14;10277;10322:6;-1:-1:-1;;;;;10312:16:0;:6;-1:-1:-1;;;;;10312:16:0;;;10304:64;;;;-1:-1:-1;;;10304:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10407:6;-1:-1:-1;;;;;10398:15:0;:6;-1:-1:-1;;;;;10398:15:0;;:53;;10436:6;10444;10398:53;;;10417:6;10425;10398:53;10379:72;;-1:-1:-1;10379:72:0;-1:-1:-1;;;;;;10470:20:0;;10462:61;;;;;-1:-1:-1;;;10462:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10186:345;;;;;:::o;16041:1376::-;16354:48;;;-1:-1:-1;;;16354:48:0;;-1:-1:-1;;;;;16354:48:0;;;;;;;;;;;;;;;;16259:12;;;;;;16370:7;16354:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16354:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16354:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16354:48:0;-1:-1:-1;;;;;16354:62:0;;16350:146;;;16433:51;;;-1:-1:-1;;;16433:51:0;;-1:-1:-1;;;;;16433:51:0;;;;;;;;;;;;;;;;16449:7;16433:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16433:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16433:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16433:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16350:146:0;16507:13;16522;16539:51;16566:7;16575:6;16583;16539:26;:51::i;:::-;16506:84;;;;16605:8;16617:1;16605:13;:30;;;;-1:-1:-1;16622:13:0;;16605:30;16601:809;;;16674:14;;-1:-1:-1;16690:14:0;;-1:-1:-1;16601:809:0;;;16738:19;16760:56;16781:14;16797:8;16807;16760:20;:56::i;:::-;16738:78;;16853:14;16835;:32;16831:568;;16914:10;16896:14;:28;;16888:77;;;;-1:-1:-1;;;16888:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17006:14;;-1:-1:-1;17022:14:0;-1:-1:-1;17022:14:0;16831:568;;;17078:19;17100:56;17121:14;17137:8;17147;17100:20;:56::i;:::-;17078:78;;17200:14;17182;:32;;17175:40;;;;17260:10;17242:14;:28;;17234:77;;;;-1:-1:-1;;;17234:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17352:14;-1:-1:-1;17368:14:0;;-1:-1:-1;16831:568:0;16601:809;;16041:1376;;;;;;;;;;;:::o;9874:142::-;9926:6;9953;;;:30;;-1:-1:-1;;9968:5:0;;;9982:1;9977;9968:5;9977:1;9963:15;;;;;:20;9953:30;9945:63;;;;;-1:-1:-1;;;9945:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9601:128;9685:5;;;9680:16;;;;9672:49;;;;;-1:-1:-1;;;9672:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11159:432;11252:13;11267;11294:14;11313:26;11324:6;11332;11313:10;:26::i;:::-;11293:46;;;11350:32;11358:7;11367:6;11375;11350:7;:32::i;:::-;;11394:13;11409;11440:32;11448:7;11457:6;11465;11440:7;:32::i;:::-;-1:-1:-1;;;;;11427:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11427:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11427:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11427:60:0;;;;;;;11393:94;;;;;-1:-1:-1;11393:94:0;;-1:-1:-1;;;;;;11521:16:0;;;;;;;:62;;11564:8;11574;11521:62;;;11541:8;11551;11521:62;11498:85;;;;-1:-1:-1;11159:432:0;-1:-1:-1;;;;;;;11159:432:0:o

Swarm Source

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