Contract 0x2765041E22Cf49438dA4bfe751252f9fEa1F1Be3

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x7d02506c962600e471aede9b056039f936d2245da8d259647b8fe4ce0ddd094e85090302021-06-22 4:33:349 hrs 37 mins ago0x2b4cb199534712ec1d43a5ac02d60e7e863f474e IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00055049
0xc86fe59664db6c99b3fd26adc209c2cd968425f98f97f6a935a4258d353f4c9084799742021-06-21 4:15:041 day 9 hrs agoSpore Engineering: Deployer IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000285805
0x30fed7c0a863c4e62791b835849b1a003f0c28ecb2de21a7a44ef6bb98906fad83982032021-06-18 7:43:424 days 6 hrs ago0x005103734019b472056c6bea076dc3e565fa3dd9 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000487495
0xbc1aec3a4f0b1e733288e8793133fd1ad41fe38f9b9f8018a2c0cd87ff6639e681318092021-06-08 23:58:0713 days 14 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0xb42f5540840c87f44c08e230b8449e994c08131a4c996976b7ee0586f578d74381286642021-06-08 21:19:5713 days 16 hrs ago0xaf0a5c05620ab3aed8cd6599c9f675f358aac4ea IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0xfa8278c4fc2bf949bd48322d4ddcabb784e11fe91edb3b94ba8c085cc764f71880391162021-06-05 18:35:0316 days 19 hrs ago0x447102e2c29795abb03c8692c994f65de154f7f9 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0xb909800d72455d5f48ecaab9b35a524152b5886469b2effa42bf66c27a0dd90380316222021-06-05 12:20:0717 days 1 hr ago0x9c50524246aa62cff6bc685138250eb81c9d1f88 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000408435
0xe11e3daab73d1d739213c6f590d9e51d9e84f6034d6f001beca6b7d9570775bf80316222021-06-05 12:20:0717 days 1 hr ago0x9c50524246aa62cff6bc685138250eb81c9d1f88 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0x2a465fd9917a056eff8c14a67361fa4f583e12df95801f32f04441cf85e6ef8880301822021-06-05 11:08:0717 days 3 hrs ago0xe52e4d3b9032905105f7fa7c9b6ddf8a161f4930 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000581795
0x6490889ff980e5d15115900d0653bb3cba5939d312bc6a4629a4213a47fe908f80267992021-06-05 8:17:3317 days 5 hrs ago0x051ff9c56e1848eb3ae167bb9428d8c1a9af785d IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00040049
0x601ae2896c4ac36c1e028450e8c69c1ad913fcd086cd37dcbbfa03614c489f0680248712021-06-05 6:41:0817 days 7 hrs ago0xe48df227155b4e9856c8c82d88b15e633cdd1330 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0xb237161f1bd001d8e8dae5f5ddc2d621e8232ded148808fe5d6b3a1caacc333780221622021-06-05 4:25:4117 days 9 hrs ago0x6dfb9b2ef8241276102b0898aaa6a1b46733ef26 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.001521568
0x5f7d0f7dc248a78e8928548f1d214e2ed2b822799c931d61c67787d5914f120480162912021-06-04 23:31:3217 days 14 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x1eabb2415d9746cc8b25dc40eccfbff77f548ba583a0f9ebe15325e919d0b2dd80103172021-06-04 18:32:3517 days 19 hrs ago0x8d16c866e86057e471bae86dcc6251277e99dc41 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00040049
0xf3764f9ec34a7a6d09afc14844b2ffeed8b2bbe080da466266b55f4781a2991079691452021-06-03 8:05:3819 days 6 hrs ago0x0a2d3dd46e44acec0da085268502880bb384bcc0 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0xdfb0669d4c71327322238c3637a4048c6c1a440f0cb0a83fb0fcdd45060057fb79675092021-06-03 6:43:5019 days 7 hrs ago0x0a2d3dd46e44acec0da085268502880bb384bcc0 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0x6500bbf1e98cf5a06be67d5fa393595d2b67c3b167337fba7f627031b5bb45cf79646942021-06-03 4:22:4619 days 9 hrs ago0xd6b1c558180eb93e64dab7fa4514bcb1c547d4a9 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00040049
0xae1d10b47164c327fa53ab274fb7e9be4fcb0d0f53cd6387a4f19fac56b4bf0d79645902021-06-03 4:17:2719 days 9 hrs ago0xa27870c09a465f5d07c61d962afe6fe1a56d319f IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x8ba681dcb1fddecf1e2d988346bf1aa3b072b47762917380b74b46de7f973d5079508322021-06-02 16:48:2619 days 21 hrs ago0x5e90174d9164e1a52f84bdada5e35a920d937606 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0x0ff1d3cbe2f597fb6ea6c283510a7d5d8ff4f8156eb3c42cea438a771605ad6979485272021-06-02 14:52:5619 days 23 hrs ago0xa79254041b01fa8a5dbed8d3a52d5b4394a8ecc8 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x1bda2ed804b3993aba5a69ed8d077334283d45102706615ee6511cc529d309f179402722021-06-02 7:57:4920 days 6 hrs ago0x0d8c37f66737fb7289bcff5f4a46d0471255e7b1 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x0586ca48f73086e6dbd0c13511fed5d5bec727d1ac927a141c2989269f4ec62779294762021-06-01 22:57:3620 days 15 hrs ago0x6107f283ec9512dd9992e544be42370c51fce27d IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.000483435
0xdc2c36d1e025bf207e0556e2e2b8628164396fda61ec0f58321afc9050ca6f8d79274852021-06-01 21:18:0120 days 16 hrs ago0xe6a2dc8eae259a97e52cee2c76a5fce6b99462df IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x487371296b5b5281b42b86d0ea799b33fedc5e54e0d4178d742c8f4524f2c0bb79270732021-06-01 20:56:1920 days 17 hrs ago0x51f6d5335c61be6883958a07edfe6f2a83ad2318 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00047549
0x1886349a491f72f8da26f40bcc03d29a264d67ca68302fd2c1bdfb3a8d201f2579205462021-06-01 15:29:5320 days 22 hrs ago0x73700a7e9a5696188400be798cc83cc05a8fde54 IN  0x2765041e22cf49438da4bfe751252f9fea1f1be30 BNB0.00040043
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NFTSale

Compiler Version
v0.8.3+commit.8d00100c

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-04-06
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.3;

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) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;

            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(uint160(value))));
    }

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

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(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(uint160(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 Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

        (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 ERC165Checker {
    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;

    function supportsERC165(address account) internal view returns (bool) {
        return _supportsERC165Interface(account, type(IERC165).interfaceId) &&
            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
    }

    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
        return supportsERC165(account) &&
            _supportsERC165Interface(account, interfaceId);
    }

    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) {
        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);

        if (supportsERC165(account)) {
            for (uint256 i = 0; i < interfaceIds.length; i++) {
                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
            }
        }

        return interfaceIdsSupported;
    }

    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
        if (!supportsERC165(account)) {
            return false;
        }

        for (uint256 i = 0; i < interfaceIds.length; i++) {
            if (!_supportsERC165Interface(account, interfaceIds[i])) {
                return false;
            }
        }

        return true;
    }

    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
        bytes memory encodedParams = abi.encodeWithSelector(IERC165(account).supportsInterface.selector, interfaceId);
        (bool success, bytes memory result) = account.staticcall{ gas: 30000 }(encodedParams);
        if (result.length < 32) return false;
        return success && abi.decode(result, (bool));
    }
}

