Contract 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 4

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xba0951263973b62f35c61b60512d67df25c26a844b189592ca485131adb1732bSwap Exact ETH F...114943742021-10-05 1:16:5215 days 6 hrs ago0xd9fc060b4fb2cc688b452a0de821b396b1bd041b IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0005 BNB0.00011746
0x3e5123effc2fcea25cddb56eb8a190f1bd209dbe1dd318a69c3b4376e0a6944dSwap Exact ETH F...109165112021-09-14 20:33:2335 days 11 hrs ago0x69861b55d5f6a660b666ba4105e82b5785d01ce2 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.002224315 BNB0.00011758
0xcfc160042001596dc199c5bf2404840b5ba7cc3ea917943174b38e3a34363cb4Swap Exact ETH F...108634872021-09-13 0:15:5937 days 7 hrs ago0x0b957c38e3bb1854a8e1a6d1abf1ef553f4a6a51 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0005 BNB0.00011752
0x02274e582e693057c8d3854ae6a77131b4b0a1f855b21b39ab7d7b3666a9a8eaSwap Exact ETH F...95633992021-07-29 2:31:1783 days 5 hrs ago0x4c6a7e3d9bb0c9a4446510e313acea3390f2f5b1 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.002 BNB0.00011936
0xde9c35973a215c4f89d317ec9b876411869d4eb0233bca92425a15a251b804d2Swap Exact ETH F...92887872021-07-19 8:47:3392 days 23 hrs ago0x5ee65e4c647f37611cde296803d4fd611bb69dd5 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.024 BNB0.00011942
0x824e6bc025d8aa62f8db4801c5017120f718062e21f7aa3fc7bec54230c0e551Swap Exact ETH F...90653382021-07-11 14:30:39100 days 17 hrs ago0x8a4862f89c4315505d2e238e33e0f26bdade06fa IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.002 BNB0.00011752
0xdd099c1d66cbca64c3d7817cc03f795d0fd608c315c74b9a50050dc6e4c69d74Swap Exact ETH F...90484892021-07-11 0:28:12101 days 7 hrs ago0xd5b7b62925bdb8e81db8731aaeb885649df82a36 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.03 BNB0.00023884
0x0a2e4788841833f8026ec7273d3aa013bdff31227e868c7d09f2cc69bb863400Swap Exact ETH F...89955922021-07-09 4:22:57103 days 3 hrs ago0xee3ab084deb5b6988af40dc426ef6b1732664268 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.001 BNB0.00011746
0x995086b093d0d5fcaac6fc0263c877c1a6a7c6e88223c8ea3b32cbd3241f723cSwap Exact ETH F...89269412021-07-06 19:08:28105 days 13 hrs ago0xfcb964754d65a2f35b7c62a78f22fb1c75ecb0e7 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.001 BNB0.0001174
0xf043c379993714fd0e6b38092576ff5cee9057ca948a3a0aad34d40dce77ec00Swap Exact ETH F...89128102021-07-06 7:17:18106 days 51 mins ago0xcf2d50c2529dc39ef1be9b8fa8c005b0502e13f9 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0001 BNB0.00011746
0x184eaf7f7633459de005f3e4af800149cf98c818cdf9599275e55fc0603d9d76Swap Exact ETH F...89124742021-07-06 7:00:13106 days 1 hr ago0xea867a22ce414c0afe0dd706f2a9eaec9f3ac431 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0001 BNB0.00011746
0x2898ba619b39a00d2d050b3c15f4430a262f3f08c512ab345c533b122aab555fSwap Exact ETH F...89119942021-07-06 6:36:12106 days 1 hr ago0x26b4c569e6f175410d7e4aef294feb77a1c9b913 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0001 BNB0.00011746
0xe2a7c106b1e93629482ee451b83c500010608f73337ce24edeca8ed6158abde1Swap Exact Token...88655952021-07-04 15:35:26107 days 16 hrs ago0xa9f6c8cd9b193785662f0b4707eb00eee0c12a2b IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020 BNB0.00063847
0xd4f20e204c13045229f6a3d5c6cf19877469bcdc60b3e3aafa7a6d2cc6d590ccSwap Exact Token...88352932021-07-03 14:09:27108 days 17 hrs ago0x15bf2f1dd601c102d9b08e4b7c5f5deab7253746 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020 BNB0.00071372
0x843a9e107c5094e3ed30ee1935237124d415f9b5d4283c6ee69df042ad716b03Swap Exact ETH F...86735652021-06-27 22:10:54114 days 9 hrs ago0x3f6e9768ac30657ca93b8d00d7f8000c3fd944a0 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.0001 BNB0.00011734
0x6d0ee02a8242a0863875891d4fac035c620d7124759907cf4072c9360b70818fSwap Exact ETH F...84509752021-06-20 4:03:31122 days 4 hrs ago0x0826b0c148fdaff2c8ad89500767fa0b11e09026 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.01 BNB0.001002615
0x908b9d9adcadca12b5bcccfab3c128d2a6a5ec331cd230c58deffe7c23499e45Swap Exact ETH F...84417952021-06-19 20:24:22122 days 11 hrs ago0xdd3ba8044ce6d4c1ec566925f683e9ace044a3a5 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.01 BNB0.00011746
0xbf2286085bdd87f86eb34d4a1aad63da768678d00fd571a28d3fd9383b57e327Swap Exact ETH F...84258642021-06-19 6:58:41123 days 1 hr ago0xa384e1bdcbc14e94ec327e1ed8a46a48b36402f6 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.01 BNB0.00011758
0x97fe797f6dcadde81ca4695531c01a34025c859eb7d4d6d7b7615d96a0dd50e0Swap Exact ETH F...84213602021-06-19 3:12:34123 days 4 hrs ago0xe9885766cdfcc91d480984f8797ffff5ef7ab955 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.002 BNB0.00011758
0xd1c5a0993f7e01dbeb282671193ba832f189ccfe2081d3b0fc61690a2676da72Swap Exact ETH F...84212152021-06-19 3:04:46123 days 5 hrs ago0x74c700d74a1cef30e8dfe07ca7452d44fcaf57f2 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.002 BNB0.00011752
0xa1a44405dcf1929afa477ccce8cd2571a12365f7ae8f417d6f10041854a7f458Swap Exact ETH F...84192442021-06-19 1:26:12123 days 6 hrs ago0x924a2dc0d0ef042c3f32150a5c02c2465a149bb9 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.03 BNB0.00012132
0xb50c4641bbf0e1a39f513d3f3ba5d0517aa20b452e1a42a428514b042ca63317Swap Exact ETH F...84111602021-06-18 18:36:57123 days 13 hrs ago0x678595c13b5c543e24fc996e0b45e078da49e915 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.00021 BNB0.00011752
0x668b390bdefaf6d465f202e691641f0faad842d917b49f60e650f2c25aa47893Swap Exact Token...84110352021-06-18 18:30:32123 days 13 hrs ago0xa5cae3fb6c35dedb539acd4bf69ff3c34e768e02 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020 BNB0.000118675
0xa5016d5c05f96247c4bcc10a718dbf0288c4388ddeea961c2fbbf9187a08f910Swap Exact Token...84101872021-06-18 17:47:25123 days 14 hrs ago0x2276745bb09b9c164839740d2d26cc2a8e8979cb IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020 BNB0.00063872
0x031b44e60487c25f60e3f69bb94a4c193cb61e6a06b543e5bd1fd3d778789343Swap Exact ETH F...84074842021-06-18 15:31:28123 days 16 hrs ago0xf2a685af1448ae658308248493e692187a657539 IN  0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.00016 BNB0.00011746
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe2a7c106b1e93629482ee451b83c500010608f73337ce24edeca8ed6158abde188655952021-07-04 15:35:26107 days 16 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020xa9f6c8cd9b193785662f0b4707eb00eee0c12a2b0.723347682442614669 BNB
0xe2a7c106b1e93629482ee451b83c500010608f73337ce24edeca8ed6158abde188655952021-07-04 15:35:26107 days 16 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.725524255208239387 BNB
0xd4f20e204c13045229f6a3d5c6cf19877469bcdc60b3e3aafa7a6d2cc6d590cc88352932021-07-03 14:09:27108 days 17 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020x15bf2f1dd601c102d9b08e4b7c5f5deab72537460.097666734987032013 BNB
0xd4f20e204c13045229f6a3d5c6cf19877469bcdc60b3e3aafa7a6d2cc6d590cc88352932021-07-03 14:09:27108 days 17 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.097960616837544646 BNB
0x6d0ee02a8242a0863875891d4fac035c620d7124759907cf4072c9360b70818f84509752021-06-20 4:03:31122 days 4 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.01 BNB
0xa5016d5c05f96247c4bcc10a718dbf0288c4388ddeea961c2fbbf9187a08f91084101872021-06-18 17:47:25123 days 14 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020x2276745bb09b9c164839740d2d26cc2a8e8979cb0.030768537262860123 BNB
0xa5016d5c05f96247c4bcc10a718dbf0288c4388ddeea961c2fbbf9187a08f91084101872021-06-18 17:47:25123 days 14 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.030861120624734325 BNB
0xa8637a25683d4d87834ea4ad0473ae6541d7d001522ceb1c6366352753fe6fd981426012021-06-09 9:00:05132 days 23 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020xc9f1679298eca1ba57ede716ab806022124301252.859720350646349372 BNB
0xa8637a25683d4d87834ea4ad0473ae6541d7d001522ceb1c6366352753fe6fd981426012021-06-09 9:00:05132 days 23 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.020904857160256354 BNB
0x419bda3f2b1604bf7f0d1cb746921e59755742de7b4cfe0c3ee0f1b6db919d1279079952021-06-01 4:58:33141 days 3 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.068 BNB
0xf2d092dfe410cf21444fb5acdf0b527edc7c505b404275bd7fe0a28aeef7376f77719292021-05-27 11:07:12145 days 21 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020xeb362ebb8f5ba2e7279838448ebe4ffaa86592200.004476391396603139 BNB
0xf2d092dfe410cf21444fb5acdf0b527edc7c505b404275bd7fe0a28aeef7376f77719292021-05-27 11:07:12145 days 21 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.004489860979541764 BNB
0x0da646cf5090d1fe74caddcf4cd3f6d432bf3f0e2b868eda5df96e3264db3a5877701242021-05-27 9:36:57145 days 22 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.1 BNB
0x2bd3395a5f06b88b21d61d405e37ba2212dd506c0001c83d26986b5d51ad7fb977683322021-05-27 8:07:13146 days 1 min ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.1 BNB
0xc63b0c32e13d5ead160c5201635033dbc84d40c19f1c3b0920fb425ecdb338e777551592021-05-26 21:06:56146 days 11 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020x860ff414ac18e3c26889cf3db9e431fef15b12800.051961407974952542 BNB
0xc63b0c32e13d5ead160c5201635033dbc84d40c19f1c3b0920fb425ecdb338e777551592021-05-26 21:06:56146 days 11 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.052117761258728728 BNB
0x8d0e945deb378517c06aa47f5e9d0d0df43d43afd7263d298c190d01adcad8f477550872021-05-26 21:03:20146 days 11 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.052485965 BNB
0x715a93b4f486dea999a56deeeeef8a6d06c54fb7669ad5274325a147567d66df77510732021-05-26 17:41:15146 days 14 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020x7e9f57781b6cd31fb8d3833ec503b8f090a6ac030.063904352443318223 BNB
0x715a93b4f486dea999a56deeeeef8a6d06c54fb7669ad5274325a147567d66df77510732021-05-26 17:41:15146 days 14 hrs ago Binance: WBNB Token 0xecbf96dd4fbfd666a849252ec022bf311a4ca0020.064096642370429511 BNB
0xdac49ad44a0c4cda3f76f4b355480677f8f33850fef458bbcd81dbe60a31117f77509002021-05-26 17:32:36146 days 14 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.016 BNB
0xd9fe23b4741ae277bbf2e95a516f3e715196a17cfbd8fb55b0a94b6335583ac777479712021-05-26 15:05:59146 days 17 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 0x3ec481143d688442e581ad7116bf1ecc76669cfa0.00001363 BNB
0xd9fe23b4741ae277bbf2e95a516f3e715196a17cfbd8fb55b0a94b6335583ac777479712021-05-26 15:05:59146 days 17 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.083 BNB
0xae387434c7ed791cc6d32ad531703d1465f30cdb0f77688ab13606d8d6cb566277473952021-05-26 14:35:16146 days 17 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 0x3ec481143d688442e581ad7116bf1ecc76669cfa0.00001363 BNB
0x0b3acd07cfa99af066b8e2f5d87b94c0565bbebf1c99579a705cafc778917a3377467982021-05-26 13:58:51146 days 18 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 0x3ec481143d688442e581ad7116bf1ecc76669cfa0.00001363 BNB
0x0b3acd07cfa99af066b8e2f5d87b94c0565bbebf1c99579a705cafc778917a3377467982021-05-26 13:58:51146 days 18 hrs ago 0xecbf96dd4fbfd666a849252ec022bf311a4ca002 Binance: WBNB Token0.01 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
O3SwapBSCPancakeBridge

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

