Contract 0x6b7a87899490EcE95443e979cA9485CBE7E71522 3

 
Txn Hash Method
Block
From
To
Value
0x9567bb546b3f748423fa09bec696cd57e3c7ae2d0d41173e3c3b5ebafa1deaccAny Swap Out Und...(pending)2021-10-24 15:36:311 min ago0x3af015f6e3ac79d217198f00ef36af099d223e29 IN AnySwap: V4 Router0 Ether(Pending)(Pending)
0xf91a571fb6e91eee631f3c9476a9b3874b405b6f8778f2be6db2ae4b74b36485Any Swap Out Und...(pending)2021-10-24 14:57:1140 mins ago0xc1178d5bada448126a5054eaf4e7c2f3fca5e974 IN AnySwap: V4 Router0 Ether(Pending)(Pending)
0xf4360865c7eb5f3166e18599fd2d3350b1116ea579ecc8322b1aab750790242fAny Swap Out Und...(pending)2021-10-24 14:24:121 hr 13 mins ago0xc1178d5bada448126a5054eaf4e7c2f3fca5e974 IN AnySwap: V4 Router0 Ether(Pending)(Pending)
0x6080e7e1d2e6f42548bf1498ef94a6a50286d5e3ba21236b4b6b202a30512ec9Any Swap Out Und...134809962021-10-24 15:32:375 mins ago0x85b8fb91eac0ec152f1f98eb22e91e596e0d5be4 IN  AnySwap: V4 Router0 Ether0.005827192994 67.238135283
0x7323215a34276a31bd38243e82342570978093fc809b29623e702ea53d0f9668Any Swap In Auto134809922021-10-24 15:31:516 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.0068102565881.562889454
0x74ac7eaa36fbd3c51966efe3d4317337b94d744a3c19d2f38acf9b80b0b8d178Any Swap In Auto134809862021-10-24 15:30:367 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00582539488967.834168518
0x3cb94fed542b990cc2c19f3567eb230cf5a89a36593f022ae09325c823533945Any Swap Out Und...134809682021-10-24 15:27:3710 mins ago0x839fdc2512a46d88727f6d2ae590ad60cd59ab5f IN  AnySwap: V4 Router0 Ether0.006568113738 92.334379323
0x5a138f1086277f6c7d0a6feb25bb35941af1e723c9aa1ee81b5148c50032366eAny Swap Out Und...134809672021-10-24 15:27:3110 mins ago0x442cd3d136b7c3e48903bbc3c93dee7802d23970 IN  AnySwap: V4 Router0 Ether0.005951941453 83.992230835
0x5d8da9096a298c2ab8f185acba94b9d53d646d1092200b8a1f60bfc512e1a38aAny Swap In Auto134809662021-10-24 15:26:5810 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00827071668181.297468703
0xfa91a85b34a80b09e1ce2db1ec3c7f912626e3ebc1c5be11cfea1173ed7bbb40Any Swap In Auto134809522021-10-24 15:24:0313 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00733274329283.658409973
0xb6cccb5342ea1e8de22a91a7e300fd70892de51734f608e8a2ba586da374eca5Any Swap In Auto134809522021-10-24 15:24:0313 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00628102799575.198477065
0xfe49f475835c3eda29c1ed467d69c3c5ed1dfd4a5fdcf049adfe3f9a03dce257Any Swap Out Und...134809302021-10-24 15:19:3718 mins ago0x32781a5400aebd57599b7e183dc80232c477f1d0 IN  AnySwap: V4 Router0 Ether0.008223659008 94.900053182
0x7b6f2dc39f16aba9303fe9251470b8edc26afcf3aa7303f72a9ef817e1d9199cAny Swap In Auto134809062021-10-24 15:13:2624 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00774393525988.273111581
0x10b5ff4d5e511a3c701bfdb6085ff160339965998826555e7d79ebddc129bbc7Any Swap In Auto134808912021-10-24 15:10:1927 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.008275497026111.874883752
0x1d4c2e18fd76b10b3570a407446a6860f685b02aa8bb889c7f3977407836b665Any Swap In Auto134808882021-10-24 15:09:3128 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.0089905669104.69120836
0x908d669d8c9d9698298f06484f855761eea8994d201e9e7e6f4f401f78f65203Any Swap In Auto134808822021-10-24 15:07:3830 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00802829580393.485983483
0xb788fd9f0e078b91e45f1bf9022d12ce04f93b584fded39932930a9564f776deAny Swap Out Und...134808742021-10-24 15:06:0131 mins ago0xcbce294bf5276dfeacec88ae8ea4d13b26bfac6e IN  AnySwap: V4 Router0 Ether0.007595290758 87.629544377
0xd048f32172778b611b6951a0e70f021540a45f2f86c2f7decc32c096e479b398Any Swap In Auto134808742021-10-24 15:06:0131 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00777982573588.69233712
0xbc382ecd39efdfa52ac395f5f923dd146cf58e1591f4bdba72967181ce899bc3Any Swap In Auto134808742021-10-24 15:06:0131 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00661860276689.498631094
0x1c659457f45d09678a184f97c630736485b83270a8c6715d520454a2a448524aAny Swap In Auto134808502021-10-24 14:59:2038 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00688582080878.500413929
0x98214b852b528dbd35b1eadd1e7e03f2a357285c0d28bc491bfe96716a5e9f84Any Swap Out Und...134808382021-10-24 14:56:1141 mins ago0x892163f152d579af14e97052f78b6626108d8e03 IN  AnySwap: V4 Router0 Ether0.004877511821 56.280064865
0x8d7e02880b27318d54332352dc27418e8299510d7407a14fdf91fa687240a7b4Any Swap In Auto134808072021-10-24 14:49:5647 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00724950777282.718222887
0x40216b565691ef55714585bb1d58fa3b0cc097631787d43880972e67f769b7f2Any Swap In Auto134808052021-10-24 14:49:3548 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  AnySwap: V4 Router0 Ether0.00725504989282.718222887
0xbcc612adb73eec6d125a5b4f737ee967934c765f537125fab771c247da159884Any Swap Out Und...134807992021-10-24 14:48:1949 mins ago0x671813687ef1c4f0dcccd6940880b0cb790364ad IN  AnySwap: V4 Router0 Ether0.005884939177 83.08071234
0x0d36d5a2ad9d16e1f6de6a534836c7fd6b0f7dfbf6e06bf08206b3f329acbc2eAny Swap Out Und...134807912021-10-24 14:46:1451 mins ago0xba53755df1c1d2576bfc30be13f3e7a817592238 IN  AnySwap: V4 Router0 Ether0.00592994249 68.430835603
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV4Router

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-18
*/

/**
 *Submitted for verification at FtmScan.com on 2021-05-31
*/

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

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

/**
 *Submitted for verification at hecoinfo.com on 2021-04-08
*/

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

pragma solidity >=0.8.0;

