Contract 0x3c521d148680f784b8b4f69020f86051114b585e

 

Contract Overview

Spore Engineering: BUSD Farm
Balance:
0 BNB

BNB Value:
$0.00

Token:
Ad
Ad
Txn Hash
Block
From
To
Value [Txn Fee]
0x60417ac7e3f792f48f9645e241fe37e4a690e2401e6e9384617186ac9a0d0aec67342562021-04-20 15:28:027 hrs 11 mins ago0x7dca102736c45ca77026c8f292b779d9f48cee4b IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0xec5c8d30808a53569d5f6eef62377b0da8f1b55d6b82e200e461bc8afb220e0b67305472021-04-20 12:20:2910 hrs 19 mins ago0xa2265e8f445eeea061eec0956cf632c5660c2819 IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0x901a19b12bc6043f1e1a05573101e6772574cafd9ebf5faa2905bfa91176eba367223212021-04-20 5:28:0817 hrs 11 mins ago0xb36d490abb1a5ebfd7ba65b158818b76e883f68f IN  Spore Engineering: BUSD Farm0 BNB0.000279335
0x4f803243e957697a4db4d8cfb189699a59913e17aa263116e5bcca3f0abed49167223162021-04-20 5:27:5317 hrs 12 mins ago0xb36d490abb1a5ebfd7ba65b158818b76e883f68f IN  Spore Engineering: BUSD Farm0 BNB0.000747655
0xeb040356493427cd7af6c907a48a1fa70a8567608f95fc69e21f3d5833d559f367189292021-04-20 2:38:0020 hrs 1 min ago0x13fcac6eeebd55cfa85bae86f3b00895a4b64125 IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0x3b422d0359ab0a7608cfffb918e5f8257d0d825c5c4745a4efe9118d5591946c67182512021-04-20 2:03:3120 hrs 36 mins ago0x2bb2be74a1b13e33fea25c4d7fcf245bcbe2e8f9 IN  Spore Engineering: BUSD Farm0 BNB0.00099395
0x966f458e315aae7d291a9824f5e1ae211582df7bbb09a1ddfdac097043b706a867103642021-04-19 19:26:481 day 3 hrs ago0x2bb2be74a1b13e33fea25c4d7fcf245bcbe2e8f9 IN  Spore Engineering: BUSD Farm0 BNB0.001027325
0x4e8765c0c579b38bfab342d1ce46dd282e4e4de9f8d86defb9424b7d12655b5b67034312021-04-19 13:39:211 day 9 hrs ago0xe2d9d3e22564d8ec19b95daca5ed153f0fbf06de IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0x47fa80ba831bb235deceecc5d27b5588bd7bd2f2c011bc174144d1f956950dbd67018882021-04-19 12:22:121 day 10 hrs ago0x5953d009299f31fac1d7b08176cc7a7a571405cb IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0x9400aeb4e50e1961ae490967b895926db2ab001f0fe872e67fd6f6283758526e67011812021-04-19 11:46:511 day 10 hrs ago0xad9101501b1f5cc5b380bb7ee7da4d240d2bfc73 IN  Spore Engineering: BUSD Farm0 BNB0.00042963
0x3b531751d9fb4d80f9231d015920e8fc56b5addfec80edab21fe6bf8e9702a4667008572021-04-19 11:30:391 day 11 hrs ago0xa2265e8f445eeea061eec0956cf632c5660c2819 IN  Spore Engineering: BUSD Farm0 BNB0.00030063
0x1cc3724cda09e7a00153278a00a85e2c757ca7e1f62995e0fb89ce086e4dcf4966878412021-04-19 0:33:301 day 22 hrs ago0xd6e8ed4030f8a44ad7dcd0cf427c07a8db38fbb1 IN  Spore Engineering: BUSD Farm0 BNB0.001177035
0xab461248aa0d32a5f9c4a0a9f18561d8eea813066dc0e3d8609c189272bcc8bc66848762021-04-18 22:05:152 days 34 mins ago0x13fcac6eeebd55cfa85bae86f3b00895a4b64125 IN  Spore Engineering: BUSD Farm0 BNB0.00042963
0xcd7cd78e5c73aabedb2ac33bfa75124d190fa2d3841adf703c326f4d25caba8a66772362021-04-18 15:41:452 days 6 hrs ago0xb685bc328c3f60ca6f87dd39b5fb4edc4dfc4835 IN  Spore Engineering: BUSD Farm0 BNB0.001027265
0xeafac199bc79e0c3ea65985cef086f26b0915611a8dc2514c687a93a29edc0c266772262021-04-18 15:41:152 days 6 hrs ago0xb685bc328c3f60ca6f87dd39b5fb4edc4dfc4835 IN  Spore Engineering: BUSD Farm0 BNB0.001102205
0x108ccbf9f9e61ffa16aa82c256d2facdf5f59d4ba5e4b93487f7a4dbc0f7cd3466771972021-04-18 15:39:482 days 7 hrs ago0xb685bc328c3f60ca6f87dd39b5fb4edc4dfc4835 IN  Spore Engineering: BUSD Farm0 BNB0.001176975
0x75deed3a1b9f03085a7e3e98072f49faf7940d5a22699d5d6fac7ad87d48fe9a66746582021-04-18 13:32:512 days 9 hrs ago0xa2265e8f445eeea061eec0956cf632c5660c2819 IN  Spore Engineering: BUSD Farm0 BNB0.001102325
0xd38adf9eab3ad2e174e584ff019a38bc3fdd32774e8588456c3d407c4ca2443366746482021-04-18 13:32:212 days 9 hrs ago0xa2265e8f445eeea061eec0956cf632c5660c2819 IN  Spore Engineering: BUSD Farm0 BNB0.001176915
0x004e8c5fe9b0dc2cbd8f1ce875eabe5b3e29d21ac76cf10cb71d864e29dde37266746172021-04-18 13:30:482 days 9 hrs ago0xa2265e8f445eeea061eec0956cf632c5660c2819 IN  Spore Engineering: BUSD Farm0 BNB0.000505516
0x36246153c346c934154d2ad5ea88dab79d1d9419e344f44c8580c0257a1b396866739592021-04-18 12:57:542 days 9 hrs ago0x69cf24c91986a9b79362be371c646ee67cc3c60d IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0xcdb98ace4c14b34f1a6b835c8f8b25cb7a0736fb1cba65c1548aabc2253056f666633022021-04-18 4:04:192 days 18 hrs ago0x2bb2be74a1b13e33fea25c4d7fcf245bcbe2e8f9 IN  Spore Engineering: BUSD Farm0 BNB0.00106895
0x9f897c4cd0cfa3126abe0464a9aee7870cb32e53dba2516ff2adb56730a2e63d66631282021-04-18 3:55:372 days 18 hrs ago0x2bb2be74a1b13e33fea25c4d7fcf245bcbe2e8f9 IN  Spore Engineering: BUSD Farm0 BNB0.00114395
0x1609937e0f3d61f442fba2614a882bf3c449ca2813577934b2a05d5305aebe2566631152021-04-18 3:54:582 days 18 hrs ago0x2bb2be74a1b13e33fea25c4d7fcf245bcbe2e8f9 IN  Spore Engineering: BUSD Farm0 BNB0.00042963
0xa2ca17aa8a8a78689448e0a308e1d5f006206f0354ddaece43958a16d78f5ac866603972021-04-18 1:39:002 days 21 hrs ago0x13fcac6eeebd55cfa85bae86f3b00895a4b64125 IN  Spore Engineering: BUSD Farm0 BNB0.00035463
0xf46e1f23ce795c4d8b759bdd70f6bc9783d7c3a004a73402e88cae32ea6095a266400602021-04-17 8:41:593 days 13 hrs ago0xb36d490abb1a5ebfd7ba65b158818b76e883f68f IN  Spore Engineering: BUSD Farm0 BNB0.001102205
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9cce46722259cad9fe1b5ea2e7302a1e48a5169c8887486ab7e917e63c8a69b254704232021-03-07 11:14:0644 days 11 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x15a4c9ee4ec25c5b06ccededb374905877369d3acf130d926bab3ac9e24306cf54703792021-03-07 11:11:5444 days 11 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x8be86316a2e42c75e2c18a99b7e9252590cc0d494ce0a23030bd3cab77a0438354703532021-03-07 11:10:3644 days 11 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x81228025e33496dda72c00f8b37a331e5cd5705740d9544984cfd96948342a8954701602021-03-07 11:00:5744 days 11 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
0x01690e61f46c0eddca412ae92ae91ed8363373cdaa2e17c9bbfbf0d08c5a5d1054693722021-03-07 10:21:3344 days 12 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x865e5b828510f4ec4851283b511500c7a87791b7dbfd3af118a9706812c1c6e854655142021-03-07 7:08:3944 days 15 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x865e5b828510f4ec4851283b511500c7a87791b7dbfd3af118a9706812c1c6e854655142021-03-07 7:08:3944 days 15 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x865e5b828510f4ec4851283b511500c7a87791b7dbfd3af118a9706812c1c6e854655142021-03-07 7:08:3944 days 15 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
0x865e5b828510f4ec4851283b511500c7a87791b7dbfd3af118a9706812c1c6e854655142021-03-07 7:08:3944 days 15 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x3cfa19fae4cff48ba8fd34d64b1ce886770e10558b6ef72813c7e388a58c7b0054645422021-03-07 6:20:0344 days 16 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x3cfa19fae4cff48ba8fd34d64b1ce886770e10558b6ef72813c7e388a58c7b0054645422021-03-07 6:20:0344 days 16 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x3cfa19fae4cff48ba8fd34d64b1ce886770e10558b6ef72813c7e388a58c7b0054645422021-03-07 6:20:0344 days 16 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x24fff081e2a74d3252921aa01b259d3f948f6d2231b6fc8de729697347310ad254645292021-03-07 6:19:2444 days 16 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x97b55947d020e959ea6c343b324c6a98502c88cc716ee72ffe6049208f78e32d54635102021-03-07 5:28:1744 days 17 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x97b55947d020e959ea6c343b324c6a98502c88cc716ee72ffe6049208f78e32d54635102021-03-07 5:28:1744 days 17 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x97b55947d020e959ea6c343b324c6a98502c88cc716ee72ffe6049208f78e32d54635102021-03-07 5:28:1744 days 17 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x1d0e5518c48f993ea209424a3db04eec58d494d8feefb63ab397cdd36d241bbc54606912021-03-07 3:07:2044 days 19 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x1d0e5518c48f993ea209424a3db04eec58d494d8feefb63ab397cdd36d241bbc54606912021-03-07 3:07:2044 days 19 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x1d0e5518c48f993ea209424a3db04eec58d494d8feefb63ab397cdd36d241bbc54606912021-03-07 3:07:2044 days 19 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0xf3681d3007c613942bbf3275be50aa38a27c1d3bfeec391da6969d601d7ecdf954606152021-03-07 3:03:3244 days 19 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
0x1e8ad1474b8e5071298dd6f4280abe11b48f95c96dbd6685e20e304d4f60742e54605602021-03-07 3:00:4744 days 19 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x7f7a8ae309d08b54d88a0dbbb44535c93915f0f406b23ca323d4129849107a5554605532021-03-07 3:00:2644 days 19 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
0x31c5ce202e6154bfba30a6135ed0076d1240f57299c64d95b6eba38c82ea4a0854596912021-03-07 2:17:2044 days 20 hrs ago Spore Engineering: BUSD Farm PancakeSwap: SPORE-BUSD0 BNB
0x31c5ce202e6154bfba30a6135ed0076d1240f57299c64d95b6eba38c82ea4a0854596912021-03-07 2:17:2044 days 20 hrs ago 0x80c2a887f3f82e97821e7756c3edb136afecd7ef Spore Engineering: BUSD Farm0 BNB
0x31c5ce202e6154bfba30a6135ed0076d1240f57299c64d95b6eba38c82ea4a0854596912021-03-07 2:17:2044 days 20 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x7336F7df82e6Fc62A98C3a73E8d3C86a9BA574A1

