BNB Price: $710.12 (-2.09%)
Gas: 1 GWei
 

Overview

BNB Balance

BNB Smart Chain LogoBNB Smart Chain LogoBNB Smart Chain Logo0 BNB

BNB Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap Exact Token...448703042024-12-14 15:58:1116 hrs ago1734191891IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448703022024-12-14 15:58:0516 hrs ago1734191885IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448702992024-12-14 15:57:5616 hrs ago1734191876IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448702982024-12-14 15:57:5316 hrs ago1734191873IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448702882024-12-14 15:57:2316 hrs ago1734191843IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448702862024-12-14 15:57:1716 hrs ago1734191837IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...448702722024-12-14 15:56:3516 hrs ago1734191795IN
Mdex: Router
0 BNB0.000127511.01
Swap Exact Token...448702612024-12-14 15:56:0216 hrs ago1734191762IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...448702482024-12-14 15:55:2316 hrs ago1734191723IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...448702452024-12-14 15:55:1416 hrs ago1734191714IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...448702432024-12-14 15:55:0816 hrs ago1734191708IN
Mdex: Router
0 BNB0.000116871.01
Swap Exact Token...448696662024-12-14 15:26:1717 hrs ago1734189977IN
Mdex: Router
0 BNB0.000127531.01
Swap Exact Token...448481632024-12-13 21:30:5835 hrs ago1734125458IN
Mdex: Router
0 BNB0.000127471.01
Swap Exact Token...448398352024-12-13 14:34:2842 hrs ago1734100468IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...448398262024-12-13 14:34:0142 hrs ago1734100441IN
Mdex: Router
0 BNB0.000127541.01
Remove Liquidity448098012024-12-12 13:32:142 days ago1734010334IN
Mdex: Router
0 BNB0.000035891
Remove Liquidity448095692024-12-12 13:20:382 days ago1734009638IN
Mdex: Router
0 BNB0.000023551
Remove Liquidity448094842024-12-12 13:16:232 days ago1734009383IN
Mdex: Router
0 BNB0.000023491
Swap Tokens For ...447324882024-12-09 21:06:175 days ago1733778377IN
Mdex: Router
0 BNB0.000230031.101
Swap Exact Token...447291782024-12-09 18:20:475 days ago1733768447IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...447291722024-12-09 18:20:295 days ago1733768429IN
Mdex: Router
0 BNB0.000144811.01
Swap Exact Token...447120952024-12-09 4:06:386 days ago1733717198IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...447025652024-12-08 20:10:056 days ago1733688605IN
Mdex: Router
0 BNB0.000127541.01
Swap Exact Token...446966902024-12-08 15:16:186 days ago1733670978IN
Mdex: Router
0 BNB0.000127521.01
Swap Exact Token...446966732024-12-08 15:15:276 days ago1733670927IN
Mdex: Router
0 BNB0.000127521.01
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
448798702024-12-14 23:56:298 hrs ago1734220589
Mdex: Router
0.02217239 BNB
448798702024-12-14 23:56:298 hrs ago1734220589
Mdex: Router
0.02217239 BNB
448665842024-12-14 12:52:1119 hrs ago1734180731
Mdex: Router
0.01201503 BNB
448665842024-12-14 12:52:1119 hrs ago1734180731
Mdex: Router
0.01201503 BNB
448532742024-12-14 1:46:4031 hrs ago1734140800
Mdex: Router
0.002991 BNB
448532742024-12-14 1:46:4031 hrs ago1734140800
Mdex: Router
0.002991 BNB
448528922024-12-14 1:27:3431 hrs ago1734139654
Mdex: Router
0.01620074 BNB
448528922024-12-14 1:27:3431 hrs ago1734139654
Mdex: Router
0.01620074 BNB
448368932024-12-13 12:07:2244 hrs ago1734091642
Mdex: Router
0.0154112 BNB
448368932024-12-13 12:07:2244 hrs ago1734091642
Mdex: Router
0.0154112 BNB
448130112024-12-12 16:12:522 days ago1734019972
Mdex: Router
0.01782941 BNB
448130112024-12-12 16:12:522 days ago1734019972
Mdex: Router
0.01782941 BNB
448055982024-12-12 10:02:052 days ago1733997725
Mdex: Router
0.006979 BNB
448055982024-12-12 10:02:052 days ago1733997725
Mdex: Router
0.006979 BNB
447843542024-12-11 16:19:493 days ago1733933989
Mdex: Router
0.00121071 BNB
447843542024-12-11 16:19:493 days ago1733933989
Mdex: Router
0.00121071 BNB
447796262024-12-11 12:23:243 days ago1733919804
Mdex: Router
0.04330497 BNB
447796262024-12-11 12:23:243 days ago1733919804
Mdex: Router
0.04330497 BNB
447683932024-12-11 3:01:434 days ago1733886103
Mdex: Router
0.004985 BNB
447683932024-12-11 3:01:434 days ago1733886103
Mdex: Router
0.004985 BNB
447665822024-12-11 1:31:104 days ago1733880670
Mdex: Router
0.00460999 BNB
447665822024-12-11 1:31:104 days ago1733880670
Mdex: Router
0.00460999 BNB
447579962024-12-10 18:21:494 days ago1733854909
Mdex: Router
0.0096222 BNB
447579962024-12-10 18:21:494 days ago1733854909
Mdex: Router
0.0096222 BNB
447569992024-12-10 17:31:584 days ago1733851918
Mdex: Router
0.00077256 BNB
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MdexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity =0.6.6;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

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

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

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

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

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

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

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

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

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

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

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

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

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

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

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

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

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WBNB() external pure returns (address);

    function swapMining() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

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

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

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

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

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

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

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

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

