Contract 0x782395303692abed877d2737aa7982345eb44c11

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xf489c308363d8c6ba624804d3a5eaca723fb56f8273f9d445cf57bb05430bd8785304802021-06-22 22:33:182 mins ago0x9db9823a740e678b19c5e1f62bc9bbb7716641a8 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0006714
0x0af2064322588bba9fbd9f23b921d87ae8109d86740b4d98cc1de8b4958b773c85304532021-06-22 22:31:574 mins ago0x9db9823a740e678b19c5e1f62bc9bbb7716641a8 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000905025
0x99014eee54ccd3f925137b8c5704b314bb881831c9bbc24ba9955128220fd50f85303912021-06-22 22:28:517 mins ago0xe8358c0337cd4517e35669b77851c18dfdf657a2 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000733695
0xfc248d991e9f54260cff6c09cc67854198ad17d4ff6100e3c5fbacb621c5847685303472021-06-22 22:26:399 mins ago0x33f66df7cfa4d20348f19fb5cec5cb9d3e321310 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000980025
0xacdcb3e2153ab0cf1b50eb15f27fef73abae97589a06a0db19069092c230fd0185302702021-06-22 22:22:3313 mins ago0xd247707f43406b57af2813518af00736d0b586a0 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000905025
0x9939c51b946a07174f861dff39c86d1a26c10f669e6b10695afbc4dede57da1285301422021-06-22 22:16:0820 mins ago0xde2f1712e4f6a45f359d3be4be5fb7137b96bc0e IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000684828
0x58fa53cc8eae9c36846f8c8c5cce0d4b73cecab431dd62143f316cdfcc95069585301142021-06-22 22:14:4421 mins ago0x6f54d8d7b974e2046ffcd4195a772f1bebb0dd8a IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0009231255
0x814c1d5a603d6bf01456f94f6d711a6a597a0937c9ae08d32cd6ef8e1e7a135285298572021-06-22 22:01:5334 mins ago0x55a55f9e980524bd9b2b628259ba1947ce9595e9 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000692275
0xab6fbe8e8d3b235caa744b4c38665df71e4cddf9d19699cde20587228b73657385298202021-06-22 22:00:0236 mins ago0xbf3dd90a508f5b0fd08e8b0c814a3a45ff6a2859 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00113867
0xd59d013f35a8724961112f7afce65963149eb71c19deec209709b46b8d40f68a85297362021-06-22 21:55:5040 mins ago0xbde1dcfbf6931843811656268850ac45d47cc9e6 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0017146302
0xbbea3afd97a7a678975635a55b4e0205de0b4c3b2e5370e46b9c15889953380385297292021-06-22 21:55:2940 mins ago0xbde1dcfbf6931843811656268850ac45d47cc9e6 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0019241229
0x06d53f453c45f1e14ab04aa3037a07ea53ea202bc329b782a96526e4255d702c85297232021-06-22 21:55:1141 mins ago0x64c2c655071c7ed3bfb6f4a29aab3ac14793e0ba IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0007464
0x853849468f1630aaad067607d3f36ab9dca095a7c79548338bef1b0bb935652385296292021-06-22 21:50:2945 mins ago0x889bc0b46d13a2333265db22904a31313dad3428 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0006714
0x9998c3c4b613dc06391c7ea4f58d3db8654e9368fac75e76b6b45d3baa12e97185295852021-06-22 21:48:1747 mins ago0xcac47fcdeb38c91e97805ab12c350c01d0c4d4dd IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0017016813
0x4e53cb322b2d1578ae0817f662c18c8e2491bf5e9ca54be09f44aeca506ec94885295082021-06-22 21:44:2551 mins ago0x9b5f532fdd2ccc3f6e6ebc95f403d5f84a679afb IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00108603
0xd799cdd2e192b2998c262593d4187c18b033f1b9f608f58ef4da95de3f2bfb3c85295052021-06-22 21:44:1651 mins ago0xf49789b7df7c5b80becf9b2224a64d7654850bd1 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.001792935
0xc0d8ea7a375cdbce7256a4aa3c38823ac24e3f4ac902157cf69960ccc819e59d85292502021-06-22 21:31:311 hr 4 mins ago0x79ebd6ca9f685e10ec9f9e205c4f7e685dae8c73 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0007464
0x6e0b24c36a28c73008648e81a2ea1fa3eb22379497da607c94f59f5d155ddf1d85290292021-06-22 21:20:281 hr 15 mins ago0xc3dbde0995207329c11a83ecac9d092a04216f47 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000554985
0x7514b9048a547d86a4cc759feb4dc6c117085092756f6cf5deed165ae908bf5f85288332021-06-22 21:10:391 hr 25 mins ago0x07ff7b5aa39416209d6a7e4f03497fc73887193e IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0006714
0x95a3049f61251f6c08d912e4bfb3a0010640af1d5c77e2753cfa12065160349785287412021-06-22 21:06:031 hr 30 mins ago0x37637b4b71ac4da5dbd28f885c294ff2f4056181 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000967325
0x472bb442550da33ab6ffcdead984fbe207f8720e5930d3d4cc1ade897593d09485286842021-06-22 21:03:111 hr 33 mins ago0x716ca7342b714c1f5ba30b7b25a538af1876f890 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.002148415
0x19844759f0fa0f18124c6e69de7156e5dc4b4cef7a3bc72a1cc272890bb5f9f085286812021-06-22 21:03:021 hr 33 mins ago0x204218d4294f30610d895aee7ec2deb4a38461b1 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000905025
0x7d89f7c85d0fa5fa1e0499ff6e580da42a77af0645fe90082f30ac2e0317d73285286692021-06-22 21:02:261 hr 33 mins ago0xa68ab42025862bb10a8926a72441625035be2863 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00121367
0xc59ebc817b6a843a6adb6b3ba3a960eac21108969207971fd218394590154ccd85286662021-06-22 21:02:171 hr 33 mins ago0xfcb77ef5a72656914523b4af42554791a8fa2752 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00113867
0x2df93d3a4c2a4ad3b14faac8a5e5fa72267dc3038c0767d606351b8bc3ef716085286652021-06-22 21:02:141 hr 33 mins ago0xd18e3c5d1f55803313b72a44211b3698272b57bb IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0006714
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapMining

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

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

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {// Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1;
            // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

interface IMdx is IERC20 {
    function mint(address to, uint256 amount) external returns (bool);
}

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IOracle {
    function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut);
}

