Contract 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8a257745bce10bbc86e1597144bcd01c223904e1e59e93339d72094c768e18c7Add Liquidity110907782021-09-20 22:19:394 hrs 7 mins ago0x6786a62aa0a80221bf7aaa64a56d74cc325e9f8f IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.003987955
0x67f3ac58df731ff882d9fa47e616f1961ea62e7f40895e1598c6a4f04795bac4Remove Liquidity...110888762021-09-20 20:44:315 hrs 42 mins ago0xc727002a6fe73d22b148b30ddb42a787d727b48b IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.003129605
0xa8b78935b07d8e7c3807cf6b8b043cfa11cc16dfa3f156c9b7be8cac5402e28cRemove Liquidity110883122021-09-20 20:16:186 hrs 10 mins ago0x5d9caf56bc2cbd955905d6420960e8fbc9a73afb IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00274391
0xeb81290c0d47e95b52a04038ac78065f87cc2a3c95c79f3a51a973b307fea8ddAdd Liquidity ET...110852842021-09-20 17:44:538 hrs 42 mins ago0x18f09e3d3ed9469a83e168b712556c551e46dff1 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.912229 BNB0.00375873
0xdd9eed4c012ab5d82ac78c4dc5c3bd307367c3541de4f26efaea7c1767ec6ce1Add Liquidity ET...110850002021-09-20 17:30:418 hrs 56 mins ago0x18f09e3d3ed9469a83e168b712556c551e46dff1 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d3.597231 BNB0.003792935
0x2378cf756cc95d47573bef202a8f242f8bf824bf2eba9ecbdfea7a2ac68478d8Add Liquidity ET...110847722021-09-20 17:19:179 hrs 7 mins ago0x18f09e3d3ed9469a83e168b712556c551e46dff1 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.48 BNB0.00360424
0xadc6c5dea6c765fd838bf6d1b418837ab96eab0c76754bb6eaa4c75b9b8bfd69Add Liquidity ET...110845652021-09-20 17:08:569 hrs 18 mins ago0x18f09e3d3ed9469a83e168b712556c551e46dff1 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.117198 BNB0.004244135
0xa7163b5b5b38c3cd4106d7c4c9fe938432820b6bed199a7b77ef53f079e2c508Remove Liquidity110844762021-09-20 17:04:299 hrs 22 mins ago0xef4f9891ba481a9468082dcc5d32902275aa9b2f IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.003119545
0x3c68206ef00036875649aacc2537946c227db9a52ce883160c91da40bdcc4935Remove Liquidity110844592021-09-20 17:03:389 hrs 23 mins ago0xef4f9891ba481a9468082dcc5d32902275aa9b2f IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.002193275
0xbbbe42d2f1093265355b3f633052a44b0b1ef017d7f1f24727d25db2bca55aa3Add Liquidity110843732021-09-20 16:59:209 hrs 27 mins ago0xffa4524e31417130a7016b842d654334bedf83cc IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.004048245
0x2eb529add349f6fd84379de247a71d12de8a36ea5496dfb326358fc5e2162b45Add Liquidity ET...110802142021-09-20 13:31:0812 hrs 55 mins ago0x1e8d8d2aa301169250538659142df6de1cedf244 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.763945 BNB0.003867935
0x58b00dca9d8b56b82db794c71adcab3c0bf06ae518aa7995a5bbf6ef29a762cfRemove Liquidity110571142021-09-19 18:13:531 day 8 hrs ago0xf940c12455541404c8abb1fcb528e029ebdff659 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00304816
0xe1596df4cce034067aa2b277d51354b5958baf433b6e6e6a582bebc687c71952Add Liquidity ET...110545402021-09-19 16:05:081 day 10 hrs ago0xd14352160f4a3806955032c4662cae5c75bdd680 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.046448 BNB0.003930235
0x32f9716696c8d57458b3f1ec12ab4f49cbbfd90903b73851745e3529ea403f47Remove Liquidity110507592021-09-19 12:56:031 day 13 hrs ago0x40500ecca288a5e74b7b09f48c82961cfa739bef IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00274373
0xda99a28e0ae4752c86f1bc74d7c7be1511ed33751c9a24949e1863c125296a48Remove Liquidity...110457522021-09-19 8:32:051 day 17 hrs ago0xc6d52017c0a6a344f587a6dcd0ab06ff005e1f1f IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.003129485
0xa1d3640c7f8223a870921a93696f7dc5c283972faac44b5ded39a524e3b68221Add Liquidity ET...110456832021-09-19 8:28:381 day 17 hrs ago0xc6d52017c0a6a344f587a6dcd0ab06ff005e1f1f IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.054121 BNB0.004244075
0xd64159ded18e45abca1d9c2c5efd0ff27cc86a31a8204a853840401178cb2667Add Liquidity ET...110454752021-09-19 8:18:141 day 18 hrs ago0x54abbd9203b83628a8fcf640ce2026dc3070f66c IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.168636 BNB0.003160315
0x7304a7a20ef1944f26f39fbb3ac5392b2c4e8610c0b5a25773a07e06d6a0ffa1Add Liquidity ET...110441172021-09-19 7:10:201 day 19 hrs ago0x0b7f08cdacdaa6e0b9f8e7b114d41161ee96f0b0 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.440736 BNB0.00383367
0xd1bebabb91fad1ba97222e5ef538587f3f74e72bfbf463a156cf88255d248edfAdd Liquidity ET...110440022021-09-19 7:04:351 day 19 hrs ago0x0b7f08cdacdaa6e0b9f8e7b114d41161ee96f0b0 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.267979 BNB0.00375867
0x1650f9a633b84f65f753e02bc354c74ed49bccd6ed5a6bcd9ade313485a28bcdRemove Liquidity110435882021-09-19 6:43:531 day 19 hrs ago0x699514ce2b46f1dd676dd2c445b6fa946dd20a14 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00274361
0x33dd3ede515a4b6a63757cfc578e8bf6b530b57c6ee78464d341aae214004e42Add Liquidity110424072021-09-19 5:44:461 day 20 hrs ago0x78d27983fdc32f15f641576664a6ed1e80403b11 IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.0041324
0x842936665e44447b9249cf33348d8f7640be41ea3e435c00f2393f679036bdbbRemove Liquidity...110387292021-09-19 2:40:361 day 23 hrs ago0xed03c5b3f3c4875a931e900123c4fa24bf7c9c3a IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.003129725
0x15bccbef5eb3026a51d16a32e0eb4a5c528402b1daec90a8262fb792d8d6a087Add Liquidity ET...110381142021-09-19 2:09:512 days 17 mins ago0xed03c5b3f3c4875a931e900123c4fa24bf7c9c3a IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0.210704 BNB0.003792875
0x2e9509894ceb021cfdfe4d506a6652c31e9880ee443bb3c2cfeb8dd74076b6d4Add Liquidity110274612021-09-18 17:15:372 days 9 hrs ago0x29403f74cb9b67a8500ea80441afd121282bee6c IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00436053
0x4d470d3a0f75586e65f98821ce74764c19db7c5b0485e61aa55ecffc8ba14375Remove Liquidity...110259802021-09-18 16:01:342 days 10 hrs ago0x062d321040824f59bf797513e1d634c38143936e IN  0xd0dd735851c1ca61d0324291ccd3959d2153a88d0 BNB0.00217329
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xeb81290c0d47e95b52a04038ac78065f87cc2a3c95c79f3a51a973b307fea8dd110852842021-09-20 17:44:538 hrs 42 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.912229 BNB
0xdd9eed4c012ab5d82ac78c4dc5c3bd307367c3541de4f26efaea7c1767ec6ce1110850002021-09-20 17:30:418 hrs 56 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176733.597231 BNB
0x2378cf756cc95d47573bef202a8f242f8bf824bf2eba9ecbdfea7a2ac68478d8110847722021-09-20 17:19:179 hrs 7 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.48 BNB
0xadc6c5dea6c765fd838bf6d1b418837ab96eab0c76754bb6eaa4c75b9b8bfd69110845652021-09-20 17:08:569 hrs 18 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.117198 BNB
0x2eb529add349f6fd84379de247a71d12de8a36ea5496dfb326358fc5e2162b45110802142021-09-20 13:31:0812 hrs 55 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.763945 BNB
0xe1596df4cce034067aa2b277d51354b5958baf433b6e6e6a582bebc687c71952110545402021-09-19 16:05:081 day 10 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.046448 BNB
0xa1d3640c7f8223a870921a93696f7dc5c283972faac44b5ded39a524e3b68221110456832021-09-19 8:28:381 day 17 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.054121 BNB
0xd64159ded18e45abca1d9c2c5efd0ff27cc86a31a8204a853840401178cb2667110454752021-09-19 8:18:141 day 18 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x6e99f62beb8c2cd67d812fa749c4cf0d12eef6e00.168636 BNB
0x7304a7a20ef1944f26f39fbb3ac5392b2c4e8610c0b5a25773a07e06d6a0ffa1110441172021-09-19 7:10:201 day 19 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.440736 BNB
0xd1bebabb91fad1ba97222e5ef538587f3f74e72bfbf463a156cf88255d248edf110440022021-09-19 7:04:351 day 19 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.267979 BNB
0x15bccbef5eb3026a51d16a32e0eb4a5c528402b1daec90a8262fb792d8d6a087110381142021-09-19 2:09:512 days 17 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.210704 BNB
0xbfb8770e5479000348799092c28772bcd363a36f02f9d5fcb0b9d9e514422bbe110163322021-09-18 7:57:012 days 18 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0xd65ef6e60f3cd688957c708ccd810f4da0b1534a0.0012 BNB
0x058c39d2e6d748cfd8d031b1b3d99e7f4c51b9e1c3785c159fa32986d7444e8d109973392021-09-17 16:05:573 days 10 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176731.258144 BNB
0xf9366d4843743ffc8c8f6ddce8dcf7a7a2af53eb54da592d889a10765984a7cb109449872021-09-15 20:23:565 days 6 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.035109 BNB
0x04c1cbe16a94fe3e85cc740116353b4d03a5d95c59191eb2d423e61910ea772b109432882021-09-15 18:58:595 days 7 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.065072 BNB
0xf2149feaad011124688c62b9ace5f1d5ad3a4109c88bf4538024504ff22a6c57109432492021-09-15 18:57:025 days 7 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.067018 BNB
0x79e350c4def64984243cbdf99d49bc2e95e4738329c76a11185a68550c0206e8109383452021-09-15 14:51:495 days 11 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.02558 BNB
0x623f731f475080f34d47ab5ee41ddc7104459e026bd1bc0b452364c87f1cfc9f109226342021-09-15 1:39:536 days 47 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.3 BNB
0xd11674cfd751a82aeaebb31b67b185bb8a90eb0a37f4f2e97964e8c8bdb507dd109226222021-09-15 1:39:176 days 47 mins ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x6e99f62beb8c2cd67d812fa749c4cf0d12eef6e00.3 BNB
0xbd27d53154c84df583d3623ba278e56d5ad5c95856a47fbe9e3c310681741dcd108782982021-09-13 12:37:527 days 13 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176731.232089 BNB
0x23b7fd40586b0b47861a57f59e60a792f60cdd08843b431aefa7bc1d5aaf35fd107818722021-09-10 3:42:5710 days 22 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176732.268463 BNB
0x454fe5043bc0918915e4e28d7e24bad59ff4aa732770a90848250a9be68beedc107424432021-09-08 18:31:1212 days 7 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0xa3f8b6707e570442f91437cbc9fdcfbf88bcbe5e1 BNB
0xaa7aacbd97e610d73e0e0c5e65f91822d74beb45a0616a38845037bd5f74b7e7107373192021-09-08 14:12:0912 days 12 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x214629d5a17a907da29d50a02efad1a0bd99f1ab0.149322 BNB
0x091f822555bf3fce92b0112e02108793a33bf06a6fbc6cbaf608698df0e1fda4107372342021-09-08 14:07:5412 days 12 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x214629d5a17a907da29d50a02efad1a0bd99f1ab0.149322 BNB
0x380fb8d4054667a22b6e53997a65a28c1d3ebb9e8080cb75a399d4b353871a48107360722021-09-08 13:09:1112 days 13 hrs ago 0xd0dd735851c1ca61d0324291ccd3959d2153a88d 0x8b41ba4ed214c78433829f2b8cadb887e4b176730.030168 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DemaxDelegate

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/libraries/TransferHelper.sol

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