interface IAccessControlEnumerable {
    function getRoleMember(bytes32 role, uint256 index) external view returns (address);
    function getRoleMemberCount(bytes32 role) external view returns (uint256);
}

interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155Receiver is IERC165 {

    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

interface IERC1155MetadataURI is IERC1155 {
    function uri(uint256 id) external view returns (string memory);
}

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 Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

    mapping (address => mapping(address => bool)) private _operatorApprovals;

    string private _uri;
    string private _name;
    string private _symbol;

    constructor (string memory uri_, string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _setURI(uri_);
    }
    
    function name() public view virtual returns (string memory) {
        return _name;
    }

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

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155).interfaceId
            || interfaceId == type(IERC1155MetadataURI).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        _balances[id][from] = fromBalance - amount;
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            _balances[id][from] = fromBalance - amount;
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        _balances[id][account] = accountBalance - amount;

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        internal
        virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

abstract contract ERC1155Burnable is ERC1155 {
    function burn(address account, uint256 id, uint256 value) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

abstract contract ERC1155Pausable is ERC1155, Pausable {

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        internal
        virtual
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) 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 supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

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

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

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }
    
    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        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, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

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

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

abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers;

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControlEnumerable).interfaceId
            || super.supportsInterface(interfaceId);
    }

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

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

    function grantRole(bytes32 role, address account) public virtual override {
        super.grantRole(role, account);
        _roleMembers[role].add(account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        super.revokeRole(role, account);
        _roleMembers[role].remove(account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        super.renounceRole(role, account);
        _roleMembers[role].remove(account);
    }

    function _setupRole(bytes32 role, address account) internal virtual override {
        super._setupRole(role, account);
        _roleMembers[role].add(account);
    }
}

contract Spore1155NFT is Context, AccessControlEnumerable, ERC1155Burnable, ERC1155Pausable {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
    bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");

    mapping (uint256 => bool) public nonTransferableTokens;
    
    constructor() ERC1155("https://nft.spore.engineering/erc1155_config_files/{id}.json", "Spore NFT Collectives", "nftSPORE") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());

        _setupRole(MINTER_ROLE, _msgSender());
        _setupRole(BURNER_ROLE, _msgSender());
        _setupRole(PAUSER_ROLE, _msgSender());
    }
    
    function setURI(string memory newuri) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        _setURI(newuri);
    }
    
    function addNonTransferableTokens(uint256[] memory ids) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        for (uint i = 0; i < ids.length; i++) {
            nonTransferableTokens[ids[i]] = true;
        }
    }
    
    function removeNonTransferableTokens(uint256[] memory ids) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        for (uint i = 0; i < ids.length; i++) {
            nonTransferableTokens[ids[i]] = false;
        }
    }

    function mint(address to, uint256 id, uint256 amount, bytes memory data) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _mint(to, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _mintBatch(to, ids, amounts, data);
    }
    
    function burn(address account, uint256 id, uint256 amount) public override {
        require(hasRole(BURNER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have burner role to burn");

        _burn(account, id, amount);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public override {
        require(hasRole(BURNER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _burnBatch(account, ids, amounts);
    }

    function pause() public virtual {
        require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to pause");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to unpause");
        _unpause();
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControlEnumerable, ERC1155) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)  internal virtual override(ERC1155, ERC1155Pausable) {
        
        for (uint i = 0; i < ids.length; i++) {
            if(!hasRole(MINTER_ROLE, _msgSender())) {
                require(nonTransferableTokens[ids[i]] == false, "some of the tokens on your batch are restricted for transfer");
            }
        }
        
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

contract NFTSale is AccessControl, ReentrancyGuard, Pausable {
    
    /**
     * Rinkeby: 0xBE4549A9116D238A835a983eb4BfE4d78b077E89
     * BSC: 0x55d398326f99059fF775485246999027B3197955
     */
    IERC20 public usdt = IERC20(0x55d398326f99059fF775485246999027B3197955);
    
    /**
     * Rinkeby: 0xF32086dF97DBaD2E37BE1E6cc31cE3586DC8b1E8
     * BSC: 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
     */
    IERC20 public usdc = IERC20(0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d);
    
    /**
     * Rinkeby: 0x40C5bBbcC04de51d1a8667786C3b26Cedbd59662
     * BSC: 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56
     */
    IERC20 public busd = IERC20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    
    /**
     * Rinkeby: 0x3e9e2F2829467d034Ca1d6F6AB30a3422D00b983
     * BSC: 0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3
     */
    IERC20 public dai = IERC20(0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3);
    
    /**
     * Rinkeby: 0x8d71B155B9E2FB34239e5581C7Bbd383e897368F
     * BSC: 0x379103AE932c7eed64913E53a0121A0495f30d36
     */
    Spore1155NFT public _SporeNFT = Spore1155NFT(0x379103AE932c7eed64913E53a0121A0495f30d36);
    
    mapping(uint256 => uint256) public _NFTPrices;
    
    constructor() {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
    }
    
    function setTokenPrice(uint256 id, uint256 price) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        
        _NFTPrices[id] = price;
    }
    
    function withdraw() public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        
        usdt.transfer(_msgSender(), usdt.balanceOf(address(this)));
        usdc.transfer(_msgSender(), usdc.balanceOf(address(this)));
        busd.transfer(_msgSender(), busd.balanceOf(address(this)));
        dai.transfer(_msgSender(), dai.balanceOf(address(this)));
        
    }
    
    function totalBalance() public view returns (uint256 total) {
        total = usdt.balanceOf(address(this)) + usdc.balanceOf(address(this)) + busd.balanceOf(address(this)) + dai.balanceOf(address(this));
    }
    
    function balanceByCurrency(string memory currency) public view returns (uint256 total) {
        total = 0;
        
        if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('usdt'))) {
            total = usdt.balanceOf(address(this));
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('usdc'))) {
            total = usdc.balanceOf(address(this));
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('busd'))) {
            total = busd.balanceOf(address(this));
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('dai'))) {
            total = dai.balanceOf(address(this));
        }
    }
    
    function purchase(address to, string memory currency, uint256 id, uint256 amount, bytes memory data) public nonReentrant whenNotPaused {
        require(_NFTPrices[id] != 0, 'Min price not met');
        
        uint256 totalPurchaseAmount = _NFTPrices[id]*amount;
      
        if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('usdt'))) {
            require(usdt.balanceOf(to) >= totalPurchaseAmount, 'Min price not met');
            require(usdt.transferFrom(_msgSender(), address(this), totalPurchaseAmount), 'transfer failed');
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('usdc'))) {
            require(usdc.balanceOf(to) >= totalPurchaseAmount, 'Min price not met');
            require(usdc.transferFrom(_msgSender(), address(this), totalPurchaseAmount), 'transfer failed');
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('busd'))) {
            require(busd.balanceOf(to) >= totalPurchaseAmount, 'Min price not met');
            require(busd.transferFrom(_msgSender(), address(this), totalPurchaseAmount), 'transfer failed');
        } 
        else if (keccak256(abi.encodePacked(currency)) == keccak256(abi.encodePacked('dai'))) {
            require(dai.balanceOf(to) >= totalPurchaseAmount, 'Min price not met');
            require(dai.transferFrom(_msgSender(), address(this), totalPurchaseAmount), 'transfer failed');
        }
        
        _SporeNFT.mint(to, id, amount, data);

    }
    
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_NFTPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SporeNFT","outputs":[{"internalType":"contract Spore1155NFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"currency","type":"string"}],"name":"balanceByCurrency","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"busd","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"currency","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"purchase","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040527355d398326f99059ff775485246999027b3197955600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738ac76a51cc950d9822d68b83fe1ad97b32cd580d600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e9e7cea3dedca5984780bafc599bd69add087d56600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731af3f329e8be154074d8769d1ffa4ee058b1dbc3600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073379103ae932c7eed64913e53a0121a0495f30d36600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001ba57600080fd5b50600180819055506000600260006101000a81548160ff021916908315150217905550620002016000801b620001f56200020760201b60201c565b6200020f60201b60201c565b62000380565b600033905090565b6200022182826200022560201b60201c565b5050565b6200023782826200031660201b60201c565b6200031257600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002b76200020760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612fa680620003906000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80633e413bee116100ad578063ad7a672f11610071578063ad7a672f146102f8578063d547741f14610316578063dff605ab14610332578063eb685c4714610362578063f4b9fa751461037e57610121565b80633e413bee146102505780635c975abb1461026e5780638439800b1461028c57806391d14854146102aa578063a217fddf146102da57610121565b80633034b731116100f45780633034b731146101c057806336568abe146101f05780633ca5b2341461020c5780633ccfd60b1461022a5780633d6280c31461023457610121565b806301ffc9a714610126578063248a9ca3146101565780632f2ff15d146101865780632f48ab7d146101a2575b600080fd5b610140600480360381019061013b9190612364565b61039c565b60405161014d91906127f6565b60405180910390f35b610170600480360381019061016b91906122ff565b610416565b60405161017d9190612811565b60405180910390f35b6101a0600480360381019061019b9190612328565b610435565b005b6101aa61049b565b6040516101b7919061282c565b60405180910390f35b6101da60048036038101906101d5919061238d565b6104c1565b6040516101e79190612962565b60405180910390f35b61020a60048036038101906102059190612328565b6108d7565b005b61021461095a565b604051610221919061282c565b60405180910390f35b610232610980565b005b61024e6004803603810190610249919061222f565b610f59565b005b6102586119f6565b604051610265919061282c565b60405180910390f35b610276611a1c565b60405161028391906127f6565b60405180910390f35b610294611a33565b6040516102a19190612847565b60405180910390f35b6102c460048036038101906102bf9190612328565b611a59565b6040516102d191906127f6565b60405180910390f35b6102e2611ac3565b6040516102ef9190612811565b60405180910390f35b610300611aca565b60405161030d9190612962565b60405180910390f35b610330600480360381019061032b9190612328565b611d9b565b005b61034c600480360381019061034791906123ce565b611e01565b6040516103599190612962565b60405180910390f35b61037c60048036038101906103779190612420565b611e19565b005b610386611e88565b604051610393919061282c565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061040f575061040e82611eae565b5b9050919050565b6000806000838152602001908152602001600020600101549050919050565b61044e61044183610416565b610449611f18565b611a59565b61048d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048490612862565b60405180910390fd5b6104978282611f20565b5050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040516020016104d290612705565b60405160208183030381529060405280519060200120826040516020016104f991906126c4565b6040516020818303038152906040528051906020012014156105c757600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610570919061272f565b60206040518083038186803b15801561058857600080fd5b505afa15801561059c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c091906123f7565b90506108d2565b6040516020016105d6906126db565b60405160208183030381529060405280519060200120826040516020016105fd91906126c4565b6040516020818303038152906040528051906020012014156106cb57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610674919061272f565b60206040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c491906123f7565b90506108d1565b6040516020016106da9061271a565b604051602081830303815290604052805190602001208260405160200161070191906126c4565b6040516020818303038152906040528051906020012014156107cf57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610778919061272f565b60206040518083038186803b15801561079057600080fd5b505afa1580156107a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c891906123f7565b90506108d0565b6040516020016107de906126f0565b604051602081830303815290604052805190602001208260405160200161080591906126c4565b6040516020818303038152906040528051906020012014156108cf57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161087c919061272f565b60206040518083038186803b15801561089457600080fd5b505afa1580156108a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cc91906123f7565b90505b5b5b5b919050565b6108df611f18565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390612942565b60405180910390fd5b6109568282612000565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109946000801b61098f611f18565b611a59565b6109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906128e2565b60405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610a19611f18565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a74919061272f565b60206040518083038186803b158015610a8c57600080fd5b505afa158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac491906123f7565b6040518363ffffffff1660e01b8152600401610ae1929190612781565b602060405180830381600087803b158015610afb57600080fd5b505af1158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3391906122d6565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610b7a611f18565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bd5919061272f565b60206040518083038186803b158015610bed57600080fd5b505afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2591906123f7565b6040518363ffffffff1660e01b8152600401610c42929190612781565b602060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9491906122d6565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610cdb611f18565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d36919061272f565b60206040518083038186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8691906123f7565b6040518363ffffffff1660e01b8152600401610da3929190612781565b602060405180830381600087803b158015610dbd57600080fd5b505af1158015610dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df591906122d6565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610e3c611f18565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e97919061272f565b60206040518083038186803b158015610eaf57600080fd5b505afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee791906123f7565b6040518363ffffffff1660e01b8152600401610f04929190612781565b602060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5691906122d6565b50565b60026001541415610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690612922565b60405180910390fd5b6002600181905550610faf611a1c565b15610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe6906128c2565b60405180910390fd5b600060076000858152602001908152602001600020541415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612882565b60405180910390fd5b60008260076000868152602001908152602001600020546110679190612a9d565b905060405160200161107890612705565b604051602081830303815290604052805190602001208560405160200161109f91906126c4565b6040516020818303038152906040528051906020012014156112a45780600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401611117919061272f565b60206040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116791906123f7565b10156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90612882565b60405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6111ee611f18565b30846040518463ffffffff1660e01b815260040161120e9392919061274a565b602060405180830381600087803b15801561122857600080fd5b505af115801561123c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126091906122d6565b61129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129690612902565b60405180910390fd5b611954565b6040516020016112b3906126db565b60405160208183030381529060405280519060200120856040516020016112da91906126c4565b6040516020818303038152906040528051906020012014156114df5780600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401611352919061272f565b60206040518083038186803b15801561136a57600080fd5b505afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a291906123f7565b10156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90612882565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd611429611f18565b30846040518463ffffffff1660e01b81526004016114499392919061274a565b602060405180830381600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b91906122d6565b6114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190612902565b60405180910390fd5b611953565b6040516020016114ee9061271a565b604051602081830303815290604052805190602001208560405160200161151591906126c4565b60405160208183030381529060405280519060200120141561171a5780600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b815260040161158d919061272f565b60206040518083038186803b1580156115a557600080fd5b505afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd91906123f7565b101561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590612882565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd611664611f18565b30846040518463ffffffff1660e01b81526004016116849392919061274a565b602060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d691906122d6565b611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90612902565b60405180910390fd5b611952565b604051602001611729906126f0565b604051602081830303815290604052805190602001208560405160200161175091906126c4565b6040516020818303038152906040528051906020012014156119515780600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016117c8919061272f565b60206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181891906123f7565b1015611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090612882565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61189f611f18565b30846040518463ffffffff1660e01b81526004016118bf9392919061274a565b602060405180830381600087803b1580156118d957600080fd5b505af11580156118ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191191906122d6565b611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790612902565b60405180910390fd5b5b5b5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663731133e9878686866040518563ffffffff1660e01b81526004016119b594939291906127aa565b600060405180830381600087803b1580156119cf57600080fd5b505af11580156119e3573d6000803e3d6000fd5b5050505050600180819055505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b27919061272f565b60206040518083038186803b158015611b3f57600080fd5b505afa158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7791906123f7565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bd2919061272f565b60206040518083038186803b158015611bea57600080fd5b505afa158015611bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2291906123f7565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c7d919061272f565b60206040518083038186803b158015611c9557600080fd5b505afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd91906123f7565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d28919061272f565b60206040518083038186803b158015611d4057600080fd5b505afa158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7891906123f7565b611d829190612a47565b611d8c9190612a47565b611d969190612a47565b905090565b611db4611da783610416565b611daf611f18565b611a59565b611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea906128a2565b60405180910390fd5b611dfd8282612000565b5050565b60076020528060005260406000206000915090505481565b611e2d6000801b611e28611f18565b611a59565b611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906128e2565b60405180910390fd5b8060076000848152602001908152602001600020819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b611f2a8282611a59565b611ffc57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611fa1611f18565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61200a8282611a59565b156120dd57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612082611f18565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60006120f46120ef846129a2565b61297d565b90508281526020810184848401111561210c57600080fd5b612117848285612bbd565b509392505050565b600061213261212d846129d3565b61297d565b90508281526020810184848401111561214a57600080fd5b612155848285612bbd565b509392505050565b60008135905061216c81612efd565b92915050565b60008151905061218181612f14565b92915050565b60008135905061219681612f2b565b92915050565b6000813590506121ab81612f42565b92915050565b600082601f8301126121c257600080fd5b81356121d28482602086016120e1565b91505092915050565b600082601f8301126121ec57600080fd5b81356121fc84826020860161211f565b91505092915050565b60008135905061221481612f59565b92915050565b60008151905061222981612f59565b92915050565b600080600080600060a0868803121561224757600080fd5b60006122558882890161215d565b955050602086013567ffffffffffffffff81111561227257600080fd5b61227e888289016121db565b945050604061228f88828901612205565b93505060606122a088828901612205565b925050608086013567ffffffffffffffff8111156122bd57600080fd5b6122c9888289016121b1565b9150509295509295909350565b6000602082840312156122e857600080fd5b60006122f684828501612172565b91505092915050565b60006020828403121561231157600080fd5b600061231f84828501612187565b91505092915050565b6000806040838503121561233b57600080fd5b600061234985828601612187565b925050602061235a8582860161215d565b9150509250929050565b60006020828403121561237657600080fd5b60006123848482850161219c565b91505092915050565b60006020828403121561239f57600080fd5b600082013567ffffffffffffffff8111156123b957600080fd5b6123c5848285016121db565b91505092915050565b6000602082840312156123e057600080fd5b60006123ee84828501612205565b91505092915050565b60006020828403121561240957600080fd5b60006124178482850161221a565b91505092915050565b6000806040838503121561243357600080fd5b600061244185828601612205565b925050602061245285828601612205565b9150509250929050565b61246581612af7565b82525050565b61247481612b09565b82525050565b61248381612b15565b82525050565b600061249482612a04565b61249e8185612a1a565b93506124ae818560208601612bcc565b6124b781612c8e565b840191505092915050565b6124cb81612b75565b82525050565b6124da81612b99565b82525050565b60006124eb82612a0f565b6124f58185612a3c565b9350612505818560208601612bcc565b80840191505092915050565b600061251e602f83612a2b565b915061252982612c9f565b604082019050919050565b6000612541600483612a3c565b915061254c82612cee565b600482019050919050565b6000612564601183612a2b565b915061256f82612d17565b602082019050919050565b6000612587603083612a2b565b915061259282612d40565b604082019050919050565b60006125aa601083612a2b565b91506125b582612d8f565b602082019050919050565b60006125cd600383612a3c565b91506125d882612db8565b600382019050919050565b60006125f0601483612a2b565b91506125fb82612de1565b602082019050919050565b6000612613600483612a3c565b915061261e82612e0a565b600482019050919050565b6000612636600483612a3c565b915061264182612e33565b600482019050919050565b6000612659600f83612a2b565b915061266482612e5c565b602082019050919050565b600061267c601f83612a2b565b915061268782612e85565b602082019050919050565b600061269f602f83612a2b565b91506126aa82612eae565b604082019050919050565b6126be81612b6b565b82525050565b60006126d082846124e0565b915081905092915050565b60006126e682612534565b9150819050919050565b60006126fb826125c0565b9150819050919050565b600061271082612606565b9150819050919050565b600061272582612629565b9150819050919050565b6000602082019050612744600083018461245c565b92915050565b600060608201905061275f600083018661245c565b61276c602083018561245c565b61277960408301846126b5565b949350505050565b6000604082019050612796600083018561245c565b6127a360208301846126b5565b9392505050565b60006080820190506127bf600083018761245c565b6127cc60208301866126b5565b6127d960408301856126b5565b81810360608301526127eb8184612489565b905095945050505050565b600060208201905061280b600083018461246b565b92915050565b6000602082019050612826600083018461247a565b92915050565b600060208201905061284160008301846124c2565b92915050565b600060208201905061285c60008301846124d1565b92915050565b6000602082019050818103600083015261287b81612511565b9050919050565b6000602082019050818103600083015261289b81612557565b9050919050565b600060208201905081810360008301526128bb8161257a565b9050919050565b600060208201905081810360008301526128db8161259d565b9050919050565b600060208201905081810360008301526128fb816125e3565b9050919050565b6000602082019050818103600083015261291b8161264c565b9050919050565b6000602082019050818103600083015261293b8161266f565b9050919050565b6000602082019050818103600083015261295b81612692565b9050919050565b600060208201905061297760008301846126b5565b92915050565b6000612987612998565b90506129938282612bff565b919050565b6000604051905090565b600067ffffffffffffffff8211156129bd576129bc612c5f565b5b6129c682612c8e565b9050602081019050919050565b600067ffffffffffffffff8211156129ee576129ed612c5f565b5b6129f782612c8e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a5282612b6b565b9150612a5d83612b6b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a9257612a91612c30565b5b828201905092915050565b6000612aa882612b6b565b9150612ab383612b6b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612aec57612aeb612c30565b5b828202905092915050565b6000612b0282612b4b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612b8082612b87565b9050919050565b6000612b9282612b4b565b9050919050565b6000612ba482612bab565b9050919050565b6000612bb682612b4b565b9050919050565b82818337600083830152505050565b60005b83811015612bea578082015181840152602081019050612bcf565b83811115612bf9576000848401525b50505050565b612c0882612c8e565b810181811067ffffffffffffffff82111715612c2757612c26612c5f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f7573646300000000000000000000000000000000000000000000000000000000600082015250565b7f4d696e207072696365206e6f74206d6574000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f6461690000000000000000000000000000000000000000000000000000000000600082015250565b7f6d75737420686176652061646d696e20726f6c65000000000000000000000000600082015250565b7f7573647400000000000000000000000000000000000000000000000000000000600082015250565b7f6275736400000000000000000000000000000000000000000000000000000000600082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b612f0681612af7565b8114612f1157600080fd5b50565b612f1d81612b09565b8114612f2857600080fd5b50565b612f3481612b15565b8114612f3f57600080fd5b50565b612f4b81612b1f565b8114612f5657600080fd5b50565b612f6281612b6b565b8114612f6d57600080fd5b5056fea264697066735822122087eba6c994a702d5c2fade58319134eb0cd56a54e09e9dbf6ec7d68775e8132c64736f6c63430008030033

