Contract 0x7dae51bd3e3376b8c7c4900e9107f12be3af1ba8 2

Mdex 
 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7f49ef049f2f86c21eac6f5d6cf2d6dd9ffbea98300abeb88961e8bdda4ae212Swap Exact Token...111535222021-09-23 2:58:091 min ago0x716f7a6bb964b0d5d934d0cc3f018e89c7a5b757 IN  Mdex: Router0 BNB0.0010831941
0x8cad8c9082b2e92bd846cf9a2ce5facd391db28ed7341a99ce758d6dda45acd2Swap ETH For Exa...111535192021-09-23 2:58:001 min ago0xe7ccddefe1f4b1e054af802cb7469e4a2311a803 IN  Mdex: Router0.004311656517924 BNB0.001584855
0x2f26fd4faf3468590d5797b2efff284ed2844a8a6aefc3013bdb635c9ba9a70aSwap Exact Token...111535192021-09-23 2:58:001 min ago0x716f7a6bb964b0d5d934d0cc3f018e89c7a5b757 IN  Mdex: Router0 BNB0.001572279
0xe18015fa90dd9d2190a3ba083b13d0e9680fae8aca0d1829d294155a8ae09564Swap Exact Token...111535192021-09-23 2:58:001 min ago0xe4ebe32403ba3fa4d42d0227cfa8058525c308f3 IN  Mdex: Router0 BNB0.0012809925
0x3c73a2b9ec896203047663982bcf46d9107876bfd9eafe31e4563a93de908c09Swap Exact Token...111535142021-09-23 2:57:451 min ago0xcd5fb496f293015ab20b429c0af874d47906cb13 IN  Mdex: Router0 BNB0.00173658
0x303ca81616b2f6cb4ef88ceae750aa4e19cf0ec989a3a4de42efdcd9322681fcSwap Exact Token...111534842021-09-23 2:56:133 mins ago0xb24abbb71f5a02c2eae5e98f071530642246c239 IN  Mdex: Router0 BNB0.000718445
0x7d0a78a7440a9d83b000330b1e5c3fd7e83f2d6a9953986a80ada65483eefd51Swap Exact Token...111534832021-09-23 2:56:103 mins ago0xe1ddf9332531990bc616a3be96cca7abb4b2ac35 IN  Mdex: Router0 BNB0.001718295
0x2a1a39d33d206b003699b45818b214d57d09072385b8a9634d07c426150c0928Remove Liquidity111534782021-09-23 2:55:543 mins ago0xcd5fb496f293015ab20b429c0af874d47906cb13 IN  Mdex: Router0 BNB0.00085189
0x1d654109b7d9450fe0344ccc9098a40cd96d87249ab002ba89e84e0c970b191dSwap Exact Token...111534722021-09-23 2:55:353 mins ago0x74184a441dfdd58fee467c49966be17e02006123 IN  Mdex: Router0 BNB0.00085992915
0xed9b5ea8ae3dc297a9bd6719a667be7987efa0b401cb99684d78eeb44f95c276Remove Liquidity...111534692021-09-23 2:55:254 mins ago0xb24abbb71f5a02c2eae5e98f071530642246c239 IN  Mdex: Router0 BNB0.00086175
0x3a53b39b2d8b4bd84d411ee49d661f2e77a6e2ce8459a257d6fa012b2e4ff06dSwap Exact Token...111534652021-09-23 2:55:134 mins ago0x2b4d1525cfeb20075d9120ecc6ba438c449986d6 IN  Mdex: Router0 BNB0.000776355
0x4b93d8ac43130521d49a78034230653606c401126900109f5180a92bb17d8a41Swap Exact ETH F...111534572021-09-23 2:54:494 mins ago0xf9cf3506e96fcf086a433ee828c20e08c5bb35ea IN  Mdex: Router0.031965411165279 BNB0.002318435
0xcbdac712bb1a0ad91377172218237c5032c218cc99f2b3b001059d257891e125Swap ETH For Exa...111534532021-09-23 2:54:374 mins ago0xe1ddf9332531990bc616a3be96cca7abb4b2ac35 IN  Mdex: Router0.014310311408948 BNB0.001880025
0x9080605d9fbe71b190db0a195ad49e62467ea87b7aed130313f3ba5783cb6829Swap Exact Token...111534472021-09-23 2:54:195 mins ago0xfa359d2d527ea5997391b2a5c37981a5ddc072bc IN  Mdex: Router0 BNB0.000776355
0xac1033780b0edb731be719cb2220f70350ee3dd9e8f4b03daeb665c81f489ec2Swap Exact Token...111534462021-09-23 2:54:165 mins ago0x2b4d1525cfeb20075d9120ecc6ba438c449986d6 IN  Mdex: Router0 BNB0.0011645325
0xe84cb21a65fae5488acc243f8464ff96dc44fcb979b1f2eacd0b29bec955f920Add Liquidity111534432021-09-23 2:54:075 mins ago0xac7fb498123d79df8f8d924afda994ff3e11cb9d IN  Mdex: Router0 BNB0.00100969
0xce3a815c86db5f9bbf1909e5c369a9abbff0c29f6613066e8b153d7ebb3725ccAdd Liquidity111534422021-09-23 2:54:045 mins ago0x287d4e971baaf82618af7f773f3421b29147e482 IN  Mdex: Router0 BNB0.000938885
0x1b57bdd389853688b13dba8f0bb6804f9c76ae60e268c3e5575aed8e0202dc48Swap Exact Token...111534332021-09-23 2:53:375 mins ago0x23f9975a0bd0b2cb9a048a89246ebed54069632d IN  Mdex: Router0 BNB0.000776355
0x04089a5fd3e86a654f6b0fb87c9c54df57ed75f0ced29a152b1da28aee9bbe64Swap Exact Token...111534242021-09-23 2:53:106 mins ago0xac7fb498123d79df8f8d924afda994ff3e11cb9d IN  Mdex: Router0 BNB0.000761635
0x6e7e0c0996771ed04a17d80a7c127853e8e50b18c207395fd6bf6e6ed6b2f987Swap Exact Token...111534202021-09-23 2:52:586 mins ago0x7bcdc8d492a64c0396bc87ea796a43cf41010d38 IN  Mdex: Router0 BNB0.001136895
0x51654718b16eabe28339b79c34c48586ebba2219fd32bac2749820ba7785f4a7Swap Exact Token...111534162021-09-23 2:52:466 mins ago0xf9cf3506e96fcf086a433ee828c20e08c5bb35ea IN  Mdex: Router0 BNB0.000776355
0xb8864898631c016023c99f4e6716d201738cc846462cece40b1cb85df49b111fSwap Exact Token...111534052021-09-23 2:52:137 mins ago0x2d52638b8e0bd99afbaacf54fe30f81c97e72f5f IN  Mdex: Router0 BNB0.000752725
0xc4976028cfccb5dfab626068eb85ffe1efb79007f470f4e1f819229b42c0a052Swap Exact Token...111534022021-09-23 2:52:047 mins ago0x4e10e35b49dc35d425f022a8196db245811105ed IN  Mdex: Router0 BNB0.0019021266
0x41cfcb1c87a831a3336d20317f3c50dbcc507f147ef3d95ac587f19d2f43fe00Swap Exact Token...111533992021-09-23 2:51:557 mins ago0x8cf489a2813e4461e36e0cf64d3624dea22b41b4 IN  Mdex: Router0 BNB0.00189927
0x5856bc0e585ee0ab299274c1fe5cefff75bedc505aff4e9520cbb0b3a6cb4068Swap Exact Token...111533832021-09-23 2:51:078 mins ago0x2d3cee08b80d7daf268072ce4adcfa4fd1b41a92 IN  Mdex: Router0 BNB0.0010827045
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8cad8c9082b2e92bd846cf9a2ce5facd391db28ed7341a99ce758d6dda45acd2111535192021-09-23 2:58:001 min ago Mdex: Router0xe7ccddefe1f4b1e054af802cb7469e4a2311a8030.000021442738498007 BNB
0x8cad8c9082b2e92bd846cf9a2ce5facd391db28ed7341a99ce758d6dda45acd2111535192021-09-23 2:58:001 min ago Mdex: Router Binance: WBNB Token0.004290213779426757 BNB
0x3c73a2b9ec896203047663982bcf46d9107876bfd9eafe31e4563a93de908c09111535142021-09-23 2:57:451 min ago Mdex: Router0xcd5fb496f293015ab20b429c0af874d47906cb130.157627156219086963 BNB
0x3c73a2b9ec896203047663982bcf46d9107876bfd9eafe31e4563a93de908c09111535142021-09-23 2:57:451 min ago Binance: WBNB Token Mdex: Router0.157627156219086963 BNB
0x1d654109b7d9450fe0344ccc9098a40cd96d87249ab002ba89e84e0c970b191d111534722021-09-23 2:55:353 mins ago Mdex: Router0x74184a441dfdd58fee467c49966be17e020061233.02937848937216635 BNB
0x1d654109b7d9450fe0344ccc9098a40cd96d87249ab002ba89e84e0c970b191d111534722021-09-23 2:55:353 mins ago Binance: WBNB Token Mdex: Router3.02937848937216635 BNB
0x3a53b39b2d8b4bd84d411ee49d661f2e77a6e2ce8459a257d6fa012b2e4ff06d111534652021-09-23 2:55:134 mins ago Mdex: Router0x2b4d1525cfeb20075d9120ecc6ba438c449986d60.018562213681075964 BNB
0x3a53b39b2d8b4bd84d411ee49d661f2e77a6e2ce8459a257d6fa012b2e4ff06d111534652021-09-23 2:55:134 mins ago Binance: WBNB Token Mdex: Router0.018562213681075964 BNB
0x4b93d8ac43130521d49a78034230653606c401126900109f5180a92bb17d8a41111534572021-09-23 2:54:494 mins ago Mdex: Router Binance: WBNB Token0.031965411165279454 BNB
0xcbdac712bb1a0ad91377172218237c5032c218cc99f2b3b001059d257891e125111534532021-09-23 2:54:374 mins ago Mdex: Router0xe1ddf9332531990bc616a3be96cca7abb4b2ac350.000014296015393555 BNB
0xcbdac712bb1a0ad91377172218237c5032c218cc99f2b3b001059d257891e125111534532021-09-23 2:54:374 mins ago Mdex: Router Binance: WBNB Token0.014296015393555398 BNB
0x9080605d9fbe71b190db0a195ad49e62467ea87b7aed130313f3ba5783cb6829111534472021-09-23 2:54:195 mins ago Mdex: Router0xfa359d2d527ea5997391b2a5c37981a5ddc072bc0.007122141805580564 BNB
0x9080605d9fbe71b190db0a195ad49e62467ea87b7aed130313f3ba5783cb6829111534472021-09-23 2:54:195 mins ago Binance: WBNB Token Mdex: Router0.007122141805580564 BNB
0xac1033780b0edb731be719cb2220f70350ee3dd9e8f4b03daeb665c81f489ec2111534462021-09-23 2:54:165 mins ago Mdex: Router0x2b4d1525cfeb20075d9120ecc6ba438c449986d60.055542504512150666 BNB
0xac1033780b0edb731be719cb2220f70350ee3dd9e8f4b03daeb665c81f489ec2111534462021-09-23 2:54:165 mins ago Binance: WBNB Token Mdex: Router0.055542504512150666 BNB
0x1b57bdd389853688b13dba8f0bb6804f9c76ae60e268c3e5575aed8e0202dc48111534332021-09-23 2:53:375 mins ago Mdex: Router0x23f9975a0bd0b2cb9a048a89246ebed54069632d0.013738130631786717 BNB
0x1b57bdd389853688b13dba8f0bb6804f9c76ae60e268c3e5575aed8e0202dc48111534332021-09-23 2:53:375 mins ago Binance: WBNB Token Mdex: Router0.013738130631786717 BNB
0x51654718b16eabe28339b79c34c48586ebba2219fd32bac2749820ba7785f4a7111534162021-09-23 2:52:466 mins ago Mdex: Router0xf9cf3506e96fcf086a433ee828c20e08c5bb35ea0.034236701165279454 BNB
0x51654718b16eabe28339b79c34c48586ebba2219fd32bac2749820ba7785f4a7111534162021-09-23 2:52:466 mins ago Binance: WBNB Token Mdex: Router0.034236701165279454 BNB
0xb8864898631c016023c99f4e6716d201738cc846462cece40b1cb85df49b111f111534052021-09-23 2:52:137 mins ago Mdex: Router0x2d52638b8e0bd99afbaacf54fe30f81c97e72f5f2.117272957721326411 BNB
0xb8864898631c016023c99f4e6716d201738cc846462cece40b1cb85df49b111f111534052021-09-23 2:52:137 mins ago Binance: WBNB Token Mdex: Router2.117272957721326411 BNB
0x41cfcb1c87a831a3336d20317f3c50dbcc507f147ef3d95ac587f19d2f43fe00111533992021-09-23 2:51:557 mins ago Mdex: Router0x8cf489a2813e4461e36e0cf64d3624dea22b41b40.007935572397556577 BNB
0x41cfcb1c87a831a3336d20317f3c50dbcc507f147ef3d95ac587f19d2f43fe00111533992021-09-23 2:51:557 mins ago Binance: WBNB Token Mdex: Router0.007935572397556577 BNB
0xa73b5d72b3b316d4a227cf763d473ff9c374eae81a690c573a91ad863468346c111533602021-09-23 2:49:589 mins ago Mdex: Router0x94b7890c7fa28d5ecaae84a30babecd8ef43811a18.613596087156892372 BNB
0xa73b5d72b3b316d4a227cf763d473ff9c374eae81a690c573a91ad863468346c111533602021-09-23 2:49:589 mins ago Binance: WBNB Token Mdex: Router18.613596087156892372 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MdexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-06
*/