// pragma solidity >=0.6.0;

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

// Dependency file: contracts/interfaces/ERC2917-Interface.sol

//SPDX-License-Identifier: MIT
// pragma solidity >=0.6.6;
// import '../interfaces/IERC20.sol';

interface IERC2917 is IERC20 {

    /// @dev This emit when interests amount per block is changed by the owner of the contract.
    /// It emits with the old interests amount and the new interests amount.
    event InterestRatePerBlockChanged (uint oldValue, uint newValue);

    /// @dev This emit when a users' productivity has changed
    /// It emits with the user's address and the the value after the change.
    event ProductivityIncreased (address indexed user, uint value);

    /// @dev This emit when a users' productivity has changed
    /// It emits with the user's address and the the value after the change.
    event ProductivityDecreased (address indexed user, uint value);

    /// @dev Return the current contract's interests rate per block.
    /// @return The amount of interests currently producing per each block.
    function interestsPerBlock() external view returns (uint);

    /// @notice Change the current contract's interests rate.
    /// @dev Note the best practice will be restrict the gross product provider's contract address to call this.
    /// @return The true/fase to notice that the value has successfully changed or not, when it succeed, it will emite the InterestRatePerBlockChanged event.
    function changeInterestRatePerBlock(uint value) external returns (bool);

    /// @notice It will get the productivity of given user.
    /// @dev it will return 0 if user has no productivity proved in the contract.
    /// @return user's productivity and overall productivity.
    function getProductivity(address user) external view returns (uint, uint);

    /// @notice increase a user's productivity.
    /// @dev Note the best practice will be restrict the callee to prove of productivity's contract address.
    /// @return true to confirm that the productivity added success.
    function increaseProductivity(address user, uint value) external returns (bool);

    /// @notice decrease a user's productivity.
    /// @dev Note the best practice will be restrict the callee to prove of productivity's contract address.
    /// @return true to confirm that the productivity removed success.
    function decreaseProductivity(address user, uint value) external returns (bool);

    /// @notice take() will return the interests that callee will get at current block height.
    /// @dev it will always calculated by block.number, so it will change when block height changes.
    /// @return amount of the interests that user are able to mint() at current block height.
    function take() external view returns (uint);

    /// @notice similar to take(), but with the block height joined to calculate return.
    /// @dev for instance, it returns (_amount, _block), which means at block height _block, the callee has accumulated _amount of interests.
    /// @return amount of interests and the block height.
    function takeWithBlock() external view returns (uint, uint);

    /// @notice mint the avaiable interests to callee.
    /// @dev once it mint, the amount of interests will transfer to callee's address.
    /// @return the amount of interests minted.
    function mint() external returns (uint);
}
// Dependency file: contracts/modules/BaseShareField.sol

// pragma solidity >=0.6.6;
// import '../interfaces/ERC2917-Interface.sol';
// import '../libraries/SafeMath.sol';
// import '../libraries/TransferHelper.sol';

contract BaseShareField {
    using SafeMath for uint;
    
    uint totalProductivity;
    uint accAmountPerShare;
    
    uint public totalShare;
    uint public mintedShare;
    uint public mintCumulation;
    
    address public shareToken;
    
    struct UserInfo {
        uint amount;     // How many tokens the user has provided.
        uint rewardDebt; // Reward debt. 
        uint rewardEarn; // Reward earn and not minted
    }

    mapping(address => UserInfo) public users;
    
    function _setShareToken(address _shareToken) internal {
        shareToken = _shareToken;
    }

    // Update reward variables of the given pool to be up-to-date.
    function _update() internal virtual {
        if (totalProductivity == 0) {
            totalShare = totalShare.add(_currentReward());
            return;
        }
        
        uint256 reward = _currentReward();
        accAmountPerShare = accAmountPerShare.add(reward.mul(1e12).div(totalProductivity));
        totalShare = totalShare.add(reward);
    }
    
    function _currentReward() internal virtual view returns (uint) {
        return mintedShare.add(IERC20(shareToken).balanceOf(address(this))).sub(totalShare);
    }
    
    // Audit user's reward to be up-to-date
    function _audit(address user) internal virtual {
        UserInfo storage userInfo = users[user];
        if (userInfo.amount > 0) {
            uint pending = userInfo.amount.mul(accAmountPerShare).div(1e12).sub(userInfo.rewardDebt);
            userInfo.rewardEarn = userInfo.rewardEarn.add(pending);
            mintCumulation = mintCumulation.add(pending);
            userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        }
    }

    // External function call
    // This function increase user's productivity and updates the global productivity.
    // the users' actual share percentage will calculated by:
    // Formula:     user_productivity / global_productivity
    function _increaseProductivity(address user, uint value) internal virtual returns (bool) {
        require(value > 0, 'PRODUCTIVITY_VALUE_MUST_BE_GREATER_THAN_ZERO');

        UserInfo storage userInfo = users[user];
        _update();
        _audit(user);

        totalProductivity = totalProductivity.add(value);

        userInfo.amount = userInfo.amount.add(value);
        userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        return true;
    }

    // External function call 
    // This function will decreases user's productivity by value, and updates the global productivity
    // it will record which block this is happenning and accumulates the area of (productivity * time)
    function _decreaseProductivity(address user, uint value) internal virtual returns (bool) {
        UserInfo storage userInfo = users[user];
        require(value > 0 && userInfo.amount >= value, 'INSUFFICIENT_PRODUCTIVITY');
        
        _update();
        _audit(user);
        
        userInfo.amount = userInfo.amount.sub(value);
        userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        totalProductivity = totalProductivity.sub(value);
        
        return true;
    }
    
    function _takeWithAddress(address user) internal view returns (uint) {
        UserInfo storage userInfo = users[user];
        uint _accAmountPerShare = accAmountPerShare;
        // uint256 lpSupply = totalProductivity;
        if (totalProductivity != 0) {
            uint reward = _currentReward();
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e12).div(totalProductivity));
        }
        return userInfo.amount.mul(_accAmountPerShare).div(1e12).add(userInfo.rewardEarn).sub(userInfo.rewardDebt);
    }

    // External function call
    // When user calls this function, it will calculate how many token will mint to user from his productivity * time
    // Also it calculates global token supply from last time the user mint to this time.
    function _mint(address user) internal virtual returns (uint) {
        _update();
        _audit(user);
        require(users[user].rewardEarn > 0, "NOTHING TO MINT");
        uint amount = users[user].rewardEarn;
        TransferHelper.safeTransfer(shareToken, msg.sender, amount);
        users[user].rewardEarn = 0;
        mintedShare += amount;
        return amount;
    }

    // Returns how many productivity a user has and global has.
    function getProductivity(address user) public virtual view returns (uint, uint) {
        return (users[user].amount, totalProductivity);
    }

    // Returns the current gorss product rate.
    function interestsPerBlock() public virtual view returns (uint) {
        return accAmountPerShare;
    }
    
}
// Dependency file: contracts/libraries/SafeMath.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
// Dependency file: contracts/modules/Ownable.sol