contract Context {
    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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');
    }

    function div(uint x, uint y) internal pure returns (uint z) {
        return x / y;
    }
}


library PancakeLibrary {
    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, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: 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'd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IPancakePair(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, 'PancakeLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: 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, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: 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, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: 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, 'PancakeLibrary: 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, 'PancakeLibrary: 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 IBEP20 {
    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 IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

library Convert {
    function bytesToAddress(bytes memory bys) internal pure returns (address addr) {
        assembly {
            addr := mload(add(bys,20))
        }
    }
}

interface ISwapper {
    function swap(
        address fromAssetHash,
        uint64 toPoolId,
        uint64 toChainId,
        bytes calldata toAssetHash,
        bytes calldata toAddress,
        uint amount,
        uint minOutAmount,
        uint fee,
        uint id
    ) external payable returns (bool);
}

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract O3SwapBSCPancakeBridge is Ownable {
    using SafeMath for uint256;
    using Convert for bytes;

    event LOG_AGG_SWAP (
        uint256 amountOut, // Raw swapped token amount out without aggFee
        uint256 fee
    );

    address public WBNB;
    address public pancakeFactory;
    address public polySwapper;
    uint public polySwapperId;

    uint256 public aggregatorFee = 3 * 10 ** 7; // Default to 0.3%
    uint256 public constant FEE_DENOMINATOR = 10 ** 10;

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

    constructor (
        address _wbnb,
        address _factory,
        address _swapper,
        uint _swapperId
    ) public {
        WBNB = _wbnb;
        pancakeFactory = _factory;
        polySwapper = _swapper;
        polySwapperId = _swapperId;
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint swapAmountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual ensure(deadline) {
        uint amountOut = _swapExactTokensForTokensSupportingFeeOnTransferTokens(amountIn, swapAmountOutMin, path);
        uint feeAmount = amountOut.mul(aggregatorFee).div(FEE_DENOMINATOR);

        emit LOG_AGG_SWAP(amountOut, feeAmount);

        uint adjustedAmountOut = amountOut.sub(feeAmount);
        TransferHelper.safeTransfer(path[path.length - 1], to, adjustedAmountOut);
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokensCrossChain(
        uint amountIn,
        uint swapAmountOutMin,
        address[] calldata path,
        bytes memory to,
        uint deadline,
        uint64 toPoolId,
        uint64 toChainId,
        bytes memory toAssetHash,
        uint polyMinOutAmount,
        uint fee
    ) external virtual payable ensure(deadline) returns (bool) {
        uint polyAmountIn;
        {
            uint amountOut = _swapExactTokensForTokensSupportingFeeOnTransferTokens(amountIn, swapAmountOutMin, path);
            uint feeAmount = amountOut.mul(aggregatorFee).div(FEE_DENOMINATOR);
            emit LOG_AGG_SWAP(amountOut, feeAmount);
            polyAmountIn = amountOut.sub(feeAmount);
        }

        return _cross(
            path[path.length - 1],
            toPoolId,
            toChainId,
            toAssetHash,
            to,
            polyAmountIn,
            polyMinOutAmount,
            fee
        );
    }

    function _swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path
    ) internal virtual returns (uint) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(pancakeFactory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IBEP20(path[path.length - 1]).balanceOf(address(this));
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20(path[path.length - 1]).balanceOf(address(this)).sub(balanceBefore);
        require(amountOut >= amountOutMin, 'O3SwapBSCPancakeBridge: INSUFFICIENT_OUTPUT_AMOUNT');
        return amountOut;
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint swapAmountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual payable ensure(deadline) {
        uint amountOut = _swapExactETHForTokensSupportingFeeOnTransferTokens(swapAmountOutMin, path, 0);
        uint feeAmount = amountOut.mul(aggregatorFee).div(FEE_DENOMINATOR);

        emit LOG_AGG_SWAP(amountOut, feeAmount);

        uint adjustedAmountOut = amountOut.sub(feeAmount);
        TransferHelper.safeTransfer(path[path.length - 1], to, adjustedAmountOut);
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokensCrossChain(
        uint swapAmountOutMin,
        address[] calldata path,
        bytes memory to,
        uint deadline,
        uint64 toPoolId,
        uint64 toChainId,
        bytes memory toAssetHash,
        uint polyMinOutAmount,
        uint fee
    ) external virtual payable ensure(deadline) returns (bool) {
        uint polyAmountIn;
        {
            uint amountOut = _swapExactETHForTokensSupportingFeeOnTransferTokens(swapAmountOutMin, path, fee);
            uint feeAmount = amountOut.mul(aggregatorFee).div(FEE_DENOMINATOR);
            emit LOG_AGG_SWAP(amountOut, feeAmount);
            polyAmountIn = amountOut.sub(feeAmount);
        }

        return _cross(
            path[path.length - 1],
            toPoolId,
            toChainId,
            toAssetHash,
            to,
            polyAmountIn,
            polyMinOutAmount,
            fee
        );
    }

    function _swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint swapAmountOutMin,
        address[] calldata path,
        uint fee
    ) internal virtual returns (uint) {
        require(path[0] == WBNB, 'O3SwapBSCPancakeBridge: INVALID_PATH');
        uint amountIn = msg.value.sub(fee);
        require(amountIn > 0, 'O3SwapBSCPancakeBridge: INSUFFICIENT_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amountIn}();
        assert(IWBNB(WBNB).transfer(PancakeLibrary.pairFor(pancakeFactory, path[0], path[1]), amountIn));
        uint balanceBefore = IBEP20(path[path.length - 1]).balanceOf(address(this));
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20(path[path.length - 1]).balanceOf(address(this)).sub(balanceBefore);
        require(amountOut >= swapAmountOutMin, 'O3SwapBSCPancakeBridge: INSUFFICIENT_OUTPUT_AMOUNT');
        return amountOut;
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint swapAmountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual ensure(deadline) {
        uint amountOut = _swapExactTokensForETHSupportingFeeOnTransferTokens(amountIn, swapAmountOutMin, path);
        uint feeAmount = amountOut.mul(aggregatorFee).div(FEE_DENOMINATOR);

        emit LOG_AGG_SWAP(amountOut, feeAmount);

        IWBNB(WBNB).withdraw(amountOut);
        uint adjustedAmountOut = amountOut.sub(feeAmount);
        TransferHelper.safeTransferETH(to, adjustedAmountOut);
    }

    function _swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint swapAmountOutMin,
        address[] calldata path
    ) internal virtual returns (uint) {
        require(path[path.length - 1] == WBNB, 'O3SwapBSCPancakeBridge: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(pancakeFactory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IBEP20(WBNB).balanceOf(address(this));
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20(WBNB).balanceOf(address(this)).sub(balanceBefore);
        require(amountOut >= swapAmountOutMin, 'O3SwapBSCPancakeBridge: INSUFFICIENT_OUTPUT_AMOUNT');
        return amountOut;
    }

    // **** 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,) = PancakeLibrary.sortTokens(input, output);
            IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(pancakeFactory, 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 = IBEP20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? PancakeLibrary.pairFor(pancakeFactory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function _cross(
        address fromAssetHash,
        uint64 toPoolId,
        uint64 toChainId,
        bytes memory toAssetHash,
        bytes memory toAddress,
        uint amount,
        uint minOutAmount,
        uint fee
    ) internal returns (bool) {
        // Allow `swapper contract` to transfer `amount` of `fromAssetHash` on belaof of this contract.
        IBEP20(fromAssetHash).approve(polySwapper, amount);

        bool result = ISwapper(polySwapper).swap{value: fee}(
            fromAssetHash,
            toPoolId,
            toChainId,
            toAssetHash,
            toAddress,
            amount,
            minOutAmount,
            fee,
            polySwapperId
        );
        require(result, "POLY CROSSCHAIN ERROR");

        return result;
    }

    receive() external payable { }

    function setPolySwapperId(uint _id) external onlyOwner {
        polySwapperId = _id;
    }

    function collect(address token) external {
        if (token == WBNB) {
            uint256 wethBalance = IBEP20(token).balanceOf(address(this));
            if (wethBalance > 0) {
                IWBNB(WBNB).withdraw(wethBalance);
            }
            TransferHelper.safeTransferETH(owner(), address(this).balance);
        } else {
            TransferHelper.safeTransfer(token, owner(), IBEP20(token).balanceOf(address(this)));
        }
    }

    function setAggregatorFee(uint _fee) external onlyOwner {
        aggregatorFee = _fee;
    }

    function setPancakeFactory(address _factory) external onlyOwner {
        pancakeFactory = _factory;
    }

    function setPolySwapper(address _swapper) external onlyOwner {
        polySwapper = _swapper;
    }

    function setWBNB(address _wbnb) external onlyOwner {
        WBNB = _wbnb;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_wbnb","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_swapper","type":"address"},{"internalType":"uint256","name":"_swapperId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"LOG_AGG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polySwapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polySwapperId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setAggregatorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"setPancakeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapper","type":"address"}],"name":"setPolySwapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setPolySwapperId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wbnb","type":"address"}],"name":"setWBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmountOutMin","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":"swapAmountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"bytes","name":"to","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint64","name":"toPoolId","type":"uint64"},{"internalType":"uint64","name":"toChainId","type":"uint64"},{"internalType":"bytes","name":"toAssetHash","type":"bytes"},{"internalType":"uint256","name":"polyMinOutAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokensCrossChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"swapAmountOutMin","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":"swapAmountOutMin","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":"amountIn","type":"uint256"},{"internalType":"uint256","name":"swapAmountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"bytes","name":"to","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint64","name":"toPoolId","type":"uint64"},{"internalType":"uint64","name":"toChainId","type":"uint64"},{"internalType":"bytes","name":"toAssetHash","type":"bytes"},{"internalType":"uint256","name":"polyMinOutAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokensCrossChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526301c9c3806005553480156200001957600080fd5b506040516200400038038062004000833981810160405260808110156200003f57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600062000080620001f260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060048190555050505050620001fa565b600033905090565b613df6806200020a6000396000f3fe6080604052600436106101235760003560e01c806393b69905116100a0578063cab27a6411610064578063cab27a64146109e8578063d73792a914610a39578063dca8449f14610a64578063e0f1c9c514610a9f578063f2fde38b14610ae05761012a565b806393b69905146106665780639ed5b4dd1461087e578063a8b13ef3146108a9578063b6f9de95146108fa578063b818a9b5146109a75761012a565b8063715018a6116100e7578063715018a6146102fb578063791ac947146103125780638540c451146103d65780638da5cb5b146105e45780638dd95002146106255761012a565b806306ec16f81461012f578063086808de146101805780631a5eefff146101ab578063355466c8146101fc5780635c11d795146102375761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061017e6004803603602081101561015257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b31565b005b34801561018c57600080fd5b50610195610d92565b6040518082815260200191505060405180910390f35b3480156101b757600080fd5b506101fa600480360360208110156101ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d98565b005b34801561020857600080fd5b506102356004803603602081101561021f57600080fd5b8101908080359060200190929190505050610ea4565b005b34801561024357600080fd5b506102f9600480360360a081101561025a57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561028b57600080fd5b82018360208201111561029d57600080fd5b803590602001918460208302840111640100000000831117156102bf57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f76565b005b34801561030757600080fd5b506103106110c8565b005b34801561031e57600080fd5b506103d4600480360360a081101561033557600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561036657600080fd5b82018360208201111561037857600080fd5b8035906020019184602083028401116401000000008311171561039a57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061124e565b005b6105cc60048036036101208110156103ed57600080fd5b81019080803590602001909291908035906020019064010000000081111561041457600080fd5b82018360208201111561042657600080fd5b8035906020019184602083028401116401000000008311171561044857600080fd5b90919293919293908035906020019064010000000081111561046957600080fd5b82018360208201111561047b57600080fd5b8035906020019184600183028401116401000000008311171561049d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff1690602001909291908035906020019064010000000081111561053257600080fd5b82018360208201111561054457600080fd5b8035906020019184600183028401116401000000008311171561056657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506113fe565b60405180821515815260200191505060405180910390f35b3480156105f057600080fd5b506105f961155e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063157600080fd5b5061063a611587565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610866600480360361014081101561067d57600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156106ae57600080fd5b8201836020820111156106c057600080fd5b803590602001918460208302840111640100000000831117156106e257600080fd5b90919293919293908035906020019064010000000081111561070357600080fd5b82018360208201111561071557600080fd5b8035906020019184600183028401116401000000008311171561073757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803590602001906401000000008111156107cc57600080fd5b8201836020820111156107de57600080fd5b8035906020019184600183028401116401000000008311171561080057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506115ad565b60405180821515815260200191505060405180910390f35b34801561088a57600080fd5b5061089361170e565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b506108f8600480360360208110156108cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b005b6109a56004803603608081101561091057600080fd5b81019080803590602001909291908035906020019064010000000081111561093757600080fd5b82018360208201111561094957600080fd5b8035906020019184602083028401116401000000008311171561096b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611820565b005b3480156109b357600080fd5b506109bc611972565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109f457600080fd5b50610a3760048036036020811015610a0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611998565b005b348015610a4557600080fd5b50610a4e611aa4565b6040518082815260200191505060405180910390f35b348015610a7057600080fd5b50610a9d60048036036020811015610a8757600080fd5b8101908080359060200190929190505050611aad565b005b348015610aab57600080fd5b50610ab4611b7f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aec57600080fd5b50610b2f60048036036020811015610b0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba5565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cdb5760008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610bf057600080fd5b505afa158015610c04573d6000803e3d6000fd5b505050506040513d6020811015610c1a57600080fd5b810190808051906020019092919050505090506000811115610cc457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cab57600080fd5b505af1158015610cbf573d6000803e3d6000fd5b505050505b610cd5610ccf61155e565b47611db0565b50610d8f565b610d8e81610ce761155e565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d6020811015610d7857600080fd5b8101908080519060200190929190505050611f0f565b5b50565b60045481565b610da06120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610eac6120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060058190555050565b8042811015610fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f335377617042534350616e63616b654272696467653a20455850495245440081525060200191505060405180910390fd5b6000610ffb888888886120fa565b9050600061102b6402540be40061101d6005548561241a90919063ffffffff16565b6124af90919063ffffffff16565b90507f270e06e1460fe9df2e798064a58fdb072e3f3e1e39e7db96268c13849c025aed8282604051808381526020018281526020019250505060405180910390a1600061108182846124c390919063ffffffff16565b90506110bc888860018b8b90500381811061109857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168783611f0f565b50505050505050505050565b6110d06120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b80428110156112c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f335377617042534350616e63616b654272696467653a20455850495245440081525060200191505060405180910390fd5b60006112d388888888612546565b905060006113036402540be4006112f56005548561241a90919063ffffffff16565b6124af90919063ffffffff16565b90507f270e06e1460fe9df2e798064a58fdb072e3f3e1e39e7db96268c13849c025aed8282604051808381526020018281526020019250505060405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113b957600080fd5b505af11580156113cd573d6000803e3d6000fd5b5050505060006113e682846124c390919063ffffffff16565b90506113f28682611db0565b50505050505050505050565b60008642811015611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f335377617042534350616e63616b654272696467653a20455850495245440081525060200191505060405180910390fd5b6000806114868e8e8e88612922565b905060006114b66402540be4006114a86005548561241a90919063ffffffff16565b6124af90919063ffffffff16565b90507f270e06e1460fe9df2e798064a58fdb072e3f3e1e39e7db96268c13849c025aed8282604051808381526020018281526020019250505060405180910390a161150a81836124c390919063ffffffff16565b9250505061154c8c8c60018f8f90500381811061152357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168989898e868b8b612ea4565b925050509a9950505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008642811015611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f335377617042534350616e63616b654272696467653a20455850495245440081525060200191505060405180910390fd5b6000806116358f8f8f8f6120fa565b905060006116656402540be4006116576005548561241a90919063ffffffff16565b6124af90919063ffffffff16565b90507f270e06e1460fe9df2e798064a58fdb072e3f3e1e39e7db96268c13849c025aed8282604051808381526020018281526020019250505060405180910390a16116b981836124c390919063ffffffff16565b925050506116fb8c8c60018f8f9050038181106116d257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168989898e868b8b612ea4565b925050509b9a5050505050505050505050565b60055481565b61171c6120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8042811015611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f335377617042534350616e63616b654272696467653a20455850495245440081525060200191505060405180910390fd5b60006118a68787876000612922565b905060006118d66402540be4006118c86005548561241a90919063ffffffff16565b6124af90919063ffffffff16565b90507f270e06e1460fe9df2e798064a58fdb072e3f3e1e39e7db96268c13849c025aed8282604051808381526020018281526020019250505060405180910390a1600061192c82846124c390919063ffffffff16565b9050611967888860018b8b90500381811061194357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168783611f0f565b505050505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119a06120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6402540be40081565b611ab56120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bad6120f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c846026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81118015611de257600080fd5b506040519080825280601f01601f191660200182016040528015611e155781602001600182028036833780820191505090505b506040518082805190602001908083835b60208310611e495780518252602082019150602081019050602083039250611e26565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611eab576040519150601f19603f3d011682016040523d82523d6000602084013e611eb0565b606091505b5050905080611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613d546023913960400191505060405180910390fd5b505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611fd25780518252602082019150602081019050602083039250611faf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612034576040519150601f19603f3d011682016040523d82523d6000602084013e612039565b606091505b50915091508180156120795750600081511480612078575080806020019051602081101561206657600080fd5b81019080805190602001909291905050505b5b6120eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b600033905090565b60006121af8383600081811061210c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336121a9600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787600081811061215d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168888600181811061218757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166131e3565b886132fc565b60008383600186869050038181106121c357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561224657600080fd5b505afa15801561225a573d6000803e3d6000fd5b505050506040513d602081101561227057600080fd5b810190808051906020019092919050505090506122ce848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050306134e1565b60006123b2828686600189899050038181106122e657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d602081101561239357600080fd5b81019080805190602001909291905050506124c390919063ffffffff16565b90508581101561240d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613caa6032913960400191505060405180910390fd5b8092505050949350505050565b600080821480612437575082828385029250828161243457fe5b04145b6124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008183816124ba57fe5b04905092915050565b6000828284039150811115612540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683836001868690500381811061259357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613cff6024913960400191505060405180910390fd5b6126cf8383600081811061262c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336126c9600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787600081811061267d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16888860018181106126a757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166131e3565b886132fc565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561275a57600080fd5b505afa15801561276e573d6000803e3d6000fd5b505050506040513d602081101561278457600080fd5b810190808051906020019092919050505090506127e2848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050306134e1565b60006128ba82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561287157600080fd5b505afa158015612885573d6000803e3d6000fd5b505050506040513d602081101561289b57600080fd5b81019080805190602001909291905050506124c390919063ffffffff16565b905085811015612915576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613caa6032913960400191505060405180910390fd5b8092505050949350505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168484600081811061296a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613cff6024913960400191505060405180910390fd5b6000612a0883346124c390919063ffffffff16565b905060008111612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613d236031913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acd57600080fd5b505af1158015612ae1573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ba3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688886000818110612b5757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1689896001818110612b8157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166131e3565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612bf757600080fd5b505af1158015612c0b573d6000803e3d6000fd5b505050506040513d6020811015612c2157600080fd5b8101908080519060200190929190505050612c3857fe5b6000858560018888905003818110612c4c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ccf57600080fd5b505afa158015612ce3573d6000803e3d6000fd5b505050506040513d6020811015612cf957600080fd5b81019080805190602001909291905050509050612d57868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050306134e1565b6000612e3b82888860018b8b905003818110612d6f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612df257600080fd5b505afa158015612e06573d6000803e3d6000fd5b505050506040513d6020811015612e1c57600080fd5b81019080805190602001909291905050506124c390919063ffffffff16565b905087811015612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613caa6032913960400191505060405180910390fd5b809350505050949350505050565b60008873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d6020811015612f6357600080fd5b8101908080519060200190929190505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663559ebe57848c8c8c8c8c8c8c8c6004546040518b63ffffffff1660e01b8152600401808a73ffffffffffffffffffffffffffffffffffffffff1681526020018967ffffffffffffffff1681526020018867ffffffffffffffff1681526020018060200180602001878152602001868152602001858152602001848152602001838103835289818151815260200191508051906020019080838360005b8381101561306857808201518184015260208101905061304d565b50505050905090810190601f1680156130955780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b838110156130ce5780820151818401526020810190506130b3565b50505050905090810190601f1680156130fb5780820380516001836020036101000a031916815260200191505b509b5050505050505050505050506020604051808303818588803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b50505050506040513d602081101561314d57600080fd5b81019080805190602001909291905050509050806131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f504f4c592043524f5353434841494e204552524f52000000000000000000000081525060200191505060405180910390fd5b8091505098975050505050505050565b60008060006131f28585613930565b91509150858282604051602001808373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060405160200180807fff000000000000000000000000000000000000000000000000000000000000008152506001018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001807fd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66815250602001925050506040516020818303038152906040528051906020012060001c925050509392505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106133dd57805182526020820191506020810190506020830392506133ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b50915091508180156134845750600081511480613483575080806020019051602081101561347157600080fd5b81019080805190602001909291905050505b5b6134d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d9d6024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561392b576000808483815181106134ff57fe5b602002602001015185600185018151811061351657fe5b602002602001015191509150600061352e8383613930565b5090506000613560600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856131e3565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d60608110156135d857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461365f578284613662565b83835b9150915061371a828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156136d157600080fd5b505afa1580156136e5573d6000803e3d6000fd5b505050506040513d60208110156136fb57600080fd5b81019080805190602001909291905050506124c390919063ffffffff16565b9550613727868383613aa7565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461376b5782600061376f565b6000835b91509150600060028c51038a10613786578a6137ca565b6137c9600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898e60028e01815181106137bc57fe5b60200260200101516131e3565b5b90508573ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff8111801561380357600080fd5b506040519080825280601f01601f1916602001820160405280156138365781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138ae578082015181840152602081019050613893565b50505050905090810190601f1680156138db5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138fd57600080fd5b505af1158015613911573d6000803e3d6000fd5b5050505050505050505050505080806001019150506134e4565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156139b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613cdc6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106139f25782846139f5565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f50616e63616b654c6962726172793a205a45524f5f414444524553530000000081525060200191505060405180910390fd5b9250929050565b6000808411613b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c5b6029913960400191505060405180910390fd5b600083118015613b115750600082115b613b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613d776026913960400191505060405180910390fd5b6000613b7d6103e68661241a90919063ffffffff16565b90506000613b94848361241a90919063ffffffff16565b90506000613bbf83613bb16103e88961241a90919063ffffffff16565b613bd790919063ffffffff16565b9050808281613bca57fe5b0493505050509392505050565b6000828284019150811015613c54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f335377617042534350616e63616b654272696467653a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f4144445245535345534f335377617042534350616e63616b654272696467653a20494e56414c49445f504154484f335377617042534350616e63616b654272696467653a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a264697066735822122096fa1c52326483c52a4c3bed7163ba516b2ec36e889501b4cbb7fd3c86b03ca864736f6c634300060c0033000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000bcfccbde45ce874adcb698cc183debcf179528120000000000000000000000003ec481143d688442e581ad7116bf1ecc76669cfa0000000000000000000000000000000000000000000000000000000000000001

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

000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000bcfccbde45ce874adcb698cc183debcf179528120000000000000000000000003ec481143d688442e581ad7116bf1ecc76669cfa0000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _wbnb (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Arg [1] : _factory (address): 0xbcfccbde45ce874adcb698cc183debcf17952812
Arg [2] : _swapper (address): 0x3ec481143d688442e581ad7116bf1ecc76669cfa
Arg [3] : _swapperId (uint256): 1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Arg [1] : 000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812
Arg [2] : 0000000000000000000000003ec481143d688442e581ad7116bf1ecc76669cfa
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

12440:10561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22118:461;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12782:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22806:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22587:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13360:638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11865:140;;;;;;;;;;;;;:::i;:::-;;18332:654;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16392:987;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11223:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12687:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14006:1022;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12816:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22690:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15775:609;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12749:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22916:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12884:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22017:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12713:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12160:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22118:461;22183:4;;;;;;;;;;;22174:13;;:5;:13;;;22170:402;;;22204:19;22233:5;22226:23;;;22258:4;22226:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22204:60;;22297:1;22283:11;:15;22279:89;;;22325:4;;;;;;;;;;;22319:20;;;22340:11;22319:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22279:89;22382:62;22413:7;:5;:7::i;:::-;22422:21;22382:30;:62::i;:::-;22170:402;;;;22477:83;22505:5;22512:7;:5;:7::i;:::-;22528:5;22521:23;;;22553:4;22521:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22477:27;:83::i;:::-;22170:402;22118:461;:::o;12782:25::-;;;;:::o;22806:102::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22892:8:::1;22878:11;;:22;;;;;;;;;;;;;;;;;;22806:102:::0;:::o;22587:95::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22670:4:::1;22654:13;:20;;;;22587:95:::0;:::o;13360:638::-;13589:8;13005:15;12993:8;:27;;12985:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13610:14:::1;13627:88;13682:8;13692:16;13710:4;;13627:54;:88::i;:::-;13610:105;;13726:14;13743:49;12926:8;13743:28;13757:13;;13743:9;:13;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;13726:66;;13810:34;13823:9;13834;13810:34;;;;;;;;;;;;;;;;;;;;;;;;13857:22;13882:24;13896:9;13882;:13;;:24;;;;:::i;:::-;13857:49;;13917:73;13945:4;;13964:1;13950:4;;:11;;:15;13945:21;;;;;;;;;;;;;;;13968:2;13972:17;13917:27;:73::i;:::-;13067:1;;;13360:638:::0;;;;;;;:::o;11865:140::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11964:1:::1;11927:40;;11948:6;::::0;::::1;;;;;;;;11927:40;;;;;;;;;;;;11995:1;11978:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11865:140::o:0;18332:654::-;18558:8;13005:15;12993:8;:27;;12985:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18579:14:::1;18596:85;18648:8;18658:16;18676:4;;18596:51;:85::i;:::-;18579:102;;18692:14;18709:49;12926:8;18709:28;18723:13;;18709:9;:13;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;18692:66;;18776:34;18789:9;18800;18776:34;;;;;;;;;;;;;;;;;;;;;;;;18829:4;;;;;;;;;;;18823:20;;;18844:9;18823:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18865:22;18890:24;18904:9;18890;:13;;:24;;;;:::i;:::-;18865:49;;18925:53;18956:2;18960:17;18925:30;:53::i;:::-;13067:1;;;18332:654:::0;;;;;;;:::o;16392:987::-;16775:4;16756:8;13005:15;12993:8;:27;;12985:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16792:17:::1;16835:14:::0;16852:80:::1;16904:16;16922:4;;16928:3;16852:51;:80::i;:::-;16835:97;;16947:14;16964:49;12926:8;16964:28;16978:13;;16964:9;:13;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;16947:66;;17033:34;17046:9;17057;17033:34;;;;;;;;;;;;;;;;;;;;;;;;17097:24;17111:9;17097;:13;;:24;;;;:::i;:::-;17082:39;;13067:1;;17152:219;17173:4;;17192:1;17178:4;;:11;;:15;17173:21;;;;;;;;;;;;;;;17209:8;17232:9;17256:11;17282:2;17299:12;17326:16;17357:3;17152:6;:219::i;:::-;17145:226;;;16392:987:::0;;;;;;;;;;;;;:::o;11223:79::-;11261:7;11288:6;;;;;;;;;;;11281:13;;11223:79;:::o;12687:19::-;;;;;;;;;;;;;:::o;14006:1022::-;14416:4;14397:8;13005:15;12993:8;:27;;12985:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14433:17:::1;14476:14:::0;14493:88:::1;14548:8;14558:16;14576:4;;14493:54;:88::i;:::-;14476:105;;14596:14;14613:49;12926:8;14613:28;14627:13;;14613:9;:13;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;14596:66;;14682:34;14695:9;14706;14682:34;;;;;;;;;;;;;;;;;;;;;;;;14746:24;14760:9;14746;:13;;:24;;;;:::i;:::-;14731:39;;13067:1;;14801:219;14822:4;;14841:1;14827:4;;:11;;:15;14822:21;;;;;;;;;;;;;;;14858:8;14881:9;14905:11;14931:2;14948:12;14975:16;15006:3;14801:6;:219::i;:::-;14794:226;;;14006:1022:::0;;;;;;;;;;;;;;:::o;12816:42::-;;;;:::o;22690:108::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22782:8:::1;22765:14;;:25;;;;;;;;;;;;;;;;;;22690:108:::0;:::o;15775:609::-;15985:8;13005:15;12993:8;:27;;12985:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16006:14:::1;16023:78;16075:16;16093:4;;16099:1;16023:51;:78::i;:::-;16006:95;;16112:14;16129:49;12926:8;16129:28;16143:13;;16129:9;:13;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;16112:66;;16196:34;16209:9;16220;16196:34;;;;;;;;;;;;;;;;;;;;;;;;16243:22;16268:24;16282:9;16268;:13;;:24;;;;:::i;:::-;16243:49;;16303:73;16331:4;;16350:1;16336:4;;:11;;:15;16331:21;;;;;;;;;;;;;;;16354:2;16358:17;16303:27;:73::i;:::-;13067:1;;;15775:609:::0;;;;;;:::o;12749:26::-;;;;;;;;;;;;;:::o;22916:82::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22985:5:::1;22978:4;;:12;;;;;;;;;;;;;;;;;;22916:82:::0;:::o;12884:50::-;12926:8;12884:50;:::o;22017:93::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22099:3:::1;22083:13;:19;;;;22017:93:::0;:::o;12713:29::-;;;;;;;;;;;;;:::o;12160:273::-;11445:12;:10;:12::i;:::-;11435:22;;:6;;;;;;;;;;:22;;;11427:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12275:1:::1;12255:22;;:8;:22;;;;12233:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12388:8;12359:38;;12380:6;::::0;::::1;;;;;;;;12359:38;;;;;;;;;;;;12417:8;12408:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;12160:273:::0;:::o;10496:195::-;10566:12;10583:2;:7;;10597:5;10614:1;10604:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10583:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10565:52;;;10636:7;10628:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10496:195;;;:::o;9717:361::-;9866:12;9880:17;9901:5;:10;;9935;9947:2;9951:5;9912:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9901:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9865:93;;;;9977:7;:57;;;;;10004:1;9989:4;:11;:16;:44;;;;10020:4;10009:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9989:44;9977:57;9969:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9717:361;;;;;:::o;91:98::-;136:15;171:10;164:17;;91:98;:::o;15036:731::-;15219:4;15236:144;15282:4;;15287:1;15282:7;;;;;;;;;;;;;;;15291:10;15303:56;15326:14;;;;;;;;;;;15342:4;;15347:1;15342:7;;;;;;;;;;;;;;;15351:4;;15356:1;15351:7;;;;;;;;;;;;;;;15303:22;:56::i;:::-;15361:8;15236:31;:144::i;:::-;15391:18;15419:4;;15438:1;15424:4;;:11;;:15;15419:21;;;;;;;;;;;;;;;15412:39;;;15460:4;15412:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15391:75;;15477:55;15512:4;;15477:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15526:4;15477:34;:55::i;:::-;15543:14;15560:73;15619:13;15567:4;;15586:1;15572:4;;:11;;:15;15567:21;;;;;;;;;;;;;;;15560:39;;;15608:4;15560:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;:73;;;;:::i;:::-;15543:90;;15665:12;15652:9;:25;;15644:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15750:9;15743:16;;;;15036:731;;;;;;:::o;726:142::-;778:6;810:1;805;:6;:30;;;;834:1;829;824;820;:5;816:9;;;815:15;;;;;;:20;805:30;797:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:142;;;;:::o;876:91::-;928:6;958:1;954;:5;;;;;;947:12;;876:91;;;;:::o;589:129::-;641:6;683:1;677;673;:5;669:9;;;668:16;;660:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:129;;;;:::o;18994:791::-;19178:4;19228;;;;;;;;;;;19203:29;;:4;;19222:1;19208:4;;:11;;:15;19203:21;;;;;;;;;;;;;;;:29;;;19195:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19284:144;19330:4;;19335:1;19330:7;;;;;;;;;;;;;;;19339:10;19351:56;19374:14;;;;;;;;;;;19390:4;;19395:1;19390:7;;;;;;;;;;;;;;;19399:4;;19404:1;19399:7;;;;;;;;;;;;;;;19351:22;:56::i;:::-;19409:8;19284:31;:144::i;:::-;19439:18;19467:4;;;;;;;;;;;19460:22;;;19491:4;19460:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19439:58;;19508:55;19543:4;;19508:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19557:4;19508:34;:55::i;:::-;19574:14;19591:56;19633:13;19598:4;;;;;;;;;;;19591:22;;;19622:4;19591:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:41;;:56;;;;:::i;:::-;19574:73;;19679:16;19666:9;:29;;19658:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19768:9;19761:16;;;;18994:791;;;;;;:::o;17387:937::-;17566:4;17602;;;;;;;;;;;17591:15;;:4;;17596:1;17591:7;;;;;;;;;;;;;;;:15;;;17583:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17658:13;17674:18;17688:3;17674:9;:13;;:18;;;;:::i;:::-;17658:34;;17722:1;17711:8;:12;17703:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17794:4;;;;;;;;;;;17788:19;;;17815:8;17788:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17850:4;;;;;;;;;;;17844:20;;;17865:56;17888:14;;;;;;;;;;;17904:4;;17909:1;17904:7;;;;;;;;;;;;;;;17913:4;;17918:1;17913:7;;;;;;;;;;;;;;;17865:22;:56::i;:::-;17923:8;17844:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17837:96;;;;17944:18;17972:4;;17991:1;17977:4;;:11;;:15;17972:21;;;;;;;;;;;;;;;17965:39;;;18013:4;17965:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17944:75;;18030:55;18065:4;;18030:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18079:4;18030:34;:55::i;:::-;18096:14;18113:73;18172:13;18120:4;;18139:1;18125:4;;:11;;:15;18120:21;;;;;;;;;;;;;;;18113:39;;;18161:4;18113:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;:73;;;;:::i;:::-;18096:90;;18218:16;18205:9;:29;;18197:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18307:9;18300:16;;;;;17387:937;;;;;;:::o;21156:815::-;21419:4;21548:13;21541:29;;;21571:11;;;;;;;;;;;21584:6;21541:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21604:11;21627;;;;;;;;;;;21618:26;;;21652:3;21671:13;21699:8;21722:9;21746:11;21772:9;21796:6;21817:12;21844:3;21862:13;;21618:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21604:282;;21905:6;21897:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21957:6;21950:13;;;21156:815;;;;;;;;;;:::o;1576:478::-;1665:12;1691:14;1707;1725:26;1736:6;1744;1725:10;:26::i;:::-;1690:61;;;;1853:7;1906:6;1914;1889:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:43;;;;;;1792:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:262;;;;;;1777:268;;1762:284;;1576:478;;;;;;;:::o;10086:402::-;10265:12;10279:17;10300:5;:10;;10334;10346:4;10352:2;10356:5;10311:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:99;;;;10382:7;:57;;;;;10409:1;10394:4;:11;:16;:44;;;;10425:4;10414:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10394:44;10382:57;10374:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10086:402;;;;;;:::o;19932:1216::-;20045:6;20040:1101;20071:1;20057:4;:11;:15;20053:1;:19;20040:1101;;;20095:13;20110:14;20129:4;20134:1;20129:7;;;;;;;;;;;;;;20138:4;20147:1;20143;:5;20138:11;;;;;;;;;;;;;;20094:56;;;;20166:14;20185:40;20211:5;20218:6;20185:25;:40::i;:::-;20165:60;;;20240:17;20273:53;20296:14;;;;;;;;;;;20312:5;20319:6;20273:22;:53::i;:::-;20240:87;;20342:16;20373:17;20461:13;20476;20494:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20460:52;;;;;;;;;20528:17;20547:18;20578:6;20569:15;;:5;:15;;;:61;;20611:8;20621;20569:61;;;20588:8;20598;20569:61;20527:103;;;;20659:56;20702:12;20666:5;20659:23;;;20691:4;20659:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;:56;;;;:::i;:::-;20645:70;;20745:69;20773:11;20786:12;20800:13;20745:27;:69::i;:::-;20730:84;;20040:1101;;;;20845:15;20862;20890:6;20881:15;;:5;:15;;;:67;;20926:12;20945:1;20881:67;;;20905:1;20909:12;20881:67;20844:104;;;;20963:10;20994:1;20980:4;:11;:15;20976:1;:19;:87;;21060:3;20976:87;;;20998:59;21021:14;;;;;;;;;;;21037:6;21045:4;21054:1;21050;:5;21045:11;;;;;;;;;;;;;;20998:22;:59::i;:::-;20976:87;20963:100;;21078:4;:9;;;21088:10;21100;21112:2;21126:1;21116:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21078:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20040:1101;;;;;;;;;20074:3;;;;;;;20040:1101;;;;19932:1216;;:::o;1139:345::-;1214:14;1230;1275:6;1265:16;;:6;:16;;;;1257:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:6;1351:15;;:6;:15;;;:53;;1389:6;1397;1351:53;;;1370:6;1378;1351:53;1332:72;;;;;;;;1441:1;1423:20;;:6;:20;;;;1415:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1139:345;;;;;:::o;3053:513::-;3146:14;3192:1;3181:8;:12;3173:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3270:1;3258:9;:13;:31;;;;;3288:1;3275:10;:14;3258:31;3250:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:20;3366:17;3379:3;3366:8;:12;;:17;;;;:::i;:::-;3343:40;;3394:14;3411:31;3431:10;3411:15;:19;;:31;;;;:::i;:::-;3394:48;;3453:16;3472:40;3496:15;3472:19;3486:4;3472:9;:13;;:19;;;;:::i;:::-;:23;;:40;;;;:::i;:::-;3453:59;;3547:11;3535:9;:23;;;;;;3523:35;;3053:513;;;;;;;;:::o;453:128::-;505:6;547:1;541;537;:5;533:9;;;532:16;;524:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;453:128;;;;:::o

Swarm Source

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