Contract 0xc931f61b1534eb21d8c11b24f3f5ab2471d4ab50 9

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x81f6f73cb158ececde35a5994d45979c86d73056a809aebd5f186e949c4ecc5fAny Swap In Auto281239902022-10-03 7:38:4113 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002759
0x4e3cd8482f37d85c1cd6051938fa2db4ca3192bcf16e945f32f216a5317118ddAny Swap Out Und...281232312022-10-03 7:33:5018 mins ago0x5f17e9d3b612262369cbf9f0fc141eaa3d577e8e IN  Multichain: Router V40 ETH0.00002129
0x7b9531ecd9c91b574675e903fc8b83ae108492a794165f5ba4bd4015eb7dda81Any Swap In Auto281210352022-10-03 7:19:4632 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002643
0x2d46a72ae92cb0b1199b467c061f3436fe9d8f8f0642f8d1ae1623f0223904f1Any Swap In Auto281188162022-10-03 7:05:4746 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002481
0x2fe946d9209d4d6e431e845ec789e590aaa4466d902d8542a8b79925ad3e6fb4Any Swap In Auto281187892022-10-03 7:05:3746 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002377
0x33b31ac98222d6fabe32f4e10e273f2e43a04b3b53bda7168e31bfffd670e765Any Swap In Auto281173332022-10-03 6:55:4156 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002329
0x0e559cf8c19c73acf38c0dcbdb7462372c47979bb48068d3e69e11a7a564c7f6Any Swap Out281162462022-10-03 6:48:211 hr 3 mins ago0x9c9a882150a306d17093f9a6cca610eb3460b301 IN  Multichain: Router V40 ETH0.00001541
0xba459caf2763f93013778fdc5f226356dd18e43020ed509b72d724bb72754363Any Swap In Auto281155122022-10-03 6:43:251 hr 8 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002457
0xe9d07378162c0a99d8412363c5071f62d74abd823459cc7216477757b641ab33Any Swap Out Und...281150932022-10-03 6:40:381 hr 11 mins ago0x8176d7b793a73626880bc43dfd9a9f97d338ca88 IN  Multichain: Router V40 ETH0.00002102
0x4419163ce9e54062d053443488aa8af0ea09f7fd2dadafd1f0701ff1377a069dAny Swap In Auto281144722022-10-03 6:36:201 hr 15 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002681
0x6254ba548b4c01e1abd04c30d029e2c3b68f493bcf51342933c5bd7ce1cdfd4eAny Swap In Auto281136152022-10-03 6:29:231 hr 22 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002329
0x7ad330245bac1fe50aa8e4b5c8f4e86028949ec2c17458d49cdf807b85409d56Any Swap Out Und...281134652022-10-03 6:28:131 hr 23 mins ago0x19d07583edae457660b2cb62392472ec63e7ce23 IN  Multichain: Router V40 ETH0.00001972
0xa1cbbfe75094851ea148ac6b907bfbce4b26c617f6f202404d38d578cce924daAny Swap Out Und...281130452022-10-03 6:24:541 hr 27 mins ago0x8592b46b16ba66ab8115e0c154f5760d1c4f1ba1 IN  Multichain: Router V40 ETH0.00002045
0x08344fa485ee1acbe64f227f9b24ea16885b930a1ae1f8b742f5175d70b8a92eAny Swap Out Und...281111192022-10-03 6:07:101 hr 44 mins ago0xf2b067c107283abc3ce06396222dce0909ba1aee IN  Multichain: Router V40 ETH0.00002025
0xe6000f11162aba4a39c9ead6bca194adff1a93c9ed3380c2d848d89d3047d9baAny Swap In Auto281080292022-10-03 5:39:552 hrs 12 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002249
0x1a5119df8a749e7e8498f5290859649863708057cb8b2b3572f33e8bcf9c8276Any Swap Out Und...281065972022-10-03 5:26:502 hrs 25 mins ago0x364d5077c4c6bce6280705fe657fc4c55fdac363 IN  Multichain: Router V40 ETH0.00002058
0x27284a55e46a80e26d027a1a9745cd89f090e38229615dbded3b956885f4aa34Any Swap Out Und...281004602022-10-03 4:37:303 hrs 14 mins ago0x8f22cee99b55ffba8c55f27181d14bcd34e202ed IN  Multichain: Router V40 ETH0.00002117
0xfd691b9e5ec931c89c7d2c1a069ca3ff40bd08f909b60c9b0e0faafb57afc3cdAny Swap Out Und...280993972022-10-03 4:28:203 hrs 23 mins ago0x5e95f49fa7880078cee000cb5cb058b79fbdfa9a IN  Multichain: Router V40 ETH0.00002138
0xa4b7728faaf26e77ed8442faaa01d4525461c3c37c5c686e7cb363dff296824bAny Swap In Auto280993902022-10-03 4:28:163 hrs 23 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.00002688
0x7f17362c0c7fd825bb1c199802d87598b497b29364ab72a51e63532574888772Any Swap Out Und...280979852022-10-03 4:16:163 hrs 35 mins ago0x393f7932cce3d0881e1f73b2b35599a3a3acab15 IN  Multichain: Router V40 ETH0.00002164
0x238be776975abbfdf734c89d8992a8c59a64f3659cb73c89160c2fa27c7a3b6bAny Swap Out Und...280977812022-10-03 4:14:183 hrs 37 mins ago0x8f22cee99b55ffba8c55f27181d14bcd34e202ed IN  Multichain: Router V40 ETH0.00002169
0x351493112ae42178a49b2fb58992267a9222f9bc55cdc41ec806a00037358aedAny Swap In Auto280957872022-10-03 3:56:593 hrs 55 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  Multichain: Router V40 ETH0.000029
0xd937de9dfafbc1b06a5ba94e6cae7d6b00d9bcdb4e644e45efe2ade67858dd98Any Swap Out Und...280942212022-10-03 3:42:274 hrs 9 mins ago0x4d470e0a241c3d7321b4b6c6f23f214db85bfa47 IN  Multichain: Router V40 ETH0.00002272
0x9141ca44f84cbdbd605069d9637759ec8bd7319dc2138b38f8993acebd4d0ce0Any Swap Out Und...280934652022-10-03 3:35:234 hrs 16 mins ago0x258f2738123bbecf342a203318b74469c690f096 IN  Multichain: Router V40 ETH0.00002108
0xe02ad814c393a63ed2401dd2b53b856b0054cd19466a7219ad3558bcede11a36Any Swap Out Und...280931162022-10-03 3:32:394 hrs 19 mins ago0x258f2738123bbecf342a203318b74469c690f096 IN  Multichain: Router V40 ETH0.0000215
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x81f6f73cb158ececde35a5994d45979c86d73056a809aebd5f186e949c4ecc5f281239902022-10-03 7:38:4113 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x81f6f73cb158ececde35a5994d45979c86d73056a809aebd5f186e949c4ecc5f281239902022-10-03 7:38:4113 mins ago Multichain: Router V4 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x81f6f73cb158ececde35a5994d45979c86d73056a809aebd5f186e949c4ecc5f281239902022-10-03 7:38:4113 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x81f6f73cb158ececde35a5994d45979c86d73056a809aebd5f186e949c4ecc5f281239902022-10-03 7:38:4113 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x4e3cd8482f37d85c1cd6051938fa2db4ca3192bcf16e945f32f216a5317118dd281232312022-10-03 7:33:5018 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x4e3cd8482f37d85c1cd6051938fa2db4ca3192bcf16e945f32f216a5317118dd281232312022-10-03 7:33:5018 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x4e3cd8482f37d85c1cd6051938fa2db4ca3192bcf16e945f32f216a5317118dd281232312022-10-03 7:33:5018 mins ago Multichain: Router V4 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x4e3cd8482f37d85c1cd6051938fa2db4ca3192bcf16e945f32f216a5317118dd281232312022-10-03 7:33:5018 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x7b9531ecd9c91b574675e903fc8b83ae108492a794165f5ba4bd4015eb7dda81281210352022-10-03 7:19:4632 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x7b9531ecd9c91b574675e903fc8b83ae108492a794165f5ba4bd4015eb7dda81281210352022-10-03 7:19:4632 mins ago Multichain: Router V4 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x7b9531ecd9c91b574675e903fc8b83ae108492a794165f5ba4bd4015eb7dda81281210352022-10-03 7:19:4632 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x7b9531ecd9c91b574675e903fc8b83ae108492a794165f5ba4bd4015eb7dda81281210352022-10-03 7:19:4632 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x28091c775df732bd2616ff7d93b3a61563f76dc5c289bd47fc04c2f5d936a0c2281197662022-10-03 7:12:0039 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x28091c775df732bd2616ff7d93b3a61563f76dc5c289bd47fc04c2f5d936a0c2281197662022-10-03 7:12:0039 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x28091c775df732bd2616ff7d93b3a61563f76dc5c289bd47fc04c2f5d936a0c2281197662022-10-03 7:12:0039 mins ago Multichain: Router V4 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x28091c775df732bd2616ff7d93b3a61563f76dc5c289bd47fc04c2f5d936a0c2281197662022-10-03 7:12:0039 mins ago Multichain: Router V4 Multichain: anyUSDC Token0 ETH
0x28091c775df732bd2616ff7d93b3a61563f76dc5c289bd47fc04c2f5d936a0c2281197662022-10-03 7:12:0039 mins ago 0xe3fcd45676c626c39f1c6201ad32cdfa3dd9293b Multichain: Router V40 ETH
0x2d46a72ae92cb0b1199b467c061f3436fe9d8f8f0642f8d1ae1623f0223904f1281188162022-10-03 7:05:4746 mins ago Multichain: Router V4 0x05e481b19129b560e921e487adb281e70bdba4630 ETH
0x2d46a72ae92cb0b1199b467c061f3436fe9d8f8f0642f8d1ae1623f0223904f1281188162022-10-03 7:05:4746 mins ago Multichain: Router V4 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb90 ETH
0x2d46a72ae92cb0b1199b467c061f3436fe9d8f8f0642f8d1ae1623f0223904f1281188162022-10-03 7:05:4746 mins ago Multichain: Router V4 0x05e481b19129b560e921e487adb281e70bdba4630 ETH
0x2d46a72ae92cb0b1199b467c061f3436fe9d8f8f0642f8d1ae1623f0223904f1281188162022-10-03 7:05:4746 mins ago Multichain: Router V4 0x05e481b19129b560e921e487adb281e70bdba4630 ETH
0x2fe946d9209d4d6e431e845ec789e590aaa4466d902d8542a8b79925ad3e6fb4281187892022-10-03 7:05:3746 mins ago Multichain: Router V4 0xaef9e3e050d0ef060cdfd5246209b0b6bb66060f0 ETH
0x2fe946d9209d4d6e431e845ec789e590aaa4466d902d8542a8b79925ad3e6fb4281187892022-10-03 7:05:3746 mins ago Multichain: Router V4 0xda10009cbd5d07dd0cecc66161fc93d7c9000da10 ETH
0x2fe946d9209d4d6e431e845ec789e590aaa4466d902d8542a8b79925ad3e6fb4281187892022-10-03 7:05:3746 mins ago Multichain: Router V4 0xaef9e3e050d0ef060cdfd5246209b0b6bb66060f0 ETH
0x2fe946d9209d4d6e431e845ec789e590aaa4466d902d8542a8b79925ad3e6fb4281187892022-10-03 7:05:3746 mins ago Multichain: Router V4 0xaef9e3e050d0ef060cdfd5246209b0b6bb66060f0 ETH
[ Download CSV Export 
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 Arbiscan on 2021-09-14
*/

/**
 *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 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"}]

60c06040523480156200001157600080fd5b506040516200499c3803806200499c833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000de565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000aa578283fd5b620000b58462000078565b9250620000c56020850162000078565b9150620000d56040850162000078565b90509250925092565b60805160601c60a05160601c61484c62000150600039600081816101ec01528181611499015281816116380152611e3d015260008181610aef01528181610cda01528181610dc8015281816115230152818161254b015281816128a7015281816133220152613380015261484c6000f3fe6080604052600436106101dc5760003560e01c8063825bb13c11610102578063ad615dec11610095578063d8b9f61011610064578063d8b9f610146105aa578063dcfb77b1146105ca578063edbdf5e2146105ea578063f75c26641461060a57610229565b8063ad615dec14610535578063c45a015514610555578063c8e174f61461056a578063d06ca61f1461058a57610229565b80638fd903f5116100d15780638fd903f5146104be57806399a2f2d7146104e057806399cd84b5146104f55780639aa1ac611461051557610229565b8063825bb13c1461043e57806385f8c2591461045e57806387cc6e2f1461047e5780638d7d3eea1461049e57610229565b80632fc1e7281161017a57806352a397d51161014957806352a397d5146103be5780635b7b018c146103de57806365782f56146103fe5780636a4539721461041e57610229565b80632fc1e728146103315780633f88de8914610351578063456862aa146103715780634d93bb941461039e57610229565b80631b91a934116101b65780631b91a934146102a45780631f00ca74146102c4578063241dc2df146102f157806325121b761461031157610229565b80630175b1c41461022e578063054d50d41461024e5780630bb572031461028457610229565b3661022957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022757634e487b7160e01b600052600160045260246000fd5b005b600080fd5b34801561023a57600080fd5b50610227610249366004613d21565b61061f565b34801561025a57600080fd5b5061026e610269366004613fa8565b61080b565b60405161027b9190614660565b60405180910390f35b34801561029057600080fd5b5061022761029f366004613f2d565b610820565b3480156102b057600080fd5b506102276102bf3660046139aa565b610954565b3480156102d057600080fd5b506102e46102df366004613e5b565b610ae8565b60405161027b91906141f3565b3480156102fd57600080fd5b5061022761030c366004613a34565b610b1e565b34801561031d57600080fd5b5061022761032c366004613c16565b610b31565b34801561033d57600080fd5b506102e461034c366004613d72565b610c7a565b34801561035d57600080fd5b5061022761036c366004613d21565b610ed3565b34801561037d57600080fd5b5061039161038c366004613972565b610fa0565b60405161027b9190614237565b3480156103aa57600080fd5b506102276103b9366004613aa4565b61107e565b3480156103ca57600080fd5b506102e46103d9366004613d72565b611434565b3480156103ea57600080fd5b506103916103f9366004613933565b611726565b34801561040a57600080fd5b50610227610419366004613f2d565b611829565b34801561042a57600080fd5b50610227610439366004613f2d565b611938565b34801561044a57600080fd5b50610227610459366004613d21565b611b16565b34801561046a57600080fd5b5061026e610479366004613fa8565b611b62565b34801561048a57600080fd5b50610227610499366004613a79565b611b6f565b3480156104aa57600080fd5b506102276104b93660046139aa565b611cb5565b3480156104ca57600080fd5b506104d3611e3b565b60405161027b919061406c565b3480156104ec57600080fd5b5061026e611e5f565b34801561050157600080fd5b50610227610510366004613aa4565b611e63565b34801561052157600080fd5b50610227610530366004613aa4565b6121e0565b34801561054157600080fd5b5061026e610550366004613fa8565b61253c565b34801561056157600080fd5b506104d3612549565b34801561057657600080fd5b50610227610585366004613aa4565b61256d565b34801561059657600080fd5b506102e46105a5366004613e5b565b6128a0565b3480156105b657600080fd5b506102276105c5366004613f2d565b6128cd565b3480156105d657600080fd5b506102276105e5366004613b57565b6129e9565b3480156105f657600080fd5b50610227610605366004613a34565b612ac7565b34801561061657600080fd5b506104d3612bd1565b610627612bd1565b6001600160a01b0316336001600160a01b0316146106605760405162461bcd60e51b815260040161065790614452565b60405180910390fd5b61066d8585858585612bff565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ad57600080fd5b505afa1580156106c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e59190613956565b90506001600160a01b0381161580159061077b57506040516370a0823160e01b815284906001600160a01b038316906370a0823190610728908a9060040161406c565b60206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190613e43565b10155b1561080257604051620e75bb60e21b81526001600160a01b038316906239d6ec906107ae908890889082906004016140fe565b602060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613e43565b505b50505050505050565b6000610818848484612cde565b949350505050565b81428110156108415760405162461bcd60e51b815260040161065790614575565b8585600081811061086257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108779190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016108a49291906140e5565b602060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190613d01565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c61092f611e5f565b8960405161094296959493929190614121565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c59190613956565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b81526004016109fc97969594939291906140a4565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613d01565b50604051630bebbf4d60e41b81526001600160a01b0389169063bebbf4d090610a7d9089908d90600401614669565b602060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190613e43565b50610add8989898985612d78565b505050505050505050565b6060610b157f00000000000000000000000000000000000000000000000000000000000000008484612e51565b90505b92915050565b610b2b3385858585612d78565b50505050565b610b39612bd1565b6001600160a01b0316336001600160a01b031614610b695760405162461bcd60e51b815260040161065790614452565b60005b87811015610c6d57610c5b8b8b83818110610b9757634e487b7160e01b600052603260045260246000fd5b905060200201358a8a84818110610bbe57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bd39190613933565b898985818110610bf357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c089190613933565b888886818110610c2857634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110610c4f57634e487b7160e01b600052603260045260246000fd5b90506020020135612bff565b80610c6581614797565b915050610b6c565b5050505050505050505050565b6060610c84612bd1565b6001600160a01b0316336001600160a01b031614610cb45760405162461bcd60e51b815260040161065790614452565b8242811015610cd55760405162461bcd60e51b815260040161065790614575565b610d337f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b9150878260018451610d45919061473d565b81518110610d6357634e487b7160e01b600052603260045260246000fd5b60200260200101511015610d895760405162461bcd60e51b8152600401610657906143bf565b610e878a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dc39190613933565b610e587f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610e0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e1d9190613933565b8c8c6001818110610e3e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e539190613933565b6131a5565b85600081518110610e7957634e487b7160e01b600052603260045260246000fd5b602002602001015187612bff565b610ec6828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613215915050565b5098975050505050505050565b610edb612bd1565b6001600160a01b0316336001600160a01b031614610f0b5760405162461bcd60e51b815260040161065790614452565b610f188585858585612bff565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90610f46908690869082906004016140fe565b602060405180830381600087803b158015610f6057600080fd5b505af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190613e43565b505050505050565b6000610faa612bd1565b6001600160a01b0316336001600160a01b031614610fda5760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166110005760405162461bcd60e51b8152600401610657906142f0565b6040516360e232a960e01b81526001600160a01b038416906360e232a99061102c90859060040161406c565b602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190613d01565b844281101561109f5760405162461bcd60e51b815260040161065790614575565b6000898960008181106110c257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110d79190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561110f57600080fd5b505afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161118197969594939291906140a4565b600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506111f4818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111ee9190613933565b8f61344f565b8989600081811061121557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061122a9190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401611257929190614669565b602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613e43565b50898960008181106112cb57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906112e09190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161130d9291906140e5565b602060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006113c4611e5f565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f4898787878760405161141695949392919061418b565b60405180910390a35050505050505050505050505050505050505050565b606061143e612bd1565b6001600160a01b0316336001600160a01b03161461146e5760405162461bcd60e51b815260040161065790614452565b824281101561148f5760405162461bcd60e51b815260040161065790614575565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876114c660018261473d565b8181106114e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114f89190613933565b6001600160a01b03161461151e5760405162461bcd60e51b8152600401610657906144be565b61157c7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b915087826001845161158e919061473d565b815181106115ac57634e487b7160e01b600052603260045260246000fd5b602002602001015110156115d25760405162461bcd60e51b8152600401610657906144f5565b6115f78a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b61163682888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613215915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551611674919061473d565b8151811061169257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016116b69190614660565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b50505050610ec68583600185516116fb919061473d565b8151811061171957634e487b7160e01b600052603260045260246000fd5b6020026020010151613537565b6000611730612bd1565b6001600160a01b0316336001600160a01b0316146117605760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166117865760405162461bcd60e51b8152600401610657906142f0565b61178e612bd1565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556117ca426202a3006146e6565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a219812161180b611e5f565b6040516118189190614660565b60405180910390a45060015b919050565b814281101561184a5760405162461bcd60e51b815260040161065790614575565b8585600081811061186b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118809190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016118ad9291906140e5565b602060405180830381600087803b1580156118c757600080fd5b505af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613d01565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c61092f611e5f565b81428110156119595760405162461bcd60e51b815260040161065790614575565b611a3f8686600081811061197d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119929190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613956565b3388886000818110611a2457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a399190613933565b8b61344f565b85856000818110611a6057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a759190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401611aa2929190614669565b602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613e43565b508585600081811061186b57634e487b7160e01b600052603260045260246000fd5b611b1e612bd1565b6001600160a01b0316336001600160a01b031614611b4e5760405162461bcd60e51b815260040161065790614452565b611b5b8585858585612bff565b5050505050565b60006108188484846135c9565b611b77612bd1565b6001600160a01b0316336001600160a01b031614611ba75760405162461bcd60e51b815260040161065790614452565b6000611bb1612bd1565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f1990611be290849086906004016140e5565b602060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c349190613d01565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec90611c63908490869082906004016140fe565b602060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613e43565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d289190613956565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf90611d63908d9030908c908c908c908c908c906004016140a4565b600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b50505050611da1818b8b8a61344f565b604051630bebbf4d60e41b81526001600160a01b038a169063bebbf4d090611dcf908a908e90600401614669565b602060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613e43565b50611e2f8a8a8a8a86612d78565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b4690565b8442811015611e845760405162461bcd60e51b815260040161065790614575565b600089896000818110611ea757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ebc9190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b8152600401611f6697969594939291906140a4565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050611fbe818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b89896000818110611fdf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ff49190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401612021929190614669565b602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613e43565b508989600081811061209557634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120aa9190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b81526004016120d79291906140e5565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121299190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f9050600061218e611e5f565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b3898787878760405161141695949392919061418b565b84428110156122015760405162461bcd60e51b815260040161065790614575565b8888600081811061222257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122379190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561226f57600080fd5b505afa158015612283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a79190613956565b6001600160a01b031663605629d68d8b8b60008181106122d757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122ec9190613933565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161231397969594939291906140a4565b602060405180830381600087803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123659190613d01565b508888600081811061238757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061239c9190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b81526004016123c9929190614669565b602060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613e43565b508888600081811061243d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906124529190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161247f9291906140e5565b602060405180830381600087803b15801561249957600080fd5b505af11580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d19190613d01565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612513611e5f565b8960405161252696959493929190614121565b60405180910390a3505050505050505050505050565b600061081884848461365d565b7f000000000000000000000000000000000000000000000000000000000000000081565b844281101561258e5760405162461bcd60e51b815260040161065790614575565b888860008181106125af57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125c49190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fc57600080fd5b505afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126349190613956565b6001600160a01b031663605629d68d8b8b600081811061266457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906126799190613933565b8e8a8a8a8a6040518863ffffffff1660e01b81526004016126a097969594939291906140a4565b602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190613d01565b508888600081811061271457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127299190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b8152600401612756929190614669565b602060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613e43565b50888860008181106127ca57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127df9190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161280c9291906140e5565b602060405180830381600087803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e9190613d01565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612513611e5f565b6060610b157f0000000000000000000000000000000000000000000000000000000000000000848461300b565b81428110156128ee5760405162461bcd60e51b815260040161065790614575565b6129128686600081811061197d57634e487b7160e01b600052603260045260246000fd5b8585600081811061293357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129489190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401612975929190614669565b602060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190613e43565b508585600081811061086257634e487b7160e01b600052603260045260246000fd5b60005b87811015610add57612ab5338a8a84818110612a1857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a2d9190613933565b898985818110612a4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a629190613933565b888886818110612a8257634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110612aa957634e487b7160e01b600052603260045260246000fd5b90506020020135612d78565b80612abf81614797565b9150506129ec565b612b43846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613956565b33868561344f565b604051630bebbf4d60e41b81526001600160a01b0385169063bebbf4d090612b719085903390600401614669565b602060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc39190613e43565b50610b2b3385858585612d78565b60006002544210612bee57506001546001600160a01b0316612bfc565b506000546001600160a01b03165b90565b6040516340c10f1960e01b81526001600160a01b038516906340c10f1990612c2d90869086906004016140e5565b602060405180830381600087803b158015612c4757600080fd5b505af1158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f9190613d01565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd558585612cc0611e5f565b604051612ccf939291906146d0565b60405180910390a45050505050565b6000808411612cff5760405162461bcd60e51b8152600401610657906145ac565b600083118015612d0f5750600082115b612d2b5760405162461bcd60e51b815260040161065790614242565b6000612d39856103e56136bf565b90506000612d4782856136bf565b90506000612d6183612d5b886103e86136bf565b906136ff565b9050612d6d81836146fe565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90612da690889086906004016140e5565b602060405180830381600087803b158015612dc057600080fd5b505af1158015612dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df89190613d01565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612e41611e5f565b86604051612ccf939291906146d0565b6060600282511015612e755760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff811115612e9d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ec6578160200160208202803683370190505b509050828160018351612ed9919061473d565b81518110612ef757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600060018351612f13919061473d565b90505b801561300357600080612f828786612f2f60018761473d565b81518110612f4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151878681518110612f7557634e487b7160e01b600052603260045260246000fd5b602002602001015161372d565b91509150612fb8848481518110612fa957634e487b7160e01b600052603260045260246000fd5b602002602001015183836135c9565b84612fc460018661473d565b81518110612fe257634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080612ffb90614780565b915050612f16565b509392505050565b606060028251101561302f5760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff81111561305757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613080578160200160208202803683370190505b50905082816000815181106130a557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b600183516130c2919061473d565b81101561300357600080613124878685815181106130f057634e487b7160e01b600052603260045260246000fd5b60200260200101518786600161310691906146e6565b81518110612f7557634e487b7160e01b600052603260045260246000fd5b9150915061315a84848151811061314b57634e487b7160e01b600052603260045260246000fd5b60200260200101518383612cde565b846131668560016146e6565b8151811061318457634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505050808061319d90614797565b9150506130b4565b60008060006131b48585613806565b915091508582826040516020016131cc929190613fd3565b604051602081830303815290604052805190602001206040516020016131f3929190614016565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613226919061473d565b811015610b2b5760008084838151811061325057634e487b7160e01b600052603260045260246000fd5b60200260200101518584600161326691906146e6565b8151811061328457634e487b7160e01b600052603260045260246000fd5b602002602001015191509150600061329c8383613806565b5090506000876132ad8660016146e6565b815181106132cb57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146132f9578260006132fd565b6000835b91509150600060028a51613311919061473d565b881061331d5788613379565b6133797f0000000000000000000000000000000000000000000000000000000000000000878c61334e8c60026146e6565b8151811061336c57634e487b7160e01b600052603260045260246000fd5b60200260200101516131a5565b90506133a67f000000000000000000000000000000000000000000000000000000000000000088886131a5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156133e3576020820181803683370190505b506040518563ffffffff1660e01b81526004016134039493929190614680565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505050505050808061344790614797565b915050613218565b600080856001600160a01b03166323b872dd86868660405160240161347693929190614080565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516134af9190613ffa565b6000604051808303816000865af19150503d80600081146134ec576040519150601f19603f3d011682016040523d82523d6000602084013e6134f1565b606091505b509150915081801561351b57508051158061351b57508080602001905181019061351b9190613d01565b610f985760405162461bcd60e51b8152600401610657906145e7565b604080516000808252602082019092526001600160a01b0384169083906040516135619190613ffa565b60006040518083038185875af1925050503d806000811461359e576040519150601f19603f3d011682016040523d82523d6000602084013e6135a3565b606091505b50509050806135c45760405162461bcd60e51b81526004016106579061440c565b505050565b60008084116135ea5760405162461bcd60e51b815260040161065790614355565b6000831180156135fa5750600082115b6136165760405162461bcd60e51b815260040161065790614242565b600061362e6103e861362886886136bf565b906136bf565b905060006136426103e56136288689613890565b90506136536001612d5b83856146fe565b9695505050505050565b600080841161367e5760405162461bcd60e51b815260040161065790614540565b60008311801561368e5750600082115b6136aa5760405162461bcd60e51b815260040161065790614242565b826136b585846136bf565b61081891906146fe565b60008115806136e3575082826136d5818361471e565b92506136e190836146fe565b145b610b185760405162461bcd60e51b815260040161065790614327565b60008261370c83826146e6565b9150811015610b185760405162461bcd60e51b815260040161065790614391565b600080600061373c8585613806565b50905060008061374d8888886131a5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190613df5565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146137f45780826137f7565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316141561383b5760405162461bcd60e51b8152600401610657906142a9565b826001600160a01b0316846001600160a01b03161061385b57828461385e565b83835b90925090506001600160a01b0382166138895760405162461bcd60e51b815260040161065790614489565b9250929050565b60008261389d838261473d565b9150811115610b185760405162461bcd60e51b81526004016106579061427a565b8035611824816147de565b60008083601f8401126138da578081fd5b50813567ffffffffffffffff8111156138f1578182fd5b602083019150836020808302850101111561388957600080fd5b80516001600160701b038116811461182457600080fd5b803560ff8116811461182457600080fd5b600060208284031215613944578081fd5b813561394f816147de565b9392505050565b600060208284031215613967578081fd5b815161394f816147de565b60008060408385031215613984578081fd5b823561398f816147de565b9150602083013561399f816147de565b809150509250929050565b60008060008060008060008060006101208a8c0312156139c8578485fd5b89356139d3816147de565b985060208a01356139e3816147de565b975060408a01356139f3816147de565b965060608a0135955060808a01359450613a0f60a08b01613922565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060008060808587031215613a49578384fd5b8435613a54816147de565b93506020850135613a64816147de565b93969395505050506040820135916060013590565b60008060408385031215613a8b578182fd5b8235613a96816147de565b946020939093013593505050565b60008060008060008060008060008060006101408c8e031215613ac5578182fd5b8b35613ad0816147de565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff811115613af9578283fd5b613b058e828f016138c9565b90995097505060808c0135613b19816147de565b955060a08c01359450613b2e60c08d01613922565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b031215613b72578182fd5b883567ffffffffffffffff80821115613b89578384fd5b613b958c838d016138c9565b909a50985060208b0135915080821115613bad578384fd5b613bb98c838d016138c9565b909850965060408b0135915080821115613bd1578384fd5b613bdd8c838d016138c9565b909650945060608b0135915080821115613bf5578384fd5b50613c028b828c016138c9565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d031215613c34578384fd5b8a3567ffffffffffffffff80821115613c4b578586fd5b613c578e838f016138c9565b909c509a5060208d0135915080821115613c6f578586fd5b613c7b8e838f016138c9565b909a50985060408d0135915080821115613c93578586fd5b613c9f8e838f016138c9565b909850965060608d0135915080821115613cb7578586fd5b613cc38e838f016138c9565b909650945060808d0135915080821115613cdb578384fd5b50613ce88d828e016138c9565b915080935050809150509295989b9194979a5092959850565b600060208284031215613d12578081fd5b8151801515811461394f578182fd5b600080600080600060a08688031215613d38578283fd5b853594506020860135613d4a816147de565b93506040860135613d5a816147de565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215613d8d578182fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613db8578283fd5b613dc48b828c016138c9565b9096509450506080890135613dd8816147de565b979a969950949793969295929450505060a08201359160c0013590565b600080600060608486031215613e09578081fd5b613e128461390b565b9250613e206020850161390b565b9150604084015163ffffffff81168114613e38578182fd5b809150509250925092565b600060208284031215613e54578081fd5b5051919050565b60008060408385031215613e6d578182fd5b8235915060208084013567ffffffffffffffff80821115613e8c578384fd5b818601915086601f830112613e9f578384fd5b813581811115613eb157613eb16147c8565b838102604051601f19603f83011681018181108582111715613ed557613ed56147c8565b604052828152858101935084860182860187018b1015613ef3578788fd5b8795505b83861015613f1c57613f08816138be565b855260019590950194938601938601613ef7565b508096505050505050509250929050565b600080600080600080600060c0888a031215613f47578081fd5b8735965060208801359550604088013567ffffffffffffffff811115613f6b578182fd5b613f778a828b016138c9565b9096509450506060880135613f8b816147de565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215613fbc578081fd5b505081359360208301359350604090920135919050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161400c818460208701614754565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614164578235614147816147de565b6001600160a01b0316825260209283019290910190600101614134565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156141cd5781516001600160a01b0316845292840192908401906001016141a8565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b8181101561422b5783518352928401929184019160010161420f565b50909695505050505050565b901515815260200190565b6020808252602a908201526000805160206147f78339815191526040820152695f4c495155494449545960b01b606082015260800190565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252601d908201527f416e79737761705633526f757465723a20616464726573732830783029000000604082015260600190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252602e908201526000805160206147f783398151915260408201526d17d3d55514155517d05353d5539560921b606082015260800190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252602d908201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60408201526c13d55514155517d05353d55395609a1b606082015260800190565b60208082526026908201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60408201526511905253115160d21b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601d908201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b60208082526027908201526000805160206147f783398151915260408201526617d05353d5539560ca1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b6020808252602d908201526000805160206147f783398151915260408201526c17d25394155517d05353d55395609a1b606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416040820152631253115160e21b606082015260800190565b6020808252818101527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b600085825284602083015260018060a01b03841660408301526080606083015282518060808401526146b98160a0850160208701614754565b601f01601f19169190910160a00195945050505050565b9283526020830191909152604082015260600190565b600082198211156146f9576146f96147b2565b500190565b60008261471957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614738576147386147b2565b500290565b60008282101561474f5761474f6147b2565b500390565b60005b8381101561476f578181015183820152602001614757565b83811115610b2b5750506000910152565b60008161478f5761478f6147b2565b506000190190565b60006000198214156147ab576147ab6147b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146147f357600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a26469706673582212201b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d564736f6c63430008010033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _wNATIVE (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : _mpc (address): 0x2a038e100f8b85df21e4d44121bdbfe0c288a869

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : 0000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869


Deployed ByteCode Sourcemap

9049:17352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9591:10;-1:-1:-1;;;;;9605:7:0;9591:21;;9584:29;;-1:-1:-1;;;9584:29:0;;;;;;;;;9049:17352;;;;;15060:448;;;;;;;;;;-1:-1:-1;15060:448:0;;;;;:::i;:::-;;:::i;25409:246::-;;;;;;;;;;-1:-1:-1;25409:246:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17063:416;;;;;;;;;;-1:-1:-1;17063:416:0;;;;;:::i;:::-;;:::i;13189:498::-;;;;;;;;;;-1:-1:-1;13189:498:0;;;;;:::i;:::-;;:::i;26161:237::-;;;;;;;;;;-1:-1:-1;26161:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11948:157::-;;;;;;;;;;-1:-1:-1;11948:157:0;;;;;:::i;:::-;;:::i;15789:319::-;;;;;;;;;;-1:-1:-1;15789:319:0;;;;;:::i;:::-;;:::i;20302:648::-;;;;;;;;;;-1:-1:-1;20302:648:0;;;;;:::i;:::-;;:::i;14690:245::-;;;;;;;;;;-1:-1:-1;14690:245:0;;;;;:::i;:::-;;:::i;11385:228::-;;;;;;;;;;-1:-1:-1;11385:228:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22275:1075::-;;;;;;;;;;-1:-1:-1;22275:1075:0;;;;;:::i;:::-;;:::i;24290:886::-;;;;;;;;;;-1:-1:-1;24290:886:0;;;;;:::i;:::-;;:::i;11020:357::-;;;;;;;;;;-1:-1:-1;11020:357:0;;;;;:::i;:::-;;:::i;21051:416::-;;;;;;;;;;-1:-1:-1;21051:416:0;;;;;:::i;:::-;;:::i;21568:606::-;;;;;;;;;;-1:-1:-1;21568:606:0;;;;;:::i;:::-;;:::i;14404:173::-;;;;;;;;;;-1:-1:-1;14404:173:0;;;;;:::i;:::-;;:::i;25663:245::-;;;;;;;;;;-1:-1:-1;25663:245:0;;;;;:::i;:::-;;:::i;15558:223::-;;;;;;;;;;-1:-1:-1;15558:223:0;;;;;:::i;:::-;;:::i;12575:606::-;;;;;;;;;;-1:-1:-1;12575:606:0;;;;;:::i;:::-;;:::i;9161:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10923:89::-;;;;;;;;;;;;;:::i;18287:1075::-;;;;;;;;;;-1:-1:-1;18287:1075:0;;;;;:::i;:::-;;:::i;19463:694::-;;;;;;;;;;-1:-1:-1;19463:694:0;;;;;:::i;:::-;;:::i;25220:181::-;;;;;;;;;;-1:-1:-1;25220:181:0;;;;;:::i;:::-;;:::i;9122:32::-;;;;;;;;;;;;;:::i;23451:694::-;;;;;;;;;;-1:-1:-1;23451:694:0;;;;;:::i;:::-;;:::i;25916:237::-;;;;;;;;;;-1:-1:-1;25916:237:0;;;;;:::i;:::-;;:::i;17580:606::-;;;;;;;;;;-1:-1:-1;17580:606:0;;;;;:::i;:::-;;:::i;13695:286::-;;;;;;;;;;-1:-1:-1;13695:286:0;;;;;:::i;:::-;;:::i;12230:337::-;;;;;;;;;;-1:-1:-1;12230:337:0;;;;;:::i;:::-;;:::i;10741:174::-;;;;;;;;;;;;;:::i;15060:448::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;;;;;;;;;15182:47:::1;15193:3;15198:5;15205:2;15209:6;15217:11;15182:10;:47::i;:::-;15240:24;15282:5;15240:48;;15299:19;15321:9;-1:-1:-1::0;;;;;15321:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15299:44:::0;-1:-1:-1;;;;;;15358:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;15387:36:0::1;::::0;-1:-1:-1;;;15387:36:0;;15427:6;;-1:-1:-1;;;;;15387:29:0;::::1;::::0;::::1;::::0;:36:::1;::::0;15417:5;;15387:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;15358:75;15354:147;;;15450:39;::::0;-1:-1:-1;;;15450:39:0;;-1:-1:-1;;;;;15450:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;15474:2;;15478:6;;15474:2;;15450:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15354:147;10724:1;;15060:448:::0;;;;;:::o;25409:246::-;25544:14;25583:64;25615:8;25625:9;25636:10;25583:31;:64::i;:::-;25576:71;25409:246;-1:-1:-1;;;;25409:246:0:o;17063:416::-;17290:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;17326:4:::1;;17331:1;17326:7;;;;;-1:-1:-1::0;;;17326:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17311:28:0::1;;17340:10;17352:8;17311:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;17377:94:0;::::1;17414:10;17377:94;17408:4:::0;;17430:8;17440:12;17454:5:::1;:3;:5::i;:::-;17461:9;17377:94;;;;;;;;;;;:::i;:::-;;;;;;;;17063:416:::0;;;;;;;;:::o;13189:498::-;13483:5;-1:-1:-1;;;;;13468:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13461:61:0;;13523:4;13529:5;13536:6;13544:8;13554:1;13557;13560;13461:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13573:48:0;;-1:-1:-1;;;13573:48:0;;-1:-1:-1;;;;;13573:34:0;;;;;:48;;13608:6;;13616:4;;13573:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13632:47;13644:4;13650:5;13657:2;13661:6;13669:9;13632:11;:47::i;:::-;13189:498;;;;;;;;;:::o;26161:237::-;26287:21;26333:57;26365:7;26374:9;26385:4;26333:31;:57::i;:::-;26326:64;;26161:237;;;;;:::o;11948:157::-;12044:53;12056:10;12068:5;12075:2;12079:6;12087:9;12044:11;:53::i;:::-;11948:157;;;;:::o;15789:319::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;15973:6:::1;15968:133;15985:17:::0;;::::1;15968:133;;;16024:65;16035:3;;16039:1;16035:6;;;;;-1:-1:-1::0;;;16035:6:0::1;;;;;;;;;;;;;;;16043;;16050:1;16043:9;;;;;-1:-1:-1::0;;;16043:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16054:2;;16057:1;16054:5;;;;;-1:-1:-1::0;;;16054:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16061:7;;16069:1;16061:10;;;;;-1:-1:-1::0;;;16061:10:0::1;;;;;;;;;;;;;;;16073:12;;16086:1;16073:15;;;;;-1:-1:-1::0;;;16073:15:0::1;;;;;;;;;;;;;;;16024:10;:65::i;:::-;16004:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15968:133;;;;15789:319:::0;;;;;;;;;;:::o;20302:648::-;20579:21;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;20560:8:::1;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1::0;;;9244:64:0::1;;;;;;;:::i;:::-;20623:57:::2;20656:7;20665:8;20675:4;;20623:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20623:32:0::2;::::0;-1:-1:-1;;;20623:57:0:i:2;:::-;20613:67;;20730:12;20699:7;20724:1;20707:7;:14;:18;;;;:::i;:::-;20699:27;;;;;;-1:-1:-1::0;;;20699:27:0::2;;;;;;;;;;;;;;;:43;;20691:101;;;;-1:-1:-1::0;;;20691:101:0::2;;;;;;;:::i;:::-;20803:104;20814:3;20819:4;;20824:1;20819:7;;;;;-1:-1:-1::0;;;20819:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20828:53;20855:7;20864:4;;20869:1;20864:7;;;;;-1:-1:-1::0;;;20864:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20873:4;;20878:1;20873:7;;;;;-1:-1:-1::0;;;20873:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20828:26;:53::i;:::-;20883:7;20891:1;20883:10;;;;;;-1:-1:-1::0;;;20883:10:0::2;;;;;;;;;;;;;;;20895:11;20803:10;:104::i;:::-;20918:24;20924:7;20933:4;;20918:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20939:2:0;;-1:-1:-1;20918:5:0::2;::::0;-1:-1:-1;;20918:24:0:i:2;:::-;10724:1:::1;20302:648:::0;;;;;;;;;;:::o;14690:245::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;14818:47:::1;14829:3;14834:5;14841:2;14845:6;14853:11;14818:10;:47::i;:::-;14876:51;::::0;-1:-1:-1;;;14876:51:0;;-1:-1:-1;;;;;14876:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;14912:2;;14916:6;;14912:2;;14876:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14690:245:::0;;;;;:::o;11385:228::-;11463:4;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11488:22:0;::::1;11480:64;;;;-1:-1:-1::0;;;11480:64:0::1;;;;;;;:::i;:::-;11562:43;::::0;-1:-1:-1;;;11562:43:0;;-1:-1:-1;;;;;11562:33:0;::::1;::::0;::::1;::::0;:43:::1;::::0;11596:8;;11562:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22275:1075::-:0;22603:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;22624:19:::1;22661:4;;22666:1;22661:7;;;;;-1:-1:-1::0;;;22661:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22646:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22624:58;;22700:11;-1:-1:-1::0;;;;;22693:26:0::1;;22720:4;22734;22741:8;22751;22761:1;22764;22767;22693:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22780:69;22812:11;22825:4;22831;;22836:1;22831:7;;;;;-1:-1:-1::0;;;22831:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22840:8;22780:31;:69::i;:::-;22875:4;;22880:1;22875:7;;;;;-1:-1:-1::0;;;22875:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22860:36:0::1;;22897:8;22907:4;22860:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22938:4;;22943:1;22938:7;;;;;-1:-1:-1::0;;;22938:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22923:28:0::1;;22952:4;22958:8;22923:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22989:22;23014:4;;22989:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23029:13;23045:4;23029:20;;23060:11;23074:2;23060:16;;23087:14;23104:8;23087:25;;23123:18;23144:12;23123:33;;23167:9;23179:5;:3;:5::i;:::-;23167:17;;23195:15;23213:9;23195:27;;23283:3;-1:-1:-1::0;;;;;23238:93:0::1;23276:5;-1:-1:-1::0;;;;;23238:93:0::1;;23269:5;23288:9;23299:13;23314:4;23320:10;23238:93;;;;;;;;;;:::i;:::-;;;;;;;;9319:1;;;;;;;;22275:1075:::0;;;;;;;;;;;;:::o;24290:886::-;24567:21;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;24548:8:::1;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1::0;;;9244:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24634:7:0::2;24609:32;:4:::0;;24614:15:::2;24628:1;24609:4:::0;24614:15:::2;:::i;:::-;24609:21;;;;;-1:-1:-1::0;;;24609:21:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24609:32:0::2;;24601:74;;;;-1:-1:-1::0;;;24601:74:0::2;;;;;;;:::i;:::-;24696:57;24729:7;24738:8;24748:4;;24696:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24696:32:0::2;::::0;-1:-1:-1;;;24696:57:0:i:2;:::-;24686:67;;24803:12;24772:7;24797:1;24780:7;:14;:18;;;;:::i;:::-;24772:27;;;;;;-1:-1:-1::0;;;24772:27:0::2;;;;;;;;;;;;;;;:43;;24764:99;;;;-1:-1:-1::0;;;24764:99:0::2;;;;;;;:::i;:::-;24874:105;24885:3;24890:4;;24895:1;24890:7;;;;;-1:-1:-1::0;;;24890:7:0::2;;;;;;;;24874:105;24990:35;24996:7;25005:4;;24990:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;25019:4:0::2;::::0;-1:-1:-1;24990:5:0::2;::::0;-1:-1:-1;;24990:35:0:i:2;:::-;25045:7;-1:-1:-1::0;;;;;25036:26:0::2;;25063:7;25088:1;25071:7;:14;:18;;;;:::i;:::-;25063:27;;;;;;-1:-1:-1::0;;;25063:27:0::2;;;;;;;;;;;;;;;25036:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25102:66;25136:2;25140:7;25165:1;25148:7;:14;:18;;;;:::i;:::-;25140:27;;;;;;-1:-1:-1::0;;;25140:27:0::2;;;;;;;;;;;;;;;25102:33;:66::i;11020:357::-:0;11079:4;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11104:20:0;::::1;11096:62;;;;-1:-1:-1::0;;;11096:62:0::1;;;;;;;:::i;:::-;11179:5;:3;:5::i;:::-;11169:7;:15:::0;;-1:-1:-1;;;;;;11169:15:0;;::::1;-1:-1:-1::0;;;;;11169:15:0;;::::1;;::::0;;;-1:-1:-1;11195:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;11245:27:::1;:15;11263:9;11245:27;:::i;:::-;11222:20;:50:::0;;;11310:7:::1;::::0;::::1;11301::::0;-1:-1:-1;;;;;11310:7:0;;::::1;::::0;11301::::1;11288:59;11341:5;:3;:5::i;:::-;11288:59;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;11365:4:0::1;10724:1;11020:357:::0;;;:::o;21051:416::-;21278:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;21314:4:::1;;21319:1;21314:7;;;;;-1:-1:-1::0;;;21314:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21299:28:0::1;;21328:10;21340:8;21299:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;21365:94:0;::::1;21402:10;21365:94;21396:4:::0;;21418:8;21428:12;21442:5:::1;:3;:5::i;21568:606::-:0;21805:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;21826:100:::1;21873:4;;21878:1;21873:7;;;;;-1:-1:-1::0;;;21873:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21858:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21896:10;21908:4;;21913:1;21908:7;;;;;-1:-1:-1::0;;;21908:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21917:8;21826:31;:100::i;:::-;21952:4;;21957:1;21952:7;;;;;-1:-1:-1::0;;;21952:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21937:36:0::1;;21974:8;21984:10;21937:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22021:4;;22026:1;22021:7;;;;;-1:-1:-1::0;;;22021:7:0::1;;;;;;;;14404:173:::0;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;14522:47:::1;14533:3;14538:5;14545:2;14549:6;14557:11;14522:10;:47::i;:::-;14404:173:::0;;;;;:::o;25663:245::-;25798:13;25836:64;25867:9;25878;25889:10;25836:30;:64::i;15558:223::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;15636:12:::1;15651:5;:3;:5::i;:::-;15667:40;::::0;-1:-1:-1;;;15667:40:0;;15636:20;;-1:-1:-1;;;;;;15667:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;15636:20;;15700:6;;15667:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;15718:55:0::1;::::0;-1:-1:-1;;;15718:55:0;;-1:-1:-1;;;;;15718:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;15754:4;;15760:6;;15754:4;;15718:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12575:606::-:0;12839:19;12876:5;-1:-1:-1;;;;;12861:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12906:74;;-1:-1:-1;;;12906:74:0;;12839:56;;-1:-1:-1;;;;;;12906:26:0;;;;;:74;;12933:4;;12947;;12954:6;;12962:8;;12972:1;;12975;;12978;;12906:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12991:65;13023:11;13036:4;13042:5;13049:6;12991:31;:65::i;:::-;13067:48;;-1:-1:-1;;;13067:48:0;;-1:-1:-1;;;;;13067:34:0;;;;;:48;;13102:6;;13110:4;;13067:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13126:47;13138:4;13144:5;13151:2;13155:6;13163:9;13126:11;:47::i;:::-;12575:606;;;;;;;;;;:::o;9161:32::-;;;:::o;10923:89::-;10995:9;;10988:17::o;18287:1075::-;18615:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;18636:19:::1;18673:4;;18678:1;18673:7;;;;;-1:-1:-1::0;;;18673:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18658:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18636:58;;18712:11;-1:-1:-1::0;;;;;18705:26:0::1;;18732:4;18746;18753:8;18763;18773:1;18776;18779;18705:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18792:69;18824:11;18837:4;18843;;18848:1;18843:7;;;;;-1:-1:-1::0;;;18843:7:0::1;;;;;;;;18792:69;18887:4;;18892:1;18887:7;;;;;-1:-1:-1::0;;;18887:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18872:36:0::1;;18909:8;18919:4;18872:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18950:4;;18955:1;18950:7;;;;;-1:-1:-1::0;;;18950:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18935:28:0::1;;18964:4;18970:8;18935:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19001:22;19026:4;;19001:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19041:13;19057:4;19041:20;;19072:11;19086:2;19072:16;;19099:14;19116:8;19099:25;;19135:18;19156:12;19135:33;;19179:9;19191:5;:3;:5::i;:::-;19179:17;;19207:15;19225:9;19207:27;;19295:3;-1:-1:-1::0;;;;;19250:93:0::1;19288:5;-1:-1:-1::0;;;;;19250:93:0::1;;19281:5;19300:9;19311:13;19326:4;19332:10;19250:93;;;;;;;;;;:::i;19463:694::-:0;19799:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;19842:4:::1;;19847:1;19842:7;;;;;-1:-1:-1::0;;;19842:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19827:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19820:63:0::1;;19884:4;19890;;19895:1;19890:7;;;;;-1:-1:-1::0;;;19890:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19899:8;19909;19919:1;19922;19925;19820:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19953:4;;19958:1;19953:7;;;;;-1:-1:-1::0;;;19953:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19938:36:0::1;;19975:8;19985:4;19938:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20016:4;;20021:1;20016:7;;;;;-1:-1:-1::0;;;20016:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20001:28:0::1;;20030:4;20036:8;20001:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20104:2;-1:-1:-1::0;;;;;20061:88:0::1;20098:4;-1:-1:-1::0;;;;;20061:88:0::1;;20092:4;;20108:8;20118:12;20132:5;:3;:5::i;:::-;20139:9;20061:88;;;;;;;;;;;:::i;:::-;;;;;;;;19463:694:::0;;;;;;;;;;;;:::o;25220:181::-;25308:12;25340:53;25365:7;25374:8;25384;25340:24;:53::i;9122:32::-;;;:::o;23451:694::-;23787:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;23830:4:::1;;23835:1;23830:7;;;;;-1:-1:-1::0;;;23830:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23815:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23808:63:0::1;;23872:4;23878;;23883:1;23878:7;;;;;-1:-1:-1::0;;;23878:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23887:8;23897;23907:1;23910;23913;23808:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23941:4;;23946:1;23941:7;;;;;-1:-1:-1::0;;;23941:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23926:36:0::1;;23963:8;23973:4;23926:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24004:4;;24009:1;24004:7;;;;;-1:-1:-1::0;;;24004:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23989:28:0::1;;24018:4;24024:8;23989:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24092:2;-1:-1:-1::0;;;;;24049:88:0::1;24086:4;-1:-1:-1::0;;;;;24049:88:0::1;;24080:4;;24096:8;24106:12;24120:5;:3;:5::i;25916:237::-:0;26042:21;26088:57;26121:7;26130:8;26140:4;26088:32;:57::i;17580:606::-;17817:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;17838:100:::1;17885:4;;17890:1;17885:7;;;;;-1:-1:-1::0;;;17885:7:0::1;;;;;;;;17838:100;17964:4;;17969:1;17964:7;;;;;-1:-1:-1::0;;;17964:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17949:36:0::1;;17986:8;17996:10;17949:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18033:4;;18038:1;18033:7;;;;;-1:-1:-1::0;;;18033:7:0::1;;;;;;;;13695:286:::0;13843:6;13838:136;13855:17;;;13838:136;;;13894:68;13906:10;13918:6;;13925:1;13918:9;;;;;-1:-1:-1;;;13918:9:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13929:2;;13932:1;13929:5;;;;;-1:-1:-1;;;13929:5:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13936:7;;13944:1;13936:10;;;;;-1:-1:-1;;;13936:10:0;;;;;;;;;;;;;;;13948;;13959:1;13948:13;;;;;-1:-1:-1;;;13948:13:0;;;;;;;;;;;;;;;13894:11;:68::i;:::-;13874:3;;;;:::i;:::-;;;;13838:136;;12230:337;12336:94;12383:5;-1:-1:-1;;;;;12368:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12404:10;12416:5;12423:6;12336:31;:94::i;:::-;12441:54;;-1:-1:-1;;;12441:54:0;;-1:-1:-1;;;;;12441:34:0;;;;;:54;;12476:6;;12484:10;;12441:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12506:53;12518:10;12530:5;12537:2;12541:6;12549:9;12506:11;:53::i;10741:174::-;10777:7;10820:20;;10801:15;:39;10797:86;;-1:-1:-1;10864:7:0;;-1:-1:-1;;;;;10864:7:0;10857:14;;10797:86;-1:-1:-1;10900:7:0;;-1:-1:-1;;;;;10900:7:0;10741:174;;:::o;14061:229::-;14172:38;;-1:-1:-1;;;14172:38:0;;-1:-1:-1;;;;;14172:26:0;;;;;:38;;14199:2;;14203:6;;14172:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14251:2;-1:-1:-1;;;;;14226:56:0;14244:5;-1:-1:-1;;;;;14226:56:0;14239:3;14226:56;14255:6;14263:11;14276:5;:3;:5::i;:::-;14226:56;;;;;;;;:::i;:::-;;;;;;;;14061:229;;;;;:::o;3528:521::-;3621:14;3667:1;3656:8;:12;3648:70;;;;-1:-1:-1;;;3648:70:0;;;;;;;:::i;:::-;3749:1;3737:9;:13;:31;;;;;3767:1;3754:10;:14;3737:31;3729:86;;;;-1:-1:-1;;;3729:86:0;;;;;;;:::i;:::-;3826:20;3849:17;:8;3862:3;3849:12;:17::i;:::-;3826:40;-1:-1:-1;3877:14:0;3894:31;3826:40;3914:10;3894:19;:31::i;:::-;3877:48;-1:-1:-1;3936:16:0;3955:40;3979:15;3955:19;:9;3969:4;3955:13;:19::i;:::-;:23;;:40::i;:::-;3936:59;-1:-1:-1;4018:23:0;3936:59;4018:9;:23;:::i;:::-;4006:35;3528:521;-1:-1:-1;;;;;;;3528:521:0:o;11621:231::-;11732:40;;-1:-1:-1;;;11732:40:0;;-1:-1:-1;;;;;11732:26:0;;;;;:40;;11759:4;;11765:6;;11732:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11815:2;-1:-1:-1;;;;;11788:56:0;11809:4;-1:-1:-1;;;;;11788:56:0;11802:5;-1:-1:-1;;;;;11788:56:0;;11819:6;11827:5;:3;:5::i;:::-;11834:9;11788:56;;;;;;;;:::i;5322:534::-;5423:21;5480:1;5465:4;:11;:16;;5457:61;;;;-1:-1:-1;;;5457:61:0;;;;;;;:::i;:::-;5550:4;:11;5539:23;;;;;;-1:-1:-1;;;5539:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5539:23:0;;5529:33;;5603:9;5573:7;5598:1;5581:7;:14;:18;;;;:::i;:::-;5573:27;;;;;;-1:-1:-1;;;5573:27:0;;;;;;;;;;;;;;:39;;;;;5628:6;5651:1;5637:4;:11;:15;;;;:::i;:::-;5628:24;;5623:226;5654:5;;5623:226;;5682:14;;5717:42;5729:7;5738:4;5743:5;5747:1;5743;:5;:::i;:::-;5738:11;;;;;;-1:-1:-1;;;5738:11:0;;;;;;;;;;;;;;;5751:4;5756:1;5751:7;;;;;;-1:-1:-1;;;5751:7:0;;;;;;;;;;;;;;;5717:11;:42::i;:::-;5681:78;;;;5791:46;5803:7;5811:1;5803:10;;;;;;-1:-1:-1;;;5803:10:0;;;;;;;;;;;;;;;5815:9;5826:10;5791:11;:46::i;:::-;5774:7;5782:5;5786:1;5782;:5;:::i;:::-;5774:14;;;;;;-1:-1:-1;;;5774:14:0;;;;;;;;;;;;;;:63;;;;;5623:226;;5661:3;;;;;:::i;:::-;;;;5623:226;;;;5322:534;;;;;:::o;4728:513::-;4829:21;4886:1;4871:4;:11;:16;;4863:61;;;;-1:-1:-1;;;4863:61:0;;;;;;;:::i;:::-;4956:4;:11;4945:23;;;;;;-1:-1:-1;;;4945:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4945:23:0;;4935:33;;4992:8;4979:7;4987:1;4979:10;;;;;;-1:-1:-1;;;4979:10:0;;;;;;;;;;;;;;:21;;;;;5016:6;5011:223;5042:1;5028:4;:11;:15;;;;:::i;:::-;5024:1;:19;5011:223;;;5066:14;5082:15;5101:42;5113:7;5122:4;5127:1;5122:7;;;;;;-1:-1:-1;;;5122:7:0;;;;;;;;;;;;;;;5131:4;5136:1;5140;5136:5;;;;:::i;:::-;5131:11;;;;;;-1:-1:-1;;;5131:11:0;;;;;;;;5101:42;5065:78;;;;5175:47;5188:7;5196:1;5188:10;;;;;;-1:-1:-1;;;5188:10:0;;;;;;;;;;;;;;;5200:9;5211:10;5175:12;:47::i;:::-;5158:7;5166:5;:1;5170;5166:5;:::i;:::-;5158:14;;;;;;-1:-1:-1;;;5158:14:0;;;;;;;;;;;;;;:64;;;;;5011:223;;5045:3;;;;;:::i;:::-;;;;5011:223;;2027:490;2116:12;2142:14;2158;2176:26;2187:6;2195;2176:10;:26::i;:::-;2141:61;;;;2315:7;2368:6;2376;2351:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2341:43;;;;;;2254:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2254:251:0;;;;;;;;;2244:262;;2254:251;2244:262;;;;;2027:490;-1:-1:-1;;;;;;2027:490:0:o;16219:743::-;16326:6;16321:634;16352:1;16338:4;:11;:15;;;;:::i;:::-;16334:1;:19;16321:634;;;16376:13;16391:14;16410:4;16415:1;16410:7;;;;;;-1:-1:-1;;;16410:7:0;;;;;;;;;;;;;;;16419:4;16424:1;16428;16424:5;;;;:::i;:::-;16419:11;;;;;;-1:-1:-1;;;16419:11:0;;;;;;;;;;;;;;;16375:56;;;;16447:14;16466:44;16496:5;16503:6;16466:29;:44::i;:::-;-1:-1:-1;16446:64:0;-1:-1:-1;16525:14:0;16542:7;16550:5;:1;16554;16550:5;:::i;:::-;16542:14;;;;;;-1:-1:-1;;;16542:14:0;;;;;;;;;;;;;;;16525:31;;16572:15;16589;16617:6;-1:-1:-1;;;;;16608:15:0;:5;-1:-1:-1;;;;;16608:15:0;;:61;;16650:9;16666:1;16608:61;;;16632:1;16636:9;16608:61;16571:98;;;;16684:10;16715:1;16701:4;:11;:15;;;;:::i;:::-;16697:1;:19;:84;;16778:3;16697:84;;;16719:56;16746:7;16755:6;16763:4;16768:5;:1;16772;16768:5;:::i;:::-;16763:11;;;;;;-1:-1:-1;;;16763:11:0;;;;;;;;;;;;;;;16719:26;:56::i;:::-;16684:97;;16813:50;16840:7;16849:5;16856:6;16813:26;:50::i;:::-;-1:-1:-1;;;;;16796:73:0;;16888:10;16900;16912:2;16926:1;16916:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16916:12:0;;16796:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16321:634;;;;;;;16355:3;;;;;:::i;:::-;;;;16321:634;;6743:402;6922:12;6936:17;6957:5;-1:-1:-1;;;;;6957:10:0;6991;7003:4;7009:2;7013:5;6968:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6968:51:0;;;;;;;;;;;6957:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6921:99;;;;7039:7;:57;;;;-1:-1:-1;7051:11:0;;:16;;:44;;;7082:4;7071:24;;;;;;;;;;;;:::i;:::-;7031:106;;;;-1:-1:-1;;;7031:106:0;;;;;;;:::i;7153:201::-;7264:12;;;7226;7264;;;;;;;;;-1:-1:-1;;;;;7243:7:0;;;7257:5;;7243:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7225:52;;;7296:7;7288:58;;;;-1:-1:-1;;;7288:58:0;;;;;;;:::i;:::-;7153:201;;;:::o;4170:476::-;4263:13;4309:1;4297:9;:13;4289:72;;;;-1:-1:-1;;;4289:72:0;;;;;;;:::i;:::-;4392:1;4380:9;:13;:31;;;;;4410:1;4397:10;:14;4380:31;4372:86;;;;-1:-1:-1;;;4372:86:0;;;;;;;:::i;:::-;4469:14;4486:34;4515:4;4486:24;:9;4500;4486:13;:24::i;:::-;:28;;:34::i;:::-;4469:51;-1:-1:-1;4531:16:0;4550:34;4580:3;4550:25;:10;4565:9;4550:14;:25::i;:34::-;4531:53;-1:-1:-1;4606:32:0;4636:1;4607:23;4531:53;4607:9;:23;:::i;4606:32::-;4595:43;4170:476;-1:-1:-1;;;;;;4170:476:0:o;3081:325::-;3163:12;3206:1;3196:7;:11;3188:63;;;;-1:-1:-1;;;3188:63:0;;;;;;;:::i;:::-;3281:1;3270:8;:12;:28;;;;;3297:1;3286:8;:12;3270:28;3262:83;;;;-1:-1:-1;;;3262:83:0;;;;;;;:::i;:::-;3390:8;3366:21;:7;3378:8;3366:11;:21::i;:::-;:32;;;;:::i;1257:142::-;1309:6;1336;;;:30;;-1:-1:-1;1365:1:0;1360;1351:5;1360:1;1365;1351:5;:::i;:::-;1347:9;-1:-1:-1;1346:15:0;;1347:9;1346:15;:::i;:::-;:20;1336:30;1328:63;;;;-1:-1:-1;;;1328:63:0;;;;;;;:::i;984:128::-;1036:6;1078:1;1068:5;1072:1;1078;1068:5;:::i;:::-;1064:9;;;1063:16;;1055:49;;;;-1:-1:-1;;;1055:49:0;;;;;;;:::i;2575:393::-;2668:13;2683;2710:14;2729:26;2740:6;2748;2729:10;:26::i;:::-;2709:46;;;2767:13;2782;2817:32;2825:7;2834:6;2842;2817:7;:32::i;:::-;-1:-1:-1;;;;;2800:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2766:98;-1:-1:-1;;;;;2766:98:0;;;-1:-1:-1;;;;;2766:98:0;;;2908:6;-1:-1:-1;;;;;2898:16:0;:6;-1:-1:-1;;;;;2898:16:0;;:62;;2941:8;2951;2898:62;;;2918:8;2928;2898:62;2875:85;;;;-1:-1:-1;2575:393:0;-1:-1:-1;;;;;;;2575:393:0:o;1582:353::-;1657:14;1673;1718:6;-1:-1:-1;;;;;1708:16:0;:6;-1:-1:-1;;;;;1708:16:0;;;1700:68;;;;-1:-1:-1;;;1700:68:0;;;;;;;:::i;:::-;1807:6;-1:-1:-1;;;;;1798:15:0;:6;-1:-1:-1;;;;;1798:15:0;;:53;;1836:6;1844;1798:53;;;1817:6;1825;1798:53;1779:72;;-1:-1:-1;1779:72:0;-1:-1:-1;;;;;;1870:20:0;;1862:65;;;;-1:-1:-1;;;1862:65:0;;;;;;;:::i;:::-;1582:353;;;;;:::o;1120:129::-;1172:6;1214:1;1204:5;1208:1;1214;1204:5;:::i;:::-;1200:9;;;1199:16;;1191:50;;;;-1:-1:-1;;;1191: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

Metadata Hash

1b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d5
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.