Contract 0xbd67d157502a23309db761c41965600c2ec788b2

 

Contract Overview

Just Liquidity: Router
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xc50bd5d7e936a77e073f11d611be03474ed2db209e336c0dc534a45cd6246f1843389702021-01-26 21:31:086 secs ago0x20c7c30b2890c054653368d9d540e5acba2dfb1e IN  Just Liquidity: Router0 BNB0.00379958
0xa30ee832432c0c87e98b4a6a880727cf494a47c0be4ce805d3b4062e7622b36f43389702021-01-26 21:31:086 secs ago0xbaa202b2c3dba5e4eac53c7674fe230d9ae99ed6 IN  Just Liquidity: Router0 BNB0.00202594
0xd69cc8bc6ebfad6a6534272e1f1e556655ee028f6a2536df2c35dd0421c347b043389702021-01-26 21:31:086 secs ago0x00f1574510faf2762fbdf68ee91b33517d168058 IN  Just Liquidity: Router0 BNB0.005183556
0x274d77f5ef61f69eb321244469e7509fd542169e91d3250f2f5a188243c5d4ba43389702021-01-26 21:31:086 secs ago0xea61b1f6ce485ecfaac90b63711bd2f1217e5dfc IN  Just Liquidity: Router0 BNB0.003636898
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago0xa147dcaa02056df1aede823193f475487643fa00 IN  Just Liquidity: Router0 BNB0.00202618
0x572d897619aa2c103fd27359dc0ea25059df712ce32e04831a3c3bdc031da46643389692021-01-26 21:31:059 secs ago0x1501590a53bcbc1cae9c0959f6519a1e7fa1f273 IN  Just Liquidity: Router0.290839658769645 BNB0.002880382
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago0x754151284e29cc136561b6959cf59bfb77965d53 IN  Just Liquidity: Router0 BNB0.00350776
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago0x0c70daafd0060ab36dcb825a22dbb240d36181ff IN  Just Liquidity: Router0 BNB0.00379958
0x4da4223944b78c07c999e7dcaae02b44bbcfaef01beb1a2ff82123978222eead43389672021-01-26 21:30:5915 secs ago0x73865ab70431b874619ab8fe36bb2c292a643b2f IN  Just Liquidity: Router4.654282336300504 BNB0.00242042
0xee0776144112b79cbd87dce60c753a46367aa2aa34682c9a2354ce6ed7e50f7243389672021-01-26 21:30:5915 secs ago0xa3c2bd8b5be038ab49985ac90e0d417e0f646b00 IN  Just Liquidity: Router0 BNB0.0022762
0x887dc2b7086740a7b87dbcc20540b47a8ca3e5e71a3fce8a776a7ba746e6619d43389672021-01-26 21:30:5915 secs ago0xcdcb73cddc9c92a3facc3a95813e5cd03101ef66 IN  Just Liquidity: Router2 BNB0.002880382
0x6cbb6f3ae192437c0fc604b32ca2447debb5e9cf429f198cc82fcca24f39b52b43389662021-01-26 21:30:5618 secs ago0x60f308c19e19985963b85dc96ee1c730fc33b5de IN  Just Liquidity: Router0.4 BNB0.00250468
0x81b7123e256a7d0eca9c1af2ed564c2a5bdda83ad0313af82f768752758d1f1b43389652021-01-26 21:30:5321 secs ago0xd69116317dc415bf13734af7d5e91e961864a955 IN  Just Liquidity: Router0 BNB0.00202618
0xca3dc1807bbe14ebe1a180ff4fbb7b6b44c059884f0d54a9b07f54541050edba43389652021-01-26 21:30:5321 secs ago0x7a30a019b7b6635fcaae41bf569af83f00c89627 IN  Just Liquidity: Router0.170148030736012 BNB0.00226124
0x03d017705517630caa3f46418fe717b4c658e953273149300a1e8cbcb34e1a5343389652021-01-26 21:30:5321 secs ago0xd6dc16460e22e2d4122c640cf1f26ccf9a615a4d IN  Just Liquidity: Router0 BNB0.00351154
0x5c9cd7fdf9654f81263506f2e8dbeeef988c8681ab41b5c7fd94c905b2091a0643389652021-01-26 21:30:5321 secs ago0x4de3be0aff6023f75e897be9cb11678ff273ccbb IN  Just Liquidity: Router1.6 BNB0.002880382
0x912c04b007d11c0c701455fb46453f8d9e60b0197dbc1acd2c33ac34a31e687c43389652021-01-26 21:30:5321 secs ago0xe90ff94f47368681bb389dd811709804b0ebb1ac IN  Just Liquidity: Router0 BNB0.002203538
0x5ee874408d5130962ee26433825a03b1fe9046a3a72f9fd5cd04d73b22d960f043389642021-01-26 21:30:5024 secs ago0x9c1c19a9a93fdc3aea614b727f2fd05108584268 IN  Just Liquidity: Router0.542523403921343 BNB0.002600702
0x50c005acf28c6ac2c6cc9530f823a9f1763697e59acaf1d2805ad96a0076faad43389642021-01-26 21:30:5024 secs ago0xf6b158030efaad2f798371739fbe19b15914486d IN  Just Liquidity: Router0.8 BNB0.002600702
0x1c950f1ecc27b633f7a158e08393c3e785537b21d1a1f504e3339a56840b1c3443389642021-01-26 21:30:5024 secs ago0xf2ee584a938cc6d29b7648f59c631449034a8553 IN  Just Liquidity: Router0.2 BNB0.002880382
0x2aa99729a176840d0bd6828eafa8fee3ff5e273c099394d266c0d9fd8e91f7da43389632021-01-26 21:30:4727 secs ago0x9d53f6b7b96c252b511c26edc79047d6dc360cb2 IN  Just Liquidity: Router0.291848409044225 BNB0.00220468
0x2498504c327b07d027af6bfa16df415478282311e6624a22ce31c24ef447727f43389632021-01-26 21:30:4727 secs ago0xa3c2bd8b5be038ab49985ac90e0d417e0f646b00 IN  Just Liquidity: Router1.447973 BNB0.00255116
0x6dd2cd8224dfc4d1695fbd9fb6ee7c950a2680c605238b0db96142f7bbd3560b43389632021-01-26 21:30:4727 secs ago0xd5ffa94221192e3bdc5579f154c336707d45f083 IN  Just Liquidity: Router0 BNB0.00379958
0x9bf10f7d842fa39d201458ec5d5408166a11e8ec43f21b192d8a8679264ffd8543389622021-01-26 21:30:4430 secs ago0x00400e083c884811ca5fe8c069e089ca3f9f647b IN  Just Liquidity: Router3 BNB0.00250468
0xb4ee9d70a30c096cbf418d4e755260126d763ad4dde4aa2816fe983546842e1843389612021-01-26 21:30:4133 secs ago0xb0e842f3fdbd334da9ef5287d7cbfe1ed55cf747 IN  Just Liquidity: Router0.12 BNB0.00196148
[ Download CSV Export 

OVERVIEW

JulSwap offers the same trading engine and analytics as Uniswap and some additional features from Sushiswap.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Just Liquidity: Router0xa147dcaa02056df1aede823193f475487643fa000.960315939857491284 BNB
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Binance: WBNB Token Just Liquidity: Router0.960315939857491284 BNB
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Just Liquidity: Router Just Liquidity: JulD Token0 BNB
0xb7d03e260886124997d20f6d3b1782c8b0a0f755412cfd77ab73f42e9cc3927543389692021-01-26 21:31:059 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x572d897619aa2c103fd27359dc0ea25059df712ce32e04831a3c3bdc031da46643389692021-01-26 21:31:059 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x572d897619aa2c103fd27359dc0ea25059df712ce32e04831a3c3bdc031da46643389692021-01-26 21:31:059 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0x572d897619aa2c103fd27359dc0ea25059df712ce32e04831a3c3bdc031da46643389692021-01-26 21:31:059 secs ago Just Liquidity: Router Binance: WBNB Token0.290839658769645168 BNB
0x572d897619aa2c103fd27359dc0ea25059df712ce32e04831a3c3bdc031da46643389692021-01-26 21:31:059 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xe415f82e756027cfcc212d04dd9121a3f7080e8a0 BNB
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago Just Liquidity: Router Just Liquidity: JulD Token0 BNB
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xe415f82e756027cfcc212d04dd9121a3f7080e8a0 BNB
0x8b399eb4c5290b652d5a0f8bea95823eba4b741409fdd94ef84633064c01d12e43389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router0x0c70daafd0060ab36dcb825a22dbb240d36181ff0.296683743523934011 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Binance: WBNB Token Just Liquidity: Router0.296683743523934011 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xe415f82e756027cfcc212d04dd9121a3f7080e8a0 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xc438549344805eb411e392c3fdc91796be8194940 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router Advocate Coin: ACC Token0 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xe415f82e756027cfcc212d04dd9121a3f7080e8a0 BNB
0x756246b7fbf1cfcee35da5e1e274f2f6a582cbf9aab7e70614203dc73e4655a243389682021-01-26 21:31:0212 secs ago Just Liquidity: Router 0xc438549344805eb411e392c3fdc91796be8194940 BNB
0x4da4223944b78c07c999e7dcaae02b44bbcfaef01beb1a2ff82123978222eead43389672021-01-26 21:30:5915 secs ago Just Liquidity: Router0x73865ab70431b874619ab8fe36bb2c292a643b2f0.03854820425369404 BNB
0x4da4223944b78c07c999e7dcaae02b44bbcfaef01beb1a2ff82123978222eead43389672021-01-26 21:30:5915 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BSCswapRouter

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-10-04
*/

// File: contracts/bscswap/interfaces/IBSCswapPair.sol

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

pragma solidity =0.6.12;

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

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

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

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

// File: contracts/bscswap/libraries/BSCswapLibrary.sol

pragma solidity >=0.5.0;

library BSCswapLibrary {
    using SafeMathBSCswap for uint;

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

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

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

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

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

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

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

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

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

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/bscswap/interfaces/IBSCswapRouter01.sol

pragma solidity >=0.6.2;

interface IBSCswapRouter01 {
    function factory() external pure returns (address);
    function WBNB() 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 addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountBNB, 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 removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountBNB);
    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 removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountBNB);
    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 swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactBNB(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForBNB(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: contracts/bscswap/interfaces/IBSCswapRouter02.sol

pragma solidity >=0.6.2;


interface IBSCswapRouter02 is IBSCswapRouter01 {
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountBNB);
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountBNB);

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

// File: contracts/bscswap/interfaces/IBSCswapFactory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: contracts/bscswap/interfaces/IBEP20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/bscswap/interfaces/IWBNB.sol

pragma solidity >=0.5.0;

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

// File: contracts/bscswap/BSCswapRouter.sol

pragma solidity =0.6.12;

contract BSCswapRouter is IBSCswapRouter02 {
    using SafeMathBSCswap for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'BSCswapRouter: 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
    }

    // **** 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 (IBSCswapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBSCswapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = BSCswapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = BSCswapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = BSCswapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BSCswapRouter: 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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBSCswapPair(pair).mint(to);
    }
    function addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountBNB, uint liquidity) {
        (amountToken, amountBNB) = _addLiquidity(
            token,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountBNBMin
        );
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value: amountBNB}();
        assert(IWBNB(WBNB).transfer(pair, amountBNB));
        liquidity = IBSCswapPair(pair).mint(to);
        // refund dust BNB, if any
        if (msg.value > amountBNB) TransferHelper.safeTransferBNB(msg.sender, msg.value - amountBNB);
    }

    // **** 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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        IBSCswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IBSCswapPair(pair).burn(to);
        (address token0,) = BSCswapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BSCswapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountBNB) {
        (amountToken, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountBNB) = removeLiquidityBNB(token, liquidity, amountTokenMin, amountBNBMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountBNB) {
        (, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IBEP20BSCswap(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountBNB = removeLiquidityBNBSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountBNBMin, 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,) = BSCswapLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? BSCswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBSCswapPair(BSCswapLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactBNB(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, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForBNB(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, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust BNB, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferBNB(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,) = BSCswapLibrary.sortTokens(input, output);
            IBSCswapPair pair = IBSCswapPair(BSCswapLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IBEP20BSCswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BSCswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? BSCswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value: amountIn}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WBNB, 'BSCswapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20BSCswap(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferBNB(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return BSCswapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNBSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapBNBForExactTokens","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":"swapExactBNBForTokens","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":"swapExactBNBForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForBNB","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":"swapExactTokensForBNBSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactBNB","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620048a6380380620048a68339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614721620001856000398061019f5280610e5e5280611186528061122d52806112a152806117a652806119485280611a265280611b5d5280611cb25280611d3a5280611fbd5280612032528061218a528061221252806123a0528061245452806127ec52806128d952806129b35280612a945280612c3a5280612c755280612e9f5280612ef55280612f295280612f9d525080610d095280610d425280610e3c5280610f9c528061107352806112d352806115ce52806118465280611a045280611c025280611d6c5280611f0d52806120d7528061224452806125335280612744528061276d5280612b345280612d755280612ed35280613738528061377b528061391d5280613a9a528061413c52806141f552806142a852506147216000f3fe60806040526004361061018f5760003560e01c80638dd95002116100d6578063d06ca61f1161007f578063e058848811610059578063e058848814610bd4578063e8e3370014610c27578063eaaed44214610ca7576101c8565b8063d06ca61f146109ed578063d46d2f8314610aa4578063d67b571e14610b3c576101c8565b8063b7e65949116100b0578063b7e6594914610928578063baa2abde1461097b578063c45a0155146109d8576101c8565b80638dd950021461083b5780639cf689111461086c578063ad615dec146108f2576101c8565b80635c11d795116101385780638332a963116101125780638332a963146106e757806385f8c2591461076d5780638803dbee146107a3576101c8565b80635c11d795146105445780635d616c5b146105dc578063685a0a3414610674576101c8565b806334a0772d1161016957806334a0772d146103b357806338ed17391461042657806350e27df3146104be576101c8565b8063054d50d4146101cd5780631f00ca74146102155780632195995c1461031c576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610203600480360360608110156101f057600080fd5b5080359060208101359060400135610ced565b60408051918252519081900360200190f35b34801561022157600080fd5b506102cc6004803603604081101561023857600080fd5b8135919081019060408101602082013564010000000081111561025a57600080fd5b82018360208201111561026c57600080fd5b8035906020019184602083028401116401000000008311171561028e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d02945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b34801561032857600080fd5b5061039a600480360361016081101561034057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610d38565b6040805192835260208301919091528051918290030190f35b3480156103bf57600080fd5b5061039a60048036036101408110156103d757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610e32565b34801561043257600080fd5b506102cc600480360360a081101561044957600080fd5b81359160208101359181019060608101604082013564010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460208302840111640100000000831117156104a457600080fd5b91935091506001600160a01b038135169060200135610f46565b6101c6600480360360808110156104d457600080fd5b813591908101906040810160208201356401000000008111156104f657600080fd5b82018360208201111561050857600080fd5b8035906020019184602083028401116401000000008311171561052a57600080fd5b91935091506001600160a01b038135169060200135611135565b34801561055057600080fd5b506101c6600480360360a081101561056757600080fd5b81359160208101359181019060608101604082013564010000000081111561058e57600080fd5b8201836020820111156105a057600080fd5b803590602001918460208302840111640100000000831117156105c257600080fd5b91935091506001600160a01b038135169060200135611559565b3480156105e857600080fd5b506102cc600480360360a08110156105ff57600080fd5b81359160208101359181019060608101604082013564010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184602083028401116401000000008311171561065a57600080fd5b91935091506001600160a01b03813516906020013561174b565b34801561068057600080fd5b50610203600480360361014081101561069857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356119fc565b6102cc600480360360808110156106fd57600080fd5b8135919081019060408101602082013564010000000081111561071f57600080fd5b82018360208201111561073157600080fd5b8035906020019184602083028401116401000000008311171561075357600080fd5b91935091506001600160a01b038135169060200135611b0a565b34801561077957600080fd5b506102036004803603606081101561079057600080fd5b5080359060208101359060400135611eaa565b3480156107af57600080fd5b506102cc600480360360a08110156107c657600080fd5b8135916020810135918101906060810160408201356401000000008111156107ed57600080fd5b8201836020820111156107ff57600080fd5b8035906020019184602083028401116401000000008311171561082157600080fd5b91935091506001600160a01b038135169060200135611eb7565b34801561084757600080fd5b50610850611fbb565b604080516001600160a01b039092168252519081900360200190f35b6102cc6004803603608081101561088257600080fd5b813591908101906040810160208201356401000000008111156108a457600080fd5b8201836020820111156108b657600080fd5b803590602001918460208302840111640100000000831117156108d857600080fd5b91935091506001600160a01b038135169060200135611fdf565b3480156108fe57600080fd5b506102036004803603606081101561091557600080fd5b508035906020810135906040013561233c565b34801561093457600080fd5b50610203600480360360c081101561094b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612349565b34801561098757600080fd5b5061039a600480360360e081101561099e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124da565b3480156109e457600080fd5b50610850612742565b3480156109f957600080fd5b506102cc60048036036040811015610a1057600080fd5b81359190810190604081016020820135640100000000811115610a3257600080fd5b820183602082011115610a4457600080fd5b80359060200191846020830284011164010000000083111715610a6657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612766945050505050565b348015610ab057600080fd5b506101c6600480360360a0811015610ac757600080fd5b813591602081013591810190606081016040820135640100000000811115610aee57600080fd5b820183602082011115610b0057600080fd5b80359060200191846020830284011164010000000083111715610b2257600080fd5b91935091506001600160a01b038135169060200135612793565b348015610b4857600080fd5b506102cc600480360360a0811015610b5f57600080fd5b813591602081013591810190606081016040820135640100000000811115610b8657600080fd5b820183602082011115610b9857600080fd5b80359060200191846020830284011164010000000083111715610bba57600080fd5b91935091506001600160a01b038135169060200135612a39565b348015610be057600080fd5b5061039a600480360360c0811015610bf757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612be2565b348015610c3357600080fd5b50610c896004803603610100811015610c4b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612d07565b60408051938452602084019290925282820152519081900360600190f35b610c89600480360360c0811015610cbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e45565b6000610cfa8484846130e3565b949350505050565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846131bb565b90505b92915050565b6000806000610d687f00000000000000000000000000000000000000000000000000000000000000008f8f613308565b9050600087610d77578c610d7b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050610e188f8f8f8f8f8f8f6124da565b809450819550505050509b509b9950505050505050505050565b6000806000610e827f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050600087610e91578c610e95565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f318e8e8e8e8e8e612be2565b909f909e509c50505050505050505050505050565b60608142811015610f97576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b610ff57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b9150868260018451038151811061100857fe5b6020026020010151101561104d5760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b6110eb8686600081811061105d57fe5b905060200201356001600160a01b0316336110d17f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061109f57fe5b905060200201356001600160a01b03168b8b60018181106110bc57fe5b905060200201356001600160a01b0316613308565b856000815181106110de57fe5b6020026020010151613517565b61112a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b509695505050505050565b8042811015611184576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106111bb57fe5b905060200201356001600160a01b03166001600160a01b031614611226576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61131c7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b905060200201356001600160a01b03168a8a60018181106110bc57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561136357600080fd5b505af1158015611377573d6000803e3d6000fd5b505050506040513d602081101561138d57600080fd5b505161139557fe5b6000868660001981018181106113a757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d602081101561142d57600080fd5b5051604080516020898102828101820190935289825292935061146f9290918a918a9182918501908490808284376000920191909152508992506138c6915050565b87611512828989600019810181811061148457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b505190613bed565b101561154f5760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b5050505050505050565b80428110156115a8576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b611600858560008181106115b857fe5b905060200201356001600160a01b0316336115fa7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b8a613517565b60008585600019810181811061161257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561166e57600080fd5b505afa158015611682573d6000803e3d6000fd5b505050506040513d602081101561169857600080fd5b505160408051602088810282810182019093528882529293506116da9290918991899182918501908490808284376000920191909152508892506138c6915050565b8661151282888860001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b6060814281101561179c576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106117d657fe5b905060200201356001600160a01b03166001600160a01b031614611841576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61189f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b915086826001845103815181106118b257fe5b602002602001015110156118f75760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b6119078686600081811061105d57fe5b61194682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613689915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061198557fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b5050505061112a84836001855103815181106119ef57fe5b6020026020010151613c45565b600080611a4a7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050600086611a59578b611a5d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b50505050611af98d8d8d8d8d8d612349565b9d9c50505050505050505050505050565b60608142811015611b5b576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9257fe5b905060200201356001600160a01b03166001600160a01b031614611bfd576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611c5b7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91503482600081518110611c6b57fe5b60200260200101511115611cb05760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cec57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d987f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b84600081518110611da557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df357600080fd5b505af1158015611e07573d6000803e3d6000fd5b505050506040513d6020811015611e1d57600080fd5b5051611e2557fe5b611e6482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b81600081518110611e7157fe5b6020026020010151341115611ea057611ea03383600081518110611e9157fe5b60200260200101513403613c45565b5095945050505050565b6000610cfa848484613d38565b60608142811015611f08576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b611f667f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91508682600081518110611f7657fe5b6020026020010151111561104d5760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60608142811015612030576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061206757fe5b905060200201356001600160a01b03166001600160a01b0316146120d2576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6121307f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b9150868260018451038151811061214357fe5b602002602001015110156121885760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106121c457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122707f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b8460008151811061227d57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122cb57600080fd5b505af11580156122df573d6000803e3d6000fd5b505050506040513d60208110156122f557600080fd5b50516122fd57fe5b611ea082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b6000610cfa848484613e10565b6000814281101561239a576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6123c9887f000000000000000000000000000000000000000000000000000000000000000089898930896124da565b90508092505061245288858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561242157600080fd5b505afa158015612435573d6000803e3d6000fd5b505050506040513d602081101561244b57600080fd5b5051613eb6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156124b857600080fd5b505af11580156124cc573d6000803e3d6000fd5b5050505061112a8483613c45565b600080824281101561252c576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b60006125597f00000000000000000000000000000000000000000000000000000000000000008c8c613308565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125b457600080fd5b505af11580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561264457600080fd5b505af1158015612658573d6000803e3d6000fd5b505050506040513d604081101561266e57600080fd5b508051602090910151909250905060006126888e8e61404e565b509050806001600160a01b03168e6001600160a01b0316146126ab5781836126ae565b82825b90975095508a8710156126f25760405162461bcd60e51b81526004018080602001828103825260248152602001806145a36024913960400191505060405180910390fd5b898610156127315760405162461bcd60e51b81526004018080602001828103825260248152602001806145ec6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846133e0565b80428110156127e2576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061281c57fe5b905060200201356001600160a01b03166001600160a01b031614612887576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b612897858560008181106115b857fe5b6128d58585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138c6915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d602081101561296e57600080fd5b50519050868110156129b15760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612a1757600080fd5b505af1158015612a2b573d6000803e3d6000fd5b5050505061154f8482613c45565b60608142811015612a8a576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110612ac457fe5b905060200201356001600160a01b03166001600160a01b031614612b2f576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b612b8d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91508682600081518110612b9d57fe5b602002602001015111156118f75760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b6000808242811015612c34576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612c63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124da565b9093509150612c73898685613eb6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50505050612cfb8583613c45565b50965096945050505050565b60008060008342811015612d5b576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612d698c8c8c8c8c8c61412c565b90945092506000612d9b7f00000000000000000000000000000000000000000000000000000000000000008e8e613308565b9050612da98d338388613517565b612db58c338387613517565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612e0457600080fd5b505af1158015612e18573d6000803e3d6000fd5b505050506040513d6020811015612e2e57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612e99576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612ec78a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61412c565b90945092506000612f197f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050612f278b338388613517565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f8257600080fd5b505af1158015612f96573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301257600080fd5b505af1158015613026573d6000803e3d6000fd5b505050506040513d602081101561303c57600080fd5b505161304457fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561309357600080fd5b505af11580156130a7573d6000803e3d6000fd5b505050506040513d60208110156130bd57600080fd5b50519250348410156130d5576130d533853403613c45565b505096509650969350505050565b60008084116131235760405162461bcd60e51b81526004018080602001828103825260298152602001806145506029913960400191505060405180910390fd5b6000831180156131335750600082115b61316e5760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b600061317c856103e56143bd565b9050600061318a82856143bd565b905060006131a48361319e886103e86143bd565b90614429565b90508082816131af57fe5b04979650505050505050565b6060600282511015613214576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561322c57600080fd5b50604051908082528060200260200182016040528015613256578160200160208202803683370190505b509050828160018351038151811061326a57fe5b60209081029190910101528151600019015b8015613300576000806132b98786600186038151811061329857fe5b60200260200101518786815181106132ac57fe5b6020026020010151614481565b915091506132db8484815181106132cc57fe5b60200260200101518383613d38565b8460018503815181106132ea57fe5b602090810291909101015250506000190161327c565b509392505050565b6000806000613317858561404e565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fb1e98e21a5335633815a8cfb3b580071c2e4561c50afd57a8746def9ed890b18609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6060600282511015613439576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561345157600080fd5b5060405190808252806020026020018201604052801561347b578160200160208202803683370190505b509050828160008151811061348c57fe5b60200260200101818152505060005b6001835103811015613300576000806134d1878685815181106134ba57fe5b60200260200101518786600101815181106132ac57fe5b915091506134f38484815181106134e457fe5b602002602001015183836130e3565b84846001018151811061350257fe5b6020908102919091010152505060010161349b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135b15780518252601f199092019160209182019101613592565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613613576040519150601f19603f3d011682016040523d82523d6000602084013e613618565b606091505b5091509150818015613646575080511580613646575080806020019051602081101561364357600080fd5b50515b6136815760405162461bcd60e51b81526004018080602001828103825260248152602001806146a56024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138c0576000808483815181106136a757fe5b60200260200101518584600101815181106136be57fe5b60200260200101519150915060006136d6838361404e565b50905060008785600101815181106136ea57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137185782600061371c565b6000835b91509150600060028a510388106137335788613774565b6137747f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061376757fe5b6020026020010151613308565b90506137a17f00000000000000000000000000000000000000000000000000000000000000008888613308565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137de576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384657818101518382015260200161382e565b50505050905090810190601f1680156138735780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b50506001909901985061368c975050505050505050565b50505050565b60005b6001835103811015613be8576000808483815181106138e457fe5b60200260200101518584600101815181106138fb57fe5b6020026020010151915091506000613913838361404e565b50905060006139437f00000000000000000000000000000000000000000000000000000000000000008585613308565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561398457600080fd5b505afa158015613998573d6000803e3d6000fd5b505050506040513d60608110156139ae57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a8116908916146139eb5782846139ee565b83835b91509150613a43828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b9550613a508683836130e3565b945050505050600080856001600160a01b0316886001600160a01b031614613a7a57826000613a7e565b6000835b91509150600060028c51038a10613a95578a613ac9565b613ac97f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061376757fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613b6c578181015183820152602001613b54565b50505050905090810190601f168015613b995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613bbb57600080fd5b505af1158015613bcf573d6000803e3d6000fd5b50506001909b019a506138c99950505050505050505050565b505050565b80820382811115610d32576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613c915780518252601f199092019160209182019101613c72565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613cf3576040519150601f19603f3d011682016040523d82523d6000602084013e613cf8565b606091505b5050905080613be85760405162461bcd60e51b815260040180806020018281038252602381526020018061465f6023913960400191505060405180910390fd5b6000808411613d785760405162461bcd60e51b815260040180806020018281038252602a815260200180614579602a913960400191505060405180910390fd5b600083118015613d885750600082115b613dc35760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b6000613ddb6103e8613dd586886143bd565b906143bd565b90506000613def6103e5613dd58689613bed565b9050613e066001828481613dff57fe5b0490614429565b9695505050505050565b6000808411613e505760405162461bcd60e51b81526004018080602001828103825260238152602001806146c96023913960400191505060405180910390fd5b600083118015613e605750600082115b613e9b5760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b82613ea685846143bd565b81613ead57fe5b04949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613f615780518252601f199092019160209182019101613f42565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613fc3576040519150601f19603f3d011682016040523d82523d6000602084013e613fc8565b606091505b5091509150818015613ff6575080511580613ff65750808060200190516020811015613ff357600080fd5b50515b614047576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b031614156140a25760405162461bcd60e51b81526004018080602001828103825260238152602001806146826023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106140c25782846140c5565b83835b90925090506001600160a01b038216614125576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156141b857600080fd5b505afa1580156141cc573d6000803e3d6000fd5b505050506040513d60208110156141e257600080fd5b50516001600160a01b031614156142a0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561427357600080fd5b505af1158015614287573d6000803e3d6000fd5b505050506040513d602081101561429d57600080fd5b50505b6000806142ce7f00000000000000000000000000000000000000000000000000000000000000008b8b614481565b915091508160001480156142e0575080155b156142f0578793508692506143b0565b60006142fd898484613e10565b905087811161435057858110156143455760405162461bcd60e51b81526004018080602001828103825260248152602001806145ec6024913960400191505060405180910390fd5b8894509250826143ae565b600061435d898486613e10565b90508981111561436957fe5b878110156143a85760405162461bcd60e51b81526004018080602001828103825260248152602001806145a36024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143d8575050808202828282816143d557fe5b04145b610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614490858561404e565b5090506000806144a1888888613308565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144d957600080fd5b505afa1580156144ed573d6000803e3d6000fd5b505050506040513d606081101561450357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461453d578082614540565b81815b9099909850965050505050505056fe425343737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5442534373776170526f757465723a20494e53554646494349454e545f415f414d4f554e5442534373776170526f757465723a204558434553534956455f494e5055545f414d4f554e5442534373776170526f757465723a20494e53554646494349454e545f425f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4c495155494449545942534373776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a20424e425f5452414e534645525f4641494c4544425343737761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544425343737761704c6962726172793a20494e53554646494349454e545f414d4f554e54a2646970667358221220f5dd67d47f108fcbc4c17314902460f0c2c44be43ceadc8f5deefc4a278141d764736f6c634300060c0033000000000000000000000000553990f2cba90272390f62c5bdb1681ffc899675000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000553990f2cba90272390f62c5bdb1681ffc899675000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16394:18461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16875:10;-1:-1:-1;;;;;16889:4:0;16875:18;;16868:26;;;;16394:18461;;;;;33807:260;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33807:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34601:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34601:251:0;;-1:-1:-1;34601:251:0;;-1:-1:-1;;;;;34601:251:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21670:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21670:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22349:665;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22349:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25364:622::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25364:622:0;-1:-1:-1;;;;;;25364:622:0;;;;;;;;:::i;31861:858::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31861:858:0;-1:-1:-1;;;;;;31861:858:0;;;;;;;;:::i;31131:724::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31131:724:0;-1:-1:-1;;;;;;31131:724:0;;;;;;;;:::i;28119:842::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28119:842:0;-1:-1:-1;;;;;;28119:842:0;;;;;;;;:::i;23806:714::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23806:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28967:802::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28967:802:0;-1:-1:-1;;;;;;28967:802:0;;;;;;;;:::i;34075:259::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34075:259:0;;;;;;;;;;;;:::i;25992:600::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25992:600:0;-1:-1:-1;;;;;;25992:600:0;;;;;;;;:::i;16531:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16531:38:0;;;;;;;;;;;;;;26598:689;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26598:689:0;-1:-1:-1;;;;;;26598:689:0;;;;;;;;:::i;33613:186::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33613:186:0;;;;;;;;;;;;:::i;23093:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23093:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20132:853::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20132:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16483:41::-;;;;;;;;;;;;;:::i;34342:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34342:251:0;;-1:-1:-1;34342:251:0;;-1:-1:-1;;;;;34342:251:0:i;32725:844::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32725:844:0;-1:-1:-1;;;;;;32725:844:0;;;;;;;;:::i;27293:820::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27293:820:0;-1:-1:-1;;;;;;27293:820:0;;;;;;;;:::i;20991:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20991:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18379:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18379:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19119:970;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19119:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33807:260::-;33960:14;33999:60;34027:8;34037:9;34048:10;33999:27;:60::i;:::-;33992:67;33807:260;-1:-1:-1;;;;33807:260:0:o;34601:251::-;34745:21;34791:53;34819:7;34828:9;34839:4;34791:27;:53::i;:::-;34784:60;;34601:251;;;;;:::o;21670:673::-;21976:12;21990;22015;22030:47;22053:7;22062:6;22070;22030:22;:47::i;:::-;22015:62;;22088:10;22101;:33;;22125:9;22101:33;;;-1:-1:-1;;22101:33:0;22145:78;;;-1:-1:-1;;;22145:78:0;;22171:10;22145:78;;;;22191:4;22145:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22088:46;;-1:-1:-1;;;;;;22145:25:0;;;;;:78;;;;;-1:-1:-1;;22145:78:0;;;;;;;;-1:-1:-1;22145:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:80;22271:6;22279;22287:9;22298:10;22310;22322:2;22326:8;22255:15;:80::i;:::-;22234:101;;;;;;;;21670:673;;;;;;;;;;;;;;;;:::o;22349:665::-;22638:16;22656:14;22683:12;22698:44;22721:7;22730:5;22737:4;22698:22;:44::i;:::-;22683:59;;22753:10;22766;:33;;22790:9;22766:33;;;-1:-1:-1;;22766:33:0;22810:78;;;-1:-1:-1;;;22810:78:0;;22836:10;22810:78;;;;22856:4;22810:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22753:46;;-1:-1:-1;;;;;;22810:25:0;;;;;:78;;;;;-1:-1:-1;;22810:78:0;;;;;;;;-1:-1:-1;22810:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:80;22945:5;22952:9;22963:14;22979:12;22993:2;22997:8;22926:18;:80::i;:::-;22899:107;;;;-1:-1:-1;22349:665:0;-1:-1:-1;;;;;;;;;;;;;22349:665:0:o;25364:622::-;25588:21;25569:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;25632:53:::1;25661:7;25670:8;25680:4;;25632:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25632:28:0::1;::::0;-1:-1:-1;;;25632:53:0:i:1;:::-;25622:63;;25735:12;25704:7;25729:1;25712:7;:14;:18;25704:27;;;;;;;;;;;;;;:43;;25696:97;;;;-1:-1:-1::0;;;25696:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25804:139;25850:4;;25855:1;25850:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25850:7:0::1;25859:10;25871:49;25894:7;25903:4;;25908:1;25903:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25903:7:0::1;25912:4;;25917:1;25912:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25912:7:0::1;25871:22;:49::i;:::-;25922:7;25930:1;25922:10;;;;;;;;;;;;;;25804:31;:139::i;:::-;25954:24;25960:7;25969:4;;25954:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25975:2:0;;-1:-1:-1;25954:5:0::1;::::0;-1:-1:-1;;25954:24:0:i:1;:::-;25364:622:::0;;;;;;;;;:::o;31861:858::-;32121:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;32166:4:::1;-1:-1:-1::0;;;;;32155:15:0::1;:4;;32160:1;32155:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32155:7:0::1;-1:-1:-1::0;;;;;32155:15:0::1;;32147:55;;;::::0;;-1:-1:-1;;;32147:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32213:13;32229:9;32213:25;;32255:4;-1:-1:-1::0;;;;;32249:19:0::1;;32276:8;32249:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32311:4;-1:-1:-1::0;;;;;32305:20:0::1;;32326:49;32349:7;32358:4;;32363:1;32358:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32358:7:0::1;32367:4;;32372:1;32367:7;;;;;;32326:49;32377:8;32305:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32305:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32305:81:0;32298:89:::1;;;;32398:18;32433:4:::0;;-1:-1:-1;;32438:15:0;;32433:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32433:21:0::1;-1:-1:-1::0;;;;;32419:46:0::1;;32466:2;32419:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32419:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32419:50:0;32480:44:::1;::::0;;32419:50:::1;32480:44:::0;;::::1;::::0;;;;;;;;;;;32419:50;;-1:-1:-1;32480:44:0::1;::::0;;;32515:4;;;;;;32480:44;::::1;::::0;32515:4;;32480:44;32515:4;32480:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32521:2:0;;-1:-1:-1;32480:34:0::1;::::0;-1:-1:-1;;32480:44:0:i:1;:::-;32630:12:::0;32557:69:::1;32612:13:::0;32571:4;;-1:-1:-1;;32576:15:0;;32571:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32571:21:0::1;-1:-1:-1::0;;;;;32557:46:0::1;;32604:2;32557:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32557:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32557:50:0;;:54:::1;:69::i;:::-;:85;;32535:176;;;;-1:-1:-1::0;;;32535:176:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:1;;31861:858:::0;;;;;;:::o;31131:724::-;31365:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;31386:137:::1;31432:4;;31437:1;31432:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31432:7:0::1;31441:10;31453:49;31476:7;31485:4;;31490:1;31485:7;;;;;;31453:49;31504:8;31386:31;:137::i;:::-;31534:18;31569:4:::0;;-1:-1:-1;;31574:15:0;;31569:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31569:21:0::1;-1:-1:-1::0;;;;;31555:46:0::1;;31602:2;31555:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31555:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31555:50:0;31616:44:::1;::::0;;31555:50:::1;31616:44:::0;;::::1;::::0;;;;;;;;;;;31555:50;;-1:-1:-1;31616:44:0::1;::::0;;;31651:4;;;;;;31616:44;::::1;::::0;31651:4;;31616:44;31651:4;31616:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31657:2:0;;-1:-1:-1;31616:34:0::1;::::0;-1:-1:-1;;31616:44:0:i:1;:::-;31766:12:::0;31693:69:::1;31748:13:::0;31707:4;;-1:-1:-1;;31712:15:0;;31707:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31707:21:0::1;-1:-1:-1::0;;;;;31693:46:0::1;;31740:2;31693:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31693:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;28119:842:::0;28333:21;28305:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28405:4:0::1;28380:29;:4:::0;;-1:-1:-1;;28385:15:0;;28380:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28380:21:0::1;-1:-1:-1::0;;;;;28380:29:0::1;;28372:69;;;::::0;;-1:-1:-1;;;28372:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28462:53;28491:7;28500:8;28510:4;;28462:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28462:28:0::1;::::0;-1:-1:-1;;;28462:53:0:i:1;:::-;28452:63;;28565:12;28534:7;28559:1;28542:7;:14;:18;28534:27;;;;;;;;;;;;;;:43;;28526:97;;;;-1:-1:-1::0;;;28526:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28634:139;28680:4;;28685:1;28680:7;;;;;;28634:139;28784:35;28790:7;28799:4;;28784:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28813:4:0::1;::::0;-1:-1:-1;28784:5:0::1;::::0;-1:-1:-1;;28784:35:0:i:1;:::-;28836:4;-1:-1:-1::0;;;;;28830:20:0::1;;28851:7;28876:1;28859:7;:14;:18;28851:27;;;;;;;;;;;;;;28830:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28890:63;28921:2;28925:7;28950:1;28933:7;:14;:18;28925:27;;;;;;;;;;;;;;28890:30;:63::i;23806:714::-:0;24124:14;24151:12;24166:44;24189:7;24198:5;24205:4;24166:22;:44::i;:::-;24151:59;;24221:10;24234;:33;;24258:9;24234:33;;;-1:-1:-1;;24234:33:0;24278:78;;;-1:-1:-1;;;24278:78:0;;24304:10;24278:78;;;;24324:4;24278:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24221:46;;-1:-1:-1;;;;;;24278:25:0;;;;;:78;;;;;-1:-1:-1;;24278:78:0;;;;;;;;-1:-1:-1;24278:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24379:133;24441:5;24448:9;24459:14;24475:12;24489:2;24493:8;24379:47;:133::i;:::-;24367:145;23806:714;-1:-1:-1;;;;;;;;;;;;;23806:714:0:o;28967:802::-;29180:21;29152:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;29238:4:::1;-1:-1:-1::0;;;;;29227:15:0::1;:4;;29232:1;29227:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29227:7:0::1;-1:-1:-1::0;;;;;29227:15:0::1;;29219:55;;;::::0;;-1:-1:-1;;;29219:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29295:53;29323:7;29332:9;29343:4;;29295:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29295:27:0::1;::::0;-1:-1:-1;;;29295:53:0:i:1;:::-;29285:63;;29381:9;29367:7;29375:1;29367:10;;;;;;;;;;;;;;:23;;29359:73;;;;-1:-1:-1::0;;;29359:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29449:4;-1:-1:-1::0;;;;;29443:19:0::1;;29470:7;29478:1;29470:10;;;;;;;;;;;;;;29443:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29507:4;-1:-1:-1::0;;;;;29501:20:0::1;;29522:49;29545:7;29554:4;;29559:1;29554:7;;;;;;29522:49;29573:7;29581:1;29573:10;;;;;;;;;;;;;;29501:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29501:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29501:83:0;29494:91:::1;;;;29596:24;29602:7;29611:4;;29596:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29617:2:0;;-1:-1:-1;29596:5:0::1;::::0;-1:-1:-1;;29596:24:0:i:1;:::-;29683:7;29691:1;29683:10;;;;;;;;;;;;;;29671:9;:22;29667:94;;;29695:66;29726:10;29750:7;29758:1;29750:10;;;;;;;;;;;;;;29738:9;:22;29695:30;:66::i;:::-;28967:802:::0;;;;;;;;:::o;34075:259::-;34228:13;34266:60;34293:9;34304;34315:10;34266:26;:60::i;25992:600::-;26216:21;26197:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;26260:53:::1;26288:7;26297:9;26308:4;;26260:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26260:27:0::1;::::0;-1:-1:-1;;;26260:53:0:i:1;:::-;26250:63;;26346:11;26332:7;26340:1;26332:10;;;;;;;;;;;;;;:25;;26324:75;;;;-1:-1:-1::0;;;26324:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16531:38:::0;;;:::o;26598:689::-;26814:21;26786:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;26872:4:::1;-1:-1:-1::0;;;;;26861:15:0::1;:4;;26866:1;26861:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26861:7:0::1;-1:-1:-1::0;;;;;26861:15:0::1;;26853:55;;;::::0;;-1:-1:-1;;;26853:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26929:54;26958:7;26967:9;26978:4;;26929:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26929:28:0::1;::::0;-1:-1:-1;;;26929:54:0:i:1;:::-;26919:64;;27033:12;27002:7;27027:1;27010:7;:14;:18;27002:27;;;;;;;;;;;;;;:43;;26994:97;;;;-1:-1:-1::0;;;26994:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:4;-1:-1:-1::0;;;;;27102:19:0::1;;27129:7;27137:1;27129:10;;;;;;;;;;;;;;27102:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27166:4;-1:-1:-1::0;;;;;27160:20:0::1;;27181:49;27204:7;27213:4;;27218:1;27213:7;;;;;;27181:49;27232:7;27240:1;27232:10;;;;;;;;;;;;;;27160:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;27160:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27160:83:0;27153:91:::1;;;;27255:24;27261:7;27270:4;;27255:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27276:2:0;;-1:-1:-1;27255:5:0::1;::::0;-1:-1:-1;;27255:24:0:i:1;33613:186::-:0;33710:12;33742:49;33763:7;33772:8;33782;33742:20;:49::i;23093:707::-;23359:14;23340:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;23402:196:::1;23432:5;23452:4;23471:9;23495:14;23524:12;23559:4;23579:8;23402:15;:196::i;:::-;23386:212;;;;;;23609:85;23637:5;23644:2;23662:5;-1:-1:-1::0;;;;;23648:30:0::1;;23687:4;23648:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23648:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23648:45:0;23609:27:::1;:85::i;:::-;23711:4;-1:-1:-1::0;;;;;23705:20:0::1;;23726:9;23705:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23747:45;23778:2;23782:9;23747:30;:45::i;20132:853::-:0;20386:12;20400;20367:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;20425:12:::1;20440:47;20463:7;20472:6;20480;20440:22;:47::i;:::-;20498:60;::::0;;-1:-1:-1;;;20498:60:0;;20530:10:::1;20498:60;::::0;::::1;::::0;-1:-1:-1;;;;;20498:31:0;::::1;:60:::0;;;;;;;;;;;;;;20425:62;;-1:-1:-1;20498:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20498:31:0;:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20626:27:0::1;::::0;;;;;-1:-1:-1;;;;;20626:27:0;;::::1;;::::0;::::1;::::0;;;20596:12:::1;::::0;;;20626:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20596:12;20626:23;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20626:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20626:27:0;-1:-1:-1;20665:14:0::1;20684:41;20710:6:::0;20718;20684:25:::1;:41::i;:::-;20664:61;;;20767:6;-1:-1:-1::0;;;;;20757:16:0::1;:6;-1:-1:-1::0;;;;;20757:16:0::1;;:58;;20798:7;20807;20757:58;;;20777:7;20786;20757:58;20736:79:::0;;-1:-1:-1;20736:79:0;-1:-1:-1;20834:21:0;;::::1;;20826:70;;;;-1:-1:-1::0;;;20826:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20926:10;20915:7;:21;;20907:70;;;;-1:-1:-1::0;;;20907:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:1;;;;20132:853:::0;;;;;;;;;;;:::o;16483:41::-;;;:::o;34342:251::-;34486:21;34532:53;34561:7;34570:8;34580:4;34532:28;:53::i;32725:844::-;32992:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33051:4:0::1;33026:29;:4:::0;;-1:-1:-1;;33031:15:0;;33026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33026:21:0::1;-1:-1:-1::0;;;;;33026:29:0::1;;33018:69;;;::::0;;-1:-1:-1;;;33018:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33098:137;33144:4;;33149:1;33144:7;;;;;;33098:137;33246:55;33281:4;;33246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33295:4:0::1;::::0;-1:-1:-1;33246:34:0::1;::::0;-1:-1:-1;;33246:55:0:i:1;:::-;33312:14;33343:4;-1:-1:-1::0;;;;;33329:29:0::1;;33367:4;33329:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33329:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33329:44:0;;-1:-1:-1;33392:25:0;;::::1;;33384:79;;;;-1:-1:-1::0;;;33384:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33480:4;-1:-1:-1::0;;;;;33474:20:0::1;;33495:9;33474:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33516:45;33547:2;33551:9;33516:30;:45::i;27293:820::-:0;27507:21;27479:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27579:4:0::1;27554:29;:4:::0;;-1:-1:-1;;27559:15:0;;27554:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27554:21:0::1;-1:-1:-1::0;;;;;27554:29:0::1;;27546:69;;;::::0;;-1:-1:-1;;;27546:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27636:53;27664:7;27673:9;27684:4;;27636:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27636:27:0::1;::::0;-1:-1:-1;;;27636:53:0:i:1;:::-;27626:63;;27722:11;27708:7;27716:1;27708:10;;;;;;;;;;;;;;:25;;27700:75;;;;-1:-1:-1::0;;;27700:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20991:673:::0;21228:16;21246:14;21209:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;21300:196:::1;21330:5;21350:4;21369:9;21393:14;21422:12;21457:4;21477:8;21300:15;:196::i;:::-;21273:223:::0;;-1:-1:-1;21273:223:0;-1:-1:-1;21507:51:0::1;21535:5:::0;21542:2;21273:223;21507:27:::1;:51::i;:::-;21575:4;-1:-1:-1::0;;;;;21569:20:0::1;;21590:9;21569:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21611:45;21642:2;21646:9;21611:30;:45::i;:::-;20991:673:::0;;;;;;;;;;:::o;18379:734::-;18667:12;18681;18695:14;18648:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;18743:85:::1;18757:6;18765;18773:14;18789;18805:10;18817;18743:13;:85::i;:::-;18722:106:::0;;-1:-1:-1;18722:106:0;-1:-1:-1;18839:12:0::1;18854:47;18877:7;18886:6:::0;18894;18854:22:::1;:47::i;:::-;18839:62;;18912:66;18944:6;18952:10;18964:4;18970:7;18912:31;:66::i;:::-;18989;19021:6;19029:10;19041:4;19047:7;18989:31;:66::i;:::-;19091:4;-1:-1:-1::0;;;;;19078:23:0::1;;19102:2;19078:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19078:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19078:27:0;18379:734;;;;-1:-1:-1;19078:27:0;;-1:-1:-1;18379:734:0;;-1:-1:-1;;;;;;;;;18379:734:0:o;19119:970::-;19372:16;19390:14;19406;19353:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;19460:176:::1;19488:5;19508:4;19527:18;19560:9;19584:14;19613:12;19460:13;:176::i;:::-;19433:203:::0;;-1:-1:-1;19433:203:0;-1:-1:-1;19647:12:0::1;19662:44;19685:7;19694:5:::0;19701:4:::1;19662:22;:44::i;:::-;19647:59;;19717:69;19749:5;19756:10;19768:4;19774:11;19717:31;:69::i;:::-;19803:4;-1:-1:-1::0;;;;;19797:19:0::1;;19824:9;19797:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19860:4;-1:-1:-1::0;;;;;19854:20:0::1;;19875:4;19881:9;19854:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19854:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19854:37:0;19847:45:::1;;;;19928:4;-1:-1:-1::0;;;;;19915:23:0::1;;19939:2;19915:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19915:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19915:27:0;;-1:-1:-1;19993:9:0::1;:21:::0;-1:-1:-1;19989:92:0::1;;;20016:65;20047:10;20071:9;20059;:21;20016:30;:65::i;:::-;16693:1;19119:970:::0;;;;;;;;;;;:::o;5395:513::-;5488:14;5534:1;5523:8;:12;5515:66;;;;-1:-1:-1;;;5515:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5612:1;5600:9;:13;:31;;;;;5630:1;5617:10;:14;5600:31;5592:82;;;;-1:-1:-1;;;5592:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5685:20;5708:17;:8;5721:3;5708:12;:17::i;:::-;5685:40;-1:-1:-1;5736:14:0;5753:31;5685:40;5773:10;5753:19;:31::i;:::-;5736:48;-1:-1:-1;5795:16:0;5814:40;5838:15;5814:19;:9;5828:4;5814:13;:19::i;:::-;:23;;:40::i;:::-;5795:59;;5889:11;5877:9;:23;;;;;;;5395:513;-1:-1:-1;;;;;;;5395:513:0:o;7169:530::-;7270:21;7327:1;7312:4;:11;:16;;7304:57;;;;;-1:-1:-1;;;7304:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7393:4;:11;7382:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7382:23:0;;7372:33;;7446:9;7416:7;7441:1;7424:7;:14;:18;7416:27;;;;;;;;;;;;;;;;;:39;7480:11;;-1:-1:-1;;7480:15:0;7466:226;7497:5;;7466:226;;7525:14;7541:15;7560:42;7572:7;7581:4;7590:1;7586;:5;7581:11;;;;;;;;;;;;;;7594:4;7599:1;7594:7;;;;;;;;;;;;;;7560:11;:42::i;:::-;7524:78;;;;7634:46;7646:7;7654:1;7646:10;;;;;;;;;;;;;;7658:9;7669:10;7634:11;:46::i;:::-;7617:7;7629:1;7625;:5;7617:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7504:3:0;7466:226;;;;7169:530;;;;;:::o;3918:478::-;4007:12;4033:14;4049;4067:26;4078:6;4086;4067:10;:26::i;:::-;4231:32;;;-1:-1:-1;;4231:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4221:43;;;;;;4134:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:262;;;;;;;;;3918:478;-1:-1:-1;;;;;3918:478:0:o;6579:509::-;6680:21;6737:1;6722:4;:11;:16;;6714:57;;;;;-1:-1:-1;;;6714:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6803:4;:11;6792:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6792:23:0;;6782:33;;6839:8;6826:7;6834:1;6826:10;;;;;;;;;;;;;:21;;;;;6863:6;6858:223;6889:1;6875:4;:11;:15;6871:1;:19;6858:223;;;6913:14;6929:15;6948:42;6960:7;6969:4;6974:1;6969:7;;;;;;;;;;;;;;6978:4;6983:1;6987;6983:5;6978:11;;;;;;;6948:42;6912:78;;;;7022:47;7035:7;7043:1;7035:10;;;;;;;;;;;;;;7047:9;7058:10;7022:12;:47::i;:::-;7005:7;7013:1;7017;7013:5;7005:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6892:3:0;;6858:223;;8670:402;8895:51;;;-1:-1:-1;;;;;8895:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8895:51:0;;;8884:63;;;;8849:12;;8863:17;;8884:10;;;;8895:51;8884:63;;;8895:51;8884:63;;8895:51;8884:63;;;;;;;;;;-1:-1:-1;;8884:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:99;;;;8966:7;:57;;;;-1:-1:-1;8978:11:0;;:16;;:44;;;9009:4;8998:24;;;;;;;;;;;;;;;-1:-1:-1;8998:24:0;8978:44;8958:106;;;;-1:-1:-1;;;8958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8670:402;;;;;;:::o;24631:727::-;24738:6;24733:618;24764:1;24750:4;:11;:15;24746:1;:19;24733:618;;;24788:13;24803:14;24822:4;24827:1;24822:7;;;;;;;;;;;;;;24831:4;24836:1;24840;24836:5;24831:11;;;;;;;;;;;;;;24787:56;;;;24859:14;24878:40;24904:5;24911:6;24878:25;:40::i;:::-;24858:60;;;24933:14;24950:7;24958:1;24962;24958:5;24950:14;;;;;;;;;;;;;;24933:31;;24980:15;24997;25025:6;-1:-1:-1;;;;;25016:15:0;:5;-1:-1:-1;;;;;25016:15:0;;:61;;25058:9;25074:1;25016:61;;;25040:1;25044:9;25016:61;24979:98;;;;25092:10;25123:1;25109:4;:11;:15;25105:1;:19;:80;;25182:3;25105:80;;;25127:52;25150:7;25159:6;25167:4;25172:1;25176;25172:5;25167:11;;;;;;;;;;;;;;25127:22;:52::i;:::-;25092:93;;25213:46;25236:7;25245:5;25252:6;25213:22;:46::i;:::-;-1:-1:-1;;;;;25200:65:0;;25284:10;25296;25308:2;25322:1;25312:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25312:12:0;;25200:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25200:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24767:3:0;;;;;-1:-1:-1;24733:618:0;;-1:-1:-1;;;;;;;;24733:618:0;;;24631:727;;;:::o;29916:1209::-;30029:6;30024:1094;30055:1;30041:4;:11;:15;30037:1;:19;30024:1094;;;30079:13;30094:14;30113:4;30118:1;30113:7;;;;;;;;;;;;;;30122:4;30127:1;30131;30127:5;30122:11;;;;;;;;;;;;;;30078:56;;;;30150:14;30169:40;30195:5;30202:6;30169:25;:40::i;:::-;30149:60;;;30224:17;30257:46;30280:7;30289:5;30296:6;30257:22;:46::i;:::-;30224:80;;30319:16;30350:17;30438:13;30453;30471:4;-1:-1:-1;;;;;30471:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30471:18:0;;;;;;;30437:52;;;;;-1:-1:-1;30437:52:0;;-1:-1:-1;30505:17:0;;-1:-1:-1;;;;;30546:15:0;;;;;;;:61;;30588:8;30598;30546:61;;;30565:8;30575;30546:61;30504:103;;;;30636:63;30686:12;30650:5;-1:-1:-1;;;;;30636:30:0;;30675:4;30636:45;;;;;;;;;;;;;-1:-1:-1;;;;;30636:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30622:77;;30729:69;30757:11;30770:12;30784:13;30729:27;:69::i;:::-;30714:84;;30024:1094;;;;30829:15;30846;30874:6;-1:-1:-1;;;;;30865:15:0;:5;-1:-1:-1;;;;;30865:15:0;;:67;;30910:12;30929:1;30865:67;;;30889:1;30893:12;30865:67;30828:104;;;;30947:10;30978:1;30964:4;:11;:15;30960:1;:19;:80;;31037:3;30960:80;;;30982:52;31005:7;31014:6;31022:4;31027:1;31031;31027:5;31022:11;;;;;;;30982:52;31093:12;;;31103:1;31093:12;;;;;;;;;;31055:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;31055:51:0;;;;;;;;;;;;;;;;;;;;;;30947:93;;-1:-1:-1;31055:9:0;;;;;;31065:10;;31077;;30947:93;;31093:12;;31055:51;;;;;;;;31093:12;;31055:51;;;;31093:12;;31055:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30058:3:0;;;;;-1:-1:-1;30024:1094:0;;-1:-1:-1;;;;;;;;;;30024:1094:0;;;29916:1209;;:::o;2938:129::-;3022:5;;;3017:16;;;;3009:50;;;;;-1:-1:-1;;;3009:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9080:195;9188:12;;;9150;9188;;;;;;;;;-1:-1:-1;;;;;9167:7:0;;;9181:5;;9167:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9167:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9149:52;;;9220:7;9212:55;;;;-1:-1:-1;;;9212:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:468;6122:13;6168:1;6156:9;:13;6148:68;;;;-1:-1:-1;;;6148:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6247:1;6235:9;:13;:31;;;;;6265:1;6252:10;:14;6235:31;6227:82;;;;-1:-1:-1;;;6227:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6320:14;6337:34;6366:4;6337:24;:9;6351;6337:13;:24::i;:::-;:28;;:34::i;:::-;6320:51;-1:-1:-1;6382:16:0;6401:34;6431:3;6401:25;:10;6416:9;6401:14;:25::i;:34::-;6382:53;;6457:32;6487:1;6470:11;6458:9;:23;;;;;;;6457:29;:32::i;:::-;6446:43;6029:468;-1:-1:-1;;;;;;6029:468:0:o;4956:317::-;5038:12;5081:1;5071:7;:11;5063:59;;;;-1:-1:-1;;;5063:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5152:1;5141:8;:12;:28;;;;;5168:1;5157:8;:12;5141:28;5133:79;;;;-1:-1:-1;;;5133:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5257:8;5233:21;:7;5245:8;5233:11;:21::i;:::-;:32;;;;;;;4956:317;-1:-1:-1;;;;4956:317:0:o;8301:361::-;8496:45;;;-1:-1:-1;;;;;8496:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8485:57;;;;8450:12;;8464:17;;8485:10;;;;8496:45;8485:57;;;8496:45;8485:57;;8496:45;8485:57;;;;;;;;;;-1:-1:-1;;8485:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8449:93;;;;8561:7;:57;;;;-1:-1:-1;8573:11:0;;:16;;:44;;;8604:4;8593:24;;;;;;;;;;;;;;;-1:-1:-1;8593:24:0;8573:44;8553:101;;;;;-1:-1:-1;;;8553:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8301:361;;;;;:::o;3481:345::-;3556:14;3572;3617:6;-1:-1:-1;;;;;3607:16:0;:6;-1:-1:-1;;;;;3607:16:0;;;3599:64;;;;-1:-1:-1;;;3599:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3702:6;-1:-1:-1;;;;;3693:15:0;:6;-1:-1:-1;;;;;3693:15:0;;:53;;3731:6;3739;3693:53;;;3712:6;3720;3693:53;3674:72;;-1:-1:-1;3674:72:0;-1:-1:-1;;;;;;3765:20:0;;3757:61;;;;;-1:-1:-1;;;3757:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3481:345;;;;;:::o;16997:1376::-;17215:12;17229;17370:1;-1:-1:-1;;;;;17310:62:0;17326:7;-1:-1:-1;;;;;17310:32:0;;17343:6;17351;17310:48;;;;;;;;;;;;;-1:-1:-1;;;;;17310:48:0;;;;;;-1:-1:-1;;;;;17310:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17310:48:0;-1:-1:-1;;;;;17310:62:0;;17306:146;;;17405:7;-1:-1:-1;;;;;17389:35:0;;17425:6;17433;17389:51;;;;;;;;;;;;;-1:-1:-1;;;;;17389:51:0;;;;;;-1:-1:-1;;;;;17389:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17306:146:0;17463:13;17478;17495:51;17522:7;17531:6;17539;17495:26;:51::i;:::-;17462:84;;;;17561:8;17573:1;17561:13;:30;;;;-1:-1:-1;17578:13:0;;17561:30;17557:809;;;17630:14;;-1:-1:-1;17646:14:0;;-1:-1:-1;17557:809:0;;;17694:19;17716:56;17737:14;17753:8;17763;17716:20;:56::i;:::-;17694:78;;17809:14;17791;:32;17787:568;;17870:10;17852:14;:28;;17844:77;;;;-1:-1:-1;;;17844:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17962:14;;-1:-1:-1;17978:14:0;-1:-1:-1;17978:14:0;17787:568;;;18034:19;18056:56;18077:14;18093:8;18103;18056:20;:56::i;:::-;18034:78;;18156:14;18138;:32;;18131:40;;;;18216:10;18198:14;:28;;18190:77;;;;-1:-1:-1;;;18190:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18308:14;-1:-1:-1;18324:14:0;;-1:-1:-1;17787:568:0;17557:809;;16997:1376;;;;;;;;;;;:::o;3075:142::-;3127:6;3154;;;:30;;-1:-1:-1;;3169:5:0;;;3183:1;3178;3169:5;3178:1;3164:15;;;;;:20;3154:30;3146:63;;;;;-1:-1:-1;;;3146:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2802:128;2886:5;;;2881:16;;;;2873:49;;;;;-1:-1:-1;;;2873:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4454:389;4547:13;4562;4589:14;4608:26;4619:6;4627;4608:10;:26::i;:::-;4588:46;;;4646:13;4661;4692:32;4700:7;4709:6;4717;4692:7;:32::i;:::-;-1:-1:-1;;;;;4679:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4679:60:0;;;;;;;4645:94;;;;;-1:-1:-1;4645:94:0;;-1:-1:-1;;;;;;4773:16:0;;;;;;;:62;;4816:8;4826;4773:62;;;4793:8;4803;4773:62;4750:85;;;;-1:-1:-1;4454:389:0;-1:-1:-1;;;;;;;4454:389:0:o

Swarm Source

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