contract SwapMining is Ownable {
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _whitelist;

    // MDX tokens created per block
    uint256 public mdxPerBlock;
    // The block number when MDX mining starts.
    uint256 public startBlock;
    // How many blocks are halved
    uint256 public halvingPeriod = 1670400;
    // Total allocation points
    uint256 public totalAllocPoint = 0;
    IOracle public oracle;
    // router address
    address public router;
    // factory address
    IMdexFactory public factory;
    // mdx token address
    IMdx public mdx;
    // Calculate price based on BUSD-T
    address public targetToken;
    // pair corresponding pid
    mapping(address => uint256) public pairOfPid;

    constructor(
        IMdx _mdx,
        IMdexFactory _factory,
        IOracle _oracle,
        address _router,
        address _targetToken,
        uint256 _mdxPerBlock,
        uint256 _startBlock
    ) public {
        mdx = _mdx;
        factory = _factory;
        oracle = _oracle;
        router = _router;
        targetToken = _targetToken;
        mdxPerBlock = _mdxPerBlock;
        startBlock = _startBlock;
    }

    struct UserInfo {
        uint256 quantity;       // How many LP tokens the user has provided
        uint256 blockNumber;    // Last transaction block
    }

    struct PoolInfo {
        address pair;           // Trading pairs that can be mined
        uint256 quantity;       // Current amount of LPs
        uint256 totalQuantity;  // All quantity
        uint256 allocPoint;     // How many allocation points assigned to this pool
        uint256 allocMdxAmount; // How many MDXs
        uint256 lastRewardBlock;// Last transaction block
    }

    PoolInfo[] public poolInfo;
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;


    function poolLength() public view returns (uint256) {
        return poolInfo.length;
    }


    function addPair(uint256 _allocPoint, address _pair, bool _withUpdate) public onlyOwner {
        require(_pair != address(0), "_pair is the zero address");
        if (_withUpdate) {
            massMintPools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
        pair : _pair,
        quantity : 0,
        totalQuantity : 0,
        allocPoint : _allocPoint,
        allocMdxAmount : 0,
        lastRewardBlock : lastRewardBlock
        }));
        pairOfPid[_pair] = poolLength() - 1;
    }

    // Update the allocPoint of the pool
    function setPair(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        if (_withUpdate) {
            massMintPools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }

    // Set the number of mdx produced by each block
    function setMdxPerBlock(uint256 _newPerBlock) public onlyOwner {
        massMintPools();
        mdxPerBlock = _newPerBlock;
    }

    // Only tokens in the whitelist can be mined MDX
    function addWhitelist(address _addToken) public onlyOwner returns (bool) {
        require(_addToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.add(_whitelist, _addToken);
    }

    function delWhitelist(address _delToken) public onlyOwner returns (bool) {
        require(_delToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.remove(_whitelist, _delToken);
    }

    function getWhitelistLength() public view returns (uint256) {
        return EnumerableSet.length(_whitelist);
    }

    function isWhitelist(address _token) public view returns (bool) {
        return EnumerableSet.contains(_whitelist, _token);
    }

    function getWhitelist(uint256 _index) public view returns (address){
        require(_index <= getWhitelistLength() - 1, "SwapMining: index out of bounds");
        return EnumerableSet.at(_whitelist, _index);
    }

    function setHalvingPeriod(uint256 _block) public onlyOwner {
        halvingPeriod = _block;
    }

    function setRouter(address newRouter) public onlyOwner {
        require(newRouter != address(0), "SwapMining: new router is the zero address");
        router = newRouter;
    }

    function setOracle(IOracle _oracle) public onlyOwner {
        require(address(_oracle) != address(0), "SwapMining: new oracle is the zero address");
        oracle = _oracle;
    }

    // At what phase
    function phase(uint256 blockNumber) public view returns (uint256) {
        if (halvingPeriod == 0) {
            return 0;
        }
        if (blockNumber > startBlock) {
            return (blockNumber.sub(startBlock).sub(1)).div(halvingPeriod);
        }
        return 0;
    }

    function phase() public view returns (uint256) {
        return phase(block.number);
    }

    function reward(uint256 blockNumber) public view returns (uint256) {
        uint256 _phase = phase(blockNumber);
        return mdxPerBlock.div(2 ** _phase);
    }

    function reward() public view returns (uint256) {
        return reward(block.number);
    }

    // Rewards for the current block
    function getMdxReward(uint256 _lastRewardBlock) public view returns (uint256) {
        require(_lastRewardBlock <= block.number, "SwapMining: must little than the current block number");
        uint256 blockReward = 0;
        uint256 n = phase(_lastRewardBlock);
        uint256 m = phase(block.number);
        // If it crosses the cycle
        while (n < m) {
            n++;
            // Get the last block of the previous cycle
            uint256 r = n.mul(halvingPeriod).add(startBlock);
            // Get rewards from previous periods
            blockReward = blockReward.add((r.sub(_lastRewardBlock)).mul(reward(r)));
            _lastRewardBlock = r;
        }
        blockReward = blockReward.add((block.number.sub(_lastRewardBlock)).mul(reward(block.number)));
        return blockReward;
    }

    // Update all pools Called when updating allocPoint and setting new blocks
    function massMintPools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            mint(pid);
        }
    }

    function mint(uint256 _pid) public returns (bool) {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return false;
        }
        uint256 blockReward = getMdxReward(pool.lastRewardBlock);
        if (blockReward <= 0) {
            return false;
        }
        // Calculate the rewards obtained by the pool based on the allocPoint
        uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
        mdx.mint(address(this), mdxReward);
        // Increase the number of tokens in the current pool
        pool.allocMdxAmount = pool.allocMdxAmount.add(mdxReward);
        pool.lastRewardBlock = block.number;
        return true;
    }

    // swapMining only router
    function swap(address account, address input, address output, uint256 amount) public onlyRouter returns (bool) {
        require(account != address(0), "SwapMining: taker swap account is the zero address");
        require(input != address(0), "SwapMining: taker swap input is the zero address");
        require(output != address(0), "SwapMining: taker swap output is the zero address");

        if (poolLength() <= 0) {
            return false;
        }

        if (!isWhitelist(input) || !isWhitelist(output)) {
            return false;
        }

        address pair = IMdexFactory(factory).pairFor(input, output);

        PoolInfo storage pool = poolInfo[pairOfPid[pair]];
        // If it does not exist or the allocPoint is 0 then return
        if (pool.pair != pair || pool.allocPoint <= 0) {
            return false;
        }

        uint256 quantity = getQuantity(output, amount, targetToken);
        if (quantity <= 0) {
            return false;
        }

        mint(pairOfPid[pair]);

        pool.quantity = pool.quantity.add(quantity);
        pool.totalQuantity = pool.totalQuantity.add(quantity);
        UserInfo storage user = userInfo[pairOfPid[pair]][account];
        user.quantity = user.quantity.add(quantity);
        user.blockNumber = block.number;
        return true;
    }

    // The user withdraws all the transaction rewards of the pool
    function takerWithdraw() public {
        uint256 userSub;
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            PoolInfo storage pool = poolInfo[pid];
            UserInfo storage user = userInfo[pid][msg.sender];
            if (user.quantity > 0) {
                mint(pid);
                // The reward held by the user in this pool
                uint256 userReward = pool.allocMdxAmount.mul(user.quantity).div(pool.quantity);
                pool.quantity = pool.quantity.sub(user.quantity);
                pool.allocMdxAmount = pool.allocMdxAmount.sub(userReward);
                user.quantity = 0;
                user.blockNumber = block.number;
                userSub = userSub.add(userReward);
            }
        }
        if (userSub <= 0) {
            return;
        }
        mdx.transfer(msg.sender, userSub);
    }

    // Get rewards from users in the current pool
    function getUserReward(uint256 _pid) public view returns (uint256, uint256){
        require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool");
        uint256 userSub;
        PoolInfo memory pool = poolInfo[_pid];
        UserInfo memory user = userInfo[_pid][msg.sender];
        if (user.quantity > 0) {
            uint256 blockReward = getMdxReward(pool.lastRewardBlock);
            uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
            userSub = userSub.add((pool.allocMdxAmount.add(mdxReward)).mul(user.quantity).div(pool.quantity));
        }
        //Mdx available to users, User transaction amount
        return (userSub, user.quantity);
    }

    // Get details of the pool
    function getPoolInfo(uint256 _pid) public view returns (address, address, uint256, uint256, uint256, uint256){
        require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool");
        PoolInfo memory pool = poolInfo[_pid];
        address token0 = IMdexPair(pool.pair).token0();
        address token1 = IMdexPair(pool.pair).token1();
        uint256 mdxAmount = pool.allocMdxAmount;
        uint256 blockReward = getMdxReward(pool.lastRewardBlock);
        uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
        mdxAmount = mdxAmount.add(mdxReward);
        //token0,token1,Pool remaining reward,Total /Current transaction volume of the pool
        return (token0, token1, mdxAmount, pool.totalQuantity, pool.quantity, pool.allocPoint);
    }

    modifier onlyRouter() {
        require(msg.sender == router, "SwapMining: caller is not the router");
        _;
    }

    function getQuantity(address outputToken, uint256 outputAmount, address anchorToken) public view returns (uint256) {
        uint256 quantity = 0;
        if (outputToken == anchorToken) {
            quantity = outputAmount;
        } else if (IMdexFactory(factory).getPair(outputToken, anchorToken) != address(0)) {
            quantity = IOracle(oracle).consult(outputToken, outputAmount, anchorToken);
        } else {
            uint256 length = getWhitelistLength();
            for (uint256 index = 0; index < length; index++) {
                address intermediate = getWhitelist(index);
                if (IMdexFactory(factory).getPair(outputToken, intermediate) != address(0) && IMdexFactory(factory).getPair(intermediate, anchorToken) != address(0)) {
                    uint256 interQuantity = IOracle(oracle).consult(outputToken, outputAmount, intermediate);
                    quantity = IOracle(oracle).consult(intermediate, interQuantity, anchorToken);
                    break;
                }
            }
        }
        return quantity;
    }

}