interface ISushiswapV2Pair {
    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 swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

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

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

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

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

library SushiswapV2Library {
    using SafeMathSushiswap for uint;

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

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

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

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

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

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

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

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

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

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

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

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

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

interface AnyswapV1ERC20 {
    function mint(address to, uint256 amount) external returns (bool);
    function burn(address from, uint256 amount) external returns (bool);
    function changeVault(address newVault) external returns (bool);
    function depositVault(uint amount, address to) external returns (uint);
    function withdrawVault(address from, uint amount, address to) external returns (uint);
    function underlying() external view returns (address);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract AnyswapV4Router {
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

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

    constructor(address _factory, address _wNATIVE, address _mpc) {
        _newMPC = _mpc;
        _newMPCEffectiveTime = block.timestamp;
        factory = _factory;
        wNATIVE = _wNATIVE;
    }

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

    address private _oldMPC;
    address private _newMPC;
    uint256 private _newMPCEffectiveTime;


    event LogChangeMPC(address indexed oldMPC, address indexed newMPC, uint indexed effectiveTime, uint chainID);
    event LogChangeRouter(address indexed oldRouter, address indexed newRouter, uint chainID);
    event LogAnySwapIn(bytes32 indexed txhash, address indexed token, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapOut(address indexed token, address indexed from, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForTokens(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForNative(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);

    modifier onlyMPC() {
        require(msg.sender == mpc(), "AnyswapV3Router: FORBIDDEN");
        _;
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= _newMPCEffectiveTime) {
            return _newMPC;
        }
        return _oldMPC;
    }

    function cID() public view returns (uint id) {
        assembly {id := chainid()}
    }

    function changeMPC(address newMPC) public onlyMPC returns (bool) {
        require(newMPC != address(0), "AnyswapV3Router: address(0x0)");
        _oldMPC = mpc();
        _newMPC = newMPC;
        _newMPCEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeMPC(_oldMPC, _newMPC, _newMPCEffectiveTime, cID());
        return true;
    }

    function changeVault(address token, address newVault) public onlyMPC returns (bool) {
        require(newVault != address(0), "AnyswapV3Router: address(0x0)");
        return AnyswapV1ERC20(token).changeVault(newVault);
    }

    function _anySwapOut(address from, address token, address to, uint amount, uint toChainID) internal {
        AnyswapV1ERC20(token).burn(from, amount);
        emit LogAnySwapOut(token, from, to, amount, cID(), toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to`
    function anySwapOut(address token, address to, uint amount, uint toChainID) external {
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying`
    function anySwapOutUnderlying(address token, address to, uint amount, uint toChainID) external {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(token).underlying(), msg.sender, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, msg.sender);
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        address _underlying = AnyswapV1ERC20(token).underlying();
        IERC20(_underlying).permit(from, address(this), amount, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithTransferPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        IERC20(AnyswapV1ERC20(token).underlying()).transferWithPermit(from, token, amount, deadline, v, r, s);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOut(address[] calldata tokens, address[] calldata to, uint[] calldata amounts, uint[] calldata toChainIDs) external {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapOut(msg.sender, tokens[i], to[i], amounts[i], toChainIDs[i]);
        }
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    function _anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) internal {
        AnyswapV1ERC20(token).mint(to, amount);
        emit LogAnySwapIn(txs, token, to, amount, fromChainID, cID());
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    // triggered by `anySwapOut`
    function anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying`
    function anySwapInUnderlying(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20(token).withdrawVault(to, amount, to);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` if possible
    function anySwapInAuto(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20 _anyToken = AnyswapV1ERC20(token);
        address _underlying = _anyToken.underlying();
        if (_underlying != address(0) && IERC20(_underlying).balanceOf(token) >= amount) {
            _anyToken.withdrawVault(to, amount, to);
        }
    }

    // extracts mpc fee from bridge fees
    function anySwapFeeTo(address token, uint amount) external onlyMPC {
        address _mpc = mpc();
        AnyswapV1ERC20(token).mint(_mpc, amount);
        AnyswapV1ERC20(token).withdrawVault(_mpc, amount, _mpc);
    }

    function anySwapIn(bytes32[] calldata txs, address[] calldata tokens, address[] calldata to, uint256[] calldata amounts, uint[] calldata fromChainIDs) external onlyMPC {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapIn(txs[i], tokens[i], to[i], amounts[i], fromChainIDs[i]);
        }
    }

    // **** 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,) = SushiswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? SushiswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            ISushiswapV2Pair(SushiswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(path[0]).underlying(), msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForTokens(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForTokens`
    function anySwapInExactTokensForTokens(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SushiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0], SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, to);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNative(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(path[0]).underlying(), msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForNative(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForNative(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForNative`
    function anySwapInExactTokensForNative(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        require(path[path.length - 1] == wNATIVE, 'AnyswapV3Router: INVALID_PATH');
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AnyswapV3Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0],  SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, address(this));
        IwNATIVE(wNATIVE).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferNative(to, amounts[amounts.length - 1]);
    }

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wNATIVE","type":"address"},{"internalType":"address","name":"_mpc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeRouter","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"anySwapFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"txs","type":"bytes32[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"fromChainIDs","type":"uint256[]"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForNative","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"toChainIDs","type":"uint256[]"}],"name":"anySwapOut","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNative","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithTransferPermit","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokens","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cID","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMPC","type":"address"}],"name":"changeMPC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","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":"pure","type":"function"},{"inputs":[],"name":"wNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200499c3803806200499c833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000de565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000aa578283fd5b620000b58462000078565b9250620000c56020850162000078565b9150620000d56040850162000078565b90509250925092565b60805160601c60a05160601c61484c62000150600039600081816101ec01528181611499015281816116380152611e3d015260008181610aef01528181610cda01528181610dc8015281816115230152818161254b015281816128a7015281816133220152613380015261484c6000f3fe6080604052600436106101dc5760003560e01c8063825bb13c11610102578063ad615dec11610095578063d8b9f61011610064578063d8b9f610146105aa578063dcfb77b1146105ca578063edbdf5e2146105ea578063f75c26641461060a57610229565b8063ad615dec14610535578063c45a015514610555578063c8e174f61461056a578063d06ca61f1461058a57610229565b80638fd903f5116100d15780638fd903f5146104be57806399a2f2d7146104e057806399cd84b5146104f55780639aa1ac611461051557610229565b8063825bb13c1461043e57806385f8c2591461045e57806387cc6e2f1461047e5780638d7d3eea1461049e57610229565b80632fc1e7281161017a57806352a397d51161014957806352a397d5146103be5780635b7b018c146103de57806365782f56146103fe5780636a4539721461041e57610229565b80632fc1e728146103315780633f88de8914610351578063456862aa146103715780634d93bb941461039e57610229565b80631b91a934116101b65780631b91a934146102a45780631f00ca74146102c4578063241dc2df146102f157806325121b761461031157610229565b80630175b1c41461022e578063054d50d41461024e5780630bb572031461028457610229565b3661022957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022757634e487b7160e01b600052600160045260246000fd5b005b600080fd5b34801561023a57600080fd5b50610227610249366004613d21565b61061f565b34801561025a57600080fd5b5061026e610269366004613fa8565b61080b565b60405161027b9190614660565b60405180910390f35b34801561029057600080fd5b5061022761029f366004613f2d565b610820565b3480156102b057600080fd5b506102276102bf3660046139aa565b610954565b3480156102d057600080fd5b506102e46102df366004613e5b565b610ae8565b60405161027b91906141f3565b3480156102fd57600080fd5b5061022761030c366004613a34565b610b1e565b34801561031d57600080fd5b5061022761032c366004613c16565b610b31565b34801561033d57600080fd5b506102e461034c366004613d72565b610c7a565b34801561035d57600080fd5b5061022761036c366004613d21565b610ed3565b34801561037d57600080fd5b5061039161038c366004613972565b610fa0565b60405161027b9190614237565b3480156103aa57600080fd5b506102276103b9366004613aa4565b61107e565b3480156103ca57600080fd5b506102e46103d9366004613d72565b611434565b3480156103ea57600080fd5b506103916103f9366004613933565b611726565b34801561040a57600080fd5b50610227610419366004613f2d565b611829565b34801561042a57600080fd5b50610227610439366004613f2d565b611938565b34801561044a57600080fd5b50610227610459366004613d21565b611b16565b34801561046a57600080fd5b5061026e610479366004613fa8565b611b62565b34801561048a57600080fd5b50610227610499366004613a79565b611b6f565b3480156104aa57600080fd5b506102276104b93660046139aa565b611cb5565b3480156104ca57600080fd5b506104d3611e3b565b60405161027b919061406c565b3480156104ec57600080fd5b5061026e611e5f565b34801561050157600080fd5b50610227610510366004613aa4565b611e63565b34801561052157600080fd5b50610227610530366004613aa4565b6121e0565b34801561054157600080fd5b5061026e610550366004613fa8565b61253c565b34801561056157600080fd5b506104d3612549565b34801561057657600080fd5b50610227610585366004613aa4565b61256d565b34801561059657600080fd5b506102e46105a5366004613e5b565b6128a0565b3480156105b657600080fd5b506102276105c5366004613f2d565b6128cd565b3480156105d657600080fd5b506102276105e5366004613b57565b6129e9565b3480156105f657600080fd5b50610227610605366004613a34565b612ac7565b34801561061657600080fd5b506104d3612bd1565b610627612bd1565b6001600160a01b0316336001600160a01b0316146106605760405162461bcd60e51b815260040161065790614452565b60405180910390fd5b61066d8585858585612bff565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ad57600080fd5b505afa1580156106c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e59190613956565b90506001600160a01b0381161580159061077b57506040516370a0823160e01b815284906001600160a01b038316906370a0823190610728908a9060040161406c565b60206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190613e43565b10155b1561080257604051620e75bb60e21b81526001600160a01b038316906239d6ec906107ae908890889082906004016140fe565b602060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613e43565b505b50505050505050565b6000610818848484612cde565b949350505050565b81428110156108415760405162461bcd60e51b815260040161065790614575565b8585600081811061086257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108779190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016108a49291906140e5565b602060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190613d01565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c61092f611e5f565b8960405161094296959493929190614121565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c59190613956565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b81526004016109fc97969594939291906140a4565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613d01565b50604051630bebbf4d60e41b81526001600160a01b0389169063bebbf4d090610a7d9089908d90600401614669565b602060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190613e43565b50610add8989898985612d78565b505050505050505050565b6060610b157f00000000000000000000000000000000000000000000000000000000000000008484612e51565b90505b92915050565b610b2b3385858585612d78565b50505050565b610b39612bd1565b6001600160a01b0316336001600160a01b031614610b695760405162461bcd60e51b815260040161065790614452565b60005b87811015610c6d57610c5b8b8b83818110610b9757634e487b7160e01b600052603260045260246000fd5b905060200201358a8a84818110610bbe57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bd39190613933565b898985818110610bf357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c089190613933565b888886818110610c2857634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110610c4f57634e487b7160e01b600052603260045260246000fd5b90506020020135612bff565b80610c6581614797565b915050610b6c565b5050505050505050505050565b6060610c84612bd1565b6001600160a01b0316336001600160a01b031614610cb45760405162461bcd60e51b815260040161065790614452565b8242811015610cd55760405162461bcd60e51b815260040161065790614575565b610d337f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b9150878260018451610d45919061473d565b81518110610d6357634e487b7160e01b600052603260045260246000fd5b60200260200101511015610d895760405162461bcd60e51b8152600401610657906143bf565b610e878a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dc39190613933565b610e587f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610e0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e1d9190613933565b8c8c6001818110610e3e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e539190613933565b6131a5565b85600081518110610e7957634e487b7160e01b600052603260045260246000fd5b602002602001015187612bff565b610ec6828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613215915050565b5098975050505050505050565b610edb612bd1565b6001600160a01b0316336001600160a01b031614610f0b5760405162461bcd60e51b815260040161065790614452565b610f188585858585612bff565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90610f46908690869082906004016140fe565b602060405180830381600087803b158015610f6057600080fd5b505af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190613e43565b505050505050565b6000610faa612bd1565b6001600160a01b0316336001600160a01b031614610fda5760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166110005760405162461bcd60e51b8152600401610657906142f0565b6040516360e232a960e01b81526001600160a01b038416906360e232a99061102c90859060040161406c565b602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190613d01565b844281101561109f5760405162461bcd60e51b815260040161065790614575565b6000898960008181106110c257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110d79190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561110f57600080fd5b505afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161118197969594939291906140a4565b600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506111f4818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111ee9190613933565b8f61344f565b8989600081811061121557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061122a9190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401611257929190614669565b602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613e43565b50898960008181106112cb57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906112e09190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161130d9291906140e5565b602060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006113c4611e5f565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f4898787878760405161141695949392919061418b565b60405180910390a35050505050505050505050505050505050505050565b606061143e612bd1565b6001600160a01b0316336001600160a01b03161461146e5760405162461bcd60e51b815260040161065790614452565b824281101561148f5760405162461bcd60e51b815260040161065790614575565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876114c660018261473d565b8181106114e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114f89190613933565b6001600160a01b03161461151e5760405162461bcd60e51b8152600401610657906144be565b61157c7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b915087826001845161158e919061473d565b815181106115ac57634e487b7160e01b600052603260045260246000fd5b602002602001015110156115d25760405162461bcd60e51b8152600401610657906144f5565b6115f78a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b61163682888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613215915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551611674919061473d565b8151811061169257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016116b69190614660565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b50505050610ec68583600185516116fb919061473d565b8151811061171957634e487b7160e01b600052603260045260246000fd5b6020026020010151613537565b6000611730612bd1565b6001600160a01b0316336001600160a01b0316146117605760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166117865760405162461bcd60e51b8152600401610657906142f0565b61178e612bd1565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556117ca426202a3006146e6565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a219812161180b611e5f565b6040516118189190614660565b60405180910390a45060015b919050565b814281101561184a5760405162461bcd60e51b815260040161065790614575565b8585600081811061186b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118809190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016118ad9291906140e5565b602060405180830381600087803b1580156118c757600080fd5b505af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613d01565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c61092f611e5f565b81428110156119595760405162461bcd60e51b815260040161065790614575565b611a3f8686600081811061197d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119929190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613956565b3388886000818110611a2457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a399190613933565b8b61344f565b85856000818110611a6057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a759190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401611aa2929190614669565b602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613e43565b508585600081811061186b57634e487b7160e01b600052603260045260246000fd5b611b1e612bd1565b6001600160a01b0316336001600160a01b031614611b4e5760405162461bcd60e51b815260040161065790614452565b611b5b8585858585612bff565b5050505050565b60006108188484846135c9565b611b77612bd1565b6001600160a01b0316336001600160a01b031614611ba75760405162461bcd60e51b815260040161065790614452565b6000611bb1612bd1565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f1990611be290849086906004016140e5565b602060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c349190613d01565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec90611c63908490869082906004016140fe565b602060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613e43565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d289190613956565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf90611d63908d9030908c908c908c908c908c906004016140a4565b600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b50505050611da1818b8b8a61344f565b604051630bebbf4d60e41b81526001600160a01b038a169063bebbf4d090611dcf908a908e90600401614669565b602060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613e43565b50611e2f8a8a8a8a86612d78565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b4690565b8442811015611e845760405162461bcd60e51b815260040161065790614575565b600089896000818110611ea757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ebc9190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b8152600401611f6697969594939291906140a4565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050611fbe818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b89896000818110611fdf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ff49190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401612021929190614669565b602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613e43565b508989600081811061209557634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120aa9190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b81526004016120d79291906140e5565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121299190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f9050600061218e611e5f565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b3898787878760405161141695949392919061418b565b84428110156122015760405162461bcd60e51b815260040161065790614575565b8888600081811061222257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122379190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561226f57600080fd5b505afa158015612283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a79190613956565b6001600160a01b031663605629d68d8b8b60008181106122d757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122ec9190613933565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161231397969594939291906140a4565b602060405180830381600087803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123659190613d01565b508888600081811061238757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061239c9190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b81526004016123c9929190614669565b602060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613e43565b508888600081811061243d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906124529190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161247f9291906140e5565b602060405180830381600087803b15801561249957600080fd5b505af11580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d19190613d01565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612513611e5f565b8960405161252696959493929190614121565b60405180910390a3505050505050505050505050565b600061081884848461365d565b7f000000000000000000000000000000000000000000000000000000000000000081565b844281101561258e5760405162461bcd60e51b815260040161065790614575565b888860008181106125af57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125c49190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fc57600080fd5b505afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126349190613956565b6001600160a01b031663605629d68d8b8b600081811061266457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906126799190613933565b8e8a8a8a8a6040518863ffffffff1660e01b81526004016126a097969594939291906140a4565b602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190613d01565b508888600081811061271457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127299190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b8152600401612756929190614669565b602060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613e43565b50888860008181106127ca57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127df9190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161280c9291906140e5565b602060405180830381600087803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e9190613d01565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612513611e5f565b6060610b157f0000000000000000000000000000000000000000000000000000000000000000848461300b565b81428110156128ee5760405162461bcd60e51b815260040161065790614575565b6129128686600081811061197d57634e487b7160e01b600052603260045260246000fd5b8585600081811061293357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129489190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401612975929190614669565b602060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190613e43565b508585600081811061086257634e487b7160e01b600052603260045260246000fd5b60005b87811015610add57612ab5338a8a84818110612a1857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a2d9190613933565b898985818110612a4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a629190613933565b888886818110612a8257634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110612aa957634e487b7160e01b600052603260045260246000fd5b90506020020135612d78565b80612abf81614797565b9150506129ec565b612b43846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613956565b33868561344f565b604051630bebbf4d60e41b81526001600160a01b0385169063bebbf4d090612b719085903390600401614669565b602060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc39190613e43565b50610b2b3385858585612d78565b60006002544210612bee57506001546001600160a01b0316612bfc565b506000546001600160a01b03165b90565b6040516340c10f1960e01b81526001600160a01b038516906340c10f1990612c2d90869086906004016140e5565b602060405180830381600087803b158015612c4757600080fd5b505af1158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f9190613d01565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd558585612cc0611e5f565b604051612ccf939291906146d0565b60405180910390a45050505050565b6000808411612cff5760405162461bcd60e51b8152600401610657906145ac565b600083118015612d0f5750600082115b612d2b5760405162461bcd60e51b815260040161065790614242565b6000612d39856103e56136bf565b90506000612d4782856136bf565b90506000612d6183612d5b886103e86136bf565b906136ff565b9050612d6d81836146fe565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90612da690889086906004016140e5565b602060405180830381600087803b158015612dc057600080fd5b505af1158015612dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df89190613d01565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612e41611e5f565b86604051612ccf939291906146d0565b6060600282511015612e755760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff811115612e9d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ec6578160200160208202803683370190505b509050828160018351612ed9919061473d565b81518110612ef757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600060018351612f13919061473d565b90505b801561300357600080612f828786612f2f60018761473d565b81518110612f4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151878681518110612f7557634e487b7160e01b600052603260045260246000fd5b602002602001015161372d565b91509150612fb8848481518110612fa957634e487b7160e01b600052603260045260246000fd5b602002602001015183836135c9565b84612fc460018661473d565b81518110612fe257634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080612ffb90614780565b915050612f16565b509392505050565b606060028251101561302f5760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff81111561305757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613080578160200160208202803683370190505b50905082816000815181106130a557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b600183516130c2919061473d565b81101561300357600080613124878685815181106130f057634e487b7160e01b600052603260045260246000fd5b60200260200101518786600161310691906146e6565b81518110612f7557634e487b7160e01b600052603260045260246000fd5b9150915061315a84848151811061314b57634e487b7160e01b600052603260045260246000fd5b60200260200101518383612cde565b846131668560016146e6565b8151811061318457634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505050808061319d90614797565b9150506130b4565b60008060006131b48585613806565b915091508582826040516020016131cc929190613fd3565b604051602081830303815290604052805190602001206040516020016131f3929190614016565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613226919061473d565b811015610b2b5760008084838151811061325057634e487b7160e01b600052603260045260246000fd5b60200260200101518584600161326691906146e6565b8151811061328457634e487b7160e01b600052603260045260246000fd5b602002602001015191509150600061329c8383613806565b5090506000876132ad8660016146e6565b815181106132cb57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146132f9578260006132fd565b6000835b91509150600060028a51613311919061473d565b881061331d5788613379565b6133797f0000000000000000000000000000000000000000000000000000000000000000878c61334e8c60026146e6565b8151811061336c57634e487b7160e01b600052603260045260246000fd5b60200260200101516131a5565b90506133a67f000000000000000000000000000000000000000000000000000000000000000088886131a5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156133e3576020820181803683370190505b506040518563ffffffff1660e01b81526004016134039493929190614680565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505050505050808061344790614797565b915050613218565b600080856001600160a01b03166323b872dd86868660405160240161347693929190614080565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516134af9190613ffa565b6000604051808303816000865af19150503d80600081146134ec576040519150601f19603f3d011682016040523d82523d6000602084013e6134f1565b606091505b509150915081801561351b57508051158061351b57508080602001905181019061351b9190613d01565b610f985760405162461bcd60e51b8152600401610657906145e7565b604080516000808252602082019092526001600160a01b0384169083906040516135619190613ffa565b60006040518083038185875af1925050503d806000811461359e576040519150601f19603f3d011682016040523d82523d6000602084013e6135a3565b606091505b50509050806135c45760405162461bcd60e51b81526004016106579061440c565b505050565b60008084116135ea5760405162461bcd60e51b815260040161065790614355565b6000831180156135fa5750600082115b6136165760405162461bcd60e51b815260040161065790614242565b600061362e6103e861362886886136bf565b906136bf565b905060006136426103e56136288689613890565b90506136536001612d5b83856146fe565b9695505050505050565b600080841161367e5760405162461bcd60e51b815260040161065790614540565b60008311801561368e5750600082115b6136aa5760405162461bcd60e51b815260040161065790614242565b826136b585846136bf565b61081891906146fe565b60008115806136e3575082826136d5818361471e565b92506136e190836146fe565b145b610b185760405162461bcd60e51b815260040161065790614327565b60008261370c83826146e6565b9150811015610b185760405162461bcd60e51b815260040161065790614391565b600080600061373c8585613806565b50905060008061374d8888886131a5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190613df5565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146137f45780826137f7565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316141561383b5760405162461bcd60e51b8152600401610657906142a9565b826001600160a01b0316846001600160a01b03161061385b57828461385e565b83835b90925090506001600160a01b0382166138895760405162461bcd60e51b815260040161065790614489565b9250929050565b60008261389d838261473d565b9150811115610b185760405162461bcd60e51b81526004016106579061427a565b8035611824816147de565b60008083601f8401126138da578081fd5b50813567ffffffffffffffff8111156138f1578182fd5b602083019150836020808302850101111561388957600080fd5b80516001600160701b038116811461182457600080fd5b803560ff8116811461182457600080fd5b600060208284031215613944578081fd5b813561394f816147de565b9392505050565b600060208284031215613967578081fd5b815161394f816147de565b60008060408385031215613984578081fd5b823561398f816147de565b9150602083013561399f816147de565b809150509250929050565b60008060008060008060008060006101208a8c0312156139c8578485fd5b89356139d3816147de565b985060208a01356139e3816147de565b975060408a01356139f3816147de565b965060608a0135955060808a01359450613a0f60a08b01613922565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060008060808587031215613a49578384fd5b8435613a54816147de565b93506020850135613a64816147de565b93969395505050506040820135916060013590565b60008060408385031215613a8b578182fd5b8235613a96816147de565b946020939093013593505050565b60008060008060008060008060008060006101408c8e031215613ac5578182fd5b8b35613ad0816147de565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff811115613af9578283fd5b613b058e828f016138c9565b90995097505060808c0135613b19816147de565b955060a08c01359450613b2e60c08d01613922565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b031215613b72578182fd5b883567ffffffffffffffff80821115613b89578384fd5b613b958c838d016138c9565b909a50985060208b0135915080821115613bad578384fd5b613bb98c838d016138c9565b909850965060408b0135915080821115613bd1578384fd5b613bdd8c838d016138c9565b909650945060608b0135915080821115613bf5578384fd5b50613c028b828c016138c9565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d031215613c34578384fd5b8a3567ffffffffffffffff80821115613c4b578586fd5b613c578e838f016138c9565b909c509a5060208d0135915080821115613c6f578586fd5b613c7b8e838f016138c9565b909a50985060408d0135915080821115613c93578586fd5b613c9f8e838f016138c9565b909850965060608d0135915080821115613cb7578586fd5b613cc38e838f016138c9565b909650945060808d0135915080821115613cdb578384fd5b50613ce88d828e016138c9565b915080935050809150509295989b9194979a5092959850565b600060208284031215613d12578081fd5b8151801515811461394f578182fd5b600080600080600060a08688031215613d38578283fd5b853594506020860135613d4a816147de565b93506040860135613d5a816147de565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215613d8d578182fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613db8578283fd5b613dc48b828c016138c9565b9096509450506080890135613dd8816147de565b979a969950949793969295929450505060a08201359160c0013590565b600080600060608486031215613e09578081fd5b613e128461390b565b9250613e206020850161390b565b9150604084015163ffffffff81168114613e38578182fd5b809150509250925092565b600060208284031215613e54578081fd5b5051919050565b60008060408385031215613e6d578182fd5b8235915060208084013567ffffffffffffffff80821115613e8c578384fd5b818601915086601f830112613e9f578384fd5b813581811115613eb157613eb16147c8565b838102604051601f19603f83011681018181108582111715613ed557613ed56147c8565b604052828152858101935084860182860187018b1015613ef3578788fd5b8795505b83861015613f1c57613f08816138be565b855260019590950194938601938601613ef7565b508096505050505050509250929050565b600080600080600080600060c0888a031215613f47578081fd5b8735965060208801359550604088013567ffffffffffffffff811115613f6b578182fd5b613f778a828b016138c9565b9096509450506060880135613f8b816147de565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215613fbc578081fd5b505081359360208301359350604090920135919050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161400c818460208701614754565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614164578235614147816147de565b6001600160a01b0316825260209283019290910190600101614134565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156141cd5781516001600160a01b0316845292840192908401906001016141a8565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b8181101561422b5783518352928401929184019160010161420f565b50909695505050505050565b901515815260200190565b6020808252602a908201526000805160206147f78339815191526040820152695f4c495155494449545960b01b606082015260800190565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252601d908201527f416e79737761705633526f757465723a20616464726573732830783029000000604082015260600190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252602e908201526000805160206147f783398151915260408201526d17d3d55514155517d05353d5539560921b606082015260800190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252602d908201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60408201526c13d55514155517d05353d55395609a1b606082015260800190565b60208082526026908201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60408201526511905253115160d21b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601d908201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b60208082526027908201526000805160206147f783398151915260408201526617d05353d5539560ca1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b6020808252602d908201526000805160206147f783398151915260408201526c17d25394155517d05353d55395609a1b606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416040820152631253115160e21b606082015260800190565b6020808252818101527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b600085825284602083015260018060a01b03841660408301526080606083015282518060808401526146b98160a0850160208701614754565b601f01601f19169190910160a00195945050505050565b9283526020830191909152604082015260600190565b600082198211156146f9576146f96147b2565b500190565b60008261471957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614738576147386147b2565b500290565b60008282101561474f5761474f6147b2565b500390565b60005b8381101561476f578181015183820152602001614757565b83811115610b2b5750506000910152565b60008161478f5761478f6147b2565b506000190190565b60006000198214156147ab576147ab6147b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146147f357600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a26469706673582212201b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d564736f6c63430008010033000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000008b44a687224496276811555efa3f2d0acd667a72

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

000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000008b44a687224496276811555efa3f2d0acd667a72

-----Decoded View---------------
Arg [0] : _factory (address): 0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [1] : _wNATIVE (address): 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : _mpc (address): 0x8b44a687224496276811555efa3f2d0acd667a72

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000008b44a687224496276811555efa3f2d0acd667a72


Deployed ByteCode Sourcemap

8978:17352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9520:10;-1:-1:-1;;;;;9534:7:0;9520:21;;9513:29;;-1:-1:-1;;;9513:29:0;;;;;;;;;8978:17352;;;;;14989:448;;;;;;;;;;-1:-1:-1;14989:448:0;;;;;:::i;:::-;;:::i;25338:246::-;;;;;;;;;;-1:-1:-1;25338:246:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16992:416;;;;;;;;;;-1:-1:-1;16992:416:0;;;;;:::i;:::-;;:::i;13118:498::-;;;;;;;;;;-1:-1:-1;13118:498:0;;;;;:::i;:::-;;:::i;26090:237::-;;;;;;;;;;-1:-1:-1;26090:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11877:157::-;;;;;;;;;;-1:-1:-1;11877:157:0;;;;;:::i;:::-;;:::i;15718:319::-;;;;;;;;;;-1:-1:-1;15718:319:0;;;;;:::i;:::-;;:::i;20231:648::-;;;;;;;;;;-1:-1:-1;20231:648:0;;;;;:::i;:::-;;:::i;14619:245::-;;;;;;;;;;-1:-1:-1;14619:245:0;;;;;:::i;:::-;;:::i;11314:228::-;;;;;;;;;;-1:-1:-1;11314:228:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22204:1075::-;;;;;;;;;;-1:-1:-1;22204:1075:0;;;;;:::i;:::-;;:::i;24219:886::-;;;;;;;;;;-1:-1:-1;24219:886:0;;;;;:::i;:::-;;:::i;10949:357::-;;;;;;;;;;-1:-1:-1;10949:357:0;;;;;:::i;:::-;;:::i;20980:416::-;;;;;;;;;;-1:-1:-1;20980:416:0;;;;;:::i;:::-;;:::i;21497:606::-;;;;;;;;;;-1:-1:-1;21497:606:0;;;;;:::i;:::-;;:::i;14333:173::-;;;;;;;;;;-1:-1:-1;14333:173:0;;;;;:::i;:::-;;:::i;25592:245::-;;;;;;;;;;-1:-1:-1;25592:245:0;;;;;:::i;:::-;;:::i;15487:223::-;;;;;;;;;;-1:-1:-1;15487:223:0;;;;;:::i;:::-;;:::i;12504:606::-;;;;;;;;;;-1:-1:-1;12504:606:0;;;;;:::i;:::-;;:::i;9090:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10852:89::-;;;;;;;;;;;;;:::i;18216:1075::-;;;;;;;;;;-1:-1:-1;18216:1075:0;;;;;:::i;:::-;;:::i;19392:694::-;;;;;;;;;;-1:-1:-1;19392:694:0;;;;;:::i;:::-;;:::i;25149:181::-;;;;;;;;;;-1:-1:-1;25149:181:0;;;;;:::i;:::-;;:::i;9051:32::-;;;;;;;;;;;;;:::i;23380:694::-;;;;;;;;;;-1:-1:-1;23380:694:0;;;;;:::i;:::-;;:::i;25845:237::-;;;;;;;;;;-1:-1:-1;25845:237:0;;;;;:::i;:::-;;:::i;17509:606::-;;;;;;;;;;-1:-1:-1;17509:606:0;;;;;:::i;:::-;;:::i;13624:286::-;;;;;;;;;;-1:-1:-1;13624:286:0;;;;;:::i;:::-;;:::i;12159:337::-;;;;;;;;;;-1:-1:-1;12159:337:0;;;;;:::i;:::-;;:::i;10670:174::-;;;;;;;;;;;;;:::i;14989:448::-;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;;;;;;;;;15111:47:::1;15122:3;15127:5;15134:2;15138:6;15146:11;15111:10;:47::i;:::-;15169:24;15211:5;15169:48;;15228:19;15250:9;-1:-1:-1::0;;;;;15250:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15228:44:::0;-1:-1:-1;;;;;;15287:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;15316:36:0::1;::::0;-1:-1:-1;;;15316:36:0;;15356:6;;-1:-1:-1;;;;;15316:29:0;::::1;::::0;::::1;::::0;:36:::1;::::0;15346:5;;15316:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;15287:75;15283:147;;;15379:39;::::0;-1:-1:-1;;;15379:39:0;;-1:-1:-1;;;;;15379:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;15403:2;;15407:6;;15403:2;;15379:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15283:147;10653:1;;14989:448:::0;;;;;:::o;25338:246::-;25473:14;25512:64;25544:8;25554:9;25565:10;25512:31;:64::i;:::-;25505:71;25338:246;-1:-1:-1;;;;25338:246:0:o;16992:416::-;17219:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;17255:4:::1;;17260:1;17255:7;;;;;-1:-1:-1::0;;;17255:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17240:28:0::1;;17269:10;17281:8;17240:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;17306:94:0;::::1;17343:10;17306:94;17337:4:::0;;17359:8;17369:12;17383:5:::1;:3;:5::i;:::-;17390:9;17306:94;;;;;;;;;;;:::i;:::-;;;;;;;;16992:416:::0;;;;;;;;:::o;13118:498::-;13412:5;-1:-1:-1;;;;;13397:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13390:61:0;;13452:4;13458:5;13465:6;13473:8;13483:1;13486;13489;13390:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13502:48:0;;-1:-1:-1;;;13502:48:0;;-1:-1:-1;;;;;13502:34:0;;;;;:48;;13537:6;;13545:4;;13502:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13561:47;13573:4;13579:5;13586:2;13590:6;13598:9;13561:11;:47::i;:::-;13118:498;;;;;;;;;:::o;26090:237::-;26216:21;26262:57;26294:7;26303:9;26314:4;26262:31;:57::i;:::-;26255:64;;26090:237;;;;;:::o;11877:157::-;11973:53;11985:10;11997:5;12004:2;12008:6;12016:9;11973:11;:53::i;:::-;11877:157;;;;:::o;15718:319::-;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;15902:6:::1;15897:133;15914:17:::0;;::::1;15897:133;;;15953:65;15964:3;;15968:1;15964:6;;;;;-1:-1:-1::0;;;15964:6:0::1;;;;;;;;;;;;;;;15972;;15979:1;15972:9;;;;;-1:-1:-1::0;;;15972:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15983:2;;15986:1;15983:5;;;;;-1:-1:-1::0;;;15983:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15990:7;;15998:1;15990:10;;;;;-1:-1:-1::0;;;15990:10:0::1;;;;;;;;;;;;;;;16002:12;;16015:1;16002:15;;;;;-1:-1:-1::0;;;16002:15:0::1;;;;;;;;;;;;;;;15953:10;:65::i;:::-;15933:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15897:133;;;;15718:319:::0;;;;;;;;;;:::o;20231:648::-;20508:21;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;20489:8:::1;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1::0;;;9173:64:0::1;;;;;;;:::i;:::-;20552:57:::2;20585:7;20594:8;20604:4;;20552:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20552:32:0::2;::::0;-1:-1:-1;;;20552:57:0:i:2;:::-;20542:67;;20659:12;20628:7;20653:1;20636:7;:14;:18;;;;:::i;:::-;20628:27;;;;;;-1:-1:-1::0;;;20628:27:0::2;;;;;;;;;;;;;;;:43;;20620:101;;;;-1:-1:-1::0;;;20620:101:0::2;;;;;;;:::i;:::-;20732:104;20743:3;20748:4;;20753:1;20748:7;;;;;-1:-1:-1::0;;;20748:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20757:53;20784:7;20793:4;;20798:1;20793:7;;;;;-1:-1:-1::0;;;20793:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20802:4;;20807:1;20802:7;;;;;-1:-1:-1::0;;;20802:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20757:26;:53::i;:::-;20812:7;20820:1;20812:10;;;;;;-1:-1:-1::0;;;20812:10:0::2;;;;;;;;;;;;;;;20824:11;20732:10;:104::i;:::-;20847:24;20853:7;20862:4;;20847:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20868:2:0;;-1:-1:-1;20847:5:0::2;::::0;-1:-1:-1;;20847:24:0:i:2;:::-;10653:1:::1;20231:648:::0;;;;;;;;;;:::o;14619:245::-;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;14747:47:::1;14758:3;14763:5;14770:2;14774:6;14782:11;14747:10;:47::i;:::-;14805:51;::::0;-1:-1:-1;;;14805:51:0;;-1:-1:-1;;;;;14805:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;14841:2;;14845:6;;14841:2;;14805:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14619:245:::0;;;;;:::o;11314:228::-;11392:4;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11417:22:0;::::1;11409:64;;;;-1:-1:-1::0;;;11409:64:0::1;;;;;;;:::i;:::-;11491:43;::::0;-1:-1:-1;;;11491:43:0;;-1:-1:-1;;;;;11491:33:0;::::1;::::0;::::1;::::0;:43:::1;::::0;11525:8;;11491:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22204:1075::-:0;22532:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;22553:19:::1;22590:4;;22595:1;22590:7;;;;;-1:-1:-1::0;;;22590:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22575:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22553:58;;22629:11;-1:-1:-1::0;;;;;22622:26:0::1;;22649:4;22663;22670:8;22680;22690:1;22693;22696;22622:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22709:69;22741:11;22754:4;22760;;22765:1;22760:7;;;;;-1:-1:-1::0;;;22760:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22769:8;22709:31;:69::i;:::-;22804:4;;22809:1;22804:7;;;;;-1:-1:-1::0;;;22804:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22789:36:0::1;;22826:8;22836:4;22789:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22867:4;;22872:1;22867:7;;;;;-1:-1:-1::0;;;22867:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22852:28:0::1;;22881:4;22887:8;22852:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22918:22;22943:4;;22918:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:13;22974:4;22958:20;;22989:11;23003:2;22989:16;;23016:14;23033:8;23016:25;;23052:18;23073:12;23052:33;;23096:9;23108:5;:3;:5::i;:::-;23096:17;;23124:15;23142:9;23124:27;;23212:3;-1:-1:-1::0;;;;;23167:93:0::1;23205:5;-1:-1:-1::0;;;;;23167:93:0::1;;23198:5;23217:9;23228:13;23243:4;23249:10;23167:93;;;;;;;;;;:::i;:::-;;;;;;;;9248:1;;;;;;;;22204:1075:::0;;;;;;;;;;;;:::o;24219:886::-;24496:21;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;24477:8:::1;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1::0;;;9173:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24563:7:0::2;24538:32;:4:::0;;24543:15:::2;24557:1;24538:4:::0;24543:15:::2;:::i;:::-;24538:21;;;;;-1:-1:-1::0;;;24538:21:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24538:32:0::2;;24530:74;;;;-1:-1:-1::0;;;24530:74:0::2;;;;;;;:::i;:::-;24625:57;24658:7;24667:8;24677:4;;24625:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24625:32:0::2;::::0;-1:-1:-1;;;24625:57:0:i:2;:::-;24615:67;;24732:12;24701:7;24726:1;24709:7;:14;:18;;;;:::i;:::-;24701:27;;;;;;-1:-1:-1::0;;;24701:27:0::2;;;;;;;;;;;;;;;:43;;24693:99;;;;-1:-1:-1::0;;;24693:99:0::2;;;;;;;:::i;:::-;24803:105;24814:3;24819:4;;24824:1;24819:7;;;;;-1:-1:-1::0;;;24819:7:0::2;;;;;;;;24803:105;24919:35;24925:7;24934:4;;24919:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24948:4:0::2;::::0;-1:-1:-1;24919:5:0::2;::::0;-1:-1:-1;;24919:35:0:i:2;:::-;24974:7;-1:-1:-1::0;;;;;24965:26:0::2;;24992:7;25017:1;25000:7;:14;:18;;;;:::i;:::-;24992:27;;;;;;-1:-1:-1::0;;;24992:27:0::2;;;;;;;;;;;;;;;24965:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25031:66;25065:2;25069:7;25094:1;25077:7;:14;:18;;;;:::i;:::-;25069:27;;;;;;-1:-1:-1::0;;;25069:27:0::2;;;;;;;;;;;;;;;25031:33;:66::i;10949:357::-:0;11008:4;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11033:20:0;::::1;11025:62;;;;-1:-1:-1::0;;;11025:62:0::1;;;;;;;:::i;:::-;11108:5;:3;:5::i;:::-;11098:7;:15:::0;;-1:-1:-1;;;;;;11098:15:0;;::::1;-1:-1:-1::0;;;;;11098:15:0;;::::1;;::::0;;;-1:-1:-1;11124:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;11174:27:::1;:15;11192:9;11174:27;:::i;:::-;11151:20;:50:::0;;;11239:7:::1;::::0;::::1;11230::::0;-1:-1:-1;;;;;11239:7:0;;::::1;::::0;11230::::1;11217:59;11270:5;:3;:5::i;:::-;11217:59;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;11294:4:0::1;10653:1;10949:357:::0;;;:::o;20980:416::-;21207:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;21243:4:::1;;21248:1;21243:7;;;;;-1:-1:-1::0;;;21243:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21228:28:0::1;;21257:10;21269:8;21228:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;21294:94:0;::::1;21331:10;21294:94;21325:4:::0;;21347:8;21357:12;21371:5:::1;:3;:5::i;21497:606::-:0;21734:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;21755:100:::1;21802:4;;21807:1;21802:7;;;;;-1:-1:-1::0;;;21802:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21787:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21825:10;21837:4;;21842:1;21837:7;;;;;-1:-1:-1::0;;;21837:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21846:8;21755:31;:100::i;:::-;21881:4;;21886:1;21881:7;;;;;-1:-1:-1::0;;;21881:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21866:36:0::1;;21903:8;21913:10;21866:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21950:4;;21955:1;21950:7;;;;;-1:-1:-1::0;;;21950:7:0::1;;;;;;;;14333:173:::0;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;14451:47:::1;14462:3;14467:5;14474:2;14478:6;14486:11;14451:10;:47::i;:::-;14333:173:::0;;;;;:::o;25592:245::-;25727:13;25765:64;25796:9;25807;25818:10;25765:30;:64::i;15487:223::-;10606:5;:3;:5::i;:::-;-1:-1:-1;;;;;10592:19:0;:10;-1:-1:-1;;;;;10592:19:0;;10584:58;;;;-1:-1:-1;;;10584:58:0;;;;;;;:::i;:::-;15565:12:::1;15580:5;:3;:5::i;:::-;15596:40;::::0;-1:-1:-1;;;15596:40:0;;15565:20;;-1:-1:-1;;;;;;15596:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;15565:20;;15629:6;;15596:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;15647:55:0::1;::::0;-1:-1:-1;;;15647:55:0;;-1:-1:-1;;;;;15647:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;15683:4;;15689:6;;15683:4;;15647:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12504:606::-:0;12768:19;12805:5;-1:-1:-1;;;;;12790:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12835:74;;-1:-1:-1;;;12835:74:0;;12768:56;;-1:-1:-1;;;;;;12835:26:0;;;;;:74;;12862:4;;12876;;12883:6;;12891:8;;12901:1;;12904;;12907;;12835:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12920:65;12952:11;12965:4;12971:5;12978:6;12920:31;:65::i;:::-;12996:48;;-1:-1:-1;;;12996:48:0;;-1:-1:-1;;;;;12996:34:0;;;;;:48;;13031:6;;13039:4;;12996:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13055:47;13067:4;13073:5;13080:2;13084:6;13092:9;13055:11;:47::i;:::-;12504:606;;;;;;;;;;:::o;9090:32::-;;;:::o;10852:89::-;10924:9;;10917:17::o;18216:1075::-;18544:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;18565:19:::1;18602:4;;18607:1;18602:7;;;;;-1:-1:-1::0;;;18602:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18587:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18565:58;;18641:11;-1:-1:-1::0;;;;;18634:26:0::1;;18661:4;18675;18682:8;18692;18702:1;18705;18708;18634:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18721:69;18753:11;18766:4;18772;;18777:1;18772:7;;;;;-1:-1:-1::0;;;18772:7:0::1;;;;;;;;18721:69;18816:4;;18821:1;18816:7;;;;;-1:-1:-1::0;;;18816:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18801:36:0::1;;18838:8;18848:4;18801:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18879:4;;18884:1;18879:7;;;;;-1:-1:-1::0;;;18879:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18864:28:0::1;;18893:4;18899:8;18864:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18930:22;18955:4;;18930:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18970:13;18986:4;18970:20;;19001:11;19015:2;19001:16;;19028:14;19045:8;19028:25;;19064:18;19085:12;19064:33;;19108:9;19120:5;:3;:5::i;:::-;19108:17;;19136:15;19154:9;19136:27;;19224:3;-1:-1:-1::0;;;;;19179:93:0::1;19217:5;-1:-1:-1::0;;;;;19179:93:0::1;;19210:5;19229:9;19240:13;19255:4;19261:10;19179:93;;;;;;;;;;:::i;19392:694::-:0;19728:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;19771:4:::1;;19776:1;19771:7;;;;;-1:-1:-1::0;;;19771:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19756:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19749:63:0::1;;19813:4;19819;;19824:1;19819:7;;;;;-1:-1:-1::0;;;19819:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19828:8;19838;19848:1;19851;19854;19749:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19882:4;;19887:1;19882:7;;;;;-1:-1:-1::0;;;19882:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19867:36:0::1;;19904:8;19914:4;19867:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19945:4;;19950:1;19945:7;;;;;-1:-1:-1::0;;;19945:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19930:28:0::1;;19959:4;19965:8;19930:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20033:2;-1:-1:-1::0;;;;;19990:88:0::1;20027:4;-1:-1:-1::0;;;;;19990:88:0::1;;20021:4;;20037:8;20047:12;20061:5;:3;:5::i;:::-;20068:9;19990:88;;;;;;;;;;;:::i;:::-;;;;;;;;19392:694:::0;;;;;;;;;;;;:::o;25149:181::-;25237:12;25269:53;25294:7;25303:8;25313;25269:24;:53::i;9051:32::-;;;:::o;23380:694::-;23716:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;23759:4:::1;;23764:1;23759:7;;;;;-1:-1:-1::0;;;23759:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23744:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23737:63:0::1;;23801:4;23807;;23812:1;23807:7;;;;;-1:-1:-1::0;;;23807:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23816:8;23826;23836:1;23839;23842;23737:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23870:4;;23875:1;23870:7;;;;;-1:-1:-1::0;;;23870:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23855:36:0::1;;23892:8;23902:4;23855:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23933:4;;23938:1;23933:7;;;;;-1:-1:-1::0;;;23933:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23918:28:0::1;;23947:4;23953:8;23918:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24021:2;-1:-1:-1::0;;;;;23978:88:0::1;24015:4;-1:-1:-1::0;;;;;23978:88:0::1;;24009:4;;24025:8;24035:12;24049:5;:3;:5::i;25845:237::-:0;25971:21;26017:57;26050:7;26059:8;26069:4;26017:32;:57::i;17509:606::-;17746:8;9193:15;9181:8;:27;;9173:64;;;;-1:-1:-1;;;9173:64:0;;;;;;;:::i;:::-;17767:100:::1;17814:4;;17819:1;17814:7;;;;;-1:-1:-1::0;;;17814:7:0::1;;;;;;;;17767:100;17893:4;;17898:1;17893:7;;;;;-1:-1:-1::0;;;17893:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17878:36:0::1;;17915:8;17925:10;17878:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17962:4;;17967:1;17962:7;;;;;-1:-1:-1::0;;;17962:7:0::1;;;;;;;;13624:286:::0;13772:6;13767:136;13784:17;;;13767:136;;;13823:68;13835:10;13847:6;;13854:1;13847:9;;;;;-1:-1:-1;;;13847:9:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13858:2;;13861:1;13858:5;;;;;-1:-1:-1;;;13858:5:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13865:7;;13873:1;13865:10;;;;;-1:-1:-1;;;13865:10:0;;;;;;;;;;;;;;;13877;;13888:1;13877:13;;;;;-1:-1:-1;;;13877:13:0;;;;;;;;;;;;;;;13823:11;:68::i;:::-;13803:3;;;;:::i;:::-;;;;13767:136;;12159:337;12265:94;12312:5;-1:-1:-1;;;;;12297:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12333:10;12345:5;12352:6;12265:31;:94::i;:::-;12370:54;;-1:-1:-1;;;12370:54:0;;-1:-1:-1;;;;;12370:34:0;;;;;:54;;12405:6;;12413:10;;12370:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12435:53;12447:10;12459:5;12466:2;12470:6;12478:9;12435:11;:53::i;10670:174::-;10706:7;10749:20;;10730:15;:39;10726:86;;-1:-1:-1;10793:7:0;;-1:-1:-1;;;;;10793:7:0;10786:14;;10726:86;-1:-1:-1;10829:7:0;;-1:-1:-1;;;;;10829:7:0;10670:174;;:::o;13990:229::-;14101:38;;-1:-1:-1;;;14101:38:0;;-1:-1:-1;;;;;14101:26:0;;;;;:38;;14128:2;;14132:6;;14101:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14180:2;-1:-1:-1;;;;;14155:56:0;14173:5;-1:-1:-1;;;;;14155:56:0;14168:3;14155:56;14184:6;14192:11;14205:5;:3;:5::i;:::-;14155:56;;;;;;;;:::i;:::-;;;;;;;;13990:229;;;;;:::o;3457:521::-;3550:14;3596:1;3585:8;:12;3577:70;;;;-1:-1:-1;;;3577:70:0;;;;;;;:::i;:::-;3678:1;3666:9;:13;:31;;;;;3696:1;3683:10;:14;3666:31;3658:86;;;;-1:-1:-1;;;3658:86:0;;;;;;;:::i;:::-;3755:20;3778:17;:8;3791:3;3778:12;:17::i;:::-;3755:40;-1:-1:-1;3806:14:0;3823:31;3755:40;3843:10;3823:19;:31::i;:::-;3806:48;-1:-1:-1;3865:16:0;3884:40;3908:15;3884:19;:9;3898:4;3884:13;:19::i;:::-;:23;;:40::i;:::-;3865:59;-1:-1:-1;3947:23:0;3865:59;3947:9;:23;:::i;:::-;3935:35;3457:521;-1:-1:-1;;;;;;;3457:521:0:o;11550:231::-;11661:40;;-1:-1:-1;;;11661:40:0;;-1:-1:-1;;;;;11661:26:0;;;;;:40;;11688:4;;11694:6;;11661:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11744:2;-1:-1:-1;;;;;11717:56:0;11738:4;-1:-1:-1;;;;;11717:56:0;11731:5;-1:-1:-1;;;;;11717:56:0;;11748:6;11756:5;:3;:5::i;:::-;11763:9;11717:56;;;;;;;;:::i;5251:534::-;5352:21;5409:1;5394:4;:11;:16;;5386:61;;;;-1:-1:-1;;;5386:61:0;;;;;;;:::i;:::-;5479:4;:11;5468:23;;;;;;-1:-1:-1;;;5468:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5468:23:0;;5458:33;;5532:9;5502:7;5527:1;5510:7;:14;:18;;;;:::i;:::-;5502:27;;;;;;-1:-1:-1;;;5502:27:0;;;;;;;;;;;;;;:39;;;;;5557:6;5580:1;5566:4;:11;:15;;;;:::i;:::-;5557:24;;5552:226;5583:5;;5552:226;;5611:14;;5646:42;5658:7;5667:4;5672:5;5676:1;5672;:5;:::i;:::-;5667:11;;;;;;-1:-1:-1;;;5667:11:0;;;;;;;;;;;;;;;5680:4;5685:1;5680:7;;;;;;-1:-1:-1;;;5680:7:0;;;;;;;;;;;;;;;5646:11;:42::i;:::-;5610:78;;;;5720:46;5732:7;5740:1;5732:10;;;;;;-1:-1:-1;;;5732:10:0;;;;;;;;;;;;;;;5744:9;5755:10;5720:11;:46::i;:::-;5703:7;5711:5;5715:1;5711;:5;:::i;:::-;5703:14;;;;;;-1:-1:-1;;;5703:14:0;;;;;;;;;;;;;;:63;;;;;5552:226;;5590:3;;;;;:::i;:::-;;;;5552:226;;;;5251:534;;;;;:::o;4657:513::-;4758:21;4815:1;4800:4;:11;:16;;4792:61;;;;-1:-1:-1;;;4792:61:0;;;;;;;:::i;:::-;4885:4;:11;4874:23;;;;;;-1:-1:-1;;;4874:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4874:23:0;;4864:33;;4921:8;4908:7;4916:1;4908:10;;;;;;-1:-1:-1;;;4908:10:0;;;;;;;;;;;;;;:21;;;;;4945:6;4940:223;4971:1;4957:4;:11;:15;;;;:::i;:::-;4953:1;:19;4940:223;;;4995:14;5011:15;5030:42;5042:7;5051:4;5056:1;5051:7;;;;;;-1:-1:-1;;;5051:7:0;;;;;;;;;;;;;;;5060:4;5065:1;5069;5065:5;;;;:::i;:::-;5060:11;;;;;;-1:-1:-1;;;5060:11:0;;;;;;;;5030:42;4994:78;;;;5104:47;5117:7;5125:1;5117:10;;;;;;-1:-1:-1;;;5117:10:0;;;;;;;;;;;;;;;5129:9;5140:10;5104:12;:47::i;:::-;5087:7;5095:5;:1;5099;5095:5;:::i;:::-;5087:14;;;;;;-1:-1:-1;;;5087:14:0;;;;;;;;;;;;;;:64;;;;;4940:223;;4974:3;;;;;:::i;:::-;;;;4940:223;;1956:490;2045:12;2071:14;2087;2105:26;2116:6;2124;2105:10;:26::i;:::-;2070:61;;;;2244:7;2297:6;2305;2280:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2270:43;;;;;;2183:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2183:251:0;;;;;;;;;2173:262;;2183:251;2173:262;;;;;1956:490;-1:-1:-1;;;;;;1956:490:0:o;16148:743::-;16255:6;16250:634;16281:1;16267:4;:11;:15;;;;:::i;:::-;16263:1;:19;16250:634;;;16305:13;16320:14;16339:4;16344:1;16339:7;;;;;;-1:-1:-1;;;16339:7:0;;;;;;;;;;;;;;;16348:4;16353:1;16357;16353:5;;;;:::i;:::-;16348:11;;;;;;-1:-1:-1;;;16348:11:0;;;;;;;;;;;;;;;16304:56;;;;16376:14;16395:44;16425:5;16432:6;16395:29;:44::i;:::-;-1:-1:-1;16375:64:0;-1:-1:-1;16454:14:0;16471:7;16479:5;:1;16483;16479:5;:::i;:::-;16471:14;;;;;;-1:-1:-1;;;16471:14:0;;;;;;;;;;;;;;;16454:31;;16501:15;16518;16546:6;-1:-1:-1;;;;;16537:15:0;:5;-1:-1:-1;;;;;16537:15:0;;:61;;16579:9;16595:1;16537:61;;;16561:1;16565:9;16537:61;16500:98;;;;16613:10;16644:1;16630:4;:11;:15;;;;:::i;:::-;16626:1;:19;:84;;16707:3;16626:84;;;16648:56;16675:7;16684:6;16692:4;16697:5;:1;16701;16697:5;:::i;:::-;16692:11;;;;;;-1:-1:-1;;;16692:11:0;;;;;;;;;;;;;;;16648:26;:56::i;:::-;16613:97;;16742:50;16769:7;16778:5;16785:6;16742:26;:50::i;:::-;-1:-1:-1;;;;;16725:73:0;;16817:10;16829;16841:2;16855:1;16845:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16845:12:0;;16725:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16250:634;;;;;;;16284:3;;;;;:::i;:::-;;;;16250:634;;6672:402;6851:12;6865:17;6886:5;-1:-1:-1;;;;;6886:10:0;6920;6932:4;6938:2;6942:5;6897:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6897:51:0;;;;;;;;;;;6886:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6850:99;;;;6968:7;:57;;;;-1:-1:-1;6980:11:0;;:16;;:44;;;7011:4;7000:24;;;;;;;;;;;;:::i;:::-;6960:106;;;;-1:-1:-1;;;6960:106:0;;;;;;;:::i;7082:201::-;7193:12;;;7155;7193;;;;;;;;;-1:-1:-1;;;;;7172:7:0;;;7186:5;;7172:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:52;;;7225:7;7217:58;;;;-1:-1:-1;;;7217:58:0;;;;;;;:::i;:::-;7082:201;;;:::o;4099:476::-;4192:13;4238:1;4226:9;:13;4218:72;;;;-1:-1:-1;;;4218:72:0;;;;;;;:::i;:::-;4321:1;4309:9;:13;:31;;;;;4339:1;4326:10;:14;4309:31;4301:86;;;;-1:-1:-1;;;4301:86:0;;;;;;;:::i;:::-;4398:14;4415:34;4444:4;4415:24;:9;4429;4415:13;:24::i;:::-;:28;;:34::i;:::-;4398:51;-1:-1:-1;4460:16:0;4479:34;4509:3;4479:25;:10;4494:9;4479:14;:25::i;:34::-;4460:53;-1:-1:-1;4535:32:0;4565:1;4536:23;4460:53;4536:9;:23;:::i;4535:32::-;4524:43;4099:476;-1:-1:-1;;;;;;4099:476:0:o;3010:325::-;3092:12;3135:1;3125:7;:11;3117:63;;;;-1:-1:-1;;;3117:63:0;;;;;;;:::i;:::-;3210:1;3199:8;:12;:28;;;;;3226:1;3215:8;:12;3199:28;3191:83;;;;-1:-1:-1;;;3191:83:0;;;;;;;:::i;:::-;3319:8;3295:21;:7;3307:8;3295:11;:21::i;:::-;:32;;;;:::i;1186:142::-;1238:6;1265;;;:30;;-1:-1:-1;1294:1:0;1289;1280:5;1289:1;1294;1280:5;:::i;:::-;1276:9;-1:-1:-1;1275:15:0;;1276:9;1275:15;:::i;:::-;:20;1265:30;1257:63;;;;-1:-1:-1;;;1257:63:0;;;;;;;:::i;913:128::-;965:6;1007:1;997:5;1001:1;1007;997:5;:::i;:::-;993:9;;;992:16;;984:49;;;;-1:-1:-1;;;984:49:0;;;;;;;:::i;2504:393::-;2597:13;2612;2639:14;2658:26;2669:6;2677;2658:10;:26::i;:::-;2638:46;;;2696:13;2711;2746:32;2754:7;2763:6;2771;2746:7;:32::i;:::-;-1:-1:-1;;;;;2729:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2695:98;-1:-1:-1;;;;;2695:98:0;;;-1:-1:-1;;;;;2695:98:0;;;2837:6;-1:-1:-1;;;;;2827:16:0;:6;-1:-1:-1;;;;;2827:16:0;;:62;;2870:8;2880;2827:62;;;2847:8;2857;2827:62;2804:85;;;;-1:-1:-1;2504:393:0;-1:-1:-1;;;;;;;2504:393:0:o;1511:353::-;1586:14;1602;1647:6;-1:-1:-1;;;;;1637:16:0;:6;-1:-1:-1;;;;;1637:16:0;;;1629:68;;;;-1:-1:-1;;;1629:68:0;;;;;;;:::i;:::-;1736:6;-1:-1:-1;;;;;1727:15:0;:6;-1:-1:-1;;;;;1727:15:0;;:53;;1765:6;1773;1727:53;;;1746:6;1754;1727:53;1708:72;;-1:-1:-1;1708:72:0;-1:-1:-1;;;;;;1799:20:0;;1791:65;;;;-1:-1:-1;;;1791:65:0;;;;;;;:::i;:::-;1511:353;;;;;:::o;1049:129::-;1101:6;1143:1;1133:5;1137:1;1143;1133:5;:::i;:::-;1129:9;;;1128:16;;1120:50;;;;-1:-1:-1;;;1120:50:0;;;;;;;:::i;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:400::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;313:6;305;298:22;257:2;-1:-1:-1;341:20:1;;384:18;373:30;;370:2;;;423:8;413;406:26;370:2;467:4;459:6;455:17;443:29;;530:3;523:4;515;507:6;503:17;495:6;491:30;487:41;484:50;481:2;;;547:1;544;537:12;562:190;643:13;;-1:-1:-1;;;;;685:42:1;;675:53;;665:2;;742:1;739;732:12;757:158;825:20;;885:4;874:16;;864:27;;854:2;;905:1;902;895:12;920:259;;1032:2;1020:9;1011:7;1007:23;1003:32;1000:2;;;1053:6;1045;1038:22;1000:2;1097:9;1084:23;1116:33;1143:5;1116:33;:::i;:::-;1168:5;990:189;-1:-1:-1;;;990:189:1:o;1184:263::-;;1307:2;1295:9;1286:7;1282:23;1278:32;1275:2;;;1328:6;1320;1313:22;1275:2;1365:9;1359:16;1384:33;1411:5;1384:33;:::i;1452:402::-;;;1581:2;1569:9;1560:7;1556:23;1552:32;1549:2;;;1602:6;1594;1587:22;1549:2;1646:9;1633:23;1665:33;1692:5;1665:33;:::i;:::-;1717:5;-1:-1:-1;1774:2:1;1759:18;;1746:32;1787:35;1746:32;1787:35;:::i;:::-;1841:7;1831:17;;;1539:315;;;;;:::o;1859:963::-;;;;;;;;;;2105:3;2093:9;2084:7;2080:23;2076:33;2073:2;;;2127:6;2119;2112:22;2073:2;2171:9;2158:23;2190:33;2217:5;2190:33;:::i;:::-;2242:5;-1:-1:-1;2299:2:1;2284:18;;2271:32;2312:35;2271:32;2312:35;:::i;:::-;2366:7;-1:-1:-1;2425:2:1;2410:18;;2397:32;2438:35;2397:32;2438:35;:::i;:::-;2492:7;-1:-1:-1;2546:2:1;2531:18;;2518:32;;-1:-1:-1;2597:3:1;2582:19;;2569:33;;-1:-1:-1;2621:39:1;2655:3;2640:19;;2621:39;:::i;:::-;2611:49;;2707:3;2696:9;2692:19;2679:33;2669:43;;2759:3;2748:9;2744:19;2731:33;2721:43;;2811:3;2800:9;2796:19;2783:33;2773:43;;2063:759;;;;;;;;;;;:::o;2827:539::-;;;;;2990:3;2978:9;2969:7;2965:23;2961:33;2958:2;;;3012:6;3004;2997:22;2958:2;3056:9;3043:23;3075:33;3102:5;3075:33;:::i;:::-;3127:5;-1:-1:-1;3184:2:1;3169:18;;3156:32;3197:35;3156:32;3197:35;:::i;:::-;2948:418;;3251:7;;-1:-1:-1;;;;3305:2:1;3290:18;;3277:32;;3356:2;3341:18;3328:32;;2948:418::o;3371:327::-;;;3500:2;3488:9;3479:7;3475:23;3471:32;3468:2;;;3521:6;3513;3506:22;3468:2;3565:9;3552:23;3584:33;3611:5;3584:33;:::i;:::-;3636:5;3688:2;3673:18;;;;3660:32;;-1:-1:-1;;;3458:240:1:o;3703:1232::-;;;;;;;;;;;;4002:3;3990:9;3981:7;3977:23;3973:33;3970:2;;;4024:6;4016;4009:22;3970:2;4068:9;4055:23;4087:33;4114:5;4087:33;:::i;:::-;4139:5;-1:-1:-1;4191:2:1;4176:18;;4163:32;;-1:-1:-1;4242:2:1;4227:18;;4214:32;;-1:-1:-1;4297:2:1;4282:18;;4269:32;4324:18;4313:30;;4310:2;;;4361:6;4353;4346:22;4310:2;4405:76;4473:7;4464:6;4453:9;4449:22;4405:76;:::i;:::-;4500:8;;-1:-1:-1;4379:102:1;-1:-1:-1;;4587:3:1;4572:19;;4559:33;4601:35;4559:33;4601:35;:::i;:::-;4655:7;-1:-1:-1;4709:3:1;4694:19;;4681:33;;-1:-1:-1;4733:39:1;4767:3;4752:19;;4733:39;:::i;:::-;4723:49;;4819:3;4808:9;4804:19;4791:33;4781:43;;4871:3;4860:9;4856:19;4843:33;4833:43;;4924:3;4913:9;4909:19;4896:33;4885:44;;3960:975;;;;;;;;;;;;;;:::o;4940:1478::-;;;;;;;;;5243:3;5231:9;5222:7;5218:23;5214:33;5211:2;;;5265:6;5257;5250:22;5211:2;5310:9;5297:23;5339:18;5380:2;5372:6;5369:14;5366:2;;;5401:6;5393;5386:22;5366:2;5445:76;5513:7;5504:6;5493:9;5489:22;5445:76;:::i;:::-;5540:8;;-1:-1:-1;5419:102:1;-1:-1:-1;5628:2:1;5613:18;;5600:32;;-1:-1:-1;5644:16:1;;;5641:2;;;5678:6;5670;5663:22;5641:2;5722:78;5792:7;5781:8;5770:9;5766:24;5722:78;:::i;:::-;5819:8;;-1:-1:-1;5696:104:1;-1:-1:-1;5907:2:1;5892:18;;5879:32;;-1:-1:-1;5923:16:1;;;5920:2;;;5957:6;5949;5942:22;5920:2;6001:78;6071:7;6060:8;6049:9;6045:24;6001:78;:::i;:::-;6098:8;;-1:-1:-1;5975:104:1;-1:-1:-1;6186:2:1;6171:18;;6158:32;;-1:-1:-1;6202:16:1;;;6199:2;;;6236:6;6228;6221:22;6199:2;;6280:78;6350:7;6339:8;6328:9;6324:24;6280:78;:::i;:::-;5201:1217;;;;-1:-1:-1;5201:1217:1;;-1:-1:-1;5201:1217:1;;;;;;6377:8;-1:-1:-1;;;5201:1217:1:o;6423:1810::-;;;;;;;;;;;6778:3;6766:9;6757:7;6753:23;6749:33;6746:2;;;6800:6;6792;6785:22;6746:2;6845:9;6832:23;6874:18;6915:2;6907:6;6904:14;6901:2;;;6936:6;6928;6921:22;6901:2;6980:76;7048:7;7039:6;7028:9;7024:22;6980:76;:::i;:::-;7075:8;;-1:-1:-1;6954:102:1;-1:-1:-1;7163:2:1;7148:18;;7135:32;;-1:-1:-1;7179:16:1;;;7176:2;;;7213:6;7205;7198:22;7176:2;7257:78;7327:7;7316:8;7305:9;7301:24;7257:78;:::i;:::-;7354:8;;-1:-1:-1;7231:104:1;-1:-1:-1;7442:2:1;7427:18;;7414:32;;-1:-1:-1;7458:16:1;;;7455:2;;;7492:6;7484;7477:22;7455:2;7536:78;7606:7;7595:8;7584:9;7580:24;7536:78;:::i;:::-;7633:8;;-1:-1:-1;7510:104:1;-1:-1:-1;7721:2:1;7706:18;;7693:32;;-1:-1:-1;7737:16:1;;;7734:2;;;7771:6;7763;7756:22;7734:2;7815:78;7885:7;7874:8;7863:9;7859:24;7815:78;:::i;:::-;7912:8;;-1:-1:-1;7789:104:1;-1:-1:-1;8000:3:1;7985:19;;7972:33;;-1:-1:-1;8017:16:1;;;8014:2;;;8051:6;8043;8036:22;8014:2;;8095:78;8165:7;8154:8;8143:9;8139:24;8095:78;:::i;:::-;8069:104;;8192:8;8182:18;;;8219:8;8209:18;;;6736:1497;;;;;;;;;;;;;:::o;8238:297::-;;8358:2;8346:9;8337:7;8333:23;8329:32;8326:2;;;8379:6;8371;8364:22;8326:2;8416:9;8410:16;8469:5;8462:13;8455:21;8448:5;8445:32;8435:2;;8496:6;8488;8481:22;8540:608;;;;;;8720:3;8708:9;8699:7;8695:23;8691:33;8688:2;;;8742:6;8734;8727:22;8688:2;8783:9;8770:23;8760:33;;8843:2;8832:9;8828:18;8815:32;8856:33;8883:5;8856:33;:::i;:::-;8908:5;-1:-1:-1;8965:2:1;8950:18;;8937:32;8978:35;8937:32;8978:35;:::i;:::-;8678:470;;;;-1:-1:-1;9032:7:1;;9086:2;9071:18;;9058:32;;-1:-1:-1;9137:3:1;9122:19;9109:33;;8678:470;-1:-1:-1;;8678:470:1:o;9153:944::-;;;;;;;;;9402:3;9390:9;9381:7;9377:23;9373:33;9370:2;;;9424:6;9416;9409:22;9370:2;9465:9;9452:23;9442:33;;9522:2;9511:9;9507:18;9494:32;9484:42;;9573:2;9562:9;9558:18;9545:32;9535:42;;9628:2;9617:9;9613:18;9600:32;9655:18;9647:6;9644:30;9641:2;;;9692:6;9684;9677:22;9641:2;9736:76;9804:7;9795:6;9784:9;9780:22;9736:76;:::i;:::-;9831:8;;-1:-1:-1;9710:102:1;-1:-1:-1;;9916:3:1;9901:19;;9888:33;9930;9888;9930;:::i;:::-;9360:737;;;;-1:-1:-1;9360:737:1;;;;;;9982:5;;-1:-1:-1;;;10034:3:1;10019:19;;10006:33;;10086:3;10071:19;10058:33;;9360:737::o;10102:474::-;;;;10258:2;10246:9;10237:7;10233:23;10229:32;10226:2;;;10279:6;10271;10264:22;10226:2;10307:42;10339:9;10307:42;:::i;:::-;10297:52;;10368:51;10415:2;10404:9;10400:18;10368:51;:::i;:::-;10358:61;;10462:2;10451:9;10447:18;10441:25;10506:10;10499:5;10495:22;10488:5;10485:33;10475:2;;10537:6;10529;10522:22;10475:2;10565:5;10555:15;;;10216:360;;;;;:::o;10581:194::-;;10704:2;10692:9;10683:7;10679:23;10675:32;10672:2;;;10725:6;10717;10710:22;10672:2;-1:-1:-1;10753:16:1;;10662:113;-1:-1:-1;10662:113:1:o;10780:1248::-;;;10934:2;10922:9;10913:7;10909:23;10905:32;10902:2;;;10955:6;10947;10940:22;10902:2;10996:9;10983:23;10973:33;;11025:2;11078;11067:9;11063:18;11050:32;11101:18;11142:2;11134:6;11131:14;11128:2;;;11163:6;11155;11148:22;11128:2;11206:6;11195:9;11191:22;11181:32;;11251:7;11244:4;11240:2;11236:13;11232:27;11222:2;;11278:6;11270;11263:22;11222:2;11319;11306:16;11341:2;11337;11334:10;11331:2;;;11347:18;;:::i;:::-;11394:2;11390;11386:11;11426:2;11420:9;11489:2;11485:7;11480:2;11476;11472:11;11468:25;11460:6;11456:38;11544:6;11532:10;11529:22;11524:2;11512:10;11509:18;11506:46;11503:2;;;11555:18;;:::i;:::-;11591:2;11584:22;11641:18;;;11675:15;;;;-1:-1:-1;11710:11:1;;;11740;;;11736:20;;11733:33;-1:-1:-1;11730:2:1;;;11784:6;11776;11769:22;11730:2;11811:6;11802:15;;11826:171;11840:2;11837:1;11834:9;11826:171;;;11897:25;11918:3;11897:25;:::i;:::-;11885:38;;11858:1;11851:9;;;;;11943:12;;;;11975;;11826:171;;;11830:3;12016:6;12006:16;;;;;;;;10892:1136;;;;;:::o;12033:875::-;;;;;;;;12265:3;12253:9;12244:7;12240:23;12236:33;12233:2;;;12287:6;12279;12272:22;12233:2;12328:9;12315:23;12305:33;;12385:2;12374:9;12370:18;12357:32;12347:42;;12440:2;12429:9;12425:18;12412:32;12467:18;12459:6;12456:30;12453:2;;;12504:6;12496;12489:22;12453:2;12548:76;12616:7;12607:6;12596:9;12592:22;12548:76;:::i;:::-;12643:8;;-1:-1:-1;12522:102:1;-1:-1:-1;;12728:2:1;12713:18;;12700:32;12741:33;12700:32;12741:33;:::i;:::-;12223:685;;;;-1:-1:-1;12223:685:1;;;;12793:5;12845:3;12830:19;;12817:33;;-1:-1:-1;12897:3:1;12882:19;;;12869:33;;12223:685;-1:-1:-1;;12223:685:1:o;12913:326::-;;;;13059:2;13047:9;13038:7;13034:23;13030:32;13027:2;;;13080:6;13072;13065:22;13027:2;-1:-1:-1;;13108:23:1;;;13178:2;13163:18;;13150:32;;-1:-1:-1;13229:2:1;13214:18;;;13201:32;;13017:222;-1:-1:-1;13017:222:1:o;13244:333::-;-1:-1:-1;;13471:2:1;13467:15;;;13463:24;;13451:37;;13522:15;;;;13518:24;13513:2;13504:12;;13497:46;13568:2;13559:12;;13391:186::o;13582:274::-;;13749:6;13743:13;13765:53;13811:6;13806:3;13799:4;13791:6;13787:17;13765:53;:::i;:::-;13834:16;;;;;13719:137;-1:-1:-1;;13719:137:1:o;13861:636::-;-1:-1:-1;;;;;;14220:26:1;;14283:2;14279:15;;;;-1:-1:-1;;14275:53:1;14271:1;14262:11;;14255:74;14354:2;14345:12;;14338:28;14396:66;14391:2;14382:12;;14375:88;14488:2;14479:12;;14210:287::o;14502:203::-;-1:-1:-1;;;;;14666:32:1;;;;14648:51;;14636:2;14621:18;;14603:102::o;14710:375::-;-1:-1:-1;;;;;14968:15:1;;;14950:34;;15020:15;;;;15015:2;15000:18;;14993:43;15067:2;15052:18;;15045:34;;;;14900:2;14885:18;;14867:218::o;15090:670::-;-1:-1:-1;;;;;15457:15:1;;;15439:34;;15509:15;;;;15504:2;15489:18;;15482:43;15556:2;15541:18;;15534:34;;;;15599:2;15584:18;;15577:34;;;;15660:4;15648:17;15642:3;15627:19;;15620:46;15419:3;15682:19;;15675:35;15741:3;15726:19;;15719:35;;;;15388:3;15373:19;;15355:405::o;15765:274::-;-1:-1:-1;;;;;15957:32:1;;;;15939:51;;16021:2;16006:18;;15999:34;15927:2;15912:18;;15894:145::o;16044:375::-;-1:-1:-1;;;;;16302:15:1;;;16284:34;;16349:2;16334:18;;16327:34;;;;16397:15;;;16392:2;16377:18;;16370:43;16234:2;16219:18;;16201:218::o;16424:1006::-;16736:3;16749:22;;;16721:19;;16806:22;;;16424:1006;16886:6;16859:3;16844:19;;16424:1006;16923:306;16937:6;16934:1;16931:13;16923:306;;;17012:6;16999:20;17032:33;17059:5;17032:33;:::i;:::-;-1:-1:-1;;;;;17090:31:1;17078:44;;17145:4;17204:15;;;;17169:12;;;;17118:1;16952:9;16923:306;;;-1:-1:-1;17280:4:1;17265:20;;17258:36;;;;-1:-1:-1;;17325:2:1;17310:18;;17303:34;;;;17368:2;17353:18;;17346:34;;;;17411:3;17396:19;;;17389:35;17246:3;16697:733;-1:-1:-1;;16697:733:1:o;17435:951::-;17737:3;17750:22;;;17821:13;;17722:19;;;17843:22;;;17435:951;;17919:4;;17896:3;17881:19;;;17946:15;;;17435:951;17992:195;18006:6;18003:1;18000:13;17992:195;;;18071:13;;-1:-1:-1;;;;;18067:39:1;18055:52;;18127:12;;;;18162:15;;;;18103:1;18021:9;17992:195;;;-1:-1:-1;;;18223:18:1;;;18216:34;;;;-1:-1:-1;18281:2:1;18266:18;;18259:34;;;;18324:2;18309:18;;18302:34;;;;18367:3;18352:19;;;18345:35;18204:3;17698:688;-1:-1:-1;17698:688:1:o;18391:635::-;18562:2;18614:21;;;18684:13;;18587:18;;;18706:22;;;18391:635;;18562:2;18785:15;;;;18759:2;18744:18;;;18391:635;18831:169;18845:6;18842:1;18839:13;18831:169;;;18906:13;;18894:26;;18975:15;;;;18940:12;;;;18867:1;18860:9;18831:169;;;-1:-1:-1;19017:3:1;;18542:484;-1:-1:-1;;;;;;18542:484:1:o;19031:187::-;19196:14;;19189:22;19171:41;;19159:2;19144:18;;19126:92::o;19223:406::-;19425:2;19407:21;;;19464:2;19444:18;;;19437:30;-1:-1:-1;;;;;;;;;;;19498:2:1;19483:18;;19476:62;-1:-1:-1;;;19569:2:1;19554:18;;19547:40;19619:3;19604:19;;19397:232::o;19634:345::-;19836:2;19818:21;;;19875:2;19855:18;;;19848:30;-1:-1:-1;;;19909:2:1;19894:18;;19887:51;19970:2;19955:18;;19808:171::o;19984:403::-;20186:2;20168:21;;;20225:2;20205:18;;;20198:30;20264:34;20259:2;20244:18;;20237:62;-1:-1:-1;;;20330:2:1;20315:18;;20308:37;20377:3;20362:19;;20158:229::o;20392:353::-;20594:2;20576:21;;;20633:2;20613:18;;;20606:30;20672:31;20667:2;20652:18;;20645:59;20736:2;20721:18;;20566:179::o;20750:344::-;20952:2;20934:21;;;20991:2;20971:18;;;20964:30;-1:-1:-1;;;21025:2:1;21010:18;;21003:50;21085:2;21070:18;;20924:170::o;21099:410::-;21301:2;21283:21;;;21340:2;21320:18;;;21313:30;-1:-1:-1;;;;;;;;;;;21374:2:1;21359:18;;21352:62;-1:-1:-1;;;21445:2:1;21430:18;;21423:44;21499:3;21484:19;;21273:236::o;21514:344::-;21716:2;21698:21;;;21755:2;21735:18;;;21728:30;-1:-1:-1;;;21789:2:1;21774:18;;21767:50;21849:2;21834:18;;21688:170::o;21863:409::-;22065:2;22047:21;;;22104:2;22084:18;;;22077:30;22143:34;22138:2;22123:18;;22116:62;-1:-1:-1;;;22209:2:1;22194:18;;22187:43;22262:3;22247:19;;22037:235::o;22277:402::-;22479:2;22461:21;;;22518:2;22498:18;;;22491:30;22557:34;22552:2;22537:18;;22530:62;-1:-1:-1;;;22623:2:1;22608:18;;22601:36;22669:3;22654:19;;22451:228::o;22684:350::-;22886:2;22868:21;;;22925:2;22905:18;;;22898:30;22964:28;22959:2;22944:18;;22937:56;23025:2;23010:18;;22858:176::o;23039:356::-;23241:2;23223:21;;;23260:18;;;23253:30;23319:34;23314:2;23299:18;;23292:62;23386:2;23371:18;;23213:182::o;23400:353::-;23602:2;23584:21;;;23641:2;23621:18;;;23614:30;23680:31;23675:2;23660:18;;23653:59;23744:2;23729:18;;23574:179::o;23758:407::-;23960:2;23942:21;;;23999:2;23979:18;;;23972:30;24038:34;24033:2;24018:18;;24011:62;-1:-1:-1;;;24104:2:1;24089:18;;24082:41;24155:3;24140:19;;23932:233::o;24170:403::-;24372:2;24354:21;;;24411:2;24391:18;;;24384:30;-1:-1:-1;;;;;;;;;;;24445:2:1;24430:18;;24423:62;-1:-1:-1;;;24516:2:1;24501:18;;24494:37;24563:3;24548:19;;24344:229::o;24578:348::-;24780:2;24762:21;;;24819:2;24799:18;;;24792:30;24858:26;24853:2;24838:18;;24831:54;24917:2;24902:18;;24752:174::o;24931:409::-;25133:2;25115:21;;;25172:2;25152:18;;;25145:30;-1:-1:-1;;;;;;;;;;;25206:2:1;25191:18;;25184:62;-1:-1:-1;;;25277:2:1;25262:18;;25255:43;25330:3;25315:19;;25105:235::o;25345:400::-;25547:2;25529:21;;;25586:2;25566:18;;;25559:30;25625:34;25620:2;25605:18;;25598:62;-1:-1:-1;;;25691:2:1;25676:18;;25669:34;25735:3;25720:19;;25519:226::o;25750:356::-;25952:2;25934:21;;;25971:18;;;25964:30;26030:34;26025:2;26010:18;;26003:62;26097:2;26082:18;;25924:182::o;26111:177::-;26257:25;;;26245:2;26230:18;;26212:76::o;26293:274::-;26467:25;;;-1:-1:-1;;;;;26528:32:1;26523:2;26508:18;;26501:60;26455:2;26440:18;;26422:145::o;26572:624::-;;26803:6;26792:9;26785:25;26846:6;26841:2;26830:9;26826:18;26819:34;26918:1;26914;26909:3;26905:11;26901:19;26893:6;26889:32;26884:2;26873:9;26869:18;26862:60;26958:3;26953:2;26942:9;26938:18;26931:31;26991:6;26985:13;27035:6;27029:3;27018:9;27014:19;27007:35;27051:67;27111:6;27105:3;27094:9;27090:19;27085:2;27077:6;27073:15;27051:67;:::i;:::-;27179:2;27158:15;-1:-1:-1;;27154:29:1;27139:45;;;;27186:3;27135:55;;26775:421;-1:-1:-1;;;;;26775:421:1:o;27201:319::-;27403:25;;;27459:2;27444:18;;27437:34;;;;27502:2;27487:18;;27480:34;27391:2;27376:18;;27358:162::o;27525:128::-;;27596:1;27592:6;27589:1;27586:13;27583:2;;;27602:18;;:::i;:::-;-1:-1:-1;27638:9:1;;27573:80::o;27658:217::-;;27724:1;27714:2;;-1:-1:-1;;;27749:31:1;;27803:4;27800:1;27793:15;27831:4;27756:1;27821:15;27714:2;-1:-1:-1;27860:9:1;;27704:171::o;27880:168::-;;27986:1;27982;27978:6;27974:14;27971:1;27968:21;27963:1;27956:9;27949:17;27945:45;27942:2;;;27993:18;;:::i;:::-;-1:-1:-1;28033:9:1;;27932:116::o;28053:125::-;;28121:1;28118;28115:8;28112:2;;;28126:18;;:::i;:::-;-1:-1:-1;28163:9:1;;28102:76::o;28183:258::-;28255:1;28265:113;28279:6;28276:1;28273:13;28265:113;;;28355:11;;;28349:18;28336:11;;;28329:39;28301:2;28294:10;28265:113;;;28396:6;28393:1;28390:13;28387:2;;;-1:-1:-1;;28431:1:1;28413:16;;28406:27;28236:205::o;28446:136::-;;28513:5;28503:2;;28522:18;;:::i;:::-;-1:-1:-1;;;28558:18:1;;28493:89::o;28587:135::-;;-1:-1:-1;;28647:17:1;;28644:2;;;28667:18;;:::i;:::-;-1:-1:-1;28714:1:1;28703:13;;28634:88::o;28727:127::-;28788:10;28783:3;28779:20;28776:1;28769:31;28819:4;28816:1;28809:15;28843:4;28840:1;28833:15;28859:127;28920:10;28915:3;28911:20;28908:1;28901:31;28951:4;28948:1;28941:15;28975:4;28972:1;28965:15;28991:133;-1:-1:-1;;;;;29068:31:1;;29058:42;;29048:2;;29114:1;29111;29104:12;29048:2;29038:86;:::o

Swarm Source

ipfs://1b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d5
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.