Contract Name:
LiquidityFarming

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-02-06
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.7.6 <0.8.0;

library EnumerableSet {

    struct Set {
        bytes32[] _values;

        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.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];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }
    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {

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

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

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

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

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

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

abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;
        
        _status = _NOT_ENTERED;
    }
}

abstract contract Pausable is Context {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

//https://eips.ethereum.org/EIPS/eip-900
interface IERC900 {
    event Staked(address indexed user, uint256 amount, uint256 total, bytes data);
    event Unstaked(address indexed user, uint256 amount, uint256 total, bytes data);

    function stake(uint256 amount, bytes memory data) external;
    function unstake(uint256 amount, bytes memory data) external;
    function totalStakedFor(address addr) external view returns (uint256);
    function totalStaked() external view returns (uint256);
    function token() external view returns (address);
    function supportsHistory() external pure returns (bool);

    // optional
    function lastStakedFor(address addr) external view returns (uint256);
    function totalStakedForAt(address addr, uint256 blockNumber) external view returns (uint256);
    function totalStakedAt(uint256 blockNumber) external view returns (uint256);
}

//https://eips.ethereum.org/EIPS/eip-2917
interface IERC2917 {

    event InterestRatePerBlockChanged (uint256 oldValue, uint256 newValue);

    function interestsPerBlock() external view returns (uint256);
    function changeInterestRatePerBlock(uint value) external returns (bool);
    function getProductivity(address user) external view returns (uint256, uint256);
    function take() external view returns (uint256);
    function takeWithBlock() external view returns (uint256, uint256);
}

interface IBEP20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ERC20 is Context, IBEP20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract SporeToken is ERC20, AccessControl {
    
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    
    constructor() ERC20("Spore Token", "SPORE") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _mint(to, amount);
    }
    
    function burn(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _burn(to, amount);
    }
}

