Contract 0x02341158eb17aeea92f29e6a7e0fe942615d8a44

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x761c9085190746ac4d35a7dc2cb08a3d1c523db8db5ccae153c70d491a633a4a85132272021-06-22 8:04:182 hrs 20 mins ago0x77e11df934a457fbf2f9ca47df76d8a28b560e1e IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.327896119479453 BNB0.00091494
0x8288b0b9f6284970763903bbc066db5d97e1edbd1062a57425039477d13beec585082502021-06-22 3:54:346 hrs 30 mins ago0x229340a6bf0cf6ff7761779c67ee4d79099cbc09 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056588
0x20253d4142944417447bbaf119acee423938cd1cc992281214ab800dbdcfbcfd85028772021-06-21 23:23:1511 hrs 1 min ago0xab0a01f7047c3bfb30df7ec5d6a168edfb1be5ce IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00084844
0x7ed185b2f0c1c866d47f2a78da3149017372ba3b205cafb54d0d8a6d2e9fcb2c84981802021-06-21 19:27:4114 hrs 57 mins ago0x5412eb430b6f86d8ac8a1e10e7a0f73a17040982 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056588
0x2bceb3d8e4595613bf01a4b49930e31ba957d0025e8e968d387f3eaacf37c03784942532021-06-21 16:10:2518 hrs 14 mins ago0x1cb7d243aec8b5e8dfa1f9a4405ddadf75dbfc38 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056576
0xa5b0220002e6a9f517d97a29cf63d2d49649af1d776e60061de0f2a3500187a584734602021-06-20 22:49:051 day 11 hrs ago0x722e320ef4aa12ec562b807a79cf3d2cdec6b424 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.0005771364
0x51348e566b24f90c5e0f0245520578ccfc05575d07d2c406ba4f5d928c776ee884376472021-06-19 16:56:272 days 17 hrs ago0xd9276e5b26579bdf923cf78ee9385f68a8cde45f IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.015485332386192 BNB0.000549835
0x67e398dfafbd781729ee460fa1e9da6a29689d9172dffaa4c1bd4ce0994b217684227642021-06-19 4:23:163 days 6 hrs ago0xd9276e5b26579bdf923cf78ee9385f68a8cde45f IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.01 BNB0.000749802
0x271175532fde716e454780f4452770035b766ce551ed8b9c008469e5fca088d584149542021-06-18 21:48:013 days 12 hrs ago0xee2e806b2adb48cebea5ccc3cb0dc110c2a1c768 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.0006407
0x9670f090da33c1837c2d1ddd0588c40dd407f79ad167c59b5b0d9a6b5a11935484148192021-06-18 21:41:133 days 12 hrs ago0xee2e806b2adb48cebea5ccc3cb0dc110c2a1c768 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.007305914549323 BNB0.00091482
0x5ada6f3f6021b93fe3d56f76b451ad2c4857b71ef6919a33ece8d48f49abc2bc84147162021-06-18 21:36:043 days 12 hrs ago0xee2e806b2adb48cebea5ccc3cb0dc110c2a1c768 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.116665426330673 BNB0.00058973
0x580948b302e067b0bad0a32f7467988a3658b3c38deecfd789d978d02a4caf8e84101022021-06-18 17:43:103 days 16 hrs ago0xc21f25834e8c15d26a0a4e08b227c082dfb1693e IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056576
0x6121616420311cc0ee42ab8d3c95e6a10164b621af0bea0b4454d83a622ee0df84028292021-06-18 11:36:413 days 22 hrs ago0x280f646a492e2e9a89c06a1f834353a1ed34cc32 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.164731118112114 BNB0.000624895
0xc3fe3bf53110b7450ffd27e796a19be1039699168f927a2d59ceb9c2dbd75b3a83989782021-06-18 8:23:014 days 2 hrs ago0x584737bd77987c3eb83db98519a7f684ee61392c IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a443.925746374785509 BNB0.000954295
0x5ff023ffd8f36f030914eae4f26135e287e06611022f33da848c245e393d24be83925762021-06-18 2:59:394 days 7 hrs ago0x722e320ef4aa12ec562b807a79cf3d2cdec6b424 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.1 BNB0.0006373317
0x72094086e555b6041a5e668470d8b97ab490db8f22e9c6793ee1445f22758b7b83788442021-06-17 15:27:214 days 18 hrs ago0x6ea4c4204b95981541a3c2f85cdf1c5b8da3c4ca IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.001 BNB0.000624835
0x6ca4859e601f2c16ccc2493fdf900723984f69701a15df3caec543f1f6200d4b83595412021-06-16 23:13:075 days 11 hrs ago0x1cb7d243aec8b5e8dfa1f9a4405ddadf75dbfc38 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056588
0x677fd2844cda0218d3d7e6a9cbd5fc158fd595ed8ab2b6e64825dbf8c33abd4e83558652021-06-16 20:08:295 days 14 hrs ago0xbcfcfc4704893c175300c5e6a851a0c59d484744 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.1 BNB0.000624775
0x574df30b669e1457ffaf73fc7191e927f70bd9555ef0e44615cce2cc2c0601e583507422021-06-16 15:50:135 days 18 hrs ago0xc4a7ec99c35528d8fc0d1dd53d456bdc3c13c979 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056588
0xbae05d1ec61e57146b7ddd16c3efd490866516eccff50fcee2d462131279858983456202021-06-16 11:33:165 days 22 hrs ago0xeca40e0a76d769b4039c646f4c6bda0b4ea424e3 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00056576
0x3138eaab55612775c3abfae6c58ac8c73c1194c04b502fcd63931ffb3550358083448922021-06-16 10:56:095 days 23 hrs ago0xc4a7ec99c35528d8fc0d1dd53d456bdc3c13c979 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440.2462 BNB0.000624895
0x6eaae78e3416b033baeb144fbf0be42552597ed18e8b4d8fc3fc5655c7a7436483303562021-06-15 22:42:306 days 11 hrs ago0xeca40e0a76d769b4039c646f4c6bda0b4ea424e3 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.000552045
0x627cabb6691888302eab26ea64855daa261b0ae7fa79aaae8091421ae7e126cf83303412021-06-15 22:41:456 days 11 hrs ago0xeca40e0a76d769b4039c646f4c6bda0b4ea424e3 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.000552435
0xb96a05341c2395fbcf13799344bf63a02a2ebadc490744895d6a1cc8331110b783302672021-06-15 22:38:036 days 11 hrs ago0xeca40e0a76d769b4039c646f4c6bda0b4ea424e3 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00086276
0x9b69f9dd82e91f5533e1f557823a0da10c278403c285d7d6fe28298875a2d42e83292302021-06-15 21:46:026 days 12 hrs ago0xcf93d767042ebe7c71e51821e7698caaba229732 IN  0x02341158eb17aeea92f29e6a7e0fe942615d8a440 BNB0.00084832
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x761c9085190746ac4d35a7dc2cb08a3d1c523db8db5ccae153c70d491a633a4a85132272021-06-22 8:04:182 hrs 20 mins ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.327896119479453392 BNB
0x8288b0b9f6284970763903bbc066db5d97e1edbd1062a57425039477d13beec585082502021-06-22 3:54:346 hrs 30 mins ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440x229340a6bf0cf6ff7761779c67ee4d79099cbc093.407002057455568017 BNB
0x8288b0b9f6284970763903bbc066db5d97e1edbd1062a57425039477d13beec585082502021-06-22 3:54:346 hrs 30 mins ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a443.407002057455568017 BNB
0x20253d4142944417447bbaf119acee423938cd1cc992281214ab800dbdcfbcfd85028772021-06-21 23:23:1511 hrs 1 min ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440xab0a01f7047c3bfb30df7ec5d6a168edfb1be5ce0.292392893588104586 BNB
0x20253d4142944417447bbaf119acee423938cd1cc992281214ab800dbdcfbcfd85028772021-06-21 23:23:1511 hrs 1 min ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.292392893588104586 BNB
0x7ed185b2f0c1c866d47f2a78da3149017372ba3b205cafb54d0d8a6d2e9fcb2c84981802021-06-21 19:27:4114 hrs 57 mins ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440x5412eb430b6f86d8ac8a1e10e7a0f73a170409820.402626252432706314 BNB
0x7ed185b2f0c1c866d47f2a78da3149017372ba3b205cafb54d0d8a6d2e9fcb2c84981802021-06-21 19:27:4114 hrs 57 mins ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.402626252432706314 BNB
0x2bceb3d8e4595613bf01a4b49930e31ba957d0025e8e968d387f3eaacf37c03784942532021-06-21 16:10:2518 hrs 14 mins ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440x1cb7d243aec8b5e8dfa1f9a4405ddadf75dbfc380.035703122699333075 BNB
0x2bceb3d8e4595613bf01a4b49930e31ba957d0025e8e968d387f3eaacf37c03784942532021-06-21 16:10:2518 hrs 14 mins ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.035703122699333075 BNB
0xa5b0220002e6a9f517d97a29cf63d2d49649af1d776e60061de0f2a3500187a584734602021-06-20 22:49:051 day 11 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440x722e320ef4aa12ec562b807a79cf3d2cdec6b4240.098735507709563932 BNB
0xa5b0220002e6a9f517d97a29cf63d2d49649af1d776e60061de0f2a3500187a584734602021-06-20 22:49:051 day 11 hrs ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.098735507709563932 BNB
0x51348e566b24f90c5e0f0245520578ccfc05575d07d2c406ba4f5d928c776ee884376472021-06-19 16:56:272 days 17 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.015485332386192987 BNB
0x67e398dfafbd781729ee460fa1e9da6a29689d9172dffaa4c1bd4ce0994b217684227642021-06-19 4:23:163 days 6 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.01 BNB
0x271175532fde716e454780f4452770035b766ce551ed8b9c008469e5fca088d584149542021-06-18 21:48:013 days 12 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440xee2e806b2adb48cebea5ccc3cb0dc110c2a1c7680.100804976242767973 BNB
0x271175532fde716e454780f4452770035b766ce551ed8b9c008469e5fca088d584149542021-06-18 21:48:013 days 12 hrs ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.100804976242767973 BNB
0x9670f090da33c1837c2d1ddd0588c40dd407f79ad167c59b5b0d9a6b5a11935484148192021-06-18 21:41:133 days 12 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.007305914549323493 BNB
0x5ada6f3f6021b93fe3d56f76b451ad2c4857b71ef6919a33ece8d48f49abc2bc84147162021-06-18 21:36:043 days 12 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440xee2e806b2adb48cebea5ccc3cb0dc110c2a1c7680.001041887535144466 BNB
0x5ada6f3f6021b93fe3d56f76b451ad2c4857b71ef6919a33ece8d48f49abc2bc84147162021-06-18 21:36:043 days 12 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.11562353879552909 BNB
0x580948b302e067b0bad0a32f7467988a3658b3c38deecfd789d978d02a4caf8e84101022021-06-18 17:43:103 days 16 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440xc21f25834e8c15d26a0a4e08b227c082dfb1693e0.071164431629367328 BNB
0x580948b302e067b0bad0a32f7467988a3658b3c38deecfd789d978d02a4caf8e84101022021-06-18 17:43:103 days 16 hrs ago Binance: WBNB Token 0x02341158eb17aeea92f29e6a7e0fe942615d8a440.071164431629367328 BNB
0x6121616420311cc0ee42ab8d3c95e6a10164b621af0bea0b4454d83a622ee0df84028292021-06-18 11:36:413 days 22 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.164731118112114085 BNB
0xc3fe3bf53110b7450ffd27e796a19be1039699168f927a2d59ceb9c2dbd75b3a83989782021-06-18 8:23:014 days 2 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a440x584737bd77987c3eb83db98519a7f684ee61392c1 wei
0xc3fe3bf53110b7450ffd27e796a19be1039699168f927a2d59ceb9c2dbd75b3a83989782021-06-18 8:23:014 days 2 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token3.925746374785509457 BNB
0x5ff023ffd8f36f030914eae4f26135e287e06611022f33da848c245e393d24be83925762021-06-18 2:59:394 days 7 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.1 BNB
0x72094086e555b6041a5e668470d8b97ab490db8f22e9c6793ee1445f22758b7b83788442021-06-17 15:27:214 days 18 hrs ago 0x02341158eb17aeea92f29e6a7e0fe942615d8a44 Binance: WBNB Token0.001 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BafiRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-03-29
*/