Contract ABI

[{"inputs":[{"internalType":"contract IMdx","name":"_mdx","type":"address"},{"internalType":"contract IMdexFactory","name":"_factory","type":"address"},{"internalType":"contract IOracle","name":"_oracle","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_mdxPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addToken","type":"address"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delToken","type":"address"}],"name":"delWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IMdexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"getMdxReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"address","name":"anchorToken","type":"address"}],"name":"getQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massMintPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mdx","outputs":[{"internalType":"contract IMdx","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mdxPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairOfPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"allocMdxAmount","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setHalvingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerBlock","type":"uint256"}],"name":"setMdxPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405262197d00600555600060065534801561001c57600080fd5b506040516126c93803806126c9833981810160405260e081101561003f57600080fd5b50805160208201516040808401516060850151608086015160a087015160c090970151600080546001600160a01b031916331780825595519798969794969395929491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a80546001600160a01b03199081166001600160a01b03998a1617909155600980548216978916979097179096556007805487169588169590951790945560088054861693871693909317909255600b80549094169416939093179091556003919091556004556125a0806101296000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806396db752a1161013b578063b5ec5c99116100b8578063e377fe351161007c578063e377fe3514610658578063f2fde38b14610675578063f80f5dd51461069b578063f887ea40146106c1578063f9d181f9146106c957610248565b8063b5ec5c99146105df578063b872dd0e146105fc578063c0d7865514610604578063c45a01551461062a578063c683630d1461063257610248565b8063a13202e9116100ff578063a13202e914610540578063a7ef67f614610548578063a9678a181461057e578063a9fb763c146105ba578063b1c9fe6e146105d757610248565b806396db752a146104bb57806397ecfaab146104d85780639f4ece2e146104fe5780639fb08cb714610506578063a0712d681461052357610248565b806348cd4cb1116101c95780637adbf9731161018d5780637adbf973146104385780637dc0d1d01461045e5780638da5cb5b146104665780638fa39a881461046e57806393f1a40b1461047657610248565b806348cd4cb1146103fb5780635672ab55146104035780635a3e251f1461040b578063715018a614610413578063791ba3741461041b57610248565b8063190cf6c911610210578063190cf6c91461030c578063228cb733146103395780632f380b35146103415780632f54bf6e1461039d578063327107f7146103d757610248565b80630495de501461024d578063081e3eda14610285578063135f8aa71461028d5780631526fe27146102aa57806317caf6f114610304575b600080fd5b6102736004803603602081101561026357600080fd5b50356001600160a01b03166106fd565b60408051918252519081900360200190f35b61027361070f565b610273600480360360208110156102a357600080fd5b5035610715565b6102c7600480360360208110156102c057600080fd5b5035610770565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6102736107bd565b6103376004803603606081101561032257600080fd5b508035906020810135906040013515156107c3565b005b610273610884565b61035e6004803603602081101561035757600080fd5b5035610894565b604080516001600160a01b039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b6103c3600480360360208110156103b357600080fd5b50356001600160a01b0316610ab0565b604080519115158252519081900360200190f35b6103df610ac4565b604080516001600160a01b039092168252519081900360200190f35b610273610ad3565b6103df610ad9565b610273610ae8565b610337610aee565b6103376004803603602081101561043157600080fd5b5035610b80565b6103376004803603602081101561044e57600080fd5b50356001600160a01b0316610bd5565b6103df610c84565b6103df610c93565b610273610ca2565b6104a26004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ca8565b6040805192835260208301919091528051918290030190f35b6103df600480360360208110156104d157600080fd5b5035610ccc565b6103c3600480360360208110156104ee57600080fd5b50356001600160a01b0316610d3e565b610337610dd8565b6104a26004803603602081101561051c57600080fd5b5035610dfc565b6103c36004803603602081101561053957600080fd5b5035610f90565b6102736110b0565b6102736004803603606081101561055e57600080fd5b506001600160a01b038135811691602081013591604090910135166110bc565b6103c36004803603608081101561059457600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561147f565b610273600480360360208110156105d057600080fd5b5035611796565b6102736117c3565b610337600480360360208110156105f557600080fd5b50356117ce565b61033761181b565b6103376004803603602081101561061a57600080fd5b50356001600160a01b031661197c565b6103df611a2b565b6103c36004803603602081101561064857600080fd5b50356001600160a01b0316611a3a565b6102736004803603602081101561066e57600080fd5b5035611a47565b6103376004803603602081101561068b57600080fd5b50356001600160a01b0316611b1f565b6103c3600480360360208110156106b157600080fd5b50356001600160a01b0316611b73565b6103df611c0d565b610337600480360360608110156106df57600080fd5b508035906001600160a01b0360208201351690604001351515611c1c565b600c6020526000908152604090205481565b600d5490565b60006005546000141561072a5750600061076b565b6004548211156107675761076060055461075a600161075460045487611e6a90919063ffffffff16565b90611e6a565b90611eac565b905061076b565b5060005b919050565b600d818154811061077d57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b60065481565b6107cc33610ab0565b61080b576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b801561081957610819610dd8565b61085682610850600d868154811061082d57fe5b906000526020600020906006020160030154600654611e6a90919063ffffffff16565b90611eee565b60068190555081600d848154811061086a57fe5b906000526020600020906006020160030181905550505050565b600061088f43611796565b905090565b6000806000806000806001600d80549050038711156108fa576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b610902612323565b600d888154811061090f57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b031680855260018201548585015260028201548584015260038201546060860152600480830154608087015260059092015460a08601528251630dfe168160e01b8152925194965093630dfe16819383830193909290829003018186803b15801561099e57600080fd5b505afa1580156109b2573d6000803e3d6000fd5b505050506040513d60208110156109c857600080fd5b505182516040805163d21220a760e01b815290519293506000926001600160a01b039092169163d21220a791600480820192602092909190829003018186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d6020811015610a3e57600080fd5b5051608084015160a085015191925090600090610a5a90611a47565b90506000610a7b60065461075a886060015185611f4890919063ffffffff16565b9050610a878382611eee565b60408701516020880151606090980151969f959e50909c509a5094985092965090945050505050565b6000546001600160a01b0390811691161490565b600b546001600160a01b031681565b60045481565b600a546001600160a01b031681565b60055481565b610af733610ab0565b610b36576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b8933610ab0565b610bc8576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b610bd0610dd8565b600355565b610bde33610ab0565b610c1d576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116610c625760405162461bcd60e51b815260040180806020018281038252602a81526020018061247a602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b6000546001600160a01b031690565b60035481565b600e6020908152600092835260408084209091529082529020805460019091015482565b60006001610cd86110b0565b03821115610d2d576040805162461bcd60e51b815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610d38600183611fa1565b92915050565b6000610d4933610ab0565b610d88576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216610dcd5760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183611fad565b600d5460005b81811015610df857610def81610f90565b50600101610dde565b5050565b600d54600090819060001901831115610e5c576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b6000610e66612323565b600d8581548110610e7357fe5b60009182526020918290206040805160c081018252600690930290910180546001600160a01b03168352600181015493830193909352600283015490820152600382015460608201526004820154608082015260059091015460a08201529050610edb612362565b506000858152600e60209081526040808320338452825291829020825180840190935280548084526001909101549183019190915215610f83576000610f248360a00151611a47565b90506000610f4560065461075a866060015185611f4890919063ffffffff16565b9050610f7e610f77856020015161075a8660000151610f71868a60800151611eee90919063ffffffff16565b90611f48565b8690611eee565b945050505b5191935090915050915091565b600080600d8381548110610fa057fe5b9060005260206000209060060201905080600501544311610fc557600091505061076b565b6000610fd48260050154611a47565b905060008111610fe95760009250505061076b565b600061100860065461075a856003015485611f4890919063ffffffff16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b15801561105f57600080fd5b505af1158015611073573d6000803e3d6000fd5b505050506040513d602081101561108957600080fd5b5050600483015461109a9082611eee565b6004840155505043600590910155506001919050565b600061088f6001611fc2565b6000806001600160a01b0385811690841614156110da575082611477565b6009546040805163e6a4390560e01b81526001600160a01b038881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50516001600160a01b0316146111fb5760075460408051632321bc7960e21b81526001600160a01b03888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b50519050611477565b60006112056110b0565b905060005b8181101561147457600061121d82610ccc565b6009546040805163e6a4390560e01b81526001600160a01b038c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516001600160a01b03161480159061134657506009546040805163e6a4390560e01b81526001600160a01b038481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b50516001600160a01b031614155b1561146b5760075460408051632321bc7960e21b81526001600160a01b038b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b505160075460408051632321bc7960e21b81526001600160a01b038681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561143557600080fd5b505afa158015611449573d6000803e3d6000fd5b505050506040513d602081101561145f57600080fd5b50519450611474915050565b5060010161120a565b50505b949350505050565b6008546000906001600160a01b031633146114cb5760405162461bcd60e51b81526004018080602001828103825260248152602001806124a46024913960400191505060405180910390fd5b6001600160a01b0385166115105760405162461bcd60e51b81526004018080602001828103825260328152602001806125096032913960400191505060405180910390fd5b6001600160a01b0384166115555760405162461bcd60e51b815260040180806020018281038252603081526020018061253b6030913960400191505060405180910390fd5b6001600160a01b03831661159a5760405162461bcd60e51b81526004018080602001828103825260318152602001806124496031913960400191505060405180910390fd5b60006115a461070f565b116115b157506000611477565b6115ba84611a3a565b15806115cc57506115ca83611a3a565b155b156115d957506000611477565b600954604080516396ed28f960e01b81526001600160a01b0387811660048301528681166024830152915160009392909216916396ed28f991604480820192602092909190829003018186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b50516001600160a01b0381166000908152600c6020526040812054600d80549394509192811061168857fe5b6000918252602090912060069091020180549091506001600160a01b0383811691161415806116b957506003810154155b156116c957600092505050611477565b600b546000906116e590879087906001600160a01b03166110bc565b9050600081116116fb5760009350505050611477565b6001600160a01b0383166000908152600c602052604090205461171d90610f90565b50600182015461172d9082611eee565b600183015560028201546117419082611eee565b60028301556001600160a01b038084166000908152600c60209081526040808320548352600e8252808320938c1683529290522080546117819083611eee565b81554360019182015598975050505050505050565b6000806117a283610715565b90506117bc8160020a600354611eac90919063ffffffff16565b9392505050565b600061088f43610715565b6117d733610ab0565b611816576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600555565b600d54600090815b818110156118e7576000600d828154811061183a57fe5b60009182526020808320858452600e825260408085203386529092529220805460069092029092019250156118dd5761187283610f90565b506000611898836001015461075a84600001548660040154611f4890919063ffffffff16565b825460018501549192506118ac9190611e6a565b600184015560048301546118c09082611e6a565b6004840155600082554360018301556118d98682611eee565b9550505b5050600101611823565b50600082116118f757505061197a565b600a546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b505050505b565b61198533610ab0565b6119c4576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a095760405162461bcd60e51b815260040180806020018281038252602a81526020018061239f602a913960400191505060405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6000610d38600183611fcd565b600043821115611a885760405162461bcd60e51b81526004018080602001828103825260358152602001806123ef6035913960400191505060405180910390fd5b600080611a9484610715565b90506000611aa143610715565b90505b80821015611af657600454600554600190930192600091611aca91610850908690611f48565b9050611aec611ae5611adb83611796565b610f71848a611e6a565b8590611eee565b9095509250611aa4565b611b16611b0f611b0543611796565b610f714389611e6a565b8490611eee565b95945050505050565b611b2833610ab0565b611b67576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b611b7081611fe2565b50565b6000611b7e33610ab0565b611bbd576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611c025760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183612082565b6008546001600160a01b031681565b611c2533610ab0565b611c64576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611cbf576040805162461bcd60e51b815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b8015611ccd57611ccd610dd8565b60006004544311611ce057600454611ce2565b435b600654909150611cf29085611eee565b60069081556040805160c0810182526001600160a01b038681168252600060208301818152938301818152606084018a81526080850183815260a08601898152600d8054600180820183559190965296517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59590990294850180546001600160a01b031916999096169890981790945594517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb782015592517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb8840155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb983015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba90910155611e4761070f565b6001600160a01b039094166000908152600c602052604090209303909255505050565b60006117bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612097565b60006117bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061212e565b6000828201838110156117bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f5757506000610d38565b82820282848281611f6457fe5b04146117bc5760405162461bcd60e51b81526004018080602001828103825260218152602001806124c86021913960400191505060405180910390fd5b60006117bc8383612193565b60006117bc836001600160a01b0384166121f7565b6000610d38826122bd565b60006117bc836001600160a01b0384166122c1565b6001600160a01b0381166120275760405162461bcd60e51b81526004018080602001828103825260268152602001806123c96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117bc836001600160a01b0384166122d9565b600081848411156121265760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120eb5781810151838201526020016120d3565b50505050905090810190601f1680156121185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361217d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120eb5781810151838201526020016120d3565b50600083858161218957fe5b0495945050505050565b815460009082106121d55760405162461bcd60e51b815260040180806020018281038252602281526020018061237d6022913960400191505060405180910390fd5b8260000182815481106121e457fe5b9060005260206000200154905092915050565b600081815260018301602052604081205480156122b3578354600019808301919081019060009087908390811061222a57fe5b906000526020600020015490508087600001848154811061224757fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061227757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d38565b6000915050610d38565b5490565b60009081526001919091016020526040902054151590565b60006122e583836122c1565b61231b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d38565b506000610d38565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a206d757374206c6974746c65207468616e207468652063757272656e7420626c6f636b206e756d626572537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a2074616b65722073776170206f757470757420697320746865207a65726f2061646472657373537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373537761704d696e696e673a2063616c6c6572206973206e6f742074686520726f75746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537761704d696e696e673a2074616b65722073776170206163636f756e7420697320746865207a65726f2061646472657373537761704d696e696e673a2074616b6572207377617020696e70757420697320746865207a65726f2061646472657373a2646970667358221220e7e40616c339d8f4178fc2818f8b8349f7faf87b1dfb3b84ad02f0c6bbf2e10664736f6c634300060c00330000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416

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

0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a739
Arg [1] : 0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [2] : 00000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f5
Arg [3] : 0000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba8
Arg [4] : 00000000000000000000000055d398326f99059ff775485246999027b3197955
Arg [5] : 000000000000000000000000000000000000000000000004563918244f400000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000617416


Deployed ByteCode Sourcemap

20718:12574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:44;;;;;;;;;;;;;;;;-1:-1:-1;21489:44:0;-1:-1:-1;;;;;21489:44:0;;:::i;:::-;;;;;;;;;;;;;;;;22670:93;;;:::i;25513:291::-;;;;;;;;;;;;;;;;-1:-1:-1;25513:291:0;;:::i;22562:26::-;;;;;;;;;;;;;;;;-1:-1:-1;22562:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;22562:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21159:34;;;:::i;23482:306::-;;;;;;;;;;;;;;;;-1:-1:-1;23482:306:0;;;;;;;;;;;;;;:::i;:::-;;26087:94;;;:::i;31261:798::-;;;;;;;;;;;;;;;;-1:-1:-1;31261:798:0;;:::i;:::-;;;;-1:-1:-1;;;;;31261:798:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:104;;;;;;;;;;;;;;;;-1:-1:-1;336:104:0;-1:-1:-1;;;;;336:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;21425:26;;;:::i;:::-;;;;-1:-1:-1;;;;;21425:26:0;;;;;;;;;;;;;;21015:25;;;:::i;21363:15::-;;;:::i;21082:38::-;;;:::i;448:140::-;;;:::i;23849:134::-;;;;;;;;;;;;;;;;-1:-1:-1;23849:134:0;;:::i;25299:184::-;;;;;;;;;;;;;;;;-1:-1:-1;25299:184:0;-1:-1:-1;;;;;25299:184:0;;:::i;21200:21::-;;;:::i;249:79::-;;;:::i;20933:26::-;;;:::i;22595:64::-;;;;;;;;;;;;;;;;-1:-1:-1;22595:64:0;;;;;;-1:-1:-1;;;;;22595:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24776:218;;;;;;;;;;;;;;;;-1:-1:-1;24776:218:0;;:::i;24276:226::-;;;;;;;;;;;;;;;;-1:-1:-1;24276:226:0;-1:-1:-1;;;;;24276:226:0;;:::i;27146:172::-;;;:::i;30506:715::-;;;;;;;;;;;;;;;;-1:-1:-1;30506:715:0;;:::i;27326:741::-;;;;;;;;;;;;;;;;-1:-1:-1;27326:741:0;;:::i;24510:118::-;;;:::i;32197:1090::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32197:1090:0;;;;;;;;;;;;;;;;;:::i;28106:1351::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28106:1351:0;;;;;;;;;;;;;;;;;;;;;;:::i;25912:167::-;;;;;;;;;;;;;;;;-1:-1:-1;25912:167:0;;:::i;25812:92::-;;;:::i;25002:100::-;;;;;;;;;;;;;;;;-1:-1:-1;25002:100:0;;:::i;29532:915::-;;;:::i;25110:181::-;;;;;;;;;;;;;;;;-1:-1:-1;25110:181:0;-1:-1:-1;;;;;25110:181:0;;:::i;21303:27::-;;;:::i;24636:132::-;;;;;;;;;;;;;;;;-1:-1:-1;24636:132:0;-1:-1:-1;;;;;24636:132:0;;:::i;26227:831::-;;;;;;;;;;;;;;;;-1:-1:-1;26227:831:0;;:::i;833:109::-;;;;;;;;;;;;;;;;-1:-1:-1;833:109:0;-1:-1:-1;;;;;833:109:0;;:::i;24045:223::-;;;;;;;;;;;;;;;;-1:-1:-1;24045:223:0;-1:-1:-1;;;;;24045:223:0;;:::i;21251:21::-;;;:::i;22773:659::-;;;;;;;;;;;;;;;;-1:-1:-1;22773:659:0;;;-1:-1:-1;;;;;22773:659:0;;;;;;;;;;;;:::i;21489:44::-;;;;;;;;;;;;;:::o;22670:93::-;22740:8;:15;22670:93;:::o;25513:291::-;25570:7;25594:13;;25611:1;25594:18;25590:59;;;-1:-1:-1;25636:1:0;25629:8;;25590:59;25677:10;;25663:11;:24;25659:119;;;25711:55;25752:13;;25712:34;25744:1;25712:27;25728:10;;25712:11;:15;;:27;;;;:::i;:::-;:31;;:34::i;:::-;25711:40;;:55::i;:::-;25704:62;;;;25659:119;-1:-1:-1;25795:1:0;25513:291;;;;:::o;22562:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22562:26:0;;;;-1:-1:-1;22562:26:0;;;;;:::o;21159:34::-;;;;:::o;23482:306::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23584:11:::1;23580:59;;;23612:15;:13;:15::i;:::-;23667:63;23718:11;23667:46;23687:8;23696:4;23687:14;;;;;;;;;;;;;;;;;;:25;;;23667:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;23649:15;:81;;;;23769:11;23741:8;23750:4;23741:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;23482:306:::0;;;:::o;26087:94::-;26126:7;26153:20;26160:12;26153:6;:20::i;:::-;26146:27;;26087:94;:::o;31261:798::-;31317:7;31326;31335;31344;31353;31362;31415:1;31397:8;:15;;;;:19;31389:4;:27;;31381:70;;;;;-1:-1:-1;;;31381:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31462:20;;:::i;:::-;31485:8;31494:4;31485:14;;;;;;;;;;;;;;;;31462:37;;;;;;;;31485:14;;;;;;;31462:37;;-1:-1:-1;;;;;31462:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31527:29;;-1:-1:-1;;;31527:29:0;;;;31462:37;;-1:-1:-1;31462:37:0;31527:27;;:29;;;;31485:14;;31527:29;;;;;;31462:37;31527:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31527:29:0;31594:9;;31584:29;;;-1:-1:-1;;;31584:29:0;;;;31527;;-1:-1:-1;31567:14:0;;-1:-1:-1;;;;;31584:27:0;;;;;;:29;;;;;31527;;31584;;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31584:29:0;31644:19;;;;31709:20;;;;31584:29;;-1:-1:-1;31644:19:0;31624:17;;31696:34;;:12;:34::i;:::-;31674:56;;31741:17;31761:53;31798:15;;31761:32;31777:4;:15;;;31761:11;:15;;:32;;;;:::i;:53::-;31741:73;-1:-1:-1;31837:24:0;:9;31741:73;31837:13;:24::i;:::-;32000:18;;;;32020:13;;;;32035:15;;;;;31973:6;;31981;;-1:-1:-1;31825:36:0;;-1:-1:-1;32000:18:0;-1:-1:-1;32020:13:0;;-1:-1:-1;32035:15:0;;-1:-1:-1;31261:798:0;;-1:-1:-1;;;;;31261:798:0:o;336:104::-;391:4;426:6;-1:-1:-1;;;;;426:6:0;;;415:17;;;;336:104::o;21425:26::-;;;-1:-1:-1;;;;;21425:26:0;;:::o;21015:25::-;;;;:::o;21363:15::-;;;-1:-1:-1;;;;;21363:15:0;;:::o;21082:38::-;;;;:::o;448:140::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;547:1:::1;531:6:::0;;510:40:::1;::::0;-1:-1:-1;;;;;531:6:0;;::::1;::::0;510:40:::1;::::0;547:1;;510:40:::1;578:1;561:19:::0;;-1:-1:-1;;;;;;561:19:0::1;::::0;;448:140::o;23849:134::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23923:15:::1;:13;:15::i;:::-;23949:11;:26:::0;23849:134::o;25299:184::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25371:30:0;::::1;25363:85;;;;-1:-1:-1::0;;;25363:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25459:6;:16:::0;;-1:-1:-1;;;;;;25459:16:0::1;-1:-1:-1::0;;;;;25459:16:0;;;::::1;::::0;;;::::1;::::0;;25299:184::o;21200:21::-;;;-1:-1:-1;;;;;21200:21:0;;:::o;249:79::-;287:7;314:6;-1:-1:-1;;;;;314:6:0;249:79;:::o;20933:26::-;;;;:::o;22595:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24776:218::-;24835:7;24895:1;24872:20;:18;:20::i;:::-;:24;24862:6;:34;;24854:78;;;;;-1:-1:-1;;;24854:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24950:36;24967:10;24979:6;24950:16;:36::i;:::-;24943:43;24776:218;-1:-1:-1;;24776:218:0:o;24276:226::-;24343:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24368:23:0;::::1;24360:73;;;;-1:-1:-1::0;;;24360:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24451:43;24472:10;24484:9;24451:20;:43::i;27146:172::-:0;27206:8;:15;27189:14;27232:79;27260:6;27254:3;:12;27232:79;;;27290:9;27295:3;27290:4;:9::i;:::-;-1:-1:-1;27268:5:0;;27232:79;;;;27146:172;:::o;30506:715::-;30608:8;:15;30564:7;;;;-1:-1:-1;;30608:19:0;30600:27;;;30592:70;;;;;-1:-1:-1;;;30592:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30673:15;30699:20;;:::i;:::-;30722:8;30731:4;30722:14;;;;;;;;;;;;;;;;;30699:37;;;;;;;;30722:14;;;;;;;30699:37;;-1:-1:-1;;;;;30699:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30747:20:0;;:::i;:::-;-1:-1:-1;30770:14:0;;;;:8;:14;;;;;;;;30785:10;30770:26;;;;;;;;30747:49;;;;;;;;;;;;;;;;;;;;;;;;;30811:17;30807:306;;30845:19;30867:34;30880:4;:20;;;30867:12;:34::i;:::-;30845:56;;30916:17;30936:53;30973:15;;30936:32;30952:4;:15;;;30936:11;:15;;:32;;;;:::i;:53::-;30916:73;;31014:87;31026:74;31086:4;:13;;;31026:55;31067:4;:13;;;31027:34;31051:9;31027:4;:19;;;:23;;:34;;;;:::i;:::-;31026:40;;:55::i;:74::-;31014:7;;:11;:87::i;:::-;31004:97;;30807:306;;;31199:13;31190:7;;-1:-1:-1;31199:13:0;;-1:-1:-1;;30506:715:0;;;:::o;27326:741::-;27370:4;27387:21;27411:8;27420:4;27411:14;;;;;;;;;;;;;;;;;;27387:38;;27456:4;:20;;;27440:12;:36;27436:81;;27500:5;27493:12;;;;;27436:81;27527:19;27549:34;27562:4;:20;;;27549:12;:34::i;:::-;27527:56;;27613:1;27598:11;:16;27594:61;;27638:5;27631:12;;;;;;27594:61;27744:17;27764:53;27801:15;;27764:32;27780:4;:15;;;27764:11;:15;;:32;;;;:::i;:53::-;27828:3;;:34;;;-1:-1:-1;;;27828:34:0;;27845:4;27828:34;;;;;;;;;;;;27744:73;;-1:-1:-1;;;;;;27828:3:0;;;;:8;;:34;;;;;;;;;;;;;;;:3;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27957:19:0;;;;:34;;27981:9;27957:23;:34::i;:::-;27935:19;;;:56;-1:-1:-1;;28025:12:0;28002:20;;;;:35;-1:-1:-1;28055:4:0;27326:741;;;:::o;24510:118::-;24561:7;24588:32;24609:10;24588:20;:32::i;32197:1090::-;32303:7;;-1:-1:-1;;;;;32358:26:0;;;;;;;32354:900;;;-1:-1:-1;32412:12:0;32354:900;;;32459:7;;32446:55;;;-1:-1:-1;;;32446:55:0;;-1:-1:-1;;;;;32446:55:0;;;;;;;;;;;;;;;;32513:1;;32459:7;;;;32446:29;;:55;;;;;;;;;;;;;;;32459:7;32446:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32446:55:0;-1:-1:-1;;;;;32446:69:0;;32442:812;;32551:6;;32543:63;;;-1:-1:-1;;;32543:63:0;;-1:-1:-1;;;;;32543:63:0;;;;;;;;;;;;;;;;;;;;;;32551:6;;;;;32543:23;;:63;;;;;;;;;;;;;;32551:6;32543:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32543:63:0;;-1:-1:-1;32442:812:0;;;32639:14;32656:20;:18;:20::i;:::-;32639:37;;32696:13;32691:552;32723:6;32715:5;:14;32691:552;;;32759:20;32782:19;32795:5;32782:12;:19::i;:::-;32837:7;;32824:56;;;-1:-1:-1;;;32824:56:0;;-1:-1:-1;;;;;32824:56:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32837:7:0;;;;;32824:29;;:56;;;;;;;;;;;;;;32837:7;32824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32824:56:0;-1:-1:-1;;;;;32824:70:0;;;;;:144;;-1:-1:-1;32911:7:0;;32898:56;;;-1:-1:-1;;;32898:56:0;;-1:-1:-1;;;;;32898:56:0;;;;;;;;;;;;;;;;32966:1;;32911:7;;;;32898:29;;:56;;;;;;;;;;;;;;;32911:7;32898:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32898:56:0;-1:-1:-1;;;;;32898:70:0;;;32824:144;32820:408;;;33025:6;;33017:64;;;-1:-1:-1;;;33017:64:0;;-1:-1:-1;;;;;33017:64:0;;;;;;;;;;;;;;;;;;;;;;32993:21;;33025:6;;;;;33017:23;;:64;;;;;;;;;;;;;;;33025:6;33017:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33017:64:0;33123:6;;33115:65;;;-1:-1:-1;;;33115:65:0;;-1:-1:-1;;;;;33115:65:0;;;;;;;;;;;;;;;;;;;;;;33017:64;;-1:-1:-1;33123:6:0;;;33115:23;;:65;;;;;33017:64;;33115:65;;;;;;;;33123:6;33115:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33115:65:0;;-1:-1:-1;33203:5:0;;-1:-1:-1;;33203:5:0;32820:408;-1:-1:-1;32731:7:0;;32691:552;;;;32442:812;;33271:8;32197:1090;-1:-1:-1;;;;32197:1090:0:o;28106:1351::-;32122:6;;28211:4;;-1:-1:-1;;;;;32122:6:0;32108:10;:20;32100:69;;;;-1:-1:-1;;;32100:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28236:21:0;::::1;28228:84;;;;-1:-1:-1::0;;;28228:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28331:19:0;::::1;28323:80;;;;-1:-1:-1::0;;;28323:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28422:20:0;::::1;28414:82;;;;-1:-1:-1::0;;;28414:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28529:1;28513:12;:10;:12::i;:::-;:17;28509:62;;-1:-1:-1::0;28554:5:0::1;28547:12;;28509:62;28588:18;28600:5;28588:11;:18::i;:::-;28587:19;:43;;;;28611:19;28623:6;28611:11;:19::i;:::-;28610:20;28587:43;28583:88;;;-1:-1:-1::0;28654:5:0::1;28647:12;;28583:88;28711:7;::::0;28698:44:::1;::::0;;-1:-1:-1;;;28698:44:0;;-1:-1:-1;;;;;28698:44:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;28683:12:::1;::::0;28711:7;;;::::1;::::0;28698:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;;28711:7;28698:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28698:44:0;-1:-1:-1;;;;;28788:15:0;::::1;28755:21;28788:15:::0;;;:9:::1;28698:44;28788:15:::0;;;;;28779:8:::1;:25:::0;;28698:44;;-1:-1:-1;28755:21:0;;28779:25;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28887:9:::0;;28779:25;;-1:-1:-1;;;;;;28887:17:0;;::::1;:9:::0;::::1;:17;;::::0;:41:::1;;-1:-1:-1::0;28908:15:0::1;::::0;::::1;::::0;:20;28887:41:::1;28883:86;;;28952:5;28945:12;;;;;;28883:86;29028:11;::::0;28981:16:::1;::::0;29000:40:::1;::::0;29012:6;;29020;;-1:-1:-1;;;;;29028:11:0::1;29000;:40::i;:::-;28981:59;;29067:1;29055:8;:13;29051:58;;29092:5;29085:12;;;;;;;29051:58;-1:-1:-1::0;;;;;29126:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;29121:21:::1;::::0;:4:::1;:21::i;:::-;-1:-1:-1::0;29171:13:0::1;::::0;::::1;::::0;:27:::1;::::0;29189:8;29171:17:::1;:27::i;:::-;29155:13;::::0;::::1;:43:::0;29230:18:::1;::::0;::::1;::::0;:32:::1;::::0;29253:8;29230:22:::1;:32::i;:::-;29209:18;::::0;::::1;:53:::0;-1:-1:-1;;;;;29306:15:0;;::::1;29273:21;29306:15:::0;;;:9:::1;:15;::::0;;;;;;;;29297:25;;:8:::1;:25:::0;;;;;:34;;::::1;::::0;;;;;;29358:13;;:27:::1;::::0;29376:8;29358:17:::1;:27::i;:::-;29342:43:::0;;29415:12:::1;29396:16;::::0;;::::1;:31:::0;:16;28106:1351;-1:-1:-1;;;;;;;;28106:1351:0:o;25912:167::-;25970:7;25990:14;26007:18;26013:11;26007:5;:18::i;:::-;25990:35;;26043:28;26064:6;26059:1;:11;26043;;:15;;:28;;;;:::i;:::-;26036:35;25912:167;-1:-1:-1;;;25912:167:0:o;25812:92::-;25850:7;25877:19;25883:12;25877:5;:19::i;25002:100::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;25072:13:::1;:22:::0;25002:100::o;29532:915::-;29618:8;:15;29575;;;29644:691;29672:6;29666:3;:12;29644:691;;;29702:21;29726:8;29735:3;29726:13;;;;;;;;;;;;;;;;29778;;;:8;:13;;;;;;29792:10;29778:25;;;;;;;29822:13;;29726;;;;;;;;-1:-1:-1;29822:17:0;29818:506;;29860:9;29865:3;29860:4;:9::i;:::-;;29949:18;29970:57;30013:4;:13;;;29970:38;29994:4;:13;;;29970:4;:19;;;:23;;:38;;;;:::i;:57::-;30080:13;;30062;;;;29949:78;;-1:-1:-1;30062:32:0;;:13;:17;:32::i;:::-;30046:13;;;:48;30135:19;;;;:35;;30159:10;30135:23;:35::i;:::-;30113:19;;;:57;30205:1;30189:17;;30244:12;30225:16;;;:31;30285:23;:7;30297:10;30285:11;:23::i;:::-;30275:33;;29818:506;;-1:-1:-1;;29680:5:0;;29644:691;;;;30360:1;30349:7;:12;30345:51;;30378:7;;;;30345:51;30406:3;;:33;;;-1:-1:-1;;;30406:33:0;;30419:10;30406:33;;;;;;;;;;;;-1:-1:-1;;;;;30406:3:0;;;;:12;;:33;;;;;;;;;;;;;;;:3;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29532:915:0;:::o;25110:181::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25184:23:0;::::1;25176:78;;;;-1:-1:-1::0;;;25176:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25265:6;:18:::0;;-1:-1:-1;;;;;;25265:18:0::1;-1:-1:-1::0;;;;;25265:18:0;;;::::1;::::0;;;::::1;::::0;;25110:181::o;21303:27::-;;;-1:-1:-1;;;;;21303:27:0;;:::o;24636:132::-;24694:4;24718:42;24741:10;24753:6;24718:22;:42::i;26227:831::-;26296:7;26344:12;26324:16;:32;;26316:98;;;;-1:-1:-1;;;26316:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26425:19;26459:9;26471:23;26477:16;26471:5;:23::i;:::-;26459:35;;26505:9;26517:19;26523:12;26517:5;:19::i;:::-;26505:31;;26583:335;26594:1;26590;:5;26583:335;;;26724:10;;26705:13;;26612:3;;;;;26687:9;;26699:36;;:20;;26612:3;;26699:5;:20::i;:36::-;26687:48;;26814:57;26830:40;26860:9;26867:1;26860:6;:9::i;:::-;26831:23;:1;26837:16;26831:5;:23::i;26830:40::-;26814:11;;:15;:57::i;:::-;26905:1;;-1:-1:-1;26800:71:0;-1:-1:-1;26583:335:0;;;26942:79;26958:62;26999:20;27006:12;26999:6;:20::i;:::-;26959:34;:12;26976:16;26959;:34::i;26958:62::-;26942:11;;:15;:79::i;:::-;26928:93;26227:831;-1:-1:-1;;;;;26227:831:0:o;833:109::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;906:28:::1;925:8;906:18;:28::i;:::-;833:109:::0;:::o;24045:223::-;24112:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24137:23:0;::::1;24129:73;;;;-1:-1:-1::0;;;24129:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24220:40;24238:10;24250:9;24220:17;:40::i;21251:21::-:0;;;-1:-1:-1;;;;;21251:21:0;;:::o;22773:659::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22880:19:0;::::1;22872:57;;;::::0;;-1:-1:-1;;;22872:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22944:11;22940:59;;;22972:15;:13;:15::i;:::-;23009:23;23050:10;;23035:12;:25;:53;;23078:10;;23035:53;;;23063:12;23035:53;23117:15;::::0;23009:79;;-1:-1:-1;23117:32:0::1;::::0;23137:11;23117:19:::1;:32::i;:::-;23099:15;:50:::0;;;23174:203:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;23174:203:0;;::::1;::::0;;-1:-1:-1;23174:203:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;23160:8:::1;:218:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;23160:218:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23408:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;23389:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;23408;::::1;23389:35:::0;;;-1:-1:-1;;;22773:659:0:o;1622:136::-;1680:7;1707:43;1711:1;1714;1707:43;;;;;;;;;;;;;;;;;:3;:43::i;2445:132::-;2503:7;2530:39;2534:1;2537;2530:39;;;;;;;;;;;;;;;;;:3;:39::i;1433:181::-;1491:7;1523:5;;;1547:6;;;;1539:46;;;;;-1:-1:-1;;;1539:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1966:471;2024:7;2269:6;2265:47;;-1:-1:-1;2299:1:0;2292:8;;2265:47;2336:5;;;2340:1;2336;:5;:1;2360:5;;;;;:10;2352:56;;;;-1:-1:-1;;;2352:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12591:149;12665:7;12708:22;12712:3;12724:5;12708:3;:22::i;11641:149::-;11714:4;11738:44;11746:3;-1:-1:-1;;;;;11766:14:0;;11738:7;:44::i;12120:117::-;12183:7;12210:19;12218:3;12210:7;:19::i;11876:158::-;11956:4;11980:46;11990:3;-1:-1:-1;;;;;12010:14:0;;11980:9;:46::i;596:229::-;-1:-1:-1;;;;;670:22:0;;662:73;;;;-1:-1:-1;;;662:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;772:6;;;751:38;;-1:-1:-1;;;;;751:38:0;;;;772:6;;;751:38;;;800:6;:17;;-1:-1:-1;;;;;;800:17:0;-1:-1:-1;;;;;800:17:0;;;;;;;;;;596:229::o;11322:143::-;11392:4;11416:41;11421:3;-1:-1:-1;;;;;11441:14:0;;11416:4;:41::i;1766:192::-;1852:7;1888:12;1880:6;;;;1872:29;;;;-1:-1:-1;;;1872:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1924:5:0;;;1766:192::o;2585:345::-;2671:7;2773:12;2766:5;2758:28;;;;-1:-1:-1;;;2758:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2797:9;2813:1;2809;:5;;;;;;;2585:345;-1:-1:-1;;;;;2585:345:0:o;9264:204::-;9359:18;;9331:7;;9359:26;-1:-1:-1;9351:73:0;;;;-1:-1:-1;;;9351:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9442:3;:11;;9454:5;9442:18;;;;;;;;;;;;;;;;9435:25;;9264:204;;;;:::o;6944:1556::-;7010:4;7149:19;;;:12;;;:19;;;;;;7185:15;;7181:1312;;7619:18;;-1:-1:-1;;7570:14:0;;;;7619:22;;;;7546:21;;7619:3;;:22;;7906;;;;;;;;;;;;;;7886:42;;8052:9;8023:3;:11;;8035:13;8023:26;;;;;;;;;;;;;;;;;;;:38;;;;8129:23;;;8171:1;8129:12;;;:23;;;;;;8155:17;;;8129:43;;8294:17;;8129:3;;8294:17;;;;;;;;;;;;;;;;;;;;;;8389:3;:12;;:19;8402:5;8389:19;;;;;;;;;;;8382:26;;;8432:4;8425:11;;;;;;;;7181:1312;8476:5;8469:12;;;;;8801:109;8884:18;;8801:109::o;8586:129::-;8659:4;8683:19;;;:12;;;;;:19;;;;;;:24;;;8586:129::o;6354:414::-;6417:4;6439:21;6449:3;6454:5;6439:9;:21::i;:::-;6434:327;;-1:-1:-1;6477:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6660:18;;6638:19;;;:12;;;:19;;;;;;:40;;;;6693:11;;6434:327;-1:-1:-1;6744:5:0;6737:12;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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