// pragma solidity >=0.5.16;

contract Ownable {
    address public owner;

    event OwnerChanged(address indexed _oldOwner, address indexed _newOwner);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, 'Ownable: FORBIDDEN');
        _;
    }

    function changeOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), 'Ownable: INVALID_ADDRESS');
        emit OwnerChanged(owner, _newOwner);
        owner = _newOwner;
    }

}

// Dependency file: contracts/DemaxLP.sol

// pragma solidity >=0.6.6;

// import './libraries/SafeMath.sol';
// import './modules/BaseShareField.sol';

interface IDemaxPool {
    function queryReward(address _pair, address _user) external view returns(uint);
    function claimReward(address _pair, address _rewardToken) external;
}

interface IDemaxPair {
    function queryReward() external view returns (uint256 rewardAmount, uint256 blockNumber);
    function mintReward() external returns (uint256 userReward);
}

interface IDemaxDelegate {
    function addPlayerPair(address _user) external;
}

interface IDemaxPlatform{
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountA,
        uint256 amountB,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline
    )
        external
        returns (
            uint256 _amountA,
            uint256 _amountB,
            uint256 _liquidity
        );
        
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 _amountToken,
            uint256 _amountETH,
            uint256 _liquidity
        );
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    
    function pairFor(address tokenA, address tokenB) external view returns (address);
}

contract DemaxLP is BaseShareField {
    // ERC20 Start
    
    using SafeMath for uint;

    string public constant name = 'Burger LP';
    string public constant symbol = 'BLP';
    uint8 public constant decimals = 18;
    uint public totalSupply;
    
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    event Mint(address indexed user, uint amount);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    
    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }
    
    receive() external payable {
    }
    
    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _transfer(address from, address to, uint value) private {
        require(balanceOf[from] >= value, 'ERC20Token: INSUFFICIENT_BALANCE');
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        if (to == address(0)) { // burn
            totalSupply = totalSupply.sub(value);
        }

        IDemaxDelegate(owner).addPlayerPair(to);
        _mintReward();
        _decreaseProductivity(from, value);
        _increaseProductivity(to, value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        require(allowance[from][msg.sender] >= value, 'ERC20Token: INSUFFICIENT_ALLOWANCE');
        allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        _transfer(from, to, value);
        return true;
    }    
    
    // ERC20 End
    
    
    address public owner;
    address public POOL;
    address public PLATFORM;
    address public tokenA;
    address public tokenB;
    address public WETH;
    
    event AddLiquidity (address indexed user, uint amountA, uint amountB, uint value);
    event RemoveLiquidity (address indexed user, uint amountA, uint amountB, uint value);
    
    constructor() public {
        owner = msg.sender;
    }
    
    function initialize(address _tokenA, address _tokenB, address _DGAS, address _POOL, address _PLATFORM, address _WETH) external {
        require(msg.sender == owner, "Demax LP Forbidden");
        tokenA = _tokenA;
        tokenB = _tokenB;
        _setShareToken(_DGAS);
        PLATFORM = _PLATFORM;
        POOL = _POOL;
        WETH = _WETH;
    }
 
    function upgrade(address _PLATFORM) external {
        require(msg.sender == owner, "Demax LP Forbidden");
        PLATFORM = _PLATFORM;
    }

    function approveContract(address token, address spender, uint amount) internal {
        uint allowAmount = IERC20(token).totalSupply();
        if(allowAmount < amount) {
            allowAmount = amount;
        }
        if(IERC20(token).allowance(address(this), spender) < amount) {
            TransferHelper.safeApprove(token, spender, allowAmount);
        }
    }
    
    function addLiquidityETH(
        address user,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline) external payable returns (
            uint256 _amountToken,
            uint256 _amountETH,
            uint256 _liquidity
        ) {
           require(msg.sender == owner, "Demax LP Forbidden");
           require(tokenA == WETH || tokenB == WETH, "INVALID CALL");
           address token = tokenA == WETH ? tokenB: tokenA;
           approveContract(token, PLATFORM, amountTokenDesired);
           TransferHelper.safeTransferFrom(token, msg.sender, address(this), amountTokenDesired);
           
           (_amountToken, _amountETH, _liquidity) = IDemaxPlatform(PLATFORM).addLiquidityETH{value: msg.value}(token, amountTokenDesired, amountTokenMin, amountETHMin, deadline);
           
           if(amountTokenDesired > _amountToken) {
                TransferHelper.safeTransfer(token, user, amountTokenDesired.sub(_amountToken));
            }
            
            if(msg.value > _amountETH) {
                TransferHelper.safeTransferETH(user, msg.value.sub(_amountETH));
            }
        _mintReward();
        _mint(user, _liquidity);
        _increaseProductivity(user, _liquidity);
        (uint amountA, uint amountB) = token == tokenA ? (_amountToken, _amountETH): (_amountETH, _amountToken);
        emit AddLiquidity (user, amountA, amountB, _liquidity);
    }
    
    function addLiquidity(
        address user,
        uint256 amountA,
        uint256 amountB,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB,
            uint256 _liquidity
        ) {
            require(msg.sender == owner, "Demax LP Forbidden");
            approveContract(tokenA, PLATFORM, amountA);
            approveContract(tokenB, PLATFORM, amountB);
            TransferHelper.safeTransferFrom(tokenA, msg.sender, address(this), amountA);
            TransferHelper.safeTransferFrom(tokenB, msg.sender, address(this), amountB);
        (_amountA, _amountB, _liquidity) = IDemaxPlatform(PLATFORM).addLiquidity(tokenA, tokenB, amountA, amountB, amountAMin, amountBMin, deadline);
        if(amountA > _amountA) {
            TransferHelper.safeTransfer(tokenA, user, amountA.sub(_amountA));
        }
        
        if(amountB > _amountB) {
            TransferHelper.safeTransfer(tokenB, user, amountB.sub(_amountB));
        }
        
        _mintReward();
        _mint(user, _liquidity);
        _increaseProductivity(user, _liquidity);
        emit AddLiquidity (user, _amountA, _amountB, _liquidity);
    }
    
    function removeLiquidityETH (
        address user,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline) external returns (uint256 _amountToken, uint256 _amountETH) {
         require(msg.sender == owner, "Demax LP Forbidden");
         require(tokenA == WETH || tokenB == WETH, "INVALID CALL");
         address token = tokenA == WETH ? tokenB: tokenA;
           
        (_amountToken, _amountETH) = IDemaxPlatform(PLATFORM).removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, user, deadline);
         
        _mintReward();
        _burn(user, liquidity);
        _decreaseProductivity(user, liquidity);
        (uint amountA, uint amountB) = token == tokenA ? (_amountToken, _amountETH): (_amountETH, _amountToken);
        emit RemoveLiquidity (user, amountA, amountB, liquidity);
    }
    
    function removeLiquidity(
        address user,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB
        ) {
            require(msg.sender == owner, "Demax LP Forbidden");
        (_amountA, _amountB) = IDemaxPlatform(PLATFORM).removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, user, deadline);
        
        _mintReward();
        _burn(user, liquidity);
        _decreaseProductivity(user, liquidity);
        emit RemoveLiquidity (user, _amountA, _amountB, liquidity);
    }
    
    function _currentReward() internal override view returns (uint) {
        address pair = IDemaxPlatform(PLATFORM).pairFor(tokenA, tokenB);
        uint countractAmount = mintedShare.add(IERC20(shareToken).balanceOf(address(this))).sub(totalShare);
        if(pair != address(0)) {
            uint poolAmount = IDemaxPool(POOL).queryReward(pair, address(this));
            (uint pairAmount, ) = IDemaxPair(pair).queryReward();
            return countractAmount.add(poolAmount).add(pairAmount);
        } else {
            return countractAmount;
        }
    }
    
    function _mintReward() internal {
        address pair = IDemaxPlatform(PLATFORM).pairFor(tokenA, tokenB);
        if(pair != address(0)) {
            uint poolAmount = IDemaxPool(POOL).queryReward(pair, address(this));
            (uint pairAmount, ) = IDemaxPair(pair).queryReward();
            if(poolAmount > 0) {
                IDemaxPool(POOL).claimReward(pair, shareToken);
            }
            
            if(pairAmount > 0) {
                IDemaxPair(pair).mintReward();
            }
        } 
    }
    
    function queryReward() external view returns (uint) {
        return _takeWithAddress(msg.sender);
    }
    
    function mintReward() external returns (uint amount) {
        _mintReward();
        amount = _mint(msg.sender);
        emit Mint(msg.sender, amount);
    }
}
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.6;