Deployed ByteCode Sourcemap

34035:4524:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26882:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27254:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27385:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34243:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36216:765;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27872:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34679:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35567:414;;;:::i;:::-;;36993:1557;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34461:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14838:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35114:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27107:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26516:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35993:211;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27629:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35215:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35362:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34897:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26882:217;26967:4;27006:32;26991:47;;;:11;:47;;;;:100;;;;27055:36;27079:11;27055:23;:36::i;:::-;26991:100;26984:107;;26882:217;;;:::o;27254:123::-;27320:7;27347:6;:12;27354:4;27347:12;;;;;;;;;;;:22;;;27340:29;;27254:123;;;:::o;27385:232::-;27478:41;27486:18;27499:4;27486:12;:18::i;:::-;27506:12;:10;:12::i;:::-;27478:7;:41::i;:::-;27470:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;27584:25;27595:4;27601:7;27584:10;:25::i;:::-;27385:232;;:::o;34243:71::-;;;;;;;;;;;;;:::o;36216:765::-;36288:13;36399:24;;;;;;;:::i;:::-;;;;;;;;;;;;;36389:35;;;;;;36375:8;36358:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;36348:37;;;;;;:76;36344:630;;;36449:4;;;;;;;;;;;:14;;;36472:4;36449:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36441:37;;36344:630;;;36561:24;;;;;;;:::i;:::-;;;;;;;;;;;;;36551:35;;;;;;36537:8;36520:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;36510:37;;;;;;:76;36506:468;;;36611:4;;;;;;;;;;;:14;;;36634:4;36611:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36603:37;;36506:468;;;36723:24;;;;;;;:::i;:::-;;;;;;;;;;;;;36713:35;;;;;;36699:8;36682:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;36672:37;;;;;;:76;36668:306;;;36773:4;;;;;;;;;;;:14;;;36796:4;36773:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36765:37;;36668:306;;;36885:23;;;;;;;:::i;:::-;;;;;;;;;;;;;36875:34;;;;;;36861:8;36844:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;36834:37;;;;;;:75;36830:144;;;36934:3;;;;;;;;;;;:13;;;36956:4;36934:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36926:36;;36830:144;36668:306;36506:468;36344:630;36216:765;;;:::o;27872:218::-;27979:12;:10;:12::i;:::-;27968:23;;:7;:23;;;27960:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28056:26;28068:4;28074:7;28056:11;:26::i;:::-;27872:218;;:::o;34679:71::-;;;;;;;;;;;;;:::o;35567:414::-;35613:41;26561:4;35621:18;;35641:12;:10;:12::i;:::-;35613:7;:41::i;:::-;35605:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35700:4;;;;;;;;;;;:13;;;35714:12;:10;:12::i;:::-;35728:4;;;;;;;;;;;:14;;;35751:4;35728:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35700:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35769:4;;;;;;;;;;;:13;;;35783:12;:10;:12::i;:::-;35797:4;;;;;;;;;;;:14;;;35820:4;35797:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35769:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35838:4;;;;;;;;;;;:13;;;35852:12;:10;:12::i;:::-;35866:4;;;;;;;;;;;:14;;;35889:4;35866:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35838:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35907:3;;;;;;;;;;;:12;;;35920;:10;:12::i;:::-;35934:3;;;;;;;;;;;:13;;;35956:4;35934:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35907:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35567:414::o;36993:1557::-;14060:1;14209:7;;:19;;14201:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14060:1;14277:7;:18;;;;14977:8:::1;:6;:8::i;:::-;14976:9;14968:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37165:1:::2;37147:10;:14;37158:2;37147:14;;;;;;;;;;;;:19;;37139:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37209:27;37254:6;37239:10;:14;37250:2;37239:14;;;;;;;;;;;;:21;;;;:::i;:::-;37209:51;;37334:24;;;;;;;:::i;:::-;;;;;;;;;;;;;37324:35;;;;;;37310:8;37293:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;37283:37;;;;;;:76;37279:1205;;;37406:19;37384:4;;;;;;;;;;;:14;;;37399:2;37384:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;37376:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37470:4;;;;;;;;;;;:17;;;37488:12;:10;:12::i;:::-;37510:4;37517:19;37470:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37462:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37279:1205;;;37640:24;;;;;;;:::i;:::-;;;;;;;;;;;;;37630:35;;;;;;37616:8;37599:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;37589:37;;;;;;:76;37585:899;;;37712:19;37690:4;;;;;;;;;;;:14;;;37705:2;37690:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;37682:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37776:4;;;;;;;;;;;:17;;;37794:12;:10;:12::i;:::-;37816:4;37823:19;37776:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37768:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37585:899;;;37946:24;;;;;;;:::i;:::-;;;;;;;;;;;;;37936:35;;;;;;37922:8;37905:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;37895:37;;;;;;:76;37891:593;;;38018:19;37996:4;;;;;;;;;;;:14;;;38011:2;37996:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;37988:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38082:4;;;;;;;;;;;:17;;;38100:12;:10;:12::i;:::-;38122:4;38129:19;38082:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38074:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37891:593;;;38252:23;;;;;;;:::i;:::-;;;;;;;;;;;;;38242:34;;;;;;38228:8;38211:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;38201:37;;;;;;:75;38197:287;;;38322:19;38301:3;;;;;;;;;;;:13;;;38315:2;38301:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;38293:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38386:3;;;;;;;;;;;:16;;;38403:12;:10;:12::i;:::-;38425:4;38432:19;38386:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38378:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;38197:287;37891:593;37585:899;37279:1205;38504:9;;;;;;;;;;;:14;;;38519:2;38523;38527:6;38535:4;38504:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15017:1;14016::::0;14330:7;:22;;;;36993:1557;;;;;:::o;34461:71::-;;;;;;;;;;;;;:::o;14838:86::-;14885:4;14909:7;;;;;;;;;;;14902:14;;14838:86;:::o;35114:88::-;;;;;;;;;;;;;:::o;27107:139::-;27185:4;27209:6;:12;27216:4;27209:12;;;;;;;;;;;:20;;:29;27230:7;27209:29;;;;;;;;;;;;;;;;;;;;;;;;;27202:36;;27107:139;;;;:::o;26516:49::-;26561:4;26516:49;;;:::o;35993:211::-;36038:13;36168:3;;;;;;;;;;;:13;;;36190:4;36168:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36136:4;;;;;;;;;;;:14;;;36159:4;36136:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36104:4;;;;;;;;;;;:14;;;36127:4;36104:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36072:4;;;;;;;;;;;:14;;;36095:4;36072:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;:93;;;;:::i;:::-;:124;;;;:::i;:::-;36064:132;;35993:211;:::o;27629:235::-;27723:41;27731:18;27744:4;27731:12;:18::i;:::-;27751:12;:10;:12::i;:::-;27723:7;:41::i;:::-;27715:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:26;27842:4;27848:7;27830:11;:26::i;:::-;27629:235;;:::o;35215:45::-;;;;;;;;;;;;;;;;;:::o;35362:193::-;35438:41;26561:4;35446:18;;35466:12;:10;:12::i;:::-;35438:7;:41::i;:::-;35430:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35542:5;35525:10;:14;35536:2;35525:14;;;;;;;;;;;:22;;;;35362:193;;:::o;34897:70::-;;;;;;;;;;;;;:::o;15432:157::-;15517:4;15556:25;15541:40;;;:11;:40;;;;15534:47;;15432:157;;;:::o;14400:98::-;14453:7;14480:10;14473:17;;14400:98;:::o;28421:229::-;28496:22;28504:4;28510:7;28496;:22::i;:::-;28491:152;;28567:4;28535:6;:12;28542:4;28535:12;;;;;;;;;;;:20;;:29;28556:7;28535:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28618:12;:10;:12::i;:::-;28591:40;;28609:7;28591:40;;28603:4;28591:40;;;;;;;;;;28491:152;28421:229;;:::o;28658:230::-;28733:22;28741:4;28747:7;28733;:22::i;:::-;28729:152;;;28804:5;28772:6;:12;28779:4;28772:12;;;;;;;;;;;:20;;:29;28793:7;28772:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;28856:12;:10;:12::i;:::-;28829:40;;28847:7;28829:40;;28841:4;28829:40;;;;;;;;;;28729:152;28658:230;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:137::-;;937:6;931:13;922:22;;953:30;977:5;953:30;:::i;:::-;912:77;;;;:::o;995:139::-;;1079:6;1066:20;1057:29;;1095:33;1122:5;1095:33;:::i;:::-;1047:87;;;;:::o;1140:137::-;;1223:6;1210:20;1201:29;;1239:32;1265:5;1239:32;:::i;:::-;1191:86;;;;:::o;1296:271::-;;1400:3;1393:4;1385:6;1381:17;1377:27;1367:2;;1418:1;1415;1408:12;1367:2;1458:6;1445:20;1483:78;1557:3;1549:6;1542:4;1534:6;1530:17;1483:78;:::i;:::-;1474:87;;1357:210;;;;;:::o;1587:273::-;;1692:3;1685:4;1677:6;1673:17;1669:27;1659:2;;1710:1;1707;1700:12;1659:2;1750:6;1737:20;1775:79;1850:3;1842:6;1835:4;1827:6;1823:17;1775:79;:::i;:::-;1766:88;;1649:211;;;;;:::o;1866:139::-;;1950:6;1937:20;1928:29;;1966:33;1993:5;1966:33;:::i;:::-;1918:87;;;;:::o;2011:143::-;;2099:6;2093:13;2084:22;;2115:33;2142:5;2115:33;:::i;:::-;2074:80;;;;:::o;2160:1068::-;;;;;;2355:3;2343:9;2334:7;2330:23;2326:33;2323:2;;;2372:1;2369;2362:12;2323:2;2415:1;2440:53;2485:7;2476:6;2465:9;2461:22;2440:53;:::i;:::-;2430:63;;2386:117;2570:2;2559:9;2555:18;2542:32;2601:18;2593:6;2590:30;2587:2;;;2633:1;2630;2623:12;2587:2;2661:63;2716:7;2707:6;2696:9;2692:22;2661:63;:::i;:::-;2651:73;;2513:221;2773:2;2799:53;2844:7;2835:6;2824:9;2820:22;2799:53;:::i;:::-;2789:63;;2744:118;2901:2;2927:53;2972:7;2963:6;2952:9;2948:22;2927:53;:::i;:::-;2917:63;;2872:118;3057:3;3046:9;3042:19;3029:33;3089:18;3081:6;3078:30;3075:2;;;3121:1;3118;3111:12;3075:2;3149:62;3203:7;3194:6;3183:9;3179:22;3149:62;:::i;:::-;3139:72;;3000:221;2313:915;;;;;;;;:::o;3234:278::-;;3350:2;3338:9;3329:7;3325:23;3321:32;3318:2;;;3366:1;3363;3356:12;3318:2;3409:1;3434:61;3487:7;3478:6;3467:9;3463:22;3434:61;:::i;:::-;3424:71;;3380:125;3308:204;;;;:::o;3518:262::-;;3626:2;3614:9;3605:7;3601:23;3597:32;3594:2;;;3642:1;3639;3632:12;3594:2;3685:1;3710:53;3755:7;3746:6;3735:9;3731:22;3710:53;:::i;:::-;3700:63;;3656:117;3584:196;;;;:::o;3786:407::-;;;3911:2;3899:9;3890:7;3886:23;3882:32;3879:2;;;3927:1;3924;3917:12;3879:2;3970:1;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3941:117;4097:2;4123:53;4168:7;4159:6;4148:9;4144:22;4123:53;:::i;:::-;4113:63;;4068:118;3869:324;;;;;:::o;4199:260::-;;4306:2;4294:9;4285:7;4281:23;4277:32;4274:2;;;4322:1;4319;4312:12;4274:2;4365:1;4390:52;4434:7;4425:6;4414:9;4410:22;4390:52;:::i;:::-;4380:62;;4336:116;4264:195;;;;:::o;4465:375::-;;4583:2;4571:9;4562:7;4558:23;4554:32;4551:2;;;4599:1;4596;4589:12;4551:2;4670:1;4659:9;4655:17;4642:31;4700:18;4692:6;4689:30;4686:2;;;4732:1;4729;4722:12;4686:2;4760:63;4815:7;4806:6;4795:9;4791:22;4760:63;:::i;:::-;4750:73;;4613:220;4541:299;;;;:::o;4846:262::-;;4954:2;4942:9;4933:7;4929:23;4925:32;4922:2;;;4970:1;4967;4960:12;4922:2;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;4912:196;;;;:::o;5114:284::-;;5233:2;5221:9;5212:7;5208:23;5204:32;5201:2;;;5249:1;5246;5239:12;5201:2;5292:1;5317:64;5373:7;5364:6;5353:9;5349:22;5317:64;:::i;:::-;5307:74;;5263:128;5191:207;;;;:::o;5404:407::-;;;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:53;5658:7;5649:6;5638:9;5634:22;5613:53;:::i;:::-;5603:63;;5559:117;5715:2;5741:53;5786:7;5777:6;5766:9;5762:22;5741:53;:::i;:::-;5731:63;;5686:118;5487:324;;;;;:::o;5817:118::-;5904:24;5922:5;5904:24;:::i;:::-;5899:3;5892:37;5882:53;;:::o;5941:109::-;6022:21;6037:5;6022:21;:::i;:::-;6017:3;6010:34;6000:50;;:::o;6056:118::-;6143:24;6161:5;6143:24;:::i;:::-;6138:3;6131:37;6121:53;;:::o;6180:360::-;;6294:38;6326:5;6294:38;:::i;:::-;6348:70;6411:6;6406:3;6348:70;:::i;:::-;6341:77;;6427:52;6472:6;6467:3;6460:4;6453:5;6449:16;6427:52;:::i;:::-;6504:29;6526:6;6504:29;:::i;:::-;6499:3;6495:39;6488:46;;6270:270;;;;;:::o;6546:161::-;6648:52;6694:5;6648:52;:::i;:::-;6643:3;6636:65;6626:81;;:::o;6713:173::-;6821:58;6873:5;6821:58;:::i;:::-;6816:3;6809:71;6799:87;;:::o;6892:377::-;;7026:39;7059:5;7026:39;:::i;:::-;7081:89;7163:6;7158:3;7081:89;:::i;:::-;7074:96;;7179:52;7224:6;7219:3;7212:4;7205:5;7201:16;7179:52;:::i;:::-;7256:6;7251:3;7247:16;7240:23;;7002:267;;;;;:::o;7275:366::-;;7438:67;7502:2;7497:3;7438:67;:::i;:::-;7431:74;;7514:93;7603:3;7514:93;:::i;:::-;7632:2;7627:3;7623:12;7616:19;;7421:220;;;:::o;7647:400::-;;7828:84;7910:1;7905:3;7828:84;:::i;:::-;7821:91;;7921:93;8010:3;7921:93;:::i;:::-;8039:1;8034:3;8030:11;8023:18;;7811:236;;;:::o;8053:366::-;;8216:67;8280:2;8275:3;8216:67;:::i;:::-;8209:74;;8292:93;8381:3;8292:93;:::i;:::-;8410:2;8405:3;8401:12;8394:19;;8199:220;;;:::o;8425:366::-;;8588:67;8652:2;8647:3;8588:67;:::i;:::-;8581:74;;8664:93;8753:3;8664:93;:::i;:::-;8782:2;8777:3;8773:12;8766:19;;8571:220;;;:::o;8797:366::-;;8960:67;9024:2;9019:3;8960:67;:::i;:::-;8953:74;;9036:93;9125:3;9036:93;:::i;:::-;9154:2;9149:3;9145:12;9138:19;;8943:220;;;:::o;9169:400::-;;9350:84;9432:1;9427:3;9350:84;:::i;:::-;9343:91;;9443:93;9532:3;9443:93;:::i;:::-;9561:1;9556:3;9552:11;9545:18;;9333:236;;;:::o;9575:366::-;;9738:67;9802:2;9797:3;9738:67;:::i;:::-;9731:74;;9814:93;9903:3;9814:93;:::i;:::-;9932:2;9927:3;9923:12;9916:19;;9721:220;;;:::o;9947:400::-;;10128:84;10210:1;10205:3;10128:84;:::i;:::-;10121:91;;10221:93;10310:3;10221:93;:::i;:::-;10339:1;10334:3;10330:11;10323:18;;10111:236;;;:::o;10353:400::-;;10534:84;10616:1;10611:3;10534:84;:::i;:::-;10527:91;;10627:93;10716:3;10627:93;:::i;:::-;10745:1;10740:3;10736:11;10729:18;;10517:236;;;:::o;10759:366::-;;10922:67;10986:2;10981:3;10922:67;:::i;:::-;10915:74;;10998:93;11087:3;10998:93;:::i;:::-;11116:2;11111:3;11107:12;11100:19;;10905:220;;;:::o;11131:366::-;;11294:67;11358:2;11353:3;11294:67;:::i;:::-;11287:74;;11370:93;11459:3;11370:93;:::i;:::-;11488:2;11483:3;11479:12;11472:19;;11277:220;;;:::o;11503:366::-;;11666:67;11730:2;11725:3;11666:67;:::i;:::-;11659:74;;11742:93;11831:3;11742:93;:::i;:::-;11860:2;11855:3;11851:12;11844:19;;11649:220;;;:::o;11875:118::-;11962:24;11980:5;11962:24;:::i;:::-;11957:3;11950:37;11940:53;;:::o;11999:275::-;;12153:95;12244:3;12235:6;12153:95;:::i;:::-;12146:102;;12265:3;12258:10;;12135:139;;;;:::o;12280:381::-;;12487:148;12631:3;12487:148;:::i;:::-;12480:155;;12652:3;12645:10;;12469:192;;;:::o;12667:381::-;;12874:148;13018:3;12874:148;:::i;:::-;12867:155;;13039:3;13032:10;;12856:192;;;:::o;13054:381::-;;13261:148;13405:3;13261:148;:::i;:::-;13254:155;;13426:3;13419:10;;13243:192;;;:::o;13441:381::-;;13648:148;13792:3;13648:148;:::i;:::-;13641:155;;13813:3;13806:10;;13630:192;;;:::o;13828:222::-;;13959:2;13948:9;13944:18;13936:26;;13972:71;14040:1;14029:9;14025:17;14016:6;13972:71;:::i;:::-;13926:124;;;;:::o;14056:442::-;;14243:2;14232:9;14228:18;14220:26;;14256:71;14324:1;14313:9;14309:17;14300:6;14256:71;:::i;:::-;14337:72;14405:2;14394:9;14390:18;14381:6;14337:72;:::i;:::-;14419;14487:2;14476:9;14472:18;14463:6;14419:72;:::i;:::-;14210:288;;;;;;:::o;14504:332::-;;14663:2;14652:9;14648:18;14640:26;;14676:71;14744:1;14733:9;14729:17;14720:6;14676:71;:::i;:::-;14757:72;14825:2;14814:9;14810:18;14801:6;14757:72;:::i;:::-;14630:206;;;;;:::o;14842:640::-;;15075:3;15064:9;15060:19;15052:27;;15089:71;15157:1;15146:9;15142:17;15133:6;15089:71;:::i;:::-;15170:72;15238:2;15227:9;15223:18;15214:6;15170:72;:::i;:::-;15252;15320:2;15309:9;15305:18;15296:6;15252:72;:::i;:::-;15371:9;15365:4;15361:20;15356:2;15345:9;15341:18;15334:48;15399:76;15470:4;15461:6;15399:76;:::i;:::-;15391:84;;15042:440;;;;;;;:::o;15488:210::-;;15613:2;15602:9;15598:18;15590:26;;15626:65;15688:1;15677:9;15673:17;15664:6;15626:65;:::i;:::-;15580:118;;;;:::o;15704:222::-;;15835:2;15824:9;15820:18;15812:26;;15848:71;15916:1;15905:9;15901:17;15892:6;15848:71;:::i;:::-;15802:124;;;;:::o;15932:252::-;;16078:2;16067:9;16063:18;16055:26;;16091:86;16174:1;16163:9;16159:17;16150:6;16091:86;:::i;:::-;16045:139;;;;:::o;16190:264::-;;16342:2;16331:9;16327:18;16319:26;;16355:92;16444:1;16433:9;16429:17;16420:6;16355:92;:::i;:::-;16309:145;;;;:::o;16460:419::-;;16664:2;16653:9;16649:18;16641:26;;16713:9;16707:4;16703:20;16699:1;16688:9;16684:17;16677:47;16741:131;16867:4;16741:131;:::i;:::-;16733:139;;16631:248;;;:::o;16885:419::-;;17089:2;17078:9;17074:18;17066:26;;17138:9;17132:4;17128:20;17124:1;17113:9;17109:17;17102:47;17166:131;17292:4;17166:131;:::i;:::-;17158:139;;17056:248;;;:::o;17310:419::-;;17514:2;17503:9;17499:18;17491:26;;17563:9;17557:4;17553:20;17549:1;17538:9;17534:17;17527:47;17591:131;17717:4;17591:131;:::i;:::-;17583:139;;17481:248;;;:::o;17735:419::-;;17939:2;17928:9;17924:18;17916:26;;17988:9;17982:4;17978:20;17974:1;17963:9;17959:17;17952:47;18016:131;18142:4;18016:131;:::i;:::-;18008:139;;17906:248;;;:::o;18160:419::-;;18364:2;18353:9;18349:18;18341:26;;18413:9;18407:4;18403:20;18399:1;18388:9;18384:17;18377:47;18441:131;18567:4;18441:131;:::i;:::-;18433:139;;18331:248;;;:::o;18585:419::-;;18789:2;18778:9;18774:18;18766:26;;18838:9;18832:4;18828:20;18824:1;18813:9;18809:17;18802:47;18866:131;18992:4;18866:131;:::i;:::-;18858:139;;18756:248;;;:::o;19010:419::-;;19214:2;19203:9;19199:18;19191:26;;19263:9;19257:4;19253:20;19249:1;19238:9;19234:17;19227:47;19291:131;19417:4;19291:131;:::i;:::-;19283:139;;19181:248;;;:::o;19435:419::-;;19639:2;19628:9;19624:18;19616:26;;19688:9;19682:4;19678:20;19674:1;19663:9;19659:17;19652:47;19716:131;19842:4;19716:131;:::i;:::-;19708:139;;19606:248;;;:::o;19860:222::-;;19991:2;19980:9;19976:18;19968:26;;20004:71;20072:1;20061:9;20057:17;20048:6;20004:71;:::i;:::-;19958:124;;;;:::o;20088:129::-;;20149:20;;:::i;:::-;20139:30;;20178:33;20206:4;20198:6;20178:33;:::i;:::-;20129:88;;;:::o;20223:75::-;;20289:2;20283:9;20273:19;;20263:35;:::o;20304:307::-;;20455:18;20447:6;20444:30;20441:2;;;20477:18;;:::i;:::-;20441:2;20515:29;20537:6;20515:29;:::i;:::-;20507:37;;20599:4;20593;20589:15;20581:23;;20370:241;;;:::o;20617:308::-;;20769:18;20761:6;20758:30;20755:2;;;20791:18;;:::i;:::-;20755:2;20829:29;20851:6;20829:29;:::i;:::-;20821:37;;20913:4;20907;20903:15;20895:23;;20684:241;;;:::o;20931:98::-;;21016:5;21010:12;21000:22;;20989:40;;;:::o;21035:99::-;;21121:5;21115:12;21105:22;;21094:40;;;:::o;21140:168::-;;21257:6;21252:3;21245:19;21297:4;21292:3;21288:14;21273:29;;21235:73;;;;:::o;21314:169::-;;21432:6;21427:3;21420:19;21472:4;21467:3;21463:14;21448:29;;21410:73;;;;:::o;21489:148::-;;21628:3;21613:18;;21603:34;;;;:::o;21643:305::-;;21702:20;21720:1;21702:20;:::i;:::-;21697:25;;21736:20;21754:1;21736:20;:::i;:::-;21731:25;;21890:1;21822:66;21818:74;21815:1;21812:81;21809:2;;;21896:18;;:::i;:::-;21809:2;21940:1;21937;21933:9;21926:16;;21687:261;;;;:::o;21954:348::-;;22017:20;22035:1;22017:20;:::i;:::-;22012:25;;22051:20;22069:1;22051:20;:::i;:::-;22046:25;;22239:1;22171:66;22167:74;22164:1;22161:81;22156:1;22149:9;22142:17;22138:105;22135:2;;;22246:18;;:::i;:::-;22135:2;22294:1;22291;22287:9;22276:20;;22002:300;;;;:::o;22308:96::-;;22374:24;22392:5;22374:24;:::i;:::-;22363:35;;22353:51;;;:::o;22410:90::-;;22487:5;22480:13;22473:21;22462:32;;22452:48;;;:::o;22506:77::-;;22572:5;22561:16;;22551:32;;;:::o;22589:149::-;;22665:66;22658:5;22654:78;22643:89;;22633:105;;;:::o;22744:126::-;;22821:42;22814:5;22810:54;22799:65;;22789:81;;;:::o;22876:77::-;;22942:5;22931:16;;22921:32;;;:::o;22959:156::-;;23057:52;23103:5;23057:52;:::i;:::-;23044:65;;23034:81;;;:::o;23121:128::-;;23219:24;23237:5;23219:24;:::i;:::-;23206:37;;23196:53;;;:::o;23255:168::-;;23359:58;23411:5;23359:58;:::i;:::-;23346:71;;23336:87;;;:::o;23429:134::-;;23533:24;23551:5;23533:24;:::i;:::-;23520:37;;23510:53;;;:::o;23569:154::-;23653:6;23648:3;23643;23630:30;23715:1;23706:6;23701:3;23697:16;23690:27;23620:103;;;:::o;23729:307::-;23797:1;23807:113;23821:6;23818:1;23815:13;23807:113;;;23906:1;23901:3;23897:11;23891:18;23887:1;23882:3;23878:11;23871:39;23843:2;23840:1;23836:10;23831:15;;23807:113;;;23938:6;23935:1;23932:13;23929:2;;;24018:1;24009:6;24004:3;24000:16;23993:27;23929:2;23778:258;;;;:::o;24042:281::-;24125:27;24147:4;24125:27;:::i;:::-;24117:6;24113:40;24255:6;24243:10;24240:22;24219:18;24207:10;24204:34;24201:62;24198:2;;;24266:18;;:::i;:::-;24198:2;24306:10;24302:2;24295:22;24085:238;;;:::o;24329:180::-;24377:77;24374:1;24367:88;24474:4;24471:1;24464:15;24498:4;24495:1;24488:15;24515:180;24563:77;24560:1;24553:88;24660:4;24657:1;24650:15;24684:4;24681:1;24674:15;24701:102;;24793:2;24789:7;24784:2;24777:5;24773:14;24769:28;24759:38;;24749:54;;;:::o;24809:234::-;24949:34;24945:1;24937:6;24933:14;24926:58;25018:17;25013:2;25005:6;25001:15;24994:42;24915:128;:::o;25049:154::-;25189:6;25185:1;25177:6;25173:14;25166:30;25155:48;:::o;25209:167::-;25349:19;25345:1;25337:6;25333:14;25326:43;25315:61;:::o;25382:235::-;25522:34;25518:1;25510:6;25506:14;25499:58;25591:18;25586:2;25578:6;25574:15;25567:43;25488:129;:::o;25623:166::-;25763:18;25759:1;25751:6;25747:14;25740:42;25729:60;:::o;25795:153::-;25935:5;25931:1;25923:6;25919:14;25912:29;25901:47;:::o;25954:170::-;26094:22;26090:1;26082:6;26078:14;26071:46;26060:64;:::o;26130:154::-;26270:6;26266:1;26258:6;26254:14;26247:30;26236:48;:::o;26290:154::-;26430:6;26426:1;26418:6;26414:14;26407:30;26396:48;:::o;26450:165::-;26590:17;26586:1;26578:6;26574:14;26567:41;26556:59;:::o;26621:181::-;26761:33;26757:1;26749:6;26745:14;26738:57;26727:75;:::o;26808:234::-;26948:34;26944:1;26936:6;26932:14;26925:58;27017:17;27012:2;27004:6;27000:15;26993:42;26914:128;:::o;27048:122::-;27121:24;27139:5;27121:24;:::i;:::-;27114:5;27111:35;27101:2;;27160:1;27157;27150:12;27101:2;27091:79;:::o;27176:116::-;27246:21;27261:5;27246:21;:::i;:::-;27239:5;27236:32;27226:2;;27282:1;27279;27272:12;27226:2;27216:76;:::o;27298:122::-;27371:24;27389:5;27371:24;:::i;:::-;27364:5;27361:35;27351:2;;27410:1;27407;27400:12;27351:2;27341:79;:::o;27426:120::-;27498:23;27515:5;27498:23;:::i;:::-;27491:5;27488:34;27478:2;;27536:1;27533;27526:12;27478:2;27468:78;:::o;27552:122::-;27625:24;27643:5;27625:24;:::i;:::-;27618:5;27615:35;27605:2;;27664:1;27661;27654:12;27605:2;27595:79;:::o

Swarm Source

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