pragma solidity =0.6.6;

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

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

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

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

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

// helper methods for interacting with ERC20 tokens and sending ETH 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 safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

interface IBafiRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    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 BafiLibrary {
    using SafeMath 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, 'BafiLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BafiLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'0cc7d1ea4b37c48bfda2243aed4adb72f86a649977930ce4803c49d8a555a1d4' // 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);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IBafiPair(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, 'BafiLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BafiLibrary: 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, 'BafiLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BafiLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        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, 'BafiLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BafiLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        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, 'BafiLibrary: 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, 'BafiLibrary: 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);
        }
    }
}

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

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

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

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

contract BafiRouter is IBafiRouter02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

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

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IBafiFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBafiFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = BafiLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = BafiLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BafiRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = BafiLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BafiRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = BafiLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBafiPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = BafiLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IBafiPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = BafiLibrary.pairFor(factory, tokenA, tokenB);
        IBafiPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IBafiPair(pair).burn(to);
        (address token0,) = BafiLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BafiRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BafiRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = BafiLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBafiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = BafiLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IBafiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = BafiLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IBafiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BafiLibrary.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 ? BafiLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBafiPair(BafiLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BafiLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BafiLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BafiRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'BafiRouter: INVALID_PATH');
        amounts = BafiLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BafiRouter: INVALID_PATH');
        amounts = BafiLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BafiRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BafiRouter: INVALID_PATH');
        amounts = BafiLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'BafiRouter: INVALID_PATH');
        amounts = BafiLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BafiRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(BafiLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BafiLibrary.sortTokens(input, output);
            IBafiPair pair = IBafiPair(BafiLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BafiLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? BafiLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'BafiRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(BafiLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'BafiRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BafiLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BafiRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200570938038062005709833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61558262000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f75528061505652806150d652506155826000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154336026913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154336026913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061552b6022913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154336026913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154336026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154336026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061552b6022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614db5565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154a06021913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154596021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614f1e565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614f1e565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42616669526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42616669526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061552b6022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154c16023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547a6026913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e46023913960400191505060405180910390fd5b6000613f0f856103e663ffffffff61521f16565b90506000613f23828563ffffffff61521f16565b90506000613f4983613f3d886103e863ffffffff61521f16565b9063ffffffff6152a516565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f426166694c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b6020026020010151615317565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614db5565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f0cc7d1ea4b37c48bfda2243aed4adb72f86a649977930ce4803c49d8a555a1d4609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155076024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614db5565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f426166694c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614db5565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061540c6027913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e46023913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff61521f16565b9063ffffffff61521f16565b90506000614c986103e6614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff6152a516565b9695505050505050565b6000808411614d2f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f426166694c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614d3f5750600082115b614d94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e46023913960400191505060405180910390fd5b82614da5858463ffffffff61521f16565b81614dac57fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e5357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f426166694c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e8d578284614e90565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614f1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f426166694c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614fbe57600080fd5b505afa158015614fd2573d6000803e3d6000fd5b505050506040513d6020811015614fe857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150ce57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156150a157600080fd5b505af11580156150b5573d6000803e3d6000fd5b505050506040513d60208110156150cb57600080fd5b50505b6000806150fc7f00000000000000000000000000000000000000000000000000000000000000008b8b615317565b9150915081600014801561510e575080155b1561511e57879350869250615212565b600061512b898484614cbf565b9050878111615198578581101561518d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154596021913960400191505060405180910390fd5b889450925082615210565b60006151a5898486614cbf565b9050898111156151b157fe5b8781101561520a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154a06021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061523a5750508082028282828161523757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006153268585614db5565b5090506153348686866140c6565b506000806153438888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561538857600080fd5b505afa15801561539c573d6000803e3d6000fd5b505050506040513d60608110156153b257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153f95780826153fc565b81815b9099909850965050505050505056fe426166694c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5442616669526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5442616669526f757465723a20494e53554646494349454e545f425f414d4f554e54426166694c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5442616669526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544426166694c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454442616669526f757465723a204558434553534956455f494e5055545f414d4f554e54a2646970667358221220c6a1c8d0364389a11d407589cad62a5b9f8a869e6e22d796f94e58ca8935385064736f6c63430006060033000000000000000000000000590a402a8fc80e23e6ea4f5a81674df66fb689c5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000590a402a8fc80e23e6ea4f5a81674df66fb689c5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000590a402a8fc80e23e6ea4f5a81674df66fb689c5
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15392:18192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15857:10;:18;15871:4;15857:18;;15850:26;;;;15392:18192;;12:1:-1;9;2:12;19922:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19922:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19922:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32548:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32548:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32548:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26971:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26971:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26971:830:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26971:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26971:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26971:830:0;;-1:-1:-1;26971:830:0;-1:-1:-1;26971:830:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26971:830:0;;;;;;;;;;;;;;;;;33333:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33333:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33333:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33333:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33333:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33333:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33333:248:0;;-1:-1:-1;33333:248:0;;-1:-1:-1;;;;;33333:248:0:i;20601:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20601:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20601:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24258:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24258:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24258:613:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24258:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24258:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24258:613:0;;-1:-1:-1;24258:613:0;-1:-1:-1;24258:613:0;;;;;;;;;:::i;26157:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26157:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26157:808:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26157:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26157:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26157:808:0;;-1:-1:-1;26157:808:0;-1:-1:-1;26157:808:0;;;;;;;;;:::i;22718:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22718:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22718:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29934:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29934:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29934:704:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29934:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29934:704:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29934:704:0;;-1:-1:-1;29934:704:0;-1:-1:-1;29934:704:0;;;;;;;;;:::i;31485:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31485:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31485:828:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31485:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31485:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31485:828:0;;-1:-1:-1;31485:828:0;-1:-1:-1;31485:828:0;;;;;;;;;:::i;25474:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25474:677:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25474:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25474:677:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25474:677:0;;-1:-1:-1;25474:677:0;-1:-1:-1;25474:677:0;;;;;;;;;:::i;32813:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32813:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32813:256:0;;;;;;;;;;;;:::i;24877:591::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24877:591:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24877:591:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24877:591:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24877:591:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24877:591:0;;-1:-1:-1;24877:591:0;-1:-1:-1;24877:591:0;;;;;;;;;:::i;15516:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15516:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32357:183;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32357:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32357:183:0;;;;;;;;;;;;:::i;22012:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22012:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22012:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30644:835::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30644:835:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30644:835:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30644:835:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30644:835:0;;-1:-1:-1;30644:835:0;-1:-1:-1;30644:835:0;;;;;;;;;:::i;19081:::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19081:835:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19081:835:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15468:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15468:41:0;;;:::i;33077:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33077:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33077:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33077:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33077:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33077:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33077:248:0;;-1:-1:-1;33077:248:0;;-1:-1:-1;;;;;33077:248:0:i;21274:659::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21274:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21274:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17340:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17340:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;17340:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18074:964;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18074:964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27807:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27807:790:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27807:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27807:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27807:790:0;;-1:-1:-1;27807:790:0;-1:-1:-1;27807:790:0;;;;;;;;;:::i;19922:673::-;20159:16;20177:14;20140:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20231:196:::1;20261:5;20281:4;20300:9;20324:14;20353:12;20388:4;20408:8;20231:15;:196::i;:::-;20204:223:::0;;-1:-1:-1;20204:223:0;-1:-1:-1;20438:51:0::1;20466:5:::0;20473:2;20204:223;20438:27:::1;:51::i;:::-;20506:4;20500:20;;;20521:9;20500:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20500:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20500:31:0;;;;20542:45;20573:2;20577:9;20542:30;:45::i;:::-;19922:673:::0;;;;;;;;;;:::o;32548:257::-;32701:14;32740:57;32765:8;32775:9;32786:10;32740:24;:57::i;:::-;32733:64;32548:257;-1:-1:-1;;;;32548:257:0:o;26971:830::-;27185:21;27157:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27232:29:::1;27257:4;27232:29;:4:::0;;27237:15;;;27232:21;;::::1;;;;;;;;;;;;;:29;;;27224:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27311:50;27337:7;27346:8;27356:4;;27311:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27311:25:0::1;::::0;-1:-1:-1;;;27311:50:0:i:1;:::-;27301:60;;27411:12;27380:7;27405:1;27388:7;:14;:18;27380:27;;;;;;;;;;;;;;:43;;27372:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27477:136;27523:4;;27528:1;27523:7;;;;;;;;;;;;;;;27532:10;27544:46;27564:7;27573:4;;27578:1;27573:7;;;;;;;;;;;;;;;27582:4;;27587:1;27582:7;;;;;;;;;;;;;;;27544:19;:46::i;:::-;27592:7;27600:1;27592:10;;;;;;;;;;;;;;27477:31;:136::i;:::-;27624:35;27630:7;27639:4;;27624:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27653:4:0::1;::::0;-1:-1:-1;27624:5:0::1;::::0;-1:-1:-1;;27624:35:0:i:1;:::-;27676:4;27670:20;;;27691:7;27716:1;27699:7;:14;:18;27691:27;;;;;;;;;;;;;;27670:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27670:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27670:49:0;;;;27730:63;27761:2;27765:7;27790:1;27773:7;:14;:18;27765:27;;;;;;;;;;;;;;27730:30;:63::i;:::-;26971:830:::0;;;;;;;;;:::o;33333:248::-;33477:21;33523:50;33548:7;33557:9;33568:4;33523:24;:50::i;:::-;33516:57;;33333:248;;;;;:::o;20601:667::-;20907:12;20921;20946;20961:44;20981:7;20990:6;20998;20961:19;:44::i;:::-;20946:59;;21016:10;21029;:33;;21053:9;21029:33;;;21047:2;21029:33;21073:75;;;;;;21096:10;21073:75;;;;21116:4;21073:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21016:46;;-1:-1:-1;21073:22:0;;;;;;:75;;;;;-1:-1:-1;;21073:75:0;;;;;;;;-1:-1:-1;21073:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;21073:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21073:75:0;;;;21180:80;21196:6;21204;21212:9;21223:10;21235;21247:2;21251:8;21180:15;:80::i;:::-;21159:101;;;;;;;;20601:667;;;;;;;;;;;;;;;;:::o;24258:613::-;24482:21;24463:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24526:50:::1;24552:7;24561:8;24571:4;;24526:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24526:25:0::1;::::0;-1:-1:-1;;;24526:50:0:i:1;:::-;24516:60;;24626:12;24595:7;24620:1;24603:7;:14;:18;24595:27;;;;;;;;;;;;;;:43;;24587:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24692:136;24738:4;;24743:1;24738:7;;;;;;24692:136;24839:24;24845:7;24854:4;;24839:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24860:2:0;;-1:-1:-1;24839:5:0::1;::::0;-1:-1:-1;;24839:24:0:i:1;26157:808::-:0;26371:21;26343:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26418:29:::1;26443:4;26418:29;:4:::0;;26423:15;;;26418:21;;::::1;;;;;;;;;;;;;:29;;;26410:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26497:50;26522:7;26531:9;26542:4;;26497:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26497:24:0::1;::::0;-1:-1:-1;;;26497:50:0:i:1;:::-;26487:60;;26580:11;26566:7;26574:1;26566:10;;;;;;;;;;;;;;:25;;26558:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22718:708:::0;23036:14;23063:12;23078:41;23098:7;23107:5;23114:4;23078:19;:41::i;:::-;23063:56;;23130:10;23143;:33;;23167:9;23143:33;;;23161:2;23143:33;23187:75;;;;;;23210:10;23187:75;;;;23230:4;23187:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23130:46;;-1:-1:-1;23187:22:0;;;;;;:75;;;;;-1:-1:-1;;23187:75:0;;;;;;;;-1:-1:-1;23187:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;23187:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23187:75:0;;;;23285:133;23347:5;23354:9;23365:14;23381:12;23395:2;23399:8;23285:47;:133::i;:::-;23273:145;22718:708;-1:-1:-1;;;;;;;;;;;;;22718:708:0:o;29934:704::-;30168:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30189:134:::1;30235:4;;30240:1;30235:7;;;;;;;;;;;;;;;30244:10;30256:46;30276:7;30285:4;;30290:1;30285:7;;;;;;;;;;;;;;;30294:4;;30299:1;30294:7;;;;;;30256:46;30304:8;30189:31;:134::i;:::-;30334:18;30362:4:::0;;30367:15;;;30362:21;;::::1;;;;;;;;;;;;;30355:39;;;30395:2;30355:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30355:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30355:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30355:43:0;30409:44:::1;::::0;;30355:43:::1;30409:44:::0;;::::1;::::0;;;;;;;;;;;30355:43;;-1:-1:-1;30409:44:0::1;::::0;;;30444:4;;;;;;30409:44;::::1;::::0;30444:4;;30409:44;30444:4;30409:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30450:2:0;;-1:-1:-1;30409:34:0::1;::::0;-1:-1:-1;;30409:44:0:i:1;:::-;30552:12:::0;30486:62:::1;30534:13:::0;30493:4;;30498:15;;;30493:21;;::::1;;;;;;;;;;;;;30486:39;;;30526:2;30486:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30486:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30486:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30486:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30464:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15675:1;29934:704:::0;;;;;;;:::o;31485:828::-;31752:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31786:29:::1;31811:4;31786:29;:4:::0;;31791:15;;;31786:21;;::::1;;;;;;;;;;;;;:29;;;31778:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31855:134;31901:4;;31906:1;31901:7;;;;;;31855:134;32000:55;32035:4;;32000:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32049:4:0::1;::::0;-1:-1:-1;32000:34:0::1;::::0;-1:-1:-1;;32000:55:0:i:1;:::-;32083:37;::::0;;;;;32114:4:::1;32083:37;::::0;::::1;::::0;;;32066:14:::1;::::0;32083:22:::1;32090:4;32083:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32083:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32083:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32083:37:0;;-1:-1:-1;32139:25:0;;::::1;;32131:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32224:4;32218:20;;;32239:9;32218:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32218:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32218:31:0;;;;32260:45;32291:2;32295:9;32260:30;:45::i;25474:677::-:0;25690:21;25662:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25748:4:::1;25737:15;;:4;;25742:1;25737:7;;;;;;;;;;;;;;;:15;;;25729:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25802:51;25828:7;25837:9;25848:4;;25802:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25802:25:0::1;::::0;-1:-1:-1;;;25802:51:0:i:1;:::-;25792:61;;25903:12;25872:7;25897:1;25880:7;:14;:18;25872:27;;;;;;;;;;;;;;:43;;25864:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25975:4;25969:19;;;25996:7;26004:1;25996:10;;;;;;;;;;;;;;25969:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25969:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25969:40:0;;;;;26033:4;26027:20;;;26048:46;26068:7;26077:4;;26082:1;26077:7;;;;;;26048:46;26096:7;26104:1;26096:10;;;;;;;;;;;;;;26027:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26027:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26027:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26027:80:0;26020:88:::1;;;;26119:24;26125:7;26134:4;;26119:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26140:2:0;;-1:-1:-1;26119:5:0::1;::::0;-1:-1:-1;;26119:24:0:i:1;:::-;25474:677:::0;;;;;;;;:::o;32813:256::-;32966:13;33004:57;33028:9;33039;33050:10;33004:23;:57::i;24877:591::-;25101:21;25082:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25145:50:::1;25170:7;25179:9;25190:4;;25145:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25145:24:0::1;::::0;-1:-1:-1;;;25145:50:0:i:1;:::-;25135:60;;25228:11;25214:7;25222:1;25214:10;;;;;;;;;;;;;;:25;;25206:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15516:38:::0;;;:::o;32357:183::-;32454:12;32486:46;32504:7;32513:8;32523;32486:17;:46::i;22012:700::-;22278:14;22259:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22321:196:::1;22351:5;22371:4;22390:9;22414:14;22443:12;22478:4;22498:8;22321:15;:196::i;:::-;22567:38;::::0;;;;;22599:4:::1;22567:38;::::0;::::1;::::0;;;22305:212;;-1:-1:-1;22528:78:0::1;::::0;-1:-1:-1;22556:5:0;;22563:2;;22567:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22567:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22567:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22567:38:0;22528:27:::1;:78::i;:::-;22623:4;22617:20;;;22638:9;22617:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22617:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22617:31:0;;;;22659:45;22690:2;22694:9;22659:30;:45::i;30644:835::-:0;30904:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30949:4:::1;30938:15;;:4;;30943:1;30938:7;;;;;;;;;;;;;;;:15;;;30930:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30993:13;31009:9;30993:25;;31035:4;31029:19;;;31056:8;31029:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31029:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31029:38:0;;;;;31091:4;31085:20;;;31106:46;31126:7;31135:4;;31140:1;31135:7;;;;;;31106:46;31154:8;31085:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31085:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31085:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31085:78:0;31078:86:::1;;;;31175:18;31203:4:::0;;31208:15;;;31203:21;;::::1;;;;;;;;;;;;;31196:39;;;31236:2;31196:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31196:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31196:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31196:43:0;31250:44:::1;::::0;;31196:43:::1;31250:44:::0;;::::1;::::0;;;;;;;;;;;31196:43;;-1:-1:-1;31250:44:0::1;::::0;;;31285:4;;;;;;31250:44;::::1;::::0;31285:4;;31250:44;31285:4;31250:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31291:2:0;;-1:-1:-1;31250:34:0::1;::::0;-1:-1:-1;;31250:44:0:i:1;:::-;31393:12:::0;31327:62:::1;31375:13:::0;31334:4;;31339:15;;;31334:21;;::::1;;;;;;;;;;;;;31327:39;;;31367:2;31327:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19081:835:0::0;19335:12;19349;19316:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19374:12:::1;19389:44;19409:7;19418:6;19426;19389:19;:44::i;:::-;19444:57;::::0;;;;;19473:10:::1;19444:57;::::0;::::1;::::0;:28:::1;::::0;::::1;:57:::0;;;;;;;;;;;;;;19374:59;;-1:-1:-1;19444:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19444:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19444:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19444:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19569:24:0::1;::::0;;;;;:20:::1;:24:::0;;::::1;;::::0;::::1;::::0;;;19539:12:::1;::::0;;;19569:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;19539:12;19569:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19569:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19569:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19569:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19569:24:0;-1:-1:-1;19605:14:0::1;19624:38;19647:6:::0;19655;19624:22:::1;:38::i;:::-;19604:58;;;19704:6;19694:16;;:6;:16;;;:58;;19735:7;19744;19694:58;;;19714:7;19723;19694:58;19673:79:::0;;-1:-1:-1;19673:79:0;-1:-1:-1;19771:21:0;;::::1;;19763:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19860:10;19849:7;:21;;19841:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15675:1;;;;19081:835:::0;;;;;;;;;;;:::o;15468:41::-;;;:::o;33077:248::-;33221:21;33267:50;33293:7;33302:8;33312:4;33267:25;:50::i;21274:659::-;21563:16;21581:14;21608:12;21623:41;21643:7;21652:5;21659:4;21623:19;:41::i;:::-;21608:56;;21675:10;21688;:33;;21712:9;21688:33;;;21706:2;21688:33;21732:75;;;;;;21755:10;21732:75;;;;21775:4;21732:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21675:46;;-1:-1:-1;21732:22:0;;;;;;:75;;;;;-1:-1:-1;;21732:75:0;;;;;;;;-1:-1:-1;21732:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;21732:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21732:75:0;;;;21845:80;21864:5;21871:9;21882:14;21898:12;21912:2;21916:8;21845:18;:80::i;:::-;21818:107;;;;-1:-1:-1;21274:659:0;-1:-1:-1;;;;;;;;;;;;;21274:659:0:o;17340:728::-;17628:12;17642;17656:14;17609:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17704:85:::1;17718:6;17726;17734:14;17750;17766:10;17778;17704:13;:85::i;:::-;17683:106:::0;;-1:-1:-1;17683:106:0;-1:-1:-1;17800:12:0::1;17815:44;17835:7;17844:6:::0;17852;17815:19:::1;:44::i;:::-;17800:59;;17870:66;17902:6;17910:10;17922:4;17928:7;17870:31;:66::i;:::-;17947;17979:6;17987:10;17999:4;18005:7;17947:31;:66::i;:::-;18046:4;18036:20;;;18057:2;18036:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18036:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18036:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18036:24:0;17340:728;;;;-1:-1:-1;18036:24:0;;-1:-1:-1;17340:728:0;;-1:-1:-1;;;;;;;;;17340:728:0:o;18074:964::-;18327:16;18345:14;18361;18308:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18415:176:::1;18443:5;18463:4;18482:18;18515:9;18539:14;18568:12;18415:13;:176::i;:::-;18388:203:::0;;-1:-1:-1;18388:203:0;-1:-1:-1;18602:12:0::1;18617:41;18637:7;18646:5:::0;18653:4:::1;18617:19;:41::i;:::-;18602:56;;18669:69;18701:5;18708:10;18720:4;18726:11;18669:31;:69::i;:::-;18755:4;18749:19;;;18776:9;18749:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18749:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18749:39:0;;;;;18812:4;18806:20;;;18827:4;18833:9;18806:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18806:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18806:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18806:37:0;18799:45:::1;;;;18877:4;18867:20;;;18888:2;18867:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18867:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18867:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18867:24:0;;-1:-1:-1;18942:9:0::1;:21:::0;-1:-1:-1;18938:92:0::1;;;18965:65;18996:10;19020:9;19008;:21;18965:30;:65::i;:::-;15675:1;18074:964:::0;;;;;;;;;;;:::o;27807:790::-;28020:21;27992:8;15625:15;15613:8;:27;;15605:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28078:4:::1;28067:15;;:4;;28072:1;28067:7;;;;;;;;;;;;;;;:15;;;28059:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28132:50;28157:7;28166:9;28177:4;;28132:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28132:24:0::1;::::0;-1:-1:-1;;;28132:50:0:i:1;:::-;28122:60;;28215:9;28201:7;28209:1;28201:10;;;;;;;;;;;;;;:23;;28193:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28280:4;28274:19;;;28301:7;28309:1;28301:10;;;;;;;;;;;;;;28274:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28274:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28274:40:0;;;;;28338:4;28332:20;;;28353:46;28373:7;28382:4;;28387:1;28382:7;;;;;;28353:46;28401:7;28409:1;28401:10;;;;;;;;;;;;;;28332:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28332:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28332:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28332:80:0;28325:88:::1;;;;28424:24;28430:7;28439:4;;28424:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28445:2:0;;-1:-1:-1;28424:5:0::1;::::0;-1:-1:-1;;28424:24:0:i:1;:::-;28511:7;28519:1;28511:10;;;;;;;;;;;;;;28499:9;:22;28495:94;;;28523:66;28554:10;28578:7;28586:1;28578:10;;;;;;;;;;;;;;28566:9;:22;28523:30;:66::i;1182:361::-:0;1377:45;;;1366:10;1377:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1377:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1377:45:0;179:29:-1;160:49;;1366:57:0;;;;1331:12;;1345:17;;1366:10;;;;1377:45;1366:57;;;25:18:-1;1366:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1366:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1330:93:0;;;;1442:7;:57;;;;-1:-1:-1;1454:11:0;;:16;;:44;;;1485:4;1474:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1474:24:0;1454:44;1434:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1182:361;;;;;:::o;1961:195::-;2069:12;;;2031;2069;;;;;;;;;2048:7;;;;2062:5;;2048:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2048:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2030:52:0;;;2101:7;2093:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1961:195;;;:::o;12108:507::-;12201:14;12247:1;12236:8;:12;12228:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12322:1;12310:9;:13;:31;;;;;12340:1;12327:10;:14;12310:31;12302:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12392:20;12415:17;:8;12428:3;12415:17;:12;:17;:::i;:::-;12392:40;-1:-1:-1;12443:14:0;12460:31;12392:40;12480:10;12460:31;:19;:31;:::i;:::-;12443:48;-1:-1:-1;12502:16:0;12521:40;12545:15;12521:19;:9;12535:4;12521:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12502:59;;12596:11;12584:9;:23;;;;;;;12108:507;-1:-1:-1;;;;;;;12108:507:0:o;13280:506::-;13381:21;13438:1;13423:4;:11;:16;;13415:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13501:4;:11;13490:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13490:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13490:23:0;;13480:33;;13537:8;13524:7;13532:1;13524:10;;;;;;;;;;;;;:21;;;;;13561:6;13556:223;13587:1;13573:4;:11;:15;13569:1;:19;13556:223;;;13611:14;13627:15;13646:42;13658:7;13667:4;13672:1;13667:7;;;;;;;;;;;;;;13676:4;13681:1;13685;13681:5;13676:11;;;;;;;;;;;;;;13646;:42::i;:::-;13610:78;;;;13720:47;13733:7;13741:1;13733:10;;;;;;;;;;;;;;13745:9;13756:10;13720:12;:47::i;:::-;13703:7;13711:1;13715;13711:5;13703:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13590:3:0;;13556:223;;;;13280:506;;;;;:::o;10597:478::-;10686:12;10712:14;10728;10746:26;10757:6;10765;10746:10;:26::i;:::-;10910:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10910:32:0;;;;;10900:43;;;;;;10813:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10813:251:0;;;;;;;10803:262;;;;;;;;;10597:478;-1:-1:-1;;;;;10597:478:0:o;1551:402::-;1776:51;;;1765:10;1776:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1776:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1776:51:0;179:29:-1;160:49;;1765:63:0;;;;1730:12;;1744:17;;1765:10;;;;1776:51;1765:63;;;25:18:-1;1765:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1765:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1729:99:0;;;;1847:7;:57;;;;-1:-1:-1;1859:11:0;;:16;;:44;;;1890:4;1879:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1879:24:0;1859:44;1839:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1551:402;;;;;;:::o;23537:715::-;23644:6;23639:606;23670:1;23656:4;:11;:15;23652:1;:19;23639:606;;;23694:13;23709:14;23728:4;23733:1;23728:7;;;;;;;;;;;;;;23737:4;23742:1;23746;23742:5;23737:11;;;;;;;;;;;;;;23693:56;;;;23765:14;23784:37;23807:5;23814:6;23784:22;:37::i;:::-;23764:57;;;23836:14;23853:7;23861:1;23865;23861:5;23853:14;;;;;;;;;;;;;;23836:31;;23883:15;23900;23928:6;23919:15;;:5;:15;;;:61;;23961:9;23977:1;23919:61;;;23943:1;23947:9;23919:61;23882:98;;;;23995:10;24026:1;24012:4;:11;:15;24008:1;:19;:77;;24082:3;24008:77;;;24030:49;24050:7;24059:6;24067:4;24072:1;24076;24072:5;24067:11;;;;;;;;;;;;;;24030:19;:49::i;:::-;23995:90;;24110:43;24130:7;24139:5;24146:6;24110:19;:43::i;:::-;24100:59;;;24178:10;24190;24202:2;24216:1;24206:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24206:12:0;87:42:-1;143:17;;-1:-1;24206:12:0;;24100:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24100:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24100:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23673:3:0;;;;;-1:-1:-1;23639:606:0;;-1:-1:-1;;;;;;;;23639:606:0;;;23537:715;;;:::o;13867:527::-;13968:21;14025:1;14010:4;:11;:16;;14002:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14088:4;:11;14077:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14077:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14077:23:0;;14067:33;;14141:9;14111:7;14136:1;14119:7;:14;:18;14111:27;;;;;;;;;;;;;;;;;:39;14175:11;;:15;;14161:226;14192:5;;14161:226;;14220:14;14236:15;14255:42;14267:7;14276:4;14285:1;14281;:5;14276:11;;;;;;;;;;;;;;14289:4;14294:1;14289:7;;;;;;;14255:42;14219:78;;;;14329:46;14341:7;14349:1;14341:10;;;;;;;;;;;;;;14353:9;14364:10;14329:11;:46::i;:::-;14312:7;14324:1;14320;:5;14312:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;14199:3:0;;14161:226;;28744:1184;28857:6;28852:1069;28883:1;28869:4;:11;:15;28865:1;:19;28852:1069;;;28907:13;28922:14;28941:4;28946:1;28941:7;;;;;;;;;;;;;;28950:4;28955:1;28959;28955:5;28950:11;;;;;;;;;;;;;;28906:56;;;;28978:14;28997:37;29020:5;29027:6;28997:22;:37::i;:::-;28977:57;;;29049:14;29076:43;29096:7;29105:5;29112:6;29076:19;:43::i;:::-;29049:71;;29135:16;29166:17;29254:13;29269;29287:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29287:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29287:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29287:18:0;;;;;;;29253:52;;;;;-1:-1:-1;29253:52:0;;-1:-1:-1;29321:17:0;;29362:15;;;;;;;;:61;;29404:8;29414;29362:61;;;29381:8;29391;29362:61;29320:103;;;;29452:56;29495:12;29459:5;29452:23;;;29484:4;29452:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29452:56:0;29438:70;;29538:66;29563:11;29576:12;29590:13;29538:24;:66::i;:::-;29523:81;;28852:1069;;;;29635:15;29652;29680:6;29671:15;;:5;:15;;;:67;;29716:12;29735:1;29671:67;;;29695:1;29699:12;29671:67;29634:104;;;;29753:10;29784:1;29770:4;:11;:15;29766:1;:19;:77;;29840:3;29766:77;;;29788:49;29808:7;29817:6;29825:4;29830:1;29834;29830:5;29825:11;;;;;;;29788:49;29896:12;;;29906:1;29896:12;;;;;;;;;;29858:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;29753:90;;-1:-1:-1;29858:9:0;;;;;;29868:10;;29880;;29753:90;;29896:12;;29858:51;;;;;;;;29896:12;;29858:51;;;;29896:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29858:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29858:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28886:3:0;;;;;-1:-1:-1;28852:1069:0;;-1:-1:-1;;;;;;;;;;28852:1069:0;9720:129;9804:5;;;9799:16;;;;9791:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12736:462;12829:13;12875:1;12863:9;:13;12855:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12951:1;12939:9;:13;:31;;;;;12969:1;12956:10;:14;12939:31;12931:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13021:14;13038:34;13067:4;13038:24;:9;13052;13038:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13021:51;-1:-1:-1;13083:16:0;13102:34;13132:3;13102:25;:10;13117:9;13102:25;:14;:25;:::i;:34::-;13083:53;;13158:32;13188:1;13171:11;13159:9;:23;;;;;;;13158:32;:29;:32;:::i;:::-;13147:43;12736:462;-1:-1:-1;;;;;;12736:462:0:o;11675:311::-;11757:12;11800:1;11790:7;:11;11782:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11868:1;11857:8;:12;:28;;;;;11884:1;11873:8;:12;11857:28;11849:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11970:8;11946:21;:7;11958:8;11946:21;:11;:21;:::i;:::-;:32;;;;;;;11675:311;-1:-1:-1;;;;11675:311:0:o;10166:339::-;10241:14;10257;10302:6;10292:16;;:6;:16;;;;10284:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10384:6;10375:15;;:6;:15;;;:53;;10413:6;10421;10375:53;;;10394:6;10402;10375:53;10356:72;;-1:-1:-1;10356:72:0;-1:-1:-1;10447:20:0;;;10439:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10166:339;;;;;:::o;15979:1355::-;16292:45;;;;;;:59;:45;;;;;;;;;;;;;;;;16197:12;;;;;;16305:7;16292:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;16292:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16292:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16292:45:0;:59;;;16288:140;;;16368:48;;;;;;:32;:48;;;;;;;;;;;;;;;;16381:7;16368:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;16368:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16368:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16368:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16288:140:0;16439:13;16454;16471:48;16495:7;16504:6;16512;16471:23;:48::i;:::-;16438:81;;;;16534:8;16546:1;16534:13;:30;;;;-1:-1:-1;16551:13:0;;16534:30;16530:797;;;16603:14;;-1:-1:-1;16619:14:0;;-1:-1:-1;16530:797:0;;;16667:19;16689:53;16707:14;16723:8;16733;16689:17;:53::i;:::-;16667:75;;16779:14;16761;:32;16757:559;;16840:10;16822:14;:28;;16814:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16929:14;;-1:-1:-1;16945:14:0;-1:-1:-1;16945:14:0;16757:559;;;17001:19;17023:53;17041:14;17057:8;17067;17023:17;:53::i;:::-;17001:75;;17120:14;17102;:32;;17095:40;;;;17180:10;17162:14;:28;;17154:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17269:14;-1:-1:-1;17285:14:0;;-1:-1:-1;16757:559:0;16530:797;;15979:1355;;;;;;;;;;;:::o;9857:142::-;9909:6;9936;;;:30;;-1:-1:-1;;9951:5:0;;;9965:1;9960;9951:5;9960:1;9946:15;;;;;:20;9936:30;9928:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9584:128;9668:5;;;9663:16;;;;9655:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11133:429;11226:13;11241;11268:14;11287:26;11298:6;11306;11287:10;:26::i;:::-;11267:46;;;11324:32;11332:7;11341:6;11349;11324:7;:32::i;:::-;;11368:13;11383;11411:32;11419:7;11428:6;11436;11411:7;:32::i;:::-;11401:55;;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11401:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11401:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11401:57:0;;;;;;;11367:91;;;;;-1:-1:-1;11367:91:0;;-1:-1:-1;11492:16:0;;;;;;;;:62;;11535:8;11545;11492:62;;;11512:8;11522;11492:62;11469:85;;;;-1:-1:-1;11133:429:0;-1:-1:-1;;;;;;;11133:429:0:o

Swarm Source

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