interface IWBNB {
    function deposit() external payable;

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

    function withdraw(uint) external;
}

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Ownable {
    address private _owner;

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IMdexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IMdexFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = IMdexFactory(factory).getReserves(tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = IMdexFactory(factory).quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = IMdexFactory(factory).quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = pairFor(tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IMdexPair(pair).mint(to);
    }

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = pairFor(token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value : amountETH}();
        assert(IWBNB(WBNB).transfer(pair, amountETH));
        liquidity = IMdexPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = pairFor(tokenA, tokenB);
        IMdexPair(pair).transferFrom(msg.sender, pair, liquidity);
        // send liquidity to pair
        (uint amount0, uint amount1) = IMdexPair(pair).burn(to);
        (address token0,) = IMdexFactory(factory).sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
    }

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = pairFor(tokenA, tokenB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = IMdexFactory(factory).sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOut);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            IMdexPair(pairFor(input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= msg.value, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = IMdexFactory(factory).sortTokens(input, output);
            IMdexPair pair = IMdexPair(pairFor(input, output));
            uint amountInput;
            uint amountOutput;
            {// scope to avoid stack too deep errors
                (uint reserve0, uint reserve1,) = pair.getReserves();
                (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = IMdexFactory(factory).getAmountOut(amountInput, reserveInput, reserveOutput, input, output);
            }
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    payable
    ensure(deadline)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value : amountIn}();
        assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    ensure(deadline)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200516e3803806200516e8339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614fb9620001b5600039806101ec5280610ec65280610f015280610fe352806112e452806118aa5280611b7e5280611fc852806120c2528061217852806122465280612491528061251952806128435280612abf5280612b6e5280612c3a5280612ccf5280612d43528061337952806136315280613666528061369a528061370e52806138ae5280613af55280613b7d52508061109952806113d5528061167e5280611960528061230252806126a85280612892528061294d52806129cd52806130d1528061323f52806132a35280613313528061396952806140cf528061442d528061463f528061493152806149df5280614a865280614b225280614c175250614fb96000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f0000000000000000000000000000000000000000000000000000000000000000612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614900565b9094509250600061368a8b7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506136988b338388613f2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000000000000000000000000000000000000000000000909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c634300060600330000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b816916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b816916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b881565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8b348c8c614900565b9094509250600061368a8b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b90506136988b338388613f2d565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c63430006060033

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

0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8
Arg [1] : _WBNB (address): 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c

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


Deployed Bytecode Sourcemap

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

Swarm Source

ipfs://f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a4

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.