contract LiquidityFarming is IERC900, IERC2917, AccessControl, ReentrancyGuard, Pausable {
    
    using SafeMath for uint256;
    
    struct SporeStakerInfo {
        uint256 totalAmountStaked;
        uint256 rewardPending;
        uint256 rewardDebt;
    }
    
    struct Checkpoint {
        uint256 at;
        uint256 amount;
    }
    
    SporeToken public SPORE;
    IBEP20 public HOST;
    Checkpoint[] public stakeHistory;
    
    uint256 private _totalStaked;
    uint256 private _blockReward;
    
    uint256 public lastRewardBlock;
    uint256 public accAmountPerShare;
    
    mapping(address => SporeStakerInfo) public stakers;
    mapping (address => Checkpoint[]) public stakesFor;
    
    event PaymentRequested(address staker, uint256 amount);
    
    modifier update() {
        if(block.number > lastRewardBlock && block.number.sub(lastRewardBlock) > 0){
            if(_totalStaked == 0){
                lastRewardBlock = block.number;
            }
            else {
                uint256 multiplier = block.number.sub(lastRewardBlock);
                uint256 reward = multiplier.mul(_blockReward);
                
                accAmountPerShare = accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
                lastRewardBlock = block.number;
            }
        }
        _;
    }
    
    constructor(SporeToken _SPORE, IBEP20 _HOST, uint256 _reward) {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        
        SPORE = _SPORE;
        HOST = _HOST;
        _blockReward = _reward;
    }
    
    function stake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(amount > 0, "Cannot stake 0");
        require(HOST.transferFrom(_msgSender(), address(this), amount));
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, false);
        updateCheckpointAtNow(stakeHistory, amount, false);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
        if (staker.totalAmountStaked > 0) {
            uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
            staker.rewardPending = staker.rewardPending.add(pending);
        }
        
        staker.totalAmountStaked = staker.totalAmountStaked.add(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.add(amount);
        
        emit Staked(_msgSender(), amount, staker.totalAmountStaked, data);
    }
    
    function unstake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(stakers[_msgSender()].totalAmountStaked >= amount);
        require(HOST.transfer(_msgSender(), amount));
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, true);
        updateCheckpointAtNow(stakeHistory, amount, true);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
       
        uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
        staker.rewardPending = staker.rewardPending.add(pending);
        
        staker.totalAmountStaked = staker.totalAmountStaked.sub(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.sub(amount);
        
        emit Unstaked(_msgSender(), amount, staker.totalAmountStaked, data);
    }

    function totalStakedFor(address addr) public view override returns (uint256) {
        return stakers[addr].totalAmountStaked;
    }

    function totalStaked() public view override returns (uint256) {
        return _totalStaked;
    }
    
    function token() public view override returns (address) {
        return address(HOST);
    }
    
    function supportsHistory() public pure override returns (bool) {
        return true;
    }
    
    function lastStakedFor(address addr) public view override returns (uint256) {
        Checkpoint[] storage stakes = stakesFor[addr];

        if (stakes.length == 0) {
            return 0;
        }

        return stakes[stakes.length-1].at;
    }

    function totalStakedForAt(address addr, uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakesFor[addr], blockNumber);
    }

    function totalStakedAt(uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakeHistory, blockNumber);
    }

    function updateCheckpointAtNow(Checkpoint[] storage history, uint256 amount, bool isUnstake) internal {

        uint256 length = history.length;
        if (length == 0) {
            history.push(Checkpoint({at: block.number, amount: amount}));
            return;
        }

        if (history[length-1].at < block.number) {
            history.push(Checkpoint({at: block.number, amount: history[length-1].amount}));
        }

        Checkpoint storage checkpoint = history[length];

        if (isUnstake) {
            checkpoint.amount = checkpoint.amount.sub(amount);
        } else {
            checkpoint.amount = checkpoint.amount.add(amount);
        }
    }

    function stakedAt(Checkpoint[] storage history, uint256 blockNumber) internal view returns (uint256) {
        uint256 length = history.length;

        if (length == 0 || blockNumber < history[0].at) {
            return 0;
        }

        if (blockNumber >= history[length-1].at) {
            return history[length-1].amount;
        }

        uint min = 0;
        uint max = length-1;
        while (max > min) {
            uint mid = (max + min + 1) / 2;
            if (history[mid].at <= blockNumber) {
                min = mid;
            } else {
                max = mid-1;
            }
        }

        return history[min].amount;
    }
    
    function changeInterestRatePerBlock(uint value) external override returns (bool) {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        require(value != _blockReward, 'amounts are the same');
        
        uint256 old = _blockReward;
        _blockReward = value;

        emit InterestRatePerBlockChanged(old, value);
        return true;
    }
    
    function getProductivity(address user) external override view returns (uint256, uint256) {
        return (stakers[user].totalAmountStaked, _totalStaked);
    }

    function interestsPerBlock() external override view returns (uint256) {
        return accAmountPerShare;
    }
    
    function rewardPerBlock() public view returns (uint256) {
        return _blockReward;
    }
    
    function stakerShare(address user) public view returns (uint256) {
        return stakers[user].totalAmountStaked.mul(accAmountPerShare).div(1e18);
    }

    function take() external override view returns (uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending);
    }

    function takeWithAddress(address user) external view returns (uint256) {
        SporeStakerInfo storage staker = stakers[user];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending);
    }

    function takeWithBlock() external override view returns (uint256, uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        return (staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending), block.number);
    }
    
    function claim() public nonReentrant whenNotPaused update {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        
        uint256 _amount = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        uint256 _pending = _amount.sub(staker.rewardDebt).add(staker.rewardPending);
        
        
        if(_pending > 0) {
            
            SPORE.mint(_msgSender(), _pending);
            staker.rewardDebt = _amount;
            staker.rewardPending = 0;
            
            emit PaymentRequested(_msgSender(), _pending);
        }
    }
    
    function pause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _unpause();
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract SporeToken","name":"_SPORE","type":"address"},{"internalType":"contract IBEP20","name":"_HOST","type":"address"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"InterestRatePerBlockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOST","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPORE","outputs":[{"internalType":"contract SporeToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeInterestRatePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getProductivity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"lastStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeHistory","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"stakerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"totalAmountStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPending","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakesFor","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"take","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"takeWithAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeWithBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"totalStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedForAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620035be380380620035be833981810160405260608110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600180819055506000600260006101000a81548160ff021916908315150217905550620000a26000801b620000966200013460201b60201c565b6200013c60201b60201c565b82600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600681905550505050620002ca565b600033905090565b6200014e82826200015260201b60201c565b5050565b6200018081600080858152602001908152602001600020600001620001f560201b620026491790919060201c565b15620001f157620001966200013460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000225836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200022d60201b60201c565b905092915050565b6000620002418383620002a760201b60201c565b6200029c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002a1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6132e480620002da6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063817b1cd211610125578063c8e168de116100ad578063d547741f1161007c578063d547741f146109ea578063e0c7f6c214610a38578063ede3842114610aa1578063fc0c546a14610b03578063ff68dd6014610b375761021c565b8063c8e168de1461086d578063c8fd6ed0146108a1578063c9c5323214610966578063ca15c873146109a85761021c565b80639168ae72116100f45780639168ae721461074957806391d14854146107af578063a217fddf14610813578063a9f8d18114610831578063bfc8b2081461084f5761021c565b8063817b1cd2146106a15780638456cb59146106bf5780638ae39cac146106c95780639010d07c146106e75761021c565b80633f4ba83a116101a85780635c5b1105116101775780635c5b11051461057c5780635c975abb146105c55780636622c838146105e55780637033e4a61461063d5780637b381b351461065d5761021c565b80633f4ba83a146104dc57806349f289dc146104e65780634b341aed1461051a5780634e71d92d146105725761021c565b8063248a9ca3116101ef578063248a9ca31461038157806328e964e9146103c35780632f2ff15d1461042257806336568abe146104705780633a608032146104be5761021c565b80630e0b6eb5146102215780630e89439b14610246578063159090bd1461030b578063233b745114610329575b600080fd5b610229610b8f565b604051808381526020018281526020019250505060405180910390f35b6103096004803603604081101561025c57600080fd5b81019080803590602001909291908035906020019064010000000081111561028357600080fd5b82018360208201111561029557600080fd5b803590602001918460018302840111640100000000831117156102b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610cdc565b005b610313611283565b6040518082815260200191505060405180910390f35b61036b6004803603602081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ca565b6040518082815260200191505060405180910390f35b6103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050611453565b6040518082815260200191505060405180910390f35b610405600480360360208110156103d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611472565b604051808381526020018281526020019250505060405180910390f35b61046e6004803603604081101561043857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c4565b005b6104bc6004803603604081101561048657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061154d565b005b6104c66115e6565b6040518082815260200191505060405180910390f35b6104e46115ec565b005b6104ee61167c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61055c6004803603602081101561053057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b6040518082815260200191505060405180910390f35b61057a6116ee565b005b6105a86004803603602081101561059257600080fd5b8101908080359060200190929190505050611a9a565b604051808381526020018281526020019250505060405180910390f35b6105cd611ace565b60405180821515815260200191505060405180910390f35b610627600480360360208110156105fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae5565b6040518082815260200191505060405180910390f35b610645611c27565b60405180821515815260200191505060405180910390f35b6106896004803603602081101561067357600080fd5b8101908080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b6106a9611d87565b6040518082815260200191505060405180910390f35b6106c7611d91565b005b6106d1611e21565b6040518082815260200191505060405180910390f35b61071d600480360360408110156106fd57600080fd5b810190808035906020019092919080359060200190929190505050611e2b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61078b6004803603602081101561075f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e5c565b60405180848152602001838152602001828152602001935050505060405180910390f35b6107fb600480360360408110156107c557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e86565b60405180821515815260200191505060405180910390f35b61081b611eb7565b6040518082815260200191505060405180910390f35b610839611ebe565b6040518082815260200191505060405180910390f35b610857611ec4565b6040518082815260200191505060405180910390f35b610875611ece565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610964600480360360408110156108b757600080fd5b8101908080359060200190929190803590602001906401000000008111156108de57600080fd5b8201836020820111156108f057600080fd5b8035906020019184600183028401116401000000008311171561091257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ef4565b005b6109926004803603602081101561097c57600080fd5b810190808035906020019092919050505061244f565b6040518082815260200191505060405180910390f35b6109d4600480360360208110156109be57600080fd5b8101908080359060200190929190505050612463565b6040518082815260200191505060405180910390f35b610a3660048036036040811015610a0057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612489565b005b610a8460048036036040811015610a4e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612512565b604051808381526020018281526020019250505060405180910390f35b610aed60048036036040811015610ab757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612553565b6040518082815260200191505060405180910390f35b610b0b6125a5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b7960048036036020811015610b4d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125cf565b6040518082815260200191505060405180910390f35b600080600060096000610ba0612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600854905060075443118015610bf75750600060055414155b15610c74576000610c136007544361268190919063ffffffff16565b90506000610c2c600654836126cb90919063ffffffff16565b9050610c6f610c60600554610c52670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b610cd18260010154610cc38460020154610cb5670de0b6b3a7640000610ca78789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b439350935050509091565b60026001541415610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550610d65611ace565b15610dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60075443118015610dfd57506000610dfb6007544361268190919063ffffffff16565b115b15610e9f5760006005541415610e195743600781905550610e9e565b6000610e306007544361268190919063ffffffff16565b90506000610e49600654836126cb90919063ffffffff16565b9050610e8e610e7d600554610e6f670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b60008211610f15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd610f5b612679565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b810190808051906020019092919050505061101157600080fd5b611062600a6000611020612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836000612823565b61106f6004836000612823565b60006009600061107d612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411156111345760006111118260020154611103670de0b6b3a76400006110f560085487600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b905061112a81836001015461279b90919063ffffffff16565b8260010181905550505b61114b83826000015461279b90919063ffffffff16565b8160000181905550611186670de0b6b3a764000061117860085484600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b81600201819055506111a38360055461279b90919063ffffffff16565b6005819055506111b1612679565b73ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f160935142848360000154856040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561123b578082015181840152602081019050611220565b50505050905090810190601f1680156112685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250600180819055505050565b60008060096000611292612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006008549050600754431180156112e95750600060055414155b156113665760006113056007544361268190919063ffffffff16565b9050600061131e600654836126cb90919063ffffffff16565b9050611361611352600554611344670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b6113c382600101546113b584600201546113a7670de0b6b3a76400006113998789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b9250505090565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008180549050141561142557600091505061144e565b8060018280549050038154811061143857fe5b9060005260206000209060020201600001549150505b919050565b6000806000838152602001908152602001600020600201549050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460055491509150915091565b6114ea600080848152602001908152602001600020600201546114e5612679565b611e86565b61153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613200602f913960400191505060405180910390fd5b611549828261299e565b5050565b611555612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613280602f913960400191505060405180910390fd5b6115e28282612a31565b5050565b60085481565b6116006000801b6115fb612679565b611e86565b611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b61167a612ac4565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60026001541415611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611777611ace565b156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6007544311801561180f5750600061180d6007544361268190919063ffffffff16565b115b156118b1576000600554141561182b57436007819055506118b0565b60006118426007544361268190919063ffffffff16565b9050600061185b600654836126cb90919063ffffffff16565b90506118a061188f600554611881670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b6000600960006118bf612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611930670de0b6b3a764000061192260085485600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b90506000611961836001015461195385600201548561268190919063ffffffff16565b61279b90919063ffffffff16565b90506000811115611a8e57600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196119b2612679565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a0657600080fd5b505af1158015611a1a573d6000803e3d6000fd5b50505050818360020181905550600083600101819055507f4a0353366c54503c4eb4d024baf56134b0a62137ed7b5f688a205cb8ec34758f611a5a612679565b82604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b50505060018081905550565b60048181548110611aaa57600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b6000600260009054906101000a900460ff16905090565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600854905060075443118015611b445750600060055414155b15611bc1576000611b606007544361268190919063ffffffff16565b90506000611b79600654836126cb90919063ffffffff16565b9050611bbc611bad600554611b9f670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b611c1e8260010154611c108460020154611c02670de0b6b3a7640000611bf48789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b92505050919050565b60006001905090565b6000611c466000801b611c41612679565b611e86565b611cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b600654821415611d30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616d6f756e747320617265207468652073616d6500000000000000000000000081525060200191505060405180910390fd5b60006006549050826006819055507fc44c80d7c6ac73ee13b2c62e50522dadb6c646b4509ca93e52a45abb38a78e338184604051808381526020018281526020019250505060405180910390a16001915050919050565b6000600554905090565b611da56000801b611da0612679565b611e86565b611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b611e1f612baf565b565b6000600654905090565b6000611e5482600080868152602001908152602001600020600001612c9b90919063ffffffff16565b905092915050565b60096020528060005260406000206000915090508060000154908060010154908060020154905083565b6000611eaf82600080868152602001908152602001600020600001612cb590919063ffffffff16565b905092915050565b6000801b81565b60075481565b6000600854905090565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611f7d611ace565b15611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60075443118015612015575060006120136007544361268190919063ffffffff16565b115b156120b7576000600554141561203157436007819055506120b6565b60006120486007544361268190919063ffffffff16565b90506000612061600654836126cb90919063ffffffff16565b90506120a6612095600554612087670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b81600960006120c4612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154101561210d57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612153612679565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156121a757600080fd5b505af11580156121bb573d6000803e3d6000fd5b505050506040513d60208110156121d157600080fd5b81019080805190602001909291905050506121eb57600080fd5b61223c600a60006121fa612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836001612823565b6122496004836001612823565b600060096000612257612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006122de82600201546122d0670de0b6b3a76400006122c260085487600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b90506122f781836001015461279b90919063ffffffff16565b826001018190555061231684836000015461268190919063ffffffff16565b8260000181905550612351670de0b6b3a764000061234360085485600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b826002018190555061236e8460055461268190919063ffffffff16565b60058190555061237c612679565b73ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c8754858460000154866040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124065780820151818401526020810190506123eb565b50505050905090810190601f1680156124335780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050600180819055505050565b600061245c600483612ce5565b9050919050565b6000612482600080848152602001908152602001600020600001612e03565b9050919050565b6124af600080848152602001908152602001600020600201546124aa612679565b611e86565b612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061322f6030913960400191505060405180910390fd5b61250e8282612a31565b5050565b600a602052816000526040600020818154811061252e57600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b600061259d600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083612ce5565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612642670de0b6b3a7640000612634600854600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b9050919050565b6000612671836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e18565b905092915050565b600033905090565b60006126c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e88565b905092915050565b6000808314156126de576000905061274b565b60008284029050828482816126ef57fe5b0414612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061325f6021913960400191505060405180910390fd5b809150505b92915050565b600061279383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f48565b905092915050565b600080828401905083811015612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838054905090506000811415612890578360405180604001604052804381526020018581525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050612999565b438460018303815481106128a057fe5b906000526020600020906002020160000154101561292e578360405180604001604052804381526020018660018503815481106128d957fe5b9060005260206000209060020201600101548152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505b600084828154811061293c57fe5b9060005260206000209060020201905082156129765761296984826001015461268190919063ffffffff16565b8160010181905550612996565b61298d84826001015461279b90919063ffffffff16565b81600101819055505b50505b505050565b6129c58160008085815260200190815260200160002060000161264990919063ffffffff16565b15612a2d576129d2612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612a588160008085815260200190815260200160002060000161300e90919063ffffffff16565b15612ac057612a65612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b612acc611ace565b612b3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b82612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b612bb7611ace565b15612c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c6e612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612caa836000018361303e565b60001c905092915050565b6000612cdd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130c1565b905092915050565b600080838054905090506000811480612d1b575083600081548110612d0657fe5b90600052602060002090600202016000015483105b15612d2a576000915050612dfd565b836001820381548110612d3957fe5b9060005260206000209060020201600001548310612d7a57836001820381548110612d6057fe5b906000526020600020906002020160010154915050612dfd565b6000806001830390505b81811115612dd9576000600260018484010181612d9d57fe5b04905085878281548110612dad57fe5b90600052602060002090600202016000015411612dcc57809250612dd3565b6001810391505b50612d84565b858281548110612de557fe5b90600052602060002090600202016001015493505050505b92915050565b6000612e11826000016130e4565b9050919050565b6000612e2483836130c1565b612e7d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612e82565b600090505b92915050565b6000838311158290612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612efa578082015181840152602081019050612edf565b50505050905090810190601f168015612f275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ff4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161300057fe5b049050809150509392505050565b6000613036836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130f5565b905092915050565b60008183600001805490501161309f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131de6022913960400191505060405180910390fd5b8260000182815481106130ae57fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020549050600081146131d1576000600182039050600060018660000180549050039050600086600001828154811061314057fe5b906000526020600020015490508087600001848154811061315d57fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061319557fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131d7565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220a9b5881e21663e1f9039c020e974b616812f5c4d4d248f126c5bf8cf28ab0ff064736f6c6343000706003300000000000000000000000077f6a5f1b7a2b6d6c322af8581317d6bb0a526890000000000000000000000002a876084d25e3723f6ef542e6eb37f46ccc9548c000000000000000000000000000000000000000000000000001717b72f0a4000