pragma solidity =0.6.6;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

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

interface IMdexRouter {
    function factory() external pure returns (address);

    function WBNB() external pure returns (address);

    function swapMining() 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(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);

    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 ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

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 IWBNB {
    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

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');
    }
}

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

contract MdexRouter is IMdexRouter, Ownable {
    using SafeMath for uint256;

    address public immutable override factory;
    address public immutable override WBNB;
    address public override swapMining;

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

    constructor(address _factory, address _WBNB) public {
        factory = _factory;
        WBNB = _WBNB;
    }

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

    function pairFor(address tokenA, address tokenB) public view returns (address pair){
        pair = IMdexFactory(factory).pairFor(tokenA, tokenB);
    }

    function setSwapMining(address _swapMininng) public onlyOwner {
        swapMining = _swapMininng;
    }

    // **** 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 (IMdexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IMdexFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = IMdexFactory(factory).getReserves(tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = IMdexFactory(factory).quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = IMdexFactory(factory).quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'MdexRouter: 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 = pairFor(tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IMdexPair(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,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = pairFor(token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value : amountETH}();
        assert(IWBNB(WBNB).transfer(pair, amountETH));
        liquidity = IMdexPair(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 = pairFor(tokenA, tokenB);
        IMdexPair(pair).transferFrom(msg.sender, pair, liquidity);
        // send liquidity to pair
        (uint amount0, uint amount1) = IMdexPair(pair).burn(to);
        (address token0,) = IMdexFactory(factory).sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'MdexRouter: 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,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).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 = pairFor(tokenA, tokenB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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 = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWBNB(WBNB).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 = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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,) = IMdexFactory(factory).sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOut);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            IMdexPair(pairFor(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 = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(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 = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= msg.value, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(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,) = IMdexFactory(factory).sortTokens(input, output);
            IMdexPair pair = IMdexPair(pairFor(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 = IMdexFactory(factory).getAmountOut(amountInput, reserveInput, reserveOutput, input, output);
            }
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? pairFor(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, pairFor(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,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    payable
    ensure(deadline)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value : amountIn}();
        assert(IWBNB(WBNB).transfer(pairFor(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,
            'MdexRouter: 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] == WBNB, 'MdexRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public view override returns (uint256 amountB) {
        return IMdexFactory(factory).quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountOut){
        return IMdexFactory(factory).getAmountOut(amountIn, reserveIn, reserveOut, token0, token1);
    }

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountIn){
        return IMdexFactory(factory).getAmountIn(amountOut, reserveIn, reserveOut, token0, token1);
    }

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WBNB","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"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"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":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"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":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200516e3803806200516e8339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614fb9620001b5600039806101ec5280610ec65280610f015280610fe352806112e452806118aa5280611b7e5280611fc852806120c2528061217852806122465280612491528061251952806128435280612abf5280612b6e5280612c3a5280612ccf5280612d43528061337952806136315280613666528061369a528061370e52806138ae5280613af55280613b7d52508061109952806113d5528061167e5280611960528061230252806126a85280612892528061294d52806129cd52806130d1528061323f52806132a35280613313528061396952806140cf528061442d528061463f528061493152806149df5280614a865280614b225280614c175250614fb96000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f0000000000000000000000000000000000000000000000000000000000000000612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614900565b9094509250600061368a8b7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506136988b338388613f2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000000000000000000000000000000000000000000000909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c634300060600330000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x3cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [1] : _WBNB (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

18180:18375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18696:10;-1:-1:-1;;;;;18710:4:0;18696:18;;18689:26;;;;18180:18375;;12:1:-1;9;2:12;23030:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23030:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23030:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30025:790;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30025:790:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30025:790:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30025:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30025:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30025:790:0;;-1:-1:-1;30025:790:0;-1:-1:-1;;;;;;30025:790: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;30025:790:0;;;;;;;;;;;;;;;;;36354:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36354:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36354:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36354:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36354:196: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;36354:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36354:196:0;;-1:-1:-1;36354:196:0;;-1:-1:-1;;;;;36354:196:0:i;23711:647::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23711:647:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23711:647:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17349:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17349:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17349:104:0;-1:-1:-1;;;;;17349:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27427:593;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27427:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27427:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27427:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27427:593: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;27427:593:0;;-1:-1:-1;27427:593:0;-1:-1:-1;;;;;;27427:593:0;;;;;;;;:::i;29249:768::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29249:768:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29249:768:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29249:768:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29249:768: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;29249:768:0;;-1:-1:-1;29249:768:0;-1:-1:-1;;;;;;29249:768:0;;;;;;;;:::i;18359:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18359:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18359:34:0;;;;;;;;;;;;;;18957:106;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18957:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18957:106:0;-1:-1:-1;;;;;18957:106:0;;:::i;25792:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25792:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25792:688:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33065:683;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33065:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33065:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33065:683:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33065:683: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;33065:683:0;;-1:-1:-1;33065:683:0;-1:-1:-1;;;;;;33065:683:0;;;;;;;;:::i;17461:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17461:140:0;;;:::i;34559:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34559:791:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34559:791:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34559:791:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34559:791: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;34559:791:0;;-1:-1:-1;34559:791:0;-1:-1:-1;;;;;;34559:791:0;;;;;;;;:::i;28607:634::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28607:634:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28607:634:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28607:634: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;28607:634:0;;-1:-1:-1;28607:634:0;-1:-1:-1;;;;;;28607:634:0;;;;;;;;:::i;28028:571::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28028:571:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28028:571:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28028:571:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28028:571: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;28028:571:0;;-1:-1:-1;28028:571:0;-1:-1:-1;;;;;;28028:571:0;;;;;;;;:::i;17262:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17262:79:0;;;:::i;18314:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18314:38:0;;;:::i;18795:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18795:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18795:154:0;;;;;;;;;;:::i;35599:268::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35599:268:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35599:268:0;;;;;;;;;;;;;-1:-1:-1;;;;;35599:268:0;;;;;;;;;;;;:::i;35394:197::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35394:197:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35394:197:0;;;;;;;;;;;;:::i;25084:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25084:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25084:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33756:795::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33756:795:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33756:795:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33756:795: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;33756:795:0;;-1:-1:-1;33756:795:0;-1:-1:-1;;;;;;33756:795:0;;;;;;;;:::i;22189:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22189:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22189:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18266:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18266:41:0;;;:::i;35875:267::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35875:267:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35875:267:0;;;;;;;;;;;;;-1:-1:-1;;;;;35875:267:0;;;;;;;;;;;;:::i;36150:196::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36150:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36150:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36150:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36150:196: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;36150:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36150:196:0;;-1:-1:-1;36150:196:0;;-1:-1:-1;;;;;36150:196:0:i;24366:639::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24366:639:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24366:639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20487:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20487:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20487:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17846:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17846:109:0;-1:-1:-1;;;;;17846:109:0;;:::i;21202:944::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21202:944:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30823:747::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30823:747:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30823:747:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30823:747: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;30823:747:0;;-1:-1:-1;30823:747:0;-1:-1:-1;;;;;;30823:747:0;;;;;;;;:::i;23030:673::-;23267:16;23285:14;23248:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;23339:196:::1;23369:5;23389:4;23408:9;23432:14;23461:12;23496:4;23516:8;23339:15;:196::i;:::-;23312:223:::0;;-1:-1:-1;23312:223:0;-1:-1:-1;23546:51:0::1;23574:5:::0;23581:2;23312:223;23546:27:::1;:51::i;:::-;23614:4;-1:-1:-1::0;;;;;23608:20:0::1;;23629:9;23608:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23608:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23608:31:0;;;;23650:45;23681:2;23685:9;23650:30;:45::i;:::-;23030:673:::0;;;;;;;;;;:::o;30025:790::-;30219:21;30195:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30291:4:0::1;30266:29;:4:::0;;-1:-1:-1;;30271:15:0;;30266:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30266:21:0::1;-1:-1:-1::0;;;;;30266:29:0::1;;30258:66;;;::::0;;-1:-1:-1;;;30258:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30258:66:0;;;;;;;;;;;;;::::1;;30345:51;::::0;;-1:-1:-1;;;30345:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30358:7:0::1;30345:35;::::0;::::1;::::0;30381:8;;30391:4;;;;30345:51;;30391:4;30345:51:::1;::::0;::::1;::::0;30391:4;30345:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30345:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30345:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30345:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;30345:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;30345:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;30345:51:0;::::1;::::0;::::1;::::0;412:14:-1;30345:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;30345:51:0;;;;;;;;::::0;::::1;;30335:61;;30446:12;30415:7;30440:1;30423:7;:14;:18;30415:27;;;;;;;;;;;;;;:43;;30407:94;;;;-1:-1:-1::0;;;30407:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30512:115;30558:4;;30563:1;30558:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30558:7:0::1;30567:10;30579:25;30587:4;;30592:1;30587:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30587:7:0::1;30596:4;;30601:1;30596:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30596:7:0::1;30579;:25::i;:::-;30606:7;30614:1;30606:10;;;;;;;;;;;;;;30512:31;:115::i;:::-;30638:35;30644:7;30653:4;;30638:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30667:4:0::1;::::0;-1:-1:-1;30638:5:0::1;::::0;-1:-1:-1;;30638:35:0:i:1;:::-;30690:4;-1:-1:-1::0;;;;;30684:20:0::1;;30705:7;30730:1;30713:7;:14;:18;30705:27;;;;;;;;;;;;;;30684:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30684:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30684:49:0;;;;30744:63;30775:2;30779:7;30804:1;30787:7;:14;:18;30779:27;;;;;;;;;;;;;;30744:30;:63::i;:::-;30025:790:::0;;;;;;;;;:::o;36354:196::-;36491:51;;;-1:-1:-1;;;36491:51:0;;;;;;;;;;;;;;;;;;;;;;36448:24;;-1:-1:-1;;;;;36504:7:0;36491:34;;;;36526:9;;36537:4;;36491:51;;;;;;;;;;;;;;-1:-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;36491:51:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36491:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36491:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36491:51:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;36491:51:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36491:51:0;;421:4:-1;412:14;;;;36491:51:0;;;;;412:14:-1;36491:51: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;36491:51:0;;;;;;;;;;;36484:58;;36354:196;;;;:::o;23711:647::-;24017:12;24031;24056;24071:23;24079:6;24087;24071:7;:23::i;:::-;24056:38;;24105:10;24118;:34;;24143:9;24118:34;;;-1:-1:-1;;24118:34:0;24163:75;;;-1:-1:-1;;;24163:75:0;;24186:10;24163:75;;;;24206:4;24163:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;-1:-1:-1;;;;;;24163:22:0;;;;;:75;;;;;-1:-1:-1;;24163:75:0;;;;;;;;-1:-1:-1;24163:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24163:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24163:75:0;;;;24270:80;24286:6;24294;24302:9;24313:10;24325;24337:2;24341:8;24270:15;:80::i;:::-;24249:101;;;;;;;;23711:647;;;;;;;;;;;;;;;;:::o;17349:104::-;17404:4;17439:6;-1:-1:-1;;;;;17439:6:0;;;17428:17;;;;17349:104::o;27427:593::-;27651:21;27632:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;27695:51:::1;::::0;;-1:-1:-1;;;27695:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27708:7:0::1;27695:35;::::0;::::1;::::0;27731:8;;27741:4;;;;27695:51;;27741:4;27695:51:::1;::::0;::::1;::::0;27741:4;27695:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27695:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27695:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27695:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27695:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;27695:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;27695:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;27695:51:0;::::1;::::0;::::1;::::0;412:14:-1;27695:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;27695:51:0;;;;;;;;::::0;::::1;;27685:61;;27796:12;27765:7;27790:1;27773:7;:14;:18;27765:27;;;;;;;;;;;;;;:43;;27757:94;;;;-1:-1:-1::0;;;27757:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:115;27908:4;;27913:1;27908:7;;;;;;27862:115;27988:24;27994:7;28003:4;;27988:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28009:2:0;;-1:-1:-1;27988:5:0::1;::::0;-1:-1:-1;;27988:24:0:i:1;29249:768::-:0;29443:21;29419:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29515:4:0::1;29490:29;:4:::0;;-1:-1:-1;;29495:15:0;;29490:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29490:21:0::1;-1:-1:-1::0;;;;;29490:29:0::1;;29482:66;;;::::0;;-1:-1:-1;;;29482:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29482:66:0;;;;;;;;;;;;;::::1;;29569:51;::::0;;-1:-1:-1;;;29569:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29582:7:0::1;29569:34;::::0;::::1;::::0;29604:9;;29615:4;;;;29569:51;;29615:4;29569:51:::1;::::0;::::1;::::0;29615:4;29569:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29569:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29569:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29569:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29569:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;29569:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;29569:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;29569:51:0;::::1;::::0;::::1;::::0;412:14:-1;29569:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;29569:51:0;;;;;;;;::::0;::::1;;29559:61;;29653:11;29639:7;29647:1;29639:10;;;;;;;;;;;;;;:25;;29631:72;;;;-1:-1:-1::0;;;29631:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18359:34:::0;;;-1:-1:-1;;;;;18359:34:0;;:::o;18957:106::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:10:::1;:25:::0;;-1:-1:-1;;;;;;19030:25:0::1;-1:-1:-1::0;;;;;19030:25:0;;;::::1;::::0;;;::::1;::::0;;18957:106::o;25792:688::-;26110:14;26137:12;26152:20;26160:5;26167:4;26152:7;:20::i;:::-;26137:35;;26183:10;26196;:34;;26221:9;26196:34;;;-1:-1:-1;;26196:34:0;26241:75;;;-1:-1:-1;;;26241:75:0;;26264:10;26241:75;;;;26284:4;26241:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:47;;-1:-1:-1;;;;;;26241:22:0;;;;;:75;;;;;-1:-1:-1;;26241:75:0;;;;;;;;-1:-1:-1;26241:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;26241:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26241:75:0;;;;26339:133;26401:5;26408:9;26419:14;26435:12;26449:2;26453:8;26339:47;:133::i;:::-;26327:145;25792:688;-1:-1:-1;;;;;;;;;;;;;25792:688:0:o;33065:683::-;33299:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;33320:113:::1;33366:4;;33371:1;33366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33366:7:0::1;33375:10;33387:25;33395:4;;33400:1;33395:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33395:7:0::1;33404:4;;33409:1;33404:7;;;;;;33387:25;33414:8;33320:31;:113::i;:::-;33444:18;33472:4:::0;;-1:-1:-1;;33477:15:0;;33472:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33472:21:0::1;-1:-1:-1::0;;;;;33465:39:0::1;;33505:2;33465:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33465:43:0::1;-1:-1:-1::0;;;;;33465:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33465:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33465:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33465:43:0;33519:44:::1;::::0;;33465:43:::1;33519:44:::0;;::::1;::::0;;;;;;;;;;;33465:43;;-1:-1:-1;33519:44:0::1;::::0;;;33554:4;;;;;;33519:44;::::1;::::0;33554:4;;33519:44;33554:4;33519:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33560:2:0;;-1:-1:-1;33519:34:0::1;::::0;-1:-1:-1;;33519:44:0:i:1;:::-;33662:12:::0;33596:62:::1;33644:13:::0;33603:4;;-1:-1:-1;;33608:15:0;;33603:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33603:21:0::1;-1:-1:-1::0;;;;;33596:39:0::1;;33636:2;33596:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33596:43:0::1;-1:-1:-1::0;;;;;33596:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33596:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33596:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33596:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;33574:166;;;;-1:-1:-1::0;;;33574:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;33065:683:::0;;;;;;;:::o;17461:140::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17560:1:::1;17544:6:::0;;17523:40:::1;::::0;-1:-1:-1;;;;;17544:6:0;;::::1;::::0;17523:40:::1;::::0;17560:1;;17523:40:::1;17591:1;17574:19:::0;;-1:-1:-1;;;;;;17574:19:0::1;::::0;;17461:140::o;34559:791::-;34810:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34869:4:0::1;34844:29;:4:::0;;-1:-1:-1;;34849:15:0;;34844:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34844:21:0::1;-1:-1:-1::0;;;;;34844:29:0::1;;34836:66;;;::::0;;-1:-1:-1;;;34836:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34836:66:0;;;;;;;;;;;;;::::1;;34913:113;34959:4;;34964:1;34959:7;;;;;;34913:113;35037:55;35072:4;;35037:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35086:4:0::1;::::0;-1:-1:-1;35037:34:0::1;::::0;-1:-1:-1;;35037:55:0:i:1;:::-;35120:37;::::0;;-1:-1:-1;;;35120:37:0;;35151:4:::1;35120:37;::::0;::::1;::::0;;;35103:14:::1;::::0;-1:-1:-1;;;;;35127:4:0::1;35120:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35120:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35120:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35120:37:0;;-1:-1:-1;35176:25:0;;::::1;;35168:76;;;;-1:-1:-1::0;;;35168:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35261:4;-1:-1:-1::0;;;;;35255:20:0::1;;35276:9;35255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35255:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35255:31:0;;;;35297:45;35328:2;35332:9;35297:30;:45::i;28607:634::-:0;28799:21;28775:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28857:4:::1;-1:-1:-1::0;;;;;28846:15:0::1;:4;;28851:1;28846:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28846:7:0::1;-1:-1:-1::0;;;;;28846:15:0::1;;28838:52;;;::::0;;-1:-1:-1;;;28838:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28838:52:0;;;;;;;;;;;;;::::1;;28911;::::0;;-1:-1:-1;;;28911:52:0;;28947:9:::1;28911:52;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28924:7:0::1;28911:35;::::0;::::1;::::0;28958:4;;;;28911:52;;;;28958:4;28911:52:::1;::::0;::::1;::::0;28958:4;28911:52;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28911:52:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28911:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28911:52:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28911:52:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28911:52:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28911:52:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28911:52:0;::::1;::::0;::::1;::::0;412:14:-1;28911:52:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28911:52:0;;;;;;;;::::0;::::1;;28901:62;;29013:12;28982:7;29007:1;28990:7;:14;:18;28982:27;;;;;;;;;;;;;;:43;;28974:94;;;;-1:-1:-1::0;;;28974:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29085:4;-1:-1:-1::0;;;;;29079:19:0::1;;29107:7;29115:1;29107:10;;;;;;;;;;;;;;29079:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29079:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29079:41:0;;;;;29144:4;-1:-1:-1::0;;;;;29138:20:0::1;;29159:25;29167:4;;29172:1;29167:7;;;;;;29159:25;29186:7;29194:1;29186:10;;;;;;;;;;;;;;29138:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;29138:59:0::1;-1:-1:-1::0;;;;;29138:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29138:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29138:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29138:59:0;29131:67:::1;;;;29209:24;29215:7;29224:4;;29209:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29230:2:0;;-1:-1:-1;29209:5:0::1;::::0;-1:-1:-1;;29209:24:0:i:1;:::-;28607:634:::0;;;;;;;;:::o;28028:571::-;28252:21;28233:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28296:51:::1;::::0;;-1:-1:-1;;;28296:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28309:7:0::1;28296:34;::::0;::::1;::::0;28331:9;;28342:4;;;;28296:51;;28342:4;28296:51:::1;::::0;::::1;::::0;28342:4;28296:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28296:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28296:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28296:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28296:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28296:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28296:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28296:51:0;::::1;::::0;::::1;::::0;412:14:-1;28296:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28296:51:0;;;;;;;;::::0;::::1;;28286:61;;28380:11;28366:7;28374:1;28366:10;;;;;;;;;;;;;;:25;;28358:72;;;;-1:-1:-1::0;;;28358:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:79:::0;17300:7;17327:6;-1:-1:-1;;;;;17327:6:0;17262:79;:::o;18314:38::-;;;:::o;18795:154::-;18896:45;;;-1:-1:-1;;;18896:45:0;;-1:-1:-1;;;;;18896:45:0;;;;;;;;;;;;;;;;18865:12;;18909:7;18896:29;;;;:45;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;18896:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18896:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18896:45:0;;18795:154;-1:-1:-1;;;18795:154:0:o;35599:268::-;35776:83;;;-1:-1:-1;;;35776:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35776:83:0;;;;;;;;;;;;;;;;35740:17;;35789:7;35776:34;;;;:83;;;;;;;;;;;;;;:34;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;35776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35776:83:0;;35599:268;-1:-1:-1;;;;;;35599:268:0:o;35394:197::-;35492:15;35540:7;-1:-1:-1;;;;;35527:27:0;;35555:7;35564:8;35574;35527:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35527:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35527:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35527:56:0;;35394:197;-1:-1:-1;;;;35394:197:0:o;25084:700::-;25350:14;25331:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;25393:196:::1;25423:5;25443:4;25462:9;25486:14;25515:12;25550:4;25570:8;25393:15;:196::i;:::-;25639:38;::::0;;-1:-1:-1;;;25639:38:0;;25671:4:::1;25639:38;::::0;::::1;::::0;;;25377:212;;-1:-1:-1;25600:78:0::1;::::0;-1:-1:-1;25628:5:0;;25635:2;;-1:-1:-1;;;;;25639: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;25639:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25639:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25639:38:0;25600:27:::1;:78::i;:::-;25695:4;-1:-1:-1::0;;;;;25689:20:0::1;;25710:9;25689:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25689:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25689:31:0;;;;25731:45;25762:2;25766:9;25731:30;:45::i;33756:795::-:0;33996:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;34041:4:::1;-1:-1:-1::0;;;;;34030:15:0::1;:4;;34035:1;34030:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34030:7:0::1;-1:-1:-1::0;;;;;34030:15:0::1;;34022:52;;;::::0;;-1:-1:-1;;;34022:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34022:52:0;;;;;;;;;;;;;::::1;;34085:13;34101:9;34085:25;;34127:4;-1:-1:-1::0;;;;;34121:19:0::1;;34149:8;34121:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34121:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34121:39:0;;;;;34184:4;-1:-1:-1::0;;;;;34178:20:0::1;;34199:25;34207:4;;34212:1;34207:7;;;;;;34199:25;34226:8;34178:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;34178:57:0::1;-1:-1:-1::0;;;;;34178:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34178:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34178:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34178:57:0;34171:65:::1;;;;34247:18;34275:4:::0;;-1:-1:-1;;34280:15:0;;34275:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34275:21:0::1;-1:-1:-1::0;;;;;34268:39:0::1;;34308:2;34268:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34268:43:0::1;-1:-1:-1::0;;;;;34268:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34268:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34268:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34268:43:0;34322:44:::1;::::0;;34268:43:::1;34322:44:::0;;::::1;::::0;;;;;;;;;;;34268:43;;-1:-1:-1;34322:44:0::1;::::0;;;34357:4;;;;;;34322:44;::::1;::::0;34357:4;;34322:44;34357:4;34322:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34363:2:0;;-1:-1:-1;34322:34:0::1;::::0;-1:-1:-1;;34322:44:0:i:1;:::-;34465:12:::0;34399:62:::1;34447:13:::0;34406:4;;-1:-1:-1;;34411:15:0;;34406:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34406:21:0::1;-1:-1:-1::0;;;;;34399:39:0::1;;34439:2;34399:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34399:43:0::1;-1:-1:-1::0;;;;;34399:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22189:833:0::0;22443:12;22457;22424:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;22482:12:::1;22497:23;22505:6;22513;22497:7;:23::i;:::-;22531:57;::::0;;-1:-1:-1;;;22531:57:0;;22560:10:::1;22531:57;::::0;::::1;::::0;-1:-1:-1;;;;;22531:28:0;::::1;:57:::0;;;;;;;;;;;;;;22482:38;;-1:-1:-1;22531:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22531:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22531:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22531:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22665:24:0::1;::::0;;-1:-1:-1;;;22665:24:0;;-1:-1:-1;;;;;22665:24:0;;::::1;;::::0;::::1;::::0;;;22635:12:::1;::::0;;;22665:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;22635:12;22665:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22665:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22665:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;22665:24:0;;;;;;;;;;;;;;;;;;;;;;;;;22634:55;;;;22701:14;22733:7;-1:-1:-1::0;;;;;22720:32:0::1;;22753:6;22761;22720:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;;;;;::::0;::::1;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22720:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22720:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22720:48:0;;-1:-1:-1;;;;;;22800:16:0;;::::1;::::0;;::::1;;:58;;22841:7;22850;22800:58;;;22820:7;22829;22800:58;22779:79:::0;;-1:-1:-1;22779:79:0;-1:-1:-1;22877:21:0;;::::1;;22869:67;;;;-1:-1:-1::0;;;22869:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22966:10;22955:7;:21;;22947:67;;;;-1:-1:-1::0;;;22947:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;;;;22189:833:::0;;;;;;;;;;;:::o;18266:41::-;;;:::o;35875:267::-;36051:83;;;-1:-1:-1;;;36051:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36051:83:0;;;;;;;;;;;;;;;;36016:16;;36064:7;36051:33;;;;:83;;;;;;;;;;;;;;:33;:83;;;2:2:-1;;;;27:1;24;17:12;36150:196:0;36287:51;;;-1:-1:-1;;;36287:51:0;;;;;;;;;;;;;;;;;;;;;;36244:24;;36300:7;-1:-1:-1;;;;;36287:35:0;;;;:51;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24366:639:0;24655:16;24673:14;24700:12;24715:20;24723:5;24730:4;24715:7;:20::i;:::-;24700:35;;24746:10;24759;:34;;24784:9;24759:34;;;-1:-1:-1;;24759:34:0;24804:75;;;-1:-1:-1;;;24804:75:0;;24827:10;24804:75;;;;24847:4;24804:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24746:47;;-1:-1:-1;;;;;;24804:22:0;;;;;:75;;;;;-1:-1:-1;;24804:75:0;;;;;;;;-1:-1:-1;24804:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24804:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24804:75:0;;;;24917:80;24936:5;24943:9;24954:14;24970:12;24984:2;24988:8;24917:18;:80::i;:::-;24890:107;;;;-1:-1:-1;24366:639:0;-1:-1:-1;;;;;;;;;;;;;24366:639:0:o;20487:707::-;20775:12;20789;20803:14;20756:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;20851:85:::1;20865:6;20873;20881:14;20897;20913:10;20925;20851:13;:85::i;:::-;20830:106:::0;;-1:-1:-1;20830:106:0;-1:-1:-1;20947:12:0::1;20962:23;20970:6:::0;20978;20962:7:::1;:23::i;:::-;20947:38;;20996:66;21028:6;21036:10;21048:4;21054:7;20996:31;:66::i;:::-;21073;21105:6;21113:10;21125:4;21131:7;21073:31;:66::i;:::-;21172:4;-1:-1:-1::0;;;;;21162:20:0::1;;21183:2;21162:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21162:24:0::1;-1:-1:-1::0;;;;;21162:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21162:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21162:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21162:24:0;20487:707;;;;-1:-1:-1;21162:24:0;;-1:-1:-1;20487:707:0;;-1:-1:-1;;;;;;;;;20487:707:0:o;17846:109::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:28:::1;17938:8;17919:18;:28::i;:::-;17846:109:::0;:::o;21202:944::-;21455:16;21473:14;21489;21436:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;21543:176:::1;21571:5;21591:4;21610:18;21643:9;21667:14;21696:12;21543:13;:176::i;:::-;21516:203:::0;;-1:-1:-1;21516:203:0;-1:-1:-1;21730:12:0::1;21745:20;21753:5:::0;21760:4:::1;21745:7;:20::i;:::-;21730:35;;21776:69;21808:5;21815:10;21827:4;21833:11;21776:31;:69::i;:::-;21862:4;-1:-1:-1::0;;;;;21856:19:0::1;;21884:9;21856:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21856:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21856:40:0;;;;;21920:4;-1:-1:-1::0;;;;;21914:20:0::1;;21935:4;21941:9;21914:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21914:37:0::1;-1:-1:-1::0;;;;;21914:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21914:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21914:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21914:37:0;21907:45:::1;;;;21985:4;-1:-1:-1::0;;;;;21975:20:0::1;;21996:2;21975:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21975:24:0::1;-1:-1:-1::0;;;;;21975:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21975:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21975:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21975:24:0;;-1:-1:-1;22050:9:0::1;:21:::0;-1:-1:-1;22046:92:0::1;;;22073:65;22104:10;22128:9;22116;:21;22073:30;:65::i;:::-;18514:1;21202:944:::0;;;;;;;;;;;:::o;30823:747::-;31012:21;30988:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;31070:4:::1;-1:-1:-1::0;;;;;31059:15:0::1;:4;;31064:1;31059:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31059:7:0::1;-1:-1:-1::0;;;;;31059:15:0::1;;31051:52;;;::::0;;-1:-1:-1;;;31051:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31051:52:0;;;;;;;;;;;;;::::1;;31124:51;::::0;;-1:-1:-1;;;31124:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31137:7:0::1;31124:34;::::0;::::1;::::0;31159:9;;31170:4;;;;31124:51;;31170:4;31124:51:::1;::::0;::::1;::::0;31170:4;31124:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31124:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31124:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31124:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31124:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;31124:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;31124:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;31124:51:0;::::1;::::0;::::1;::::0;412:14:-1;31124:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;31124:51:0;;;;;;;;::::0;::::1;;31114:61;;31208:9;31194:7;31202:1;31194:10;;;;;;;;;;;;;;:23;;31186:70;;;;-1:-1:-1::0;;;31186:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:4;-1:-1:-1::0;;;;;31267:19:0::1;;31295:7;31303:1;31295:10;;;;;;;;;;;;;;31267:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31267:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31267:41:0;;;;;31332:4;-1:-1:-1::0;;;;;31326:20:0::1;;31347:25;31355:4;;31360:1;31355:7;;;;;;31347:25;31374:7;31382:1;31374:10;;;;;;;;;;;;;;31326:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:59:0::1;-1:-1:-1::0;;;;;31326:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:59:0;31319:67:::1;;;;31397:24;31403:7;31412:4;;31397:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31418:2:0;;-1:-1:-1;31397:5:0::1;::::0;-1:-1:-1;;31397:24:0:i:1;:::-;31484:7;31492:1;31484:10;;;;;;;;;;;;;;31472:9;:22;31468:94;;;31496:66;31527:10;31551:7;31559:1;31551:10;;;;;;;;;;;;;;31539:9;:22;31496:30;:66::i;16098:361::-:0;16293:45;;;-1:-1:-1;;;;;16293:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16293:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16282:57:0;;;;16247:12;;16261:17;;16282:10;;;;16293:45;16282:57;;;25:18:-1;16282: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;;;16282: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;;16246:93:0;;;;16358:7;:57;;;;-1:-1:-1;16370:11:0;;:16;;:44;;;16401:4;16390:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16390:24:0;16370:44;16350:101;;;;;-1:-1:-1;;;16350:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16098:361;;;;;:::o;16877:197::-;16987:12;;;16947;16987;;;;;;;;;-1:-1:-1;;;;;16964:7:0;;;16980:5;;16964:36;;;;;;;;;;;;;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;;;16964:36: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;;16946:54:0;;;17019:7;17011:55;;;;-1:-1:-1;;;17011:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16877:197;;;:::o;16467:402::-;16692:51;;;-1:-1:-1;;;;;16692:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16692:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16681:63:0;;;;16646:12;;16660:17;;16681:10;;;;16692:51;16681:63;;;25:18:-1;16681: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;;;16681: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;;16645:99:0;;;;16763:7;:57;;;;-1:-1:-1;16775:11:0;;:16;;:44;;;16806:4;16795:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16795:24:0;16775:44;16755:106;;;;-1:-1:-1;;;16755:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16467:402;;;;;;:::o;26591:828::-;26698:6;26693:719;26724:1;26710:4;:11;:15;26706:1;:19;26693:719;;;26748:13;26763:14;26782:4;26787:1;26782:7;;;;;;;;;;;;;;26791:4;26796:1;26800;26796:5;26791:11;;;;;;;;;;;;;;26747:56;;;;26819:14;26851:7;-1:-1:-1;;;;;26838:32:0;;26871:5;26878:6;26838:47;;;;;;;;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26838:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26838:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26838:47:0;26917:14;;26838:47;;-1:-1:-1;26900:14:0;;26917:7;;26929:1;26925:5;;;26917:14;;;;;;;;;;;;;;;;26950:10;;26917:14;;-1:-1:-1;;;;;;26950:10:0;:24;26946:131;;27007:10;;26995:66;;;-1:-1:-1;;;26995:66:0;;27024:10;26995:66;;;;-1:-1:-1;;;;;26995:66:0;;;;;;;;;;;;;;;;;;;;;;27007:10;;;;;26995:28;;:66;;;;;;;;;;;;;;27007:10;;26995:66;;;2:2:-1;;;;27:1;24;17:12;2:2;26995:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26995:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;26946:131:0;27092:15;27109;27137:6;-1:-1:-1;;;;;27128:15:0;:5;-1:-1:-1;;;;;27128:15:0;;:61;;27170:9;27186:1;27128:61;;;27152:1;27156:9;27128:61;27091:98;;;;27204:10;27235:1;27221:4;:11;:15;27217:1;:19;:56;;27270:3;27217:56;;;27239:28;27247:6;27255:4;27260:1;27264;27260:5;27255:11;;;;;;;;;;;;;;27239:7;:28::i;:::-;27204:69;;27298:22;27306:5;27313:6;27298:7;:22::i;:::-;-1:-1:-1;;;;;27288:38:0;;27345:10;27357;27369:2;27383:1;27373:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;27373:12:0;87:42:-1;143:17;;-1:-1;27373:12:0;;27288:112;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27288:112:0;-1:-1:-1;;;;;27288:112: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;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27288:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26727:3:0;;;;;-1:-1:-1;26693:719:0;;-1:-1:-1;;;;;;;;26693:719:0;;;26591:828;;;:::o;31717:1340::-;31830:6;31825:1225;31856:1;31842:4;:11;:15;31838:1;:19;31825:1225;;;31880:13;31895:14;31914:4;31919:1;31914:7;;;;;;;;;;;;;;31923:4;31928:1;31932;31928:5;31923:11;;;;;;;;;;;;;;31879:56;;;;31951:14;31983:7;-1:-1:-1;;;;;31970:32:0;;32003:5;32010:6;31970:47;;;;;;;;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31970:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31970:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31970:47:0;;-1:-1:-1;32032:14:0;32059:22;32067:5;32074:6;32059:7;:22::i;:::-;32032:50;;32097:16;32128:17;32219:13;32234;32252:4;-1:-1:-1;;;;;32252:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32252:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32252:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32252:18:0;;;;;;;32218:52;;;;;-1:-1:-1;32218:52:0;;-1:-1:-1;32290:17:0;;-1:-1:-1;;;;;32331:15:0;;;;;;;:61;;32373:8;32383;32331:61;;;32350:8;32360;32331:61;32289:103;;;;32425:56;32468:12;32432:5;-1:-1:-1;;;;;32425:23:0;;32457:4;32425:38;;;;;;;;;;;;;-1:-1:-1;;;;;32425:38:0;-1:-1:-1;;;;;32425:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32425:56:0;32515:91;;;-1:-1:-1;;;32515:91:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32515:91:0;;;;;;;;;;;;;;;;;;-1:-1:-1;32528:7:0;32515:34;;;;;;:91;;;;;;;;;;;;;;;:34;:91;;;2:2:-1;;;;27:1;24;17:12;2:2;32515:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32515:91:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32515:91:0;32640:10;;32515:91;;-1:-1:-1;;;;;;32640:10:0;:24;;-1:-1:-1;32636:134:0;;-1:-1:-1;;;32636:134:0;32697:10;;32685:69;;;-1:-1:-1;;;32685:69:0;;32714:10;32685:69;;;;-1:-1:-1;;;;;32685:69:0;;;;;;;;;;;;;;;;;;;;;;32697:10;;;;;32685:28;;:69;;;;;;;;;;;;;;32697:10;;32685:69;;;2:2:-1;;;;27:1;24;17:12;2:2;32685:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32685:69:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32636:134:0;32785:15;32802;32830:6;-1:-1:-1;;;;;32821:15:0;:5;-1:-1:-1;;;;;32821:15:0;;:67;;32866:12;32885:1;32821:67;;;32845:1;32849:12;32821:67;32784:104;;;;32903:10;32934:1;32920:4;:11;:15;32916:1;:19;:56;;32969:3;32916:56;;;32938:28;32946:6;32954:4;32959:1;32963;32959:5;32954:11;;;;;;;32938:28;33025:12;;;33035:1;33025:12;;;;;;;;;;-1:-1:-1;;;32987:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32987:51:0;;;;;;;;;;;;;;;;;;;;;;32903:69;;-1:-1:-1;32987:9:0;;;;;;32997:10;;33009;;32903:69;;33025:12;;32987:51;;;;;;;;33025:12;;32987:51;;;;33025: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;32987:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32987:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31859:3:0;;;;;-1:-1:-1;31825:1225:0;;-1:-1:-1;;;;;;;;;;31825:1225:0;11881:136;11939:7;11966:43;11970:1;11973;11966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11959:50;11881:136;-1:-1:-1;;;11881:136:0:o;19103:1376::-;19416:45;;;-1:-1:-1;;;19416:45:0;;-1:-1:-1;;;;;19416:45:0;;;;;;;;;;;;;;;;19321:12;;;;;;19429:7;19416:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;19416:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19416:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19416:45:0;-1:-1:-1;;;;;19416:59:0;;19412:140;;;19492:48;;;-1:-1:-1;;;19492:48:0;;-1:-1:-1;;;;;19492:48:0;;;;;;;;;;;;;;;;19505:7;19492:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;19492:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19492:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19492:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19412:140:0;19595:49;;;-1:-1:-1;;;19595:49:0;;-1:-1:-1;;;;;19595:49:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;19608:7:0;19595:33;;;;;;:49;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;19595:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19595:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19595:49:0;;;;;;;;;-1:-1:-1;19595:49:0;-1:-1:-1;19659:13:0;;:30;;;;-1:-1:-1;19676:13:0;;19659:30;19655:817;;;19728:14;;-1:-1:-1;19744:14:0;;-1:-1:-1;19655:817:0;;;19792:19;19827:7;-1:-1:-1;;;;;19814:27:0;;19842:14;19858:8;19868;19814:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19814:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19814:63:0;;-1:-1:-1;19896:32:0;;;19892:569;;19975:10;19957:14;:28;;19949:74;;;;-1:-1:-1;;;19949:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20064:14;;-1:-1:-1;20080:14:0;-1:-1:-1;20080:14:0;19892:569;;;20136:19;20171:7;-1:-1:-1;;;;;20158:27:0;;20186:14;20202:8;20212;20158:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20158:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20158:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20158:63:0;;-1:-1:-1;20247:32:0;;;;20240:40;;;;20325:10;20307:14;:28;;20299:74;;;;-1:-1:-1;;;20299:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20414:14;-1:-1:-1;20430:14:0;;-1:-1:-1;19892:569:0;19655:817;;19103:1376;;;;;;;;;;;:::o;17609:229::-;-1:-1:-1;;;;;17683:22:0;;17675:73;;;;-1:-1:-1;;;17675:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17785:6;;;17764:38;;-1:-1:-1;;;;;17764:38:0;;;;17785:6;;;17764:38;;;17813:6;:17;;-1:-1:-1;;;;;;17813:17:0;-1:-1:-1;;;;;17813:17:0;;;;;;;;;;17609:229::o;12025:192::-;12111:7;12147:12;12139:6;;;;12131:29;;;;-1:-1:-1;;;12131:29: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;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12183:5:0;;;12025:192::o

Swarm Source

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