// import './DemaxLP.sol';
// import './modules/Ownable.sol';

interface IDemaxLP {
    function addLiquidity(
        address user,
        uint256 amountA,
        uint256 amountB,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB,
            uint256 _liquidity
        );
     function removeLiquidity(
        address user,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB
        );
    function addLiquidityETH(
        address user,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline) external payable returns (
            uint256 _amountToken,
            uint256 _amountETH,
            uint256 _liquidity
        );
    function removeLiquidityETH (
        address user,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline) external returns (uint256 _amountToken, uint256 _amountETH);
    function initialize(address _tokenA, address _tokenB, address _DGAS, address _POOL, address _PLATFORM, address _WETH) external;
    function upgrade(address _PLATFORM) external;
    function tokenA() external returns(address);
}

contract DemaxDelegate is Ownable{
    using SafeMath for uint;
    
    address public PLATFORM;
    address public POOL;
    address public DGAS;
    address public WETH;
    mapping(address => mapping(address => address)) public getPair;
    address[] public allPairs;
    mapping(address => bool) public isPair;
    mapping(address => address[]) public playerPairs;
    mapping(address => mapping(address => bool)) public isAddPlayerPair;

    bytes32 public contractCodeHash;
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
    
    constructor(address _PLATFORM, address _POOL, address _DGAS, address _WETH) public {
        PLATFORM = _PLATFORM;
        POOL = _POOL;
        DGAS = _DGAS;
        WETH = _WETH;
    }
    
    receive() external payable {
    }
    
    function upgradePlatform(address _PLATFORM) external onlyOwner {
        for(uint i = 0; i < allPairs.length;i++) {
            IDemaxLP(allPairs[i]).upgrade(_PLATFORM);
        }
    }

    function allPairsLength() external view returns (uint256) {
        return allPairs.length;
    }

    function getPlayerPairCount(address player) external view returns (uint256) {
        return playerPairs[player].length;
    }

    function _addPlayerPair(address _user, address _pair) internal {
        if (isAddPlayerPair[_user][_pair] == false) {
            isAddPlayerPair[_user][_pair] = true;
            playerPairs[_user].push(_pair);
        }
    }

    function addPlayerPair(address _user) external {
        require(isPair[msg.sender], 'addPlayerPair Forbidden');
        _addPlayerPair(_user, msg.sender);
    }
    
    function approveContract(address token, address spender, uint amount) internal {
        uint allowAmount = IERC20(token).totalSupply();
        if(allowAmount < amount) {
            allowAmount = amount;
        }
        if(IERC20(token).allowance(address(this), spender) < amount) {
            TransferHelper.safeApprove(token, spender, allowAmount);
        }
    }

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        uint256 deadline
        ) payable external returns (
            uint256 _amountToken,
            uint256 _amountETH,
            uint256 _liquidity
        ) {
        address pair = getPair[token][WETH];
            if(pair == address(0)) {
                pair = _createPair(token, WETH);
            }
            
            _addPlayerPair(msg.sender, pair);

            TransferHelper.safeTransferFrom(token, msg.sender, address(this), amountTokenDesired);
            approveContract(token, pair, amountTokenDesired);
            (_amountToken, _amountETH, _liquidity) = IDemaxLP(pair).addLiquidityETH{value: msg.value}(msg.sender, amountTokenDesired, amountTokenMin, amountETHMin, deadline);
    }
    
    
    
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountA,
        uint256 amountB,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB,
            uint256 _liquidity
        ) {
            address pair = getPair[tokenA][tokenB];
            if(pair == address(0)) {
                pair = _createPair(tokenA, tokenB);
            }

            _addPlayerPair(msg.sender, pair);

            if(tokenA != IDemaxLP(pair).tokenA()) {
                (tokenA, tokenB) = (tokenB, tokenA);
                (amountA, amountB, amountAMin, amountBMin) = (amountB, amountA, amountBMin, amountAMin);
            }
            
            TransferHelper.safeTransferFrom(tokenA, msg.sender, address(this), amountA);
            TransferHelper.safeTransferFrom(tokenB, msg.sender, address(this), amountB);
            approveContract(tokenA, pair, amountA);
            approveContract(tokenB, pair, amountB);

            (_amountA, _amountB, _liquidity) = IDemaxLP(pair).addLiquidity(msg.sender, amountA, amountB, amountAMin, amountBMin, deadline);
            if(tokenA != IDemaxLP(pair).tokenA()) {
                (_amountA, _amountB) = (_amountB, _amountA);
            }
    }
    
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        uint deadline
        ) external returns (uint _amountToken, uint _amountETH) {
            address pair = getPair[token][WETH];
            (_amountToken, _amountETH) = IDemaxLP(pair).removeLiquidityETH(msg.sender, liquidity, amountTokenMin, amountETHMin, deadline);
        }
    
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        uint256 deadline) external returns (
            uint256 _amountA,
            uint256 _amountB
        ) {
        address pair = getPair[tokenA][tokenB];
        (_amountA, _amountB) = IDemaxLP(pair).removeLiquidity(msg.sender, liquidity, amountAMin, amountBMin, deadline);
    }

    function _createPair(address tokenA, address tokenB) internal returns (address pair){
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'DEMAX FACTORY: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'DEMAX FACTORY: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(DemaxLP).creationCode;
        if (uint256(contractCodeHash) == 0) {
            contractCodeHash = keccak256(bytecode);
        }
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        isPair[pair] = true;
        IDemaxLP(pair).initialize(token0, token1, DGAS, POOL, PLATFORM, WETH);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_PLATFORM","type":"address"},{"internalType":"address","name":"_POOL","type":"address"},{"internalType":"address","name":"_DGAS","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[],"name":"DGAS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLATFORM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"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":"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPlayerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerPairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isAddPlayerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerPairs","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":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"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":"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":"_PLATFORM","type":"address"}],"name":"upgradePlatform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506040516140883803806140888339818101604052608081101561003357600080fd5b50805160208201516040830151606090930151600080546001600160a01b03199081163317909155600180546001600160a01b039586169083161790556002805493851693821693909317909255600380549484169483169490941790935560048054929093169116179055613fda806100ae6000396000f3fe6080604052600436106101235760003560e01c806388080d4b116100a0578063ad5c464811610064578063ad5c464814610454578063bf1512d314610469578063e5e31b13146104a2578063e6a43905146104d5578063f6f1e306146105105761012a565b806388080d4b1461033f5780638da5cb5b1461038e578063a2ad989f146103a3578063a6f9dae1146103ee578063a93518be146104215761012a565b8063723c2e2d116100e7578063723c2e2d146102725780637535d246146102875780637ae06e581461029c5780637c7f84ee146103155780637efc77fa1461032a5761012a565b80631e3dd18b1461012f57806344483d5314610175578063574f2ba3146101e35780636319d8bc1461020a5780636c42fa661461023f5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b506101596004803603602081101561015257600080fd5b503561054e565b604080516001600160a01b039092168252519081900360200190f35b34801561018157600080fd5b506101ca600480360360c081101561019857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a00135610575565b6040805192835260208301919091528051918290030190f35b3480156101ef57600080fd5b506101f861063c565b60408051918252519081900360200190f35b34801561021657600080fd5b5061023d6004803603602081101561022d57600080fd5b50356001600160a01b0316610642565b005b34801561024b57600080fd5b506101f86004803603602081101561026257600080fd5b50356001600160a01b03166106b3565b34801561027e57600080fd5b506101596106ce565b34801561029357600080fd5b506101596106dd565b3480156102a857600080fd5b506102f7600480360360e08110156102bf57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c001356106ec565b60408051938452602084019290925282820152519081900360600190f35b34801561032157600080fd5b506101f861091e565b34801561033657600080fd5b50610159610924565b34801561034b57600080fd5b5061037a6004803603604081101561036257600080fd5b506001600160a01b0381358116916020013516610933565b604080519115158252519081900360200190f35b34801561039a57600080fd5b50610159610953565b3480156103af57600080fd5b506101ca600480360360a08110156103c657600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610962565b3480156103fa57600080fd5b5061023d6004803603602081101561041157600080fd5b50356001600160a01b0316610a2a565b34801561042d57600080fd5b5061023d6004803603602081101561044457600080fd5b50356001600160a01b0316610b34565b34801561046057600080fd5b50610159610c1b565b34801561047557600080fd5b506101596004803603604081101561048c57600080fd5b506001600160a01b038135169060200135610c2a565b3480156104ae57600080fd5b5061037a600480360360208110156104c557600080fd5b50356001600160a01b0316610c5f565b3480156104e157600080fd5b50610159600480360360408110156104f857600080fd5b506001600160a01b0381358116916020013516610c74565b6102f7600480360360a081101561052657600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610c9a565b6006818154811061055b57fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03808716600090815260056020908152604080832089851684529091528082205481516309c9404160e11b815233600482015260248101899052604481018890526064810187905260848101869052825193948594921692839263139280829260a480820193929182900301818887803b1580156105f957600080fd5b505af115801561060d573d6000803e3d6000fd5b505050506040513d604081101561062357600080fd5b508051602090910151909a909950975050505050505050565b60065490565b3360009081526007602052604090205460ff166106a6576040805162461bcd60e51b815260206004820152601760248201527f616464506c617965725061697220466f7262696464656e000000000000000000604482015290519081900360640190fd5b6106b08133610dba565b50565b6001600160a01b031660009081526008602052604090205490565b6003546001600160a01b031681565b6002546001600160a01b031681565b6001600160a01b0380881660009081526005602090815260408083208a85168452909152812054909182918291168061072c576107298b8b610e47565b90505b6107363382610dba565b806001600160a01b0316630fc63d106040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561077157600080fd5b505af1158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b50516001600160a01b038c81169116146107b9579899989697969495945b6107c58b33308c61116e565b6107d18a33308b61116e565b6107dc8b828b6112cb565b6107e78a828a6112cb565b604080516312b1f21360e11b8152336004820152602481018b9052604481018a9052606481018990526084810188905260a4810187905290516001600160a01b03831691632563e4269160c48083019260609291908290030181600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b505050506040513d606081101561087c57600080fd5b508051602080830151604093840151845162fc63d160e41b8152945193985090965094506001600160a01b03841692630fc63d1092600480830193928290030181600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050506040513d60208110156108f857600080fd5b50516001600160a01b038c8116911614610910579192915b509750975097945050505050565b600a5481565b6001546001600160a01b031681565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031681565b6001600160a01b0380861660009081526005602090815260408083206004805486168552925280832054815163a2ad989f60e01b8152339381019390935260248301899052604483018890526064830187905260848301869052815193948594911692839263a2ad989f9260a48084019382900301818887803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6040811015610a1257600080fd5b50805160209091015190999098509650505050505050565b6000546001600160a01b03163314610a7e576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116610ad9576040805162461bcd60e51b815260206004820152601860248201527f4f776e61626c653a20494e56414c49445f414444524553530000000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b60005b600654811015610c175760068181548110610ba257fe5b60009182526020822001546040805162900f0160e41b81526001600160a01b03868116600483015291519190921692630900f010926024808201939182900301818387803b158015610bf357600080fd5b505af1158015610c07573d6000803e3d6000fd5b505060019092019150610b8b9050565b5050565b6004546001600160a01b031681565b60086020528160005260406000208181548110610c4357fe5b6000918252602090912001546001600160a01b03169150829050565b60076020526000908152604090205460ff1681565b60056020908152600092835260408084209091529082529020546001600160a01b031681565b6001600160a01b038086166000908152600560209081526040808320600454851684529091528120549091829182911680610ce957600454610ce6908a906001600160a01b0316610e47565b90505b610cf33382610dba565b610cff8933308b61116e565b610d0a89828a6112cb565b60408051637b78f18360e11b8152336004820152602481018a905260448101899052606481018890526084810187905290516001600160a01b0383169163f6f1e30691349160a48082019260609290919082900301818588803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b50505050506040513d6060811015610d9b57600080fd5b5080516020820151604090920151909b919a5098509650505050505050565b6001600160a01b0380831660009081526009602090815260408083209385168352929052205460ff16610c17576001600160a01b038083166000818152600960209081526040808320948616808452948252808320805460ff1916600190811790915593835260088252822080549384018155825290200180546001600160a01b03191690911790555050565b6000806000836001600160a01b0316856001600160a01b031610610e6c578385610e6f565b84845b90925090506001600160a01b038216610ecf576040805162461bcd60e51b815260206004820152601b60248201527f44454d415820464143544f52593a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260056020908152604080832085851684529091529020541615610f49576040805162461bcd60e51b815260206004820152601a60248201527f44454d415820464143544f52593a20504149525f455849535453000000000000604482015290519081900360640190fd5b606060405180602001610f5b9061153c565b601f1982820381018352601f90910116604052600a54909150610f835780516020820120600a555b6000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56001600160a01b03808216600081815260076020526040808220805460ff19166001908117909155600354600254915460048054855163cc2a9a5b60e01b81528e8a16928101929092528c89166024830152928816604482015292871660648401528616608483015290941660a485015251939850909263cc2a9a5b9260c480820193929182900301818387803b15801561108457600080fd5b505af1158015611098573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526005602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560068054600181018255958190527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106111f35780518252601f1990920191602091820191016111d4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611255576040519150601f19603f3d011682016040523d82523d6000602084013e61125a565b606091505b5091509150818015611288575080511580611288575080806020019051602081101561128557600080fd5b50515b6112c35760405162461bcd60e51b8152600401808060200182810382526024815260200180613f816024913960400191505060405180910390fd5b505050505050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b505190508181101561133f5750805b60408051636eb1769f60e11b81523060048201526001600160a01b0385811660248301529151849287169163dd62ed3e916044808301926020929190829003018186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b505110156113cc576113cc8484836113d2565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b6020831061144f5780518252601f199092019160209182019101611430565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146114b1576040519150601f19603f3d011682016040523d82523d6000602084013e6114b6565b606091505b50915091508180156114e45750805115806114e457508080602001905160208110156114e157600080fd5b50515b611535576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b5050505050565b612a378061154a8339019056fe608060405234801561001057600080fd5b50600a80546001600160a01b03191633179055612a05806100326000396000f3fe6080604052600436106101d15760003560e01c806370a08231116100f7578063a9059cbb11610095578063cf67536511610064578063cf675365146106e1578063d14c9641146106f6578063dd62ed3e1461070b578063f6f1e30614610746576101d8565b8063a9059cbb14610623578063ad5c46481461065c578063bfc8b20814610671578063cc2a9a5b14610686576101d8565b80638da5cb5b116100d15780638da5cb5b1461057b57806395d89b4114610590578063a2ad989f146105a5578063a87430ba146105f0576101d8565b806370a082311461051e5780637535d246146105515780637efc77fa14610566576101d8565b806318160ddd1161016f5780632c79db111161013e5780632c79db11146104b4578063313ce567146104c95780635f64b55b146104f45780636c9fa59e14610509576101d8565b806318160ddd146103ba57806323b872dd146103cf5780632563e4261461041257806328e964e914610481576101d8565b8063095ea7b3116101ab578063095ea7b3146102c35780630fc63d10146103105780631392808214610341578063174f57af146103a5576101d8565b8063026c4207146101dd57806306fdde03146102045780630900f0101461028e576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610784565b60408051918252519081900360200190f35b34801561021057600080fd5b5061021961078a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025357818101518382015260200161023b565b50505050905090810190601f1680156102805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029a57600080fd5b506102c1600480360360208110156102b157600080fd5b50356001600160a01b03166107af565b005b3480156102cf57600080fd5b506102fc600480360360408110156102e657600080fd5b506001600160a01b038135169060200135610825565b604080519115158252519081900360200190f35b34801561031c57600080fd5b5061032561088c565b604080516001600160a01b039092168252519081900360200190f35b34801561034d57600080fd5b5061038c600480360360a081101561036457600080fd5b506001600160a01b03813516906020810135906040810135906060810135906080013561089b565b6040805192835260208301919091528051918290030190f35b3480156103b157600080fd5b506101f2610a1b565b3480156103c657600080fd5b506101f2610a69565b3480156103db57600080fd5b506102fc600480360360608110156103f257600080fd5b506001600160a01b03813581169160208101359091169060400135610a6f565b34801561041e57600080fd5b50610463600480360360c081101561043557600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a00135610b3e565b60408051938452602084019290925282820152519081900360600190f35b34801561048d57600080fd5b5061038c600480360360208110156104a457600080fd5b50356001600160a01b0316610d8e565b3480156104c057600080fd5b506101f2610dac565b3480156104d557600080fd5b506104de610dbd565b6040805160ff9092168252519081900360200190f35b34801561050057600080fd5b50610325610dc2565b34801561051557600080fd5b50610325610dd1565b34801561052a57600080fd5b506101f26004803603602081101561054157600080fd5b50356001600160a01b0316610de0565b34801561055d57600080fd5b50610325610df2565b34801561057257600080fd5b50610325610e01565b34801561058757600080fd5b50610325610e10565b34801561059c57600080fd5b50610219610e1f565b3480156105b157600080fd5b5061038c600480360360a08110156105c857600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610e3e565b3480156105fc57600080fd5b506104636004803603602081101561061357600080fd5b50356001600160a01b0316611087565b34801561062f57600080fd5b506102fc6004803603604081101561064657600080fd5b506001600160a01b0381351690602001356110a8565b34801561066857600080fd5b506103256110be565b34801561067d57600080fd5b506101f26110cd565b34801561069257600080fd5b506102c1600480360360c08110156106a957600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a00135166110d3565b3480156106ed57600080fd5b506101f26111a0565b34801561070257600080fd5b506101f26111a6565b34801561071757600080fd5b506101f26004803603604081101561072e57600080fd5b506001600160a01b03813581169160200135166111ac565b610463600480360360a081101561075c57600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356111c9565b60025481565b604051806040016040528060098152602001680427572676572204c560bc1b81525081565b600a546001600160a01b03163314610803576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526009602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600d546001600160a01b031681565b600a5460009081906001600160a01b031633146108f4576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600c54600d54600e5460408051635d5155ef60e11b81526001600160a01b0393841660048201529183166024830152604482018a905260648201899052608482018890528a831660a483015260c482018790528051929093169263baa2abde9260e4808401938290030181600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d604081101561099a57600080fd5b50805160209091015190925090506109b061147f565b6109ba87876116f9565b6109c48787611796565b50604080518381526020810183905280820188905290516001600160a01b038916917f59c3a0b60c6ab7deb62e1440c9e72441db6db7dfe514dba8cb18e60c0d896efa919081900360600190a29550959350505050565b6000610a2561147f565b610a2e33611884565b60408051828152905191925033917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859181900360200190a290565b60075481565b6001600160a01b0383166000908152600960209081526040808320338452909152812054821115610ad15760405162461bcd60e51b815260040180806020018281038252602281526020018061291a6022913960400191505060405180910390fd5b6001600160a01b0384166000908152600960209081526040808320338452909152902054610b05908363ffffffff61194e16565b6001600160a01b0385166000908152600960209081526040808320338452909152902055610b34848484611997565b5060019392505050565b600a54600090819081906001600160a01b03163314610b99576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600d54600c54610bb6916001600160a01b0390811691168a611b6d565b600e54600c54610bd3916001600160a01b03908116911689611b6d565b600d54610beb906001600160a01b031633308b611c74565b600e54610c03906001600160a01b031633308a611c74565b600c54600d54600e5460408051630f5c0dcb60e31b81526001600160a01b0393841660048201529183166024830152604482018c9052606482018b9052608482018a905260a4820189905260c48201889052519190921691637ae06e589160e48083019260609291908290030181600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b505050506040513d6060811015610cac57600080fd5b5080516020820151604090920151909450909250905082881115610cf057600d54610cf0906001600160a01b03168a610ceb8b8763ffffffff61194e16565b611dd1565b81871115610d1957600e54610d19906001600160a01b03168a610ceb8a8663ffffffff61194e16565b610d2161147f565b610d2b8982611f34565b610d358982611fcb565b50604080518481526020810184905280820183905290516001600160a01b038b16917fbeb3885786d637a474cbc287c0a44587231633a077f0bd30354d5a4b18996fce919081900360600190a296509650969350505050565b6001600160a01b031660009081526006602052604081205490549091565b6000610db73361208a565b90505b90565b601281565b600e546001600160a01b031681565b6005546001600160a01b031681565b60086020526000908152604090205481565b600b546001600160a01b031681565b600c546001600160a01b031681565b600a546001600160a01b031681565b604051806040016040528060038152602001620424c560ec1b81525081565b600a5460009081906001600160a01b03163314610e97576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600f54600d546001600160a01b0390811691161480610ec65750600f54600e546001600160a01b039081169116145b610f06576040805162461bcd60e51b815260206004820152600c60248201526b125395905312510810d0531360a21b604482015290519081900360640190fd5b600f54600d546000916001600160a01b03918216911614610f3257600d546001600160a01b0316610f3f565b600e546001600160a01b03165b600c5460408051629d473b60e21b81526001600160a01b038085166004830152602482018c9052604482018b9052606482018a90528c8116608483015260a482018990528251949550909216926302751cec9260c48082019392918290030181600087803b158015610fb057600080fd5b505af1158015610fc4573d6000803e3d6000fd5b505050506040513d6040811015610fda57600080fd5b5080516020909101519093509150610ff061147f565b610ffa88886116f9565b6110048888611796565b50600d5460009081906001600160a01b03848116911614611026578385611029565b84845b60408051838152602081018390528082018d905290519294509092506001600160a01b038c16917f59c3a0b60c6ab7deb62e1440c9e72441db6db7dfe514dba8cb18e60c0d896efa9181900360600190a25050509550959350505050565b60066020526000908152604090208054600182015460029092015490919083565b60006110b5338484611997565b50600192915050565b600f546001600160a01b031681565b60015490565b600a546001600160a01b03163314611127576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600d80546001600160a01b038089166001600160a01b031992831617909255600e8054928816929091169190911790556111608461213a565b600c80546001600160a01b03199081166001600160a01b0394851617909155600b8054821694841694909417909355600f80549093169116179055505050565b60045481565b60035481565b600960209081526000928352604080842090915290825290205481565b600a54600090819081906001600160a01b03163314611224576040805162461bcd60e51b81526020600482015260126024820152712232b6b0bc102628102337b93134b23232b760711b604482015290519081900360640190fd5b600f54600d546001600160a01b03908116911614806112535750600f54600e546001600160a01b039081169116145b611293576040805162461bcd60e51b815260206004820152600c60248201526b125395905312510810d0531360a21b604482015290519081900360640190fd5b600f54600d546000916001600160a01b039182169116146112bf57600d546001600160a01b03166112cc565b600e546001600160a01b03165b600c549091506112e79082906001600160a01b03168a611b6d565b6112f38133308b611c74565b600c5460408051637b78f18360e11b81526001600160a01b038481166004830152602482018c9052604482018b9052606482018a9052608482018990529151919092169163f6f1e30691349160a48082019260609290919082900301818588803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b50505050506040513d606081101561138b57600080fd5b50805160208201516040909201519095509093509150838811156113be576113be818a610ceb8b8863ffffffff61194e16565b823411156113df576113df896113da348663ffffffff61194e16565b61215c565b6113e761147f565b6113f18983611f34565b6113fb8983611fcb565b50600d5460009081906001600160a01b0384811691161461141d578486611420565b85855b604080518381526020810183905280820188905290519294509092506001600160a01b038d16917fbeb3885786d637a474cbc287c0a44587231633a077f0bd30354d5a4b18996fce9181900360600190a2505050955095509592505050565b600c54600d54600e54604080516396ed28f960e01b81526001600160a01b03938416600482015291831660248301525160009392909216916396ed28f991604480820192602092909190829003018186803b1580156114dd57600080fd5b505afa1580156114f1573d6000803e3d6000fd5b505050506040513d602081101561150757600080fd5b505190506001600160a01b038116156116f657600b54604080516305ea697560e31b81526001600160a01b03848116600483015230602483015291516000939290921691632f534ba891604480820192602092909190829003018186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d602081101561159b57600080fd5b505160408051632c79db1160e01b815281519293506000926001600160a01b03861692632c79db119260048082019391829003018186803b1580156115df57600080fd5b505afa1580156115f3573d6000803e3d6000fd5b505050506040513d604081101561160957600080fd5b50519050811561168557600b54600554604080516324a9e3c160e11b81526001600160a01b038781166004830152928316602482015290519190921691634953c78291604480830192600092919082900301818387803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505050505b80156116f357826001600160a01b031663174f57af6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506040513d60208110156116f057600080fd5b50505b50505b50565b6001600160a01b038216600090815260086020526040902054611722908263ffffffff61194e16565b6001600160a01b03831660009081526008602052604090205560075461174e908263ffffffff61194e16565b6007556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216600090815260066020526040812082158015906117be575080548311155b61180f576040805162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f50524f44554354495649545900000000000000604482015290519081900360640190fd5b61181761224f565b611820846122d1565b8054611832908463ffffffff61194e16565b80825560015461185f9164e8d4a5100091611853919063ffffffff61237916565b9063ffffffff6123d216565b6001820155600054611877908463ffffffff61194e16565b6000555060019392505050565b600061188e61224f565b611897826122d1565b6001600160a01b0382166000908152600660205260409020600201546118f6576040805162461bcd60e51b815260206004820152600f60248201526e1393d512125391c81513c813525395608a1b604482015290519081900360640190fd5b6001600160a01b03808316600090815260066020526040902060020154600554909161192491163383611dd1565b6001600160a01b039290921660009081526006602052604081206002015550600380548201905590565b600061199083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612414565b9392505050565b6001600160a01b038316600090815260086020526040902054811115611a04576040805162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e3a20494e53554646494349454e545f42414c414e4345604482015290519081900360640190fd5b6001600160a01b038316600090815260086020526040902054611a2d908263ffffffff61194e16565b6001600160a01b038085166000908152600860205260408082209390935590841681522054611a62908263ffffffff6124ab16565b6001600160a01b038316600081815260086020526040902091909155611a9957600754611a95908263ffffffff61194e16565b6007555b600a54604080516318c6762f60e21b81526001600160a01b03858116600483015291519190921691636319d8bc91602480830192600092919082900301818387803b158015611ae757600080fd5b505af1158015611afb573d6000803e3d6000fd5b50505050611b0761147f565b611b118382611796565b50611b1c8282611fcb565b50816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba857600080fd5b505afa158015611bbc573d6000803e3d6000fd5b505050506040513d6020811015611bd257600080fd5b5051905081811015611be15750805b60408051636eb1769f60e11b81523060048201526001600160a01b0385811660248301529151849287169163dd62ed3e916044808301926020929190829003018186803b158015611c3157600080fd5b505afa158015611c45573d6000803e3d6000fd5b505050506040513d6020811015611c5b57600080fd5b50511015611c6e57611c6e848483612505565b50505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310611cf95780518252601f199092019160209182019101611cda565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b5091509150818015611d8e575080511580611d8e5750808060200190516020811015611d8b57600080fd5b50515b611dc95760405162461bcd60e51b81526004018080602001828103825260248152602001806129ac6024913960400191505060405180910390fd5b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611e4e5780518252601f199092019160209182019101611e2f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611eb0576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b606091505b5091509150818015611ee3575080511580611ee35750808060200190516020811015611ee057600080fd5b50515b6116f0576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b600754611f47908263ffffffff6124ab16565b6007556001600160a01b038216600090815260086020526040902054611f73908263ffffffff6124ab16565b6001600160a01b03831660008181526008602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600080821161200b5760405162461bcd60e51b815260040180806020018281038252602c815260200180612980602c913960400191505060405180910390fd5b6001600160a01b038316600090815260066020526040902061202b61224f565b612034846122d1565b600054612047908463ffffffff6124ab16565b600055805461205c908463ffffffff6124ab16565b80825560015461207d9164e8d4a5100091611853919063ffffffff61237916565b6001918201559392505050565b6001600160a01b03811660009081526006602052604081206001548254156120ea5760006120b6612668565b90506120e66120d960005461185364e8d4a510008561237990919063ffffffff16565b839063ffffffff6124ab16565b9150505b6121328260010154612126846002015461211a64e8d4a5100061185387896000015461237990919063ffffffff16565b9063ffffffff6124ab16565b9063ffffffff61194e16565b949350505050565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106121a85780518252601f199092019160209182019101612189565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461220a576040519150601f19603f3d011682016040523d82523d6000602084013e61220f565b606091505b50509050806116f35760405162461bcd60e51b815260040180806020018281038252602381526020018061295d6023913960400191505060405180910390fd5b60005461227857612270612261612668565b6002549063ffffffff6124ab16565b6002556122cf565b6000612282612668565b90506122b46122a560005461185364e8d4a510008561237990919063ffffffff16565b6001549063ffffffff6124ab16565b6001556002546122ca908263ffffffff6124ab16565b600255505b565b6001600160a01b038116600090815260066020526040902080541561237557600061231c826001015461212664e8d4a51000611853600154876000015461237990919063ffffffff16565b6002830154909150612334908263ffffffff6124ab16565b600283015560045461234c908263ffffffff6124ab16565b600455600154825461236e9164e8d4a51000916118539163ffffffff61237916565b6001830155505b5050565b60008261238857506000610886565b8282028284828161239557fe5b04146119905760405162461bcd60e51b815260040180806020018281038252602181526020018061293c6021913960400191505060405180910390fd5b600061199083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128b4565b600081848411156124a35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612468578181015183820152602001612450565b50505050905090810190601f1680156124955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611990576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106125825780518252601f199092019160209182019101612563565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146125e4576040519150601f19603f3d011682016040523d82523d6000602084013e6125e9565b606091505b5091509150818015612617575080511580612617575080806020019051602081101561261457600080fd5b50515b6116f0576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b600c54600d54600e54604080516396ed28f960e01b81526001600160a01b039384166004820152918316602483015251600093849316916396ed28f9916044808301926020929190829003018186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b5051600254600554604080516370a0823160e01b815230600482015290519394506000936127889392612126926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561274d57600080fd5b505afa158015612761573d6000803e3d6000fd5b505050506040513d602081101561277757600080fd5b50516003549063ffffffff6124ab16565b90506001600160a01b038216156128ab57600b54604080516305ea697560e31b81526001600160a01b03858116600483015230602483015291516000939290921691632f534ba891604480820192602092909190829003018186803b1580156127f057600080fd5b505afa158015612804573d6000803e3d6000fd5b505050506040513d602081101561281a57600080fd5b505160408051632c79db1160e01b815281519293506000926001600160a01b03871692632c79db119260048082019391829003018186803b15801561285e57600080fd5b505afa158015612872573d6000803e3d6000fd5b505050506040513d604081101561288857600080fd5b505190506128a08161211a858563ffffffff6124ab16565b945050505050610dba565b9150610dba9050565b600081836129035760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612468578181015183820152602001612450565b50600083858161290f57fe5b049594505050505056fe4552433230546f6b656e3a20494e53554646494349454e545f414c4c4f57414e4345536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450524f4455435449564954595f56414c55455f4d5553545f42455f475245415445525f5448414e5f5a45524f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212203ac9df9c47f341cd5f0c0e1b8c6f68abfa842866e3f800a5fd39515bfa2c0dac64736f6c634300060600335472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e0078297e89025b699e16e006ac1cfa2ac593fe7759a8bad90b2ae131d0cc15764736f6c63430006060033000000000000000000000000bf6527834dbb89cdc97a79fcd62e6c08b19f8ec000000000000000000000000086a327715d707bca24983b1145d1f6c40c5d4a74000000000000000000000000ae9269f27437f0fcbc232d39ec814844a51d6b8f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000bf6527834dbb89cdc97a79fcd62e6c08b19f8ec000000000000000000000000086a327715d707bca24983b1145d1f6c40c5d4a74000000000000000000000000ae9269f27437f0fcbc232d39ec814844a51d6b8f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _PLATFORM (address): 0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0
Arg [1] : _POOL (address): 0x86a327715d707bca24983b1145d1f6c40c5d4a74
Arg [2] : _DGAS (address): 0xae9269f27437f0fcbc232d39ec814844a51d6b8f
Arg [3] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000bf6527834dbb89cdc97a79fcd62e6c08b19f8ec0
Arg [1] : 00000000000000000000000086a327715d707bca24983b1145d1f6c40c5d4a74
Arg [2] : 000000000000000000000000ae9269f27437f0fcbc232d39ec814844a51d6b8f
Arg [3] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

30052:6333:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;30305:25:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30305:25:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30305:25:0;;:::i;:::-;;;;-1:-1:-1;;;;;30305:25:0;;;;;;;;;;;;;;34858:458;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34858:458:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;34858:458:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31099:99;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31099:99:0;;;:::i;:::-;;;;;;;;;;;;;;;;31583:164;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31583:164:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31583:164:0;-1:-1:-1;;;;;31583:164:0;;:::i;:::-;;31206:128;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31206:128:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31206:128:0;-1:-1:-1;;;;;31206:128:0;;:::i;30184:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30184:19:0;;;:::i;30158:::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30158:19:0;;;:::i;33055:1353::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33055:1353:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;33055:1353:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;30513:31;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30513:31:0;;;:::i;30128:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30128:23:0;;;:::i;30437:67::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30437:67:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30437:67:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16515:20;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16515:20:0;;;:::i;34420:426::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34420:426:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;34420:426:0;;;;;;;;;;;;;;;;;;;;;;;:::i;16801:210::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16801:210:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16801:210:0;-1:-1:-1;;;;;16801:210:0;;:::i;30902:189::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30902:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30902:189:0;-1:-1:-1;;;;;30902:189:0;;:::i;30210:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30210:19:0;;;:::i;30382:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30382:48:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30382:48:0;;;;;;;;:::i;30337:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30337:38:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30337:38:0;-1:-1:-1;;;;;30337:38:0;;:::i;30236:62::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30236:62:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30236:62:0;;;;;;;;;;:::i;32146:885::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;32146:885:0;;;;;;;;;;;;;;;;;;;;;;;:::i;30305:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30305:25:0;;-1:-1:-1;30305:25:0;:::o;34858:458::-;-1:-1:-1;;;;;35164:15:0;;;35079:16;35164:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;35221:87;;-1:-1:-1;;;35221:87:0;;35252:10;35221:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35079:16;;;;35164:23;;;;;35221:30;;:87;;;;;35164:15;35221:87;;;;;;35079:16;35164:23;35221:87;;;2:2:-1;;;;27:1;24;17:12;2:2;35221:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35221:87:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35221:87:0;;;;;;;;;;;-1:-1:-1;34858:458:0;-1:-1:-1;;;;;;;;34858:458:0:o;31099:99::-;31175:8;:15;31099:99;:::o;31583:164::-;31656:10;31649:18;;;;:6;:18;;;;;;;;31641:54;;;;;-1:-1:-1;;;31641:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31706:33;31721:5;31728:10;31706:14;:33::i;:::-;31583:164;:::o;31206:128::-;-1:-1:-1;;;;;31300:19:0;31273:7;31300:19;;;:11;:19;;;;;:26;;31206:128::o;30184:19::-;;;-1:-1:-1;;;;;30184:19:0;;:::o;30158:::-;;;-1:-1:-1;;;;;30158:19:0;;:::o;33055:1353::-;-1:-1:-1;;;;;33419:15:0;;;33297:16;33419:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;33297:16;;;;;;33419:23;33460:18;33457:92;;33506:27;33518:6;33526;33506:11;:27::i;:::-;33499:34;;33457:92;33565:32;33580:10;33592:4;33565:14;:32::i;:::-;33636:4;-1:-1:-1;;;;;33627:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33627:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33627:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33627:23:0;-1:-1:-1;;;;;33617:33:0;;;;;;33614:214;;33691:6;;33699;33771:7;;33780;33789:10;;33801;33614:214;33856:75;33888:6;33896:10;33916:4;33923:7;33856:31;:75::i;:::-;33946;33978:6;33986:10;34006:4;34013:7;33946:31;:75::i;:::-;34036:38;34052:6;34060:4;34066:7;34036:15;:38::i;:::-;34089;34105:6;34113:4;34119:7;34089:15;:38::i;:::-;34179:91;;;-1:-1:-1;;;34179:91:0;;34207:10;34179:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34179:27:0;;;;;:91;;;;;;;;;;;;;;-1:-1:-1;34179:27:0;:91;;;2:2:-1;;;;27:1;24;17:12;2:2;34179:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34179:91:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34179:91:0;;;;;;;;;;;;34298:23;;-1:-1:-1;;;34298:23:0;;;;34179:91;;-1:-1:-1;34179:91:0;;-1:-1:-1;34179:91:0;-1:-1:-1;;;;;;34298:21:0;;;;;:23;;;;;34179:91;34298:23;;;;;;:21;:23;;;2:2:-1;;;;27:1;24;17:12;2:2;34298:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34298:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34298:23:0;-1:-1:-1;;;;;34288:33:0;;;;;;34285:116;;34366:8;;34376;34285:116;33055:1353;;;;;;;;;;;;:::o;30513:31::-;;;;:::o;30128:23::-;;;-1:-1:-1;;;;;30128:23:0;;:::o;30437:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16515:20::-;;;-1:-1:-1;;;;;16515:20:0;;:::o;34420:426::-;-1:-1:-1;;;;;34674:14:0;;;34608:17;34674:14;;;:7;:14;;;;;;;;34689:4;;;;;34674:20;;;;;;;;34738:96;;-1:-1:-1;;;34738:96:0;;34772:10;34738:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34608:17;;;;34674:20;;;;;34738:33;;:96;;;;;;;;;;34608:17;34674:20;34738:96;;;2:2:-1;;;;27:1;24;17:12;2:2;34738:96:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34738:96:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34738:96:0;;;;;;;;;;;-1:-1:-1;34420:426:0;-1:-1:-1;;;;;;;34420:426:0:o;16801:210::-;16745:5;;-1:-1:-1;;;;;16745:5:0;16731:10;:19;16723:50;;;;;-1:-1:-1;;;16723:50:0;;;;;;;;;;;;-1:-1:-1;;;16723:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16877:23:0;::::1;16869:60;;;::::0;;-1:-1:-1;;;16869:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16958:5;::::0;;16945:30:::1;::::0;-1:-1:-1;;;;;16945:30:0;;::::1;::::0;16958:5;::::1;::::0;16945:30:::1;::::0;::::1;16986:5;:17:::0;;-1:-1:-1;;;;;;16986:17:0::1;-1:-1:-1::0;;;;;16986:17:0;;;::::1;::::0;;;::::1;::::0;;16801:210::o;30902:189::-;16745:5;;-1:-1:-1;;;;;16745:5:0;16731:10;:19;16723:50;;;;;-1:-1:-1;;;16723:50:0;;;;;;;;;;;;-1:-1:-1;;;16723:50:0;;;;;;;;;;;;;;;30980:6:::1;30976:108;30996:8;:15:::0;30992:19;::::1;30976:108;;;31041:8;31050:1;31041:11;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;31032:40:::1;::::0;;-1:-1:-1;;;31032:40:0;;-1:-1:-1;;;;;31032:40:0;;::::1;;::::0;::::1;::::0;;;31041:11;;;::::1;::::0;31032:29:::1;::::0;:40;;;;;;;;;;;31041:11;;31032:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;31032:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;31012:3:0::1;::::0;;::::1;::::0;-1:-1:-1;30976:108:0::1;::::0;-1:-1:-1;30976:108:0::1;;;30902:189:::0;:::o;30210:19::-;;;-1:-1:-1;;;;;30210:19:0;;:::o;30382:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30382:48:0;;-1:-1:-1;30382:48:0;;-1:-1:-1;30382:48:0:o;30337:38::-;;;;;;;;;;;;;;;:::o;30236:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30236:62:0;;:::o;32146:885::-;-1:-1:-1;;;;;32498:14:0;;;32374:20;32498:14;;;:7;:14;;;;;;;;32513:4;;;;32498:20;;;;;;;;32374;;;;;;32498;32536:18;32533:89;;32601:4;;32582:24;;32594:5;;-1:-1:-1;;;;;32601:4:0;32582:11;:24::i;:::-;32575:31;;32533:89;32650:32;32665:10;32677:4;32650:14;:32::i;:::-;32699:85;32731:5;32738:10;32758:4;32765:18;32699:31;:85::i;:::-;32799:48;32815:5;32822:4;32828:18;32799:15;:48::i;:::-;32903:120;;;-1:-1:-1;;;32903:120:0;;32952:10;32903:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32903:30:0;;;;;32941:9;;32903:120;;;;;;;;;;;;;;;32941:9;32903:30;:120;;;2:2:-1;;;;27:1;24;17:12;2:2;32903:120:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32903:120:0;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32903:120:0;;;;;;;;;;;;;;;-1:-1:-1;32903:120:0;-1:-1:-1;32146:885:0;-1:-1:-1;;;;;;;32146:885:0:o;31342:233::-;-1:-1:-1;;;;;31420:22:0;;;;;;;:15;:22;;;;;;;;:29;;;;;;;;;;;;31416:152;;-1:-1:-1;;;;;31475:22:0;;;;;;;:15;:22;;;;;;;;:29;;;;;;;;;;;;:36;;-1:-1:-1;;31475:36:0;31507:4;31475:36;;;;;;31526:18;;;:11;:18;;;;27:10:-1;;23:18;;;45:23;;31526:30:0;;;;;;;-1:-1:-1;;;;;;31526:30:0;;;;;;31342:233;;:::o;35324:1058::-;35395:12;35420:14;35436;35463:6;-1:-1:-1;;;;;35454:15:0;:6;-1:-1:-1;;;;;35454:15:0;;:53;;35492:6;35500;35454:53;;;35473:6;35481;35454:53;35419:88;;-1:-1:-1;35419:88:0;-1:-1:-1;;;;;;35526:20:0;;35518:60;;;;;-1:-1:-1;;;35518:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35597:15:0;;;35632:1;35597:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;35589:76;;;;;-1:-1:-1;;;35589:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35706:21;35730:26;;;;;;;;:::i;:::-;-1:-1:-1;;21:26;;;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;35779:16:0;;34:5:-1;;-1:-1;35767:101:0;;35837:19;;;;;;35818:16;:38;35767:101;35878:12;35920:6;35928;35903:32;;;;;;-1:-1:-1;;;;;35903:32:0;-1:-1:-1;;;;;35903:32:0;;;;;;;;-1:-1:-1;;;;;35903:32:0;-1:-1:-1;;;;;35903:32:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;35903:32:0;;;35893:43;;;;;;35878:58;;36026:4;36015:8;36009:15;36004:2;35994:8;35990:17;35987:1;35979:52;-1:-1:-1;;;;;36052:12:0;;;;;;;:6;:12;;;;;;:19;;-1:-1:-1;;36052:19:0;36067:4;36052:19;;;;;;36124:4;;36130;;36136:8;;36146:4;;;36082:69;;-1:-1:-1;;;36082:69:0;;;;;;;;;;;;;;;;;;;36124:4;;;36082:69;;;;36130:4;;;36082:69;;;;36136:8;;36082:69;;;;36146:4;;;36082:69;;;;;35971:60;;-1:-1:-1;36052:12:0;;36082:25;;:69;;;;;36052:12;36082:69;;;;;;36052:12;;36082:69;;;2:2:-1;;;;27:1;24;17:12;2:2;36082:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;36162:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;36162:30:0;;;;;;;;36203:15;;;;;;:23;;;;;;;;:30;;;;;;;;36289:8;27:10:-1;;-1:-1;23:18;;45:23;;36289:19:0;;;;;;;;;;;;;;;;;;36358:15;;36324:50;;;;;;;;;;;;;;;;;;;;;;35324:1058;;;;;;;;:::o;1918:402::-;2143:51;;;-1:-1:-1;;;;;2143:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2143:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2132:63:0;;;;2097:12;;2111:17;;2132:10;;;;2143:51;2132:63;;;25:18:-1;2132:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2132: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;;2096:99:0;;;;2214:7;:57;;;;-1:-1:-1;2226:11:0;;:16;;:44;;;2257:4;2246:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2246:24:0;2226:44;2206:106;;;;-1:-1:-1;;;2206:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1918:402;;;;;;:::o;31759:379::-;31849:16;31875:5;-1:-1:-1;;;;;31868:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31868:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31868:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31868:27:0;;-1:-1:-1;31909:20:0;;;31906:72;;;-1:-1:-1;31960:6:0;31906:72;31991:47;;;-1:-1:-1;;;31991:47:0;;32023:4;31991:47;;;;-1:-1:-1;;;;;31991:47:0;;;;;;;;;32041:6;;31991:23;;;;;:47;;;;;;;;;;;;;;:23;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;31991:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31991:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31991:47:0;:56;31988:143;;;32064:55;32091:5;32098:7;32107:11;32064:26;:55::i;:::-;31759:379;;;;:::o;1183:358::-;1376:45;;;-1:-1:-1;;;;;1376:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1376:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1365:57:0;;;;1330:12;;1344:17;;1365:10;;;;1376:45;1365:57;;;25:18:-1;1365:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1365: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;;1329:93:0;;;;1441:7;:57;;;;-1:-1:-1;1453:11:0;;:16;;:44;;;1484:4;1473:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1473:24:0;1453:44;1433:100;;;;;-1:-1:-1;;;1433:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1183:358;;;;;:::o;30052:6333::-;;;;;;;;:::o

Swarm Source

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