Deployed ByteCode Sourcemap

20517:9857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28799:658;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22137:996;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27519:634;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24564:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10764:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26955:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10886:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11359:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21095:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30223:148;;;:::i;:::-;;20912:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24098:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29469:590;;;:::i;:::-;;20937:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12937:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28161:630;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24459:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26547:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24240:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30071:144;;;:::i;:::-;;27250:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10618:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21140:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10336:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9970:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21058:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27125:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20882:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23145:945;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25001:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10483:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11121:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21197:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24829:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24352:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27356:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28799:658;28856:7;28865;28885:30;28918:7;:21;28926:12;:10;:12::i;:::-;28918:21;;;;;;;;;;;;;;;28885:54;;28950:26;28979:17;;28950:46;;29036:15;;29021:12;:30;:51;;;;;29071:1;29055:12;;:17;;29021:51;29017:292;;;29089:18;29110:33;29127:15;;29110:12;:16;;:33;;;;:::i;:::-;29089:54;;29158:14;29175:28;29190:12;;29175:10;:14;;:28;;;;:::i;:::-;29158:45;;29239:58;29262:34;29283:12;;29262:16;29273:4;29262:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;29239:18;:22;;:58;;;;:::i;:::-;29218:79;;29017:292;;;29327:107;29413:6;:20;;;29327:81;29390:6;:17;;;29327:58;29380:4;29327:48;29356:18;29327:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;29436:12;29319:130;;;;;;28799:658;;:::o;22137:996::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;22265:1:::3;22256:6;:10;22248:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;22304:4;;;;;;;;;;;:17;;;22322:12;:10;:12::i;:::-;22344:4;22351:6;22304:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;22296:63;;;::::0;::::3;;22380:61;22402:9;:23;22412:12;:10;:12::i;:::-;22402:23;;;;;;;;;;;;;;;22427:6;22435:5;22380:21;:61::i;:::-;22452:50;22474:12;22488:6;22496:5;22452:21;:50::i;:::-;22523:30;22556:7;:21;22564:12;:10;:12::i;:::-;22556:21;;;;;;;;;;;;;;;22523:54;;22619:1;22592:6;:24;;;:28;22588:230;;;22637:15;22655:80;22717:6;:17;;;22655:57;22707:4;22655:47;22684:17;;22655:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;22637:98;;22773:33;22798:7;22773:6;:20;;;:24;;:33;;;;:::i;:::-;22750:6;:20;;:56;;;;22588:230;;22865:36;22894:6;22865;:24;;;:28;;:36;;;;:::i;:::-;22838:6;:24;;:63;;;;22932:57;22984:4;22932:47;22961:17;;22932:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;22912:6;:17;;:77;;;;23015:24;23032:6;23015:12;;:16;;:24;;;;:::i;:::-;23000:12;:39;;;;23072:12;:10;:12::i;:::-;23065:60;;;23086:6;23094;:24;;;23120:4;23065:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21888:1;12379::::0;12693:7;:22;;;;22137:996;;:::o;27519:634::-;27567:7;27587:30;27620:7;:21;27628:12;:10;:12::i;:::-;27620:21;;;;;;;;;;;;;;;27587:54;;27652:26;27681:17;;27652:46;;27738:15;;27723:12;:30;:51;;;;;27773:1;27757:12;;:17;;27723:51;27719:292;;;27791:18;27812:33;27829:15;;27812:12;:16;;:33;;;;:::i;:::-;27791:54;;27860:14;27877:28;27892:12;;27877:10;:14;;:28;;;;:::i;:::-;27860:45;;27941:58;27964:34;27985:12;;27964:16;27975:4;27964:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;27941:18;:22;;:58;;;;:::i;:::-;27920:79;;27719:292;;;28038:107;28124:6;:20;;;28038:81;28101:6;:17;;;28038:58;28091:4;28038:48;28067:18;28038:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;28031:114;;;;27519:634;:::o;24564:257::-;24631:7;24651:27;24681:9;:15;24691:4;24681:15;;;;;;;;;;;;;;;24651:45;;24730:1;24713:6;:13;;;;:18;24709:59;;;24755:1;24748:8;;;;;24709:59;24787:6;24808:1;24794:6;:13;;;;:15;24787:23;;;;;;;;;;;;;;;;;;:26;;;24780:33;;;24564:257;;;;:::o;10764:114::-;10821:7;10848:6;:12;10855:4;10848:12;;;;;;;;;;;:22;;;10841:29;;10764:114;;;:::o;26955:162::-;27026:7;27035;27063;:13;27071:4;27063:13;;;;;;;;;;;;;;;:31;;;27096:12;;27055:54;;;;26955:162;;;:::o;10886:227::-;10970:45;10978:6;:12;10985:4;10978:12;;;;;;;;;;;:22;;;11002:12;:10;:12::i;:::-;10970:7;:45::i;:::-;10962:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11080:25;11091:4;11097:7;11080:10;:25::i;:::-;10886:227;;:::o;11359:209::-;11457:12;:10;:12::i;:::-;11446:23;;:7;:23;;;11438:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11534:26;11546:4;11552:7;11534:11;:26::i;:::-;11359:209;;:::o;21095:32::-;;;;:::o;30223:148::-;30276:41;10015:4;30284:18;;30304:12;:10;:12::i;:::-;30276:7;:41::i;:::-;30268:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30353:10;:8;:10::i;:::-;30223:148::o;20912:18::-;;;;;;;;;;;;;:::o;24098:134::-;24166:7;24193;:13;24201:4;24193:13;;;;;;;;;;;;;;;:31;;;24186:38;;24098:134;;;:::o;29469:590::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;29538:30:::3;29571:7;:21;29579:12;:10;:12::i;:::-;29571:21;;;;;;;;;;;;;;;29538:54;;29613:15;29631:57;29683:4;29631:47;29660:17;;29631:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;29613:75;;29699:16;29718:56;29753:6;:20;;;29718:30;29730:6;:17;;;29718:7;:11;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;29699:75;;29819:1;29808:8;:12;29805:247;;;29851:5;;;;;;;;;;;:10;;;29862:12;:10;:12::i;:::-;29876:8;29851:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;29920:7;29900:6;:17;;:27;;;;29965:1;29942:6;:20;;:24;;;;30000:40;30017:12;:10;:12::i;:::-;30031:8;30000:40;;;;;;;;;;;;;;;;;;;;;;;;;;29805:247;21888:1;;;12379::::0;12693:7;:22;;;;29469:590::o;20937:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12937:86::-;12984:4;13008:7;;;;;;;;;;;13001:14;;12937:86;:::o;28161:630::-;28223:7;28243:30;28276:7;:13;28284:4;28276:13;;;;;;;;;;;;;;;28243:46;;28300:26;28329:17;;28300:46;;28386:15;;28371:12;:30;:51;;;;;28421:1;28405:12;;:17;;28371:51;28367:292;;;28439:18;28460:33;28477:15;;28460:12;:16;;:33;;;;:::i;:::-;28439:54;;28508:14;28525:28;28540:12;;28525:10;:14;;:28;;;;:::i;:::-;28508:45;;28589:58;28612:34;28633:12;;28612:16;28623:4;28612:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;28589:18;:22;;:58;;;;:::i;:::-;28568:79;;28367:292;;;28676:107;28762:6;:20;;;28676:81;28739:6;:17;;;28676:58;28729:4;28676:48;28705:18;28676:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;28669:114;;;;28161:630;;;:::o;24459:93::-;24516:4;24540;24533:11;;24459:93;:::o;26547:396::-;26622:4;26647:41;10015:4;26655:18;;26675:12;:10;:12::i;:::-;26647:7;:41::i;:::-;26639:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26741:12;;26732:5;:21;;26724:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26799:11;26813:12;;26799:26;;26851:5;26836:12;:20;;;;26874:39;26902:3;26907:5;26874:39;;;;;;;;;;;;;;;;;;;;;;;;26931:4;26924:11;;;26547:396;;;:::o;24240:100::-;24293:7;24320:12;;24313:19;;24240:100;:::o;30071:144::-;30122:41;10015:4;30130:18;;30150:12;:10;:12::i;:::-;30122:7;:41::i;:::-;30114:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30199:8;:6;:8::i;:::-;30071:144::o;27250:94::-;27297:7;27324:12;;27317:19;;27250:94;:::o;10618:138::-;10691:7;10718:30;10742:5;10718:6;:12;10725:4;10718:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;10711:37;;10618:138;;;;:::o;21140:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10336:139::-;10405:4;10429:38;10459:7;10429:6;:12;10436:4;10429:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;10422:45;;10336:139;;;;:::o;9970:49::-;10015:4;9970:49;;;:::o;21058:30::-;;;;:::o;27125:113::-;27186:7;27213:17;;27206:24;;27125:113;:::o;20882:23::-;;;;;;;;;;;;;:::o;23145:945::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;23309:6:::3;23266:7;:21;23274:12;:10;:12::i;:::-;23266:21;;;;;;;;;;;;;;;:39;;;:49;;23258:58;;;::::0;::::3;;23335:4;;;;;;;;;;;:13;;;23349:12;:10;:12::i;:::-;23363:6;23335:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;23327:44;;;::::0;::::3;;23392:60;23414:9;:23;23424:12;:10;:12::i;:::-;23414:23;;;;;;;;;;;;;;;23439:6;23447:4;23392:21;:60::i;:::-;23463:49;23485:12;23499:6;23507:4;23463:21;:49::i;:::-;23533:30;23566:7;:21;23574:12;:10;:12::i;:::-;23566:21;;;;;;;;;;;;;;;23533:54;;23607:15;23625:80;23687:6;:17;;;23625:57;23677:4;23625:47;23654:17;;23625:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;23607:98;;23739:33;23764:7;23739:6;:20;;;:24;;:33;;;;:::i;:::-;23716:6;:20;;:56;;;;23820:36;23849:6;23820;:24;;;:28;;:36;;;;:::i;:::-;23793:6;:24;;:63;;;;23887:57;23939:4;23887:47;23916:17;;23887:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;23867:6;:17;;:77;;;;23970:24;23987:6;23970:12;;:16;;:24;;;;:::i;:::-;23955:12;:39;;;;24029:12;:10;:12::i;:::-;24020:62;;;24043:6;24051;:24;;;24077:4;24020:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21888:1;;12379::::0;12693:7;:22;;;;23145:945;;:::o;25001:144::-;25075:7;25102:35;25111:12;25125:11;25102:8;:35::i;:::-;25095:42;;25001:144;;;:::o;10483:127::-;10546:7;10573:29;:6;:12;10580:4;10573:12;;;;;;;;;;;:20;;:27;:29::i;:::-;10566:36;;10483:127;;;:::o;11121:230::-;11206:45;11214:6;:12;11221:4;11214:12;;;;;;;;;;;:22;;;11238:12;:10;:12::i;:::-;11206:7;:45::i;:::-;11198:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11317:26;11329:4;11335:7;11317:11;:26::i;:::-;11121:230;;:::o;21197:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24829:164::-;24920:7;24947:38;24956:9;:15;24966:4;24956:15;;;;;;;;;;;;;;;24973:11;24947:8;:38::i;:::-;24940:45;;24829:164;;;;:::o;24352:95::-;24399:7;24434:4;;;;;;;;;;;24419:20;;24352:95;:::o;27356:155::-;27412:7;27439:64;27498:4;27439:54;27475:17;;27439:7;:13;27447:4;27439:13;;;;;;;;;;;;;;;:31;;;:35;;:54;;;;:::i;:::-;:58;;:64;;;;:::i;:::-;27432:71;;27356:155;;;:::o;2396:143::-;2466:4;2490:41;2495:3;:10;;2523:5;2515:14;;2507:23;;2490:4;:41::i;:::-;2483:48;;2396:143;;;;:::o;9321:106::-;9374:15;9409:10;9402:17;;9321:106;:::o;7555:136::-;7613:7;7640:43;7644:1;7647;7640:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7633:50;;7555:136;;;;:::o;7899:250::-;7957:7;7986:1;7981;:6;7977:47;;;8011:1;8004:8;;;;7977:47;8036:9;8052:1;8048;:5;8036:17;;8081:1;8076;8072;:5;;;;;;:10;8064:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8140:1;8133:8;;;7899:250;;;;;:::o;8157:132::-;8215:7;8242:39;8246:1;8249;8242:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8235:46;;8157:132;;;;:::o;7366:181::-;7424:7;7444:9;7460:1;7456;:5;7444:17;;7485:1;7480;:6;;7472:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7538:1;7531:8;;;7366:181;;;;:::o;25153:692::-;25268:14;25285:7;:14;;;;25268:31;;25324:1;25314:6;:11;25310:125;;;25342:7;25355:46;;;;;;;;25371:12;25355:46;;;;25393:6;25355:46;;;25342:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25417:7;;;25310:125;25474:12;25451:7;25466:1;25459:6;:8;25451:17;;;;;;;;;;;;;;;;;;:20;;;:35;25447:146;;;25503:7;25516:64;;;;;;;;25532:12;25516:64;;;;25554:7;25569:1;25562:6;:8;25554:17;;;;;;;;;;;;;;;;;;:24;;;25516:64;;;25503:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25447:146;25605:29;25637:7;25645:6;25637:15;;;;;;;;;;;;;;;;;;25605:47;;25669:9;25665:173;;;25715:29;25737:6;25715:10;:17;;;:21;;:29;;;;:::i;:::-;25695:10;:17;;:49;;;;25665:173;;;25797:29;25819:6;25797:10;:17;;;:21;;:29;;;;:::i;:::-;25777:10;:17;;:49;;;;25665:173;25153:692;;;;;;:::o;11903:188::-;11977:33;12002:7;11977:6;:12;11984:4;11977:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;11973:111;;;12059:12;:10;:12::i;:::-;12032:40;;12050:7;12032:40;;12044:4;12032:40;;;;;;;;;;11973:111;11903:188;;:::o;12099:192::-;12174:36;12202:7;12174:6;:12;12181:4;12174:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;12170:114;;;12259:12;:10;:12::i;:::-;12232:40;;12250:7;12232:40;;12244:4;12232:40;;;;;;;;;;12170:114;12099:192;;:::o;13361:120::-;13174:8;:6;:8::i;:::-;13166:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13430:5:::1;13420:7;;:15;;;;;;;;;;;;;;;;;;13451:22;13460:12;:10;:12::i;:::-;13451:22;;;;;;;;;;;;;;;;;;;;13361:120::o:0;13235:118::-;13076:8;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13305:4:::1;13295:7;;:14;;;;;;;;;;;;;;;;;;13325:20;13332:12;:10;:12::i;:::-;13325:20;;;;;;;;;;;;;;;;;;;;13235:118::o:0;2999:149::-;3073:7;3116:22;3120:3;:10;;3132:5;3116:3;:22::i;:::-;3108:31;;3093:47;;2999:149;;;;:::o;2708:158::-;2788:4;2812:46;2822:3;:10;;2850:5;2842:14;;2834:23;;2812:9;:46::i;:::-;2805:53;;2708:158;;;;:::o;25853:682::-;25945:7;25965:14;25982:7;:14;;;;25965:31;;26023:1;26013:6;:11;:42;;;;26042:7;26050:1;26042:10;;;;;;;;;;;;;;;;;;:13;;;26028:11;:27;26013:42;26009:83;;;26079:1;26072:8;;;;;26009:83;26123:7;26138:1;26131:6;:8;26123:17;;;;;;;;;;;;;;;;;;:20;;;26108:11;:35;26104:99;;26167:7;26182:1;26175:6;:8;26167:17;;;;;;;;;;;;;;;;;;:24;;;26160:31;;;;;26104:99;26215:8;26238;26256:1;26249:6;:8;26238:19;;26268:221;26281:3;26275;:9;26268:221;;;26301:8;26330:1;26325;26319:3;26313;:9;:13;26312:19;;;;;;26301:30;;26369:11;26350:7;26358:3;26350:12;;;;;;;;;;;;;;;;;;:15;;;:30;26346:132;;26407:3;26401:9;;26346:132;;;26461:1;26457:3;:5;26451:11;;26346:132;26268:221;;;;26508:7;26516:3;26508:12;;;;;;;;;;;;;;;;;;:19;;;26501:26;;;;;25853:682;;;;;:::o;2874:117::-;2937:7;2964:19;2972:3;:10;;2964:7;:19::i;:::-;2957:26;;2874:117;;;:::o;217:291::-;280:4;302:21;312:3;317:5;302:9;:21::i;:::-;297:204;;340:3;:11;;357:5;340:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;400:3;:11;;:18;;;;378:3;:12;;:19;391:5;378:19;;;;;;;;;;;:40;;;;440:4;433:11;;;;297:204;484:5;477:12;;217:291;;;;;:::o;7699:192::-;7785:7;7818:1;7813;:6;;7821:12;7805:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7845:9;7861:1;7857;:5;7845:17;;7882:1;7875:8;;;7699:192;;;;;:::o;8297:278::-;8383:7;8415:1;8411;:5;8418:12;8403:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8442:9;8458:1;8454;:5;;;;;;8442:17;;8566:1;8559:8;;;8297:278;;;;;:::o;2547:149::-;2620:4;2644:44;2652:3;:10;;2680:5;2672:14;;2664:23;;2644:7;:44::i;:::-;2637:51;;2547:149;;;;:::o;1390:204::-;1457:7;1506:5;1485:3;:11;;:18;;;;:26;1477:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:3;:11;;1580:5;1568:18;;;;;;;;;;;;;;;;1561:25;;1390:204;;;;:::o;1132:129::-;1205:4;1252:1;1229:3;:12;;:19;1242:5;1229:19;;;;;;;;;;;;:24;;1222:31;;1132:129;;;;:::o;1273:109::-;1329:7;1356:3;:11;;:18;;;;1349:25;;1273:109;;;:::o;516:608::-;582:4;599:18;620:3;:12;;:19;633:5;620:19;;;;;;;;;;;;599:40;;670:1;656:10;:15;652:465;;688:21;725:1;712:10;:14;688:38;;741:17;782:1;761:3;:11;;:18;;;;:22;741:42;;800:17;820:3;:11;;832:9;820:22;;;;;;;;;;;;;;;;800:42;;888:9;859:3;:11;;871:13;859:26;;;;;;;;;;;;;;;:38;;;;954:1;938:13;:17;912:3;:12;;:23;925:9;912:23;;;;;;;;;;;:43;;;;972:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;1013:3;:12;;:19;1026:5;1013:19;;;;;;;;;;;1006:26;;;1056:4;1049:11;;;;;;;;652:465;1100:5;1093:12;;;516:608;;;;;:::o

Swarm Source

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