ETH Price: $3,334.54 (-0.26%)

Token

Adventurous Beasts (ADVB)
 

Overview

Max Total Supply

1,218 ADVB

Holders

491

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 ADVB
0x2b856c67df2aa700ac2bcea038300055e7499082
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HalflingsContractClaim

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-19
*/

/**
 *Submitted for verification at Etherscan.io on 2022-06-24
*/

//*********************************************************************//
//*********************************************************************//
//
//  ___    ____ _    _________   __________  ______  ____  __  _______    ____  _________   ________________
//   /   |  / __ \ |  / / ____/ | / /_  __/ / / / __ \/ __ \/ / / / ___/   / __ )/ ____/   | / ___/_  __/ ___/
//  / /| | / / / / | / / __/ /  |/ / / / / / / / /_/ / / / / / / /\__ \   / __  / __/ / /| | \__ \ / /  \__ \ 
// / ___ |/ /_/ /| |/ / /___/ /|  / / / / /_/ / _, _/ /_/ / /_/ /___/ /  / /_/ / /___/ ___ |___/ // /  ___/ / 
///_/  |_/_____/ |___/_____/_/ |_/ /_/  \____/_/ |_|\____/\____//____/  /_____/_____/_/  |_/____//_/  /____/  
//                                                                                                           
//
//*********************************************************************//
//*********************************************************************//
  
//-------------DEPENDENCIES--------------------------//

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if account is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, isContract will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on isContract to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's transfer: sends amount wei to
     * recipient, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by transfer, making them unable to receive funds via
     * transfer. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to recipient, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level call. A
     * plain call is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If target reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[abi.decode].
     *
     * Requirements:
     *
     * - target must be a contract.
     * - calling target with data must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall], but with
     * errorMessage as a fallback revert reason when target reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall],
     * but also transferring value wei to target.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least value.
     * - the called Solidity function must be payable.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[functionCallWithValue], but
     * with errorMessage as a fallback revert reason when target reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[functionCall],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[functionCall],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} tokenId token is transferred to this contract via {IERC721-safeTransferFrom}
     * by operator from from, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with IERC721.onERC721Received.selector.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

//File : @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol
/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * interfaceId. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * 
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when tokenId token is transferred from from to to.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when owner enables approved to manage the tokenId token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when owner enables or disables (approved) operator to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in owner's account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the tokenId token.
     *
     * Requirements:
     *
     * - tokenId must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers tokenId token from from to to, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - from cannot be the zero address.
     * - to cannot be the zero address.
     * - tokenId token must exist and be owned by from.
     * - If the caller is not from, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If to refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers tokenId token from from to to.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - from cannot be the zero address.
     * - to cannot be the zero address.
     * - tokenId token must be owned by from.
     * - If the caller is not from, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to to to transfer tokenId token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - tokenId must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for tokenId token.
     *
     * Requirements:
     *
     * - tokenId must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove operator as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The operator cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the operator is allowed to manage all of the assets of owner.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers tokenId token from from to to.
     *
     * Requirements:
     *
     * - from cannot be the zero address.
     * - to cannot be the zero address.
     * - tokenId token must exist and be owned by from.
     * - If the caller is not from, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If to refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by owner at a given index of its token list.
     * Use along with {balanceOf} to enumerate all of owner's tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given index of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for tokenId token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a uint256 to its ASCII string decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a uint256 to its ASCII string hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a uint256 to its ASCII string hexadecimal representation with fixed 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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from ReentrancyGuard will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single nonReentrant guard, functions marked as
 * nonReentrant may not call one another. This can be worked around by making
 * those functions private, and then adding external nonReentrant entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a nonReentrant function from another nonReentrant
     * function is not supported. It is possible to prevent this from happening
     * by making the nonReentrant function external, and making it call a
     * private function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * onlyOwner, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (newOwner).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
//-------------END DEPENDENCIES------------------------//


  
  
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 * 
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

//   uint256 private currentIndex;

  uint256 public immutable collectionSize;
  uint256 public maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // Mapping from token ID to approved address
  mapping(uint256 => address) private _tokenApprovals;

  // Mapping from owner to operator approvals
  mapping(address => mapping(address => bool)) private _operatorApprovals;

  mapping(uint8=>uint256) public currentIndexCollections;
    struct NFTRange{
        uint256 start;
        uint256 end;
    }
    mapping(uint8=>NFTRange) public collectionRange;

    uint256 private _totalSupply;


  /**
   * @dev
   * maxBatchSize refers to how much a minter can mint at a time.
   * collectionSize_ refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

  /**
  * To change the starting tokenId, please override this function.
  */
  function _startTokenId() internal view virtual returns (uint256) {
    return 1;
  }

  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return _totalMinted();
  }
  /**
  * Returns the total amount of tokens minted in the contract.
  */
  function _totalMinted() internal view returns (uint256) {
    unchecked {
      return _totalSupply;
    }
  }

  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @dev See {IERC165-supportsInterface}.
   */
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

  /**
   * @dev See {IERC721-balanceOf}.
   */
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    uint256 curr = tokenId;

    unchecked {
        uint8 _type = getType(tokenId);
        if (collectionRange[_type].start <= curr && curr < currentIndexCollections[_type]) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }

            // Invariant:
            // There will always be an ownership that has an address and is not burned
            // before an ownership that does not have an address and is not burned.
            // Hence, curr will not underflow.
            while (true) {
                curr--;
                ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @dev See {IERC721Metadata-name}.
   */
  function name() public view virtual override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {IERC721Metadata-symbol}.
   */
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }

  /**
   * @dev See {IERC721Metadata-tokenURI}.
   */
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : "";
  }

  /**
   * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
   * token will be the concatenation of the baseURI and the tokenId. Empty
   * by default, can be overriden in child contracts.
   */
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  }

  /**
   * @dev See {IERC721-getApproved}.
   */
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

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

  /**
   * @dev See {IERC721-isApprovedForAll}.
   */
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }

  /**
   * @dev See {IERC721-transferFrom}.
   */
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }

  /**
   * @dev Returns whether tokenId exists.
   *
   * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
   *
   * Tokens start existing when they are minted (_mint),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
      uint8 _type = getType(tokenId);
    return collectionRange[_type].start <= tokenId && tokenId < currentIndexCollections[_type];
  }

  function _safeMint(uint256 startTokenId,address to, uint256 quantity, bool isAdminMint) internal {
    _safeMint(startTokenId,to, quantity, isAdminMint, "");
  }

  function getType(uint256 tokenId) public pure returns(uint8 _type)
  {
      if(tokenId>=1 && tokenId<=3332)
      {
          return 0;
      }
      else if(tokenId>=3333 && tokenId<=4444)
      {
          return 1;
      }else if(tokenId>=4445 && tokenId<=5112)
      {
          return 2;
      }
  }

  /**
   * @dev Mints quantity tokens and transfers them to to.
   *
   * Requirements:
   *
   * - there must be quantity tokens remaining unminted in the total collection.
   * - to cannot be the zero address.
   * - quantity cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    uint256 startTokenId,
    address to,
    uint256 quantity,
    bool isAdminMint,
    bytes memory _data
  ) internal {
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");

    // For admin mints we do not want to enforce the maxBatchSize limit
    if (isAdminMint == false) {
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
    }

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + (isAdminMint ? 0 : uint128(quantity))
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
      _totalSupply++;
    }

    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers tokenId from from to to.
   *
   * Requirements:
   *
   * - to cannot be the zero address.
   * - tokenId token must be owned by from.
   *
   * Emits a {Transfer} event.
   */
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

    // Clear approvals from the previous owner
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

  /**
   * @dev Approve to to operate on tokenId
   *
   * Emits a {Approval} event.
   */
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0;

//   /**
//    * @dev Explicitly set owners to eliminate loops in future calls of ownerOf().
//    */
//   function _setOwnersExplicit(uint256 quantity) internal {
//     uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
//     require(quantity > 0, "quantity must be nonzero");
//     if (currentIndex == _startTokenId()) revert('No Tokens Minted Yet');

//     uint256 endIndex = oldNextOwnerToSet + quantity - 1;
//     if (endIndex > collectionSize - 1) {
//       endIndex = collectionSize - 1;
//     }
//     // We know if the last one in the group exists, all in the group exist, due to serial ordering.
//     require(_exists(endIndex), "not enough minted yet for this cleanup");
//     for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
//       if (_ownerships[i].addr == address(0)) {
//         TokenOwnership memory ownership = ownershipOf(i);
//         _ownerships[i] = TokenOwnership(
//           ownership.addr,
//           ownership.startTimestamp
//         );
//       }
//     }
//     nextOwnerToExplicitlySet = endIndex + 1;
//   }

  /**
   * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
   * The call is not executed if the target address is not a contract.
   *
   * @param from address representing the previous owner of the given token ID
   * @param to target address that will receive the tokens
   * @param tokenId uint256 ID of the token to be transferred
   * @param _data bytes optional data to send along with the call
   * @return bool whether the call correctly returned the expected magic value
   */
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - When from and to are both non-zero, from's tokenId will be
   * transferred to to.
   * - When from is zero, tokenId will be minted for to.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when from and to are both non-zero.
   * - from and to are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

  
  
interface IERC20 {
  function transfer(address _to, uint256 _amount) external returns (bool);
  function balanceOf(address account) external view returns (uint256);
}



  

  
abstract contract RamppERC721A is 
    Ownable,
    ERC721A,
    ReentrancyGuard  
{
  constructor(
    string memory tokenName,
    string memory tokenSymbol
  ) ERC721A(tokenName, tokenSymbol, 3, 10000) {
      collectionRange[0] = NFTRange(1,3332);
      collectionRange[1] = NFTRange(3333,4444);
      collectionRange[2] = NFTRange(4445,5112);
    currentIndexCollections[0] = 1;
    currentIndexCollections[1] = 3333;
    currentIndexCollections[2] = 4445;

   }
    uint8 public CONTRACT_VERSION = 2;
    string public _baseTokenURI = "ipfs://QmT6S1CNmbLLrH7su16M3mDYNuhurXoqtu42pE7GbduWeM/";

    bool public mintingOpen = false;
    
    /////////////// Admin Mint Functions
    /**
     * @dev Mints a token to an address with a tokenURI.
     * This is owner only and allows a fee-free drop
     * @param _to address of the future owner of the token
     * @param _qty amount of tokens to drop the owner
     */
     function mintToAdminV2(address _to, uint256 _qty,uint8 _type) public onlyOwner{
         require(_qty > 0, "Must mint at least 1 token.");
         require(_type<3,"invalid category");
        require(currentIndexCollections[_type] + (_qty-1) <= collectionRange[_type].end,"All minted");
         _safeMint(currentIndexCollections[_type],_to, _qty, true);
         currentIndexCollections[_type] +=_qty;
     }

  
    /////////////// GENERIC MINT FUNCTIONS
    /**
    * @dev Mints a single token to an address.
    * fee may or may not be required*
    * @param _to address of the future owner of the token
    */
    function mintTo(address _to,uint8 _type) internal {
        require(collectionRange[_type].start>0,"invalid type");
        require(currentIndexCollections[_type] <= collectionRange[_type].end,"All minted");
        _safeMint(currentIndexCollections[_type],_to, 1, false);
        currentIndexCollections[_type] +=1;
    }

    /**
     * @dev Allows owner to set Max mints per tx
     * @param _newMaxMint maximum amount of tokens allowed to mint per tx. Must be >= 1
     */
     function setMaxMint(uint256 _newMaxMint) public onlyOwner {
         require(_newMaxMint >= 1, "Max mint must be at least 1");
         maxBatchSize = _newMaxMint;
     }

  

    function _baseURI() internal view virtual override returns(string memory) {
        return _baseTokenURI;
    }

    function baseTokenURI() public view returns(string memory) {
        return _baseTokenURI;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function getOwnershipData(uint256 tokenId) external view returns(TokenOwnership memory) {
        return ownershipOf(tokenId);
    }


}


  
// File: contracts/HalflingsContract.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HalflingsContractClaim is RamppERC721A,ERC721Holder {
    constructor() RamppERC721A("Adventurous Beasts", "ADVB"){}

    uint256[] private NFTsToStake = [1,3,5];
    uint256[] public timeToStake = [3 days,5 days,7 days];
    uint256[] public maxStakingAvailable = [3332,1111,667];
    uint256[] public nftStakedCount = [0,0,0];

    mapping(uint256=>bool) public claimed;
    IERC721 public HALFLINGSNFT = IERC721(0x5266c5aca260818Be013C80bd9ed5ba0F3D49070);
    event Stake(uint256[] nftIds,uint256 timestamp,uint8 _type);
    event Claim(uint256 nftId,address user);
    struct Deposit{
        uint256 start;
        uint256[] nftIds;
        uint8 forType;
        bool isClaimed;
    }

    struct User{
        Deposit[] deposits;
        uint256 totalClaimed;
    }
    mapping(address=>User) public users;

    function stake(uint256[] calldata _nftId,uint8 _type) external 
    {
        require(_nftId.length==NFTsToStake[_type],"Need more nfts");
        require(nftStakedCount[_type]<maxStakingAvailable[_type],"All nfts claimed");
        require(_type<3,"Invalid collection type");
        for(uint i=0; i < _nftId.length; i++ ) {
            require(!claimed[_nftId[i]] && _nftId[i]>0,"Invalid NFT");
            HALFLINGSNFT.safeTransferFrom(msg.sender,address(this),_nftId[i]);
            claimed[_nftId[i]]=true;
        }
        users[msg.sender].deposits.push(Deposit(
             block.timestamp,
             _nftId,
             _type,
             false
        ));
        nftStakedCount[_type]++;
        emit Stake(_nftId,block.timestamp,_type);
    }

    function claimNFT(uint256 index) external
    {
        Deposit storage dep = users[msg.sender].deposits[index];
        require(!dep.isClaimed,"Allready claimed");
        require(block.timestamp>=(dep.start+(timeToStake[dep.forType])),"Not available");
        emit Claim(currentIndexCollections[dep.forType],msg.sender);
        mintTo(msg.sender,dep.forType);
        for(uint i=0; i < dep.nftIds.length; i++ ) {
         HALFLINGSNFT.safeTransferFrom(address(this),msg.sender,dep.nftIds[i]);
        }
        dep.isClaimed = true;
    }

    function userInfo(address userAddress) external view returns(Deposit[] memory deposits)
    {
        return users[userAddress].deposits;
    }

    function depositeByIndex(address userAddress,uint256 index) external view returns(Deposit memory deposits)
    {
        return users[userAddress].deposits[index];
    }

    function totalStaked(address userAddress) external view returns(uint256 count)
    {
        return users[userAddress].deposits.length;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_type","type":"uint8"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CONTRACT_VERSION","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HALFLINGSNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"claimNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"collectionRange","outputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"currentIndexCollections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"depositeByIndex","outputs":[{"components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"uint8","name":"forType","type":"uint8"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"internalType":"struct HalflingsContractClaim.Deposit","name":"deposits","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getType","outputs":[{"internalType":"uint8","name":"_type","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxStakingAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"mintToAdminV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftStakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_nftId","type":"uint256[]"},{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"stake","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timeToStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"userInfo","outputs":[{"components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"uint8","name":"forType","type":"uint8"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"internalType":"struct HalflingsContractClaim.Deposit[]","name":"deposits","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"stateMutability":"view","type":"function"}]

6000600b55600d805460ff19166002179055610100604052603660a0818152906200353f60c03980516200003c91600e91602090910190620004b1565b50600f805460ff19169055604080516060810182526001815260036020820181905260059282019290925262000076916010919062000540565b50604080516060810182526203f480815262069780602082015262093a8091810191909152620000ab90601190600362000583565b5060408051606081018252610d048152610457602082015261029b91810191909152620000dd906012906003620005c8565b5060408051606081018252600080825260208201819052918101919091526200010b90601390600362000540565b50601580546001600160a01b031916735266c5aca260818be013c80bd9ed5ba0f3d490701790553480156200013f57600080fd5b5060405180604001604052806012815260200171416476656e7475726f75732042656173747360701b8152506040518060400160405280600481526020016320a22b2160e11b81525081816003612710620001a9620001a36200045d60201b60201c565b62000461565b60008111620002165760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620002785760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b60648201526084016200020d565b83516200028d906002906020870190620004b1565b508251620002a3906003906020860190620004b1565b506001918255608052600c819055604080518082018252828152610d0460208083019182526000808052600980835293517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5591517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c5583518085018552610d0580825261115c82840190815287855285845291517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365590517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3755845180860190955261115d8086526113f8868401908152600290945293825293517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35590517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c455600890527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7929092557fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea904155506200066092505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620004bf9062000623565b90600052602060002090601f016020900481019282620004e357600085556200052e565b82601f10620004fe57805160ff19168380011785556200052e565b828001600101855582156200052e579182015b828111156200052e57825182559160200191906001019062000511565b506200053c9291506200060c565b5090565b8280548282559060005260206000209081019282156200052e579160200282015b828111156200052e578251829060ff1690559160200191906001019062000561565b8280548282559060005260206000209081019282156200052e579160200282015b828111156200052e578251829062ffffff16905591602001919060010190620005a4565b8280548282559060005260206000209081019282156200052e579160200282015b828111156200052e578251829061ffff16905591602001919060010190620005e9565b5b808211156200053c57600081556001016200060d565b600181811c908216806200063857607f821691505b602082108114156200065a57634e487b7160e01b600052602260045260246000fd5b50919050565b608051612ec36200067c600039600061045e0152612ec36000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806370a082311161015c578063b88d4fde116100ce578063d7224ba011610087578063d7224ba01461063c578063dbe7e3bd14610645578063e92b4cda14610668578063e985e9c51461067b578063f2fde38b146106b7578063fe5c873a146106ca57600080fd5b8063b88d4fde146105e0578063b8ccd4c2146105f3578063c87b56dd14610606578063cfc86f7b14610619578063d1ca41a914610621578063d547cfb71461063457600080fd5b806395d89b411161012057806395d89b41146105465780639bfd8d611461054e5780639d38e3ae146105775780639f526dfc14610597578063a22cb465146105aa578063a87430ba146105bd57600080fd5b806370a08231146104cc578063715018a6146104df5780638da5cb5b146104e75780638f4bb497146104f85780639231ab2a1461050557600080fd5b80633693b0f5116101f557806342842e0e116101b957806342842e0e1461044657806345c0f533146104595780634f6ccce714610480578063547520fe1461049357806355f804b3146104a65780636352211e146104b957600080fd5b80633693b0f5146103a557806338b90333146103e1578063393c3ba6146104005780633ed6fe76146104135780634036ab781461043357600080fd5b8063150b7a0211610247578063150b7a021461032257806318160ddd1461034e5780631959a0021461035657806323b872dd146103765780632913daa0146103895780632f745c591461039257600080fd5b806301ffc9a7146102845780630396eed3146102ac57806306fdde03146102cd578063081812fc146102e2578063095ea7b31461030d575b600080fd5b6102976102923660046129b0565b6106dd565b60405190151581526020015b60405180910390f35b6102bf6102ba366004612a5c565b61074a565b6040519081526020016102a3565b6102d561076b565b6040516102a39190612c4e565b6102f56102f0366004612a5c565b6107fd565b6040516001600160a01b0390911681526020016102a3565b61032061031b3660046128cf565b61088b565b005b6103356103303660046127b7565b6109a3565b6040516001600160e01b031990911681526020016102a3565b6102bf6109b4565b61036961036436600461272d565b6109c4565b6040516102a39190612b9b565b61032061038436600461277b565b610ac2565b6102bf60015481565b6102bf6103a03660046128cf565b610acd565b6103cc6103b3366004612a75565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016102a3565b600d546103ee9060ff1681565b60405160ff90911681526020016102a3565b6102bf61040e366004612a5c565b610c45565b6102bf610421366004612a75565b60086020526000908152604090205481565b6103ee610441366004612a5c565b610c55565b61032061045436600461277b565b610cbe565b6102bf7f000000000000000000000000000000000000000000000000000000000000000081565b6102bf61048e366004612a5c565b610cd9565b6103206104a1366004612a5c565b610d41565b6103206104b43660046129ea565b610dc1565b6102f56104c7366004612a5c565b610df7565b6102bf6104da36600461272d565b610e09565b610320610e9a565b6000546001600160a01b03166102f5565b600f546102979060ff1681565b610518610513366004612a5c565b610ed0565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102a3565b6102d5610eed565b6102bf61055c36600461272d565b6001600160a01b031660009081526016602052604090205490565b61058a6105853660046128cf565b610efc565b6040516102a39190612ce9565b6103206105a53660046128f9565b610ff7565b6103206105b8366004612893565b61117e565b6102bf6105cb36600461272d565b60166020526000908152604090206001015481565b6103206105ee3660046127b7565b611243565b6102bf610601366004612a5c565b61127c565b6102d5610614366004612a5c565b61128c565b6102d56112ea565b61032061062f366004612935565b611378565b6102d5611778565b6102bf600b5481565b610297610653366004612a5c565b60146020526000908152604090205460ff1681565b6015546102f5906001600160a01b031681565b610297610689366004612748565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6103206106c536600461272d565b611787565b6103206106d8366004612a5c565b611822565b60006001600160e01b031982166380ac58cd60e01b148061070e57506001600160e01b03198216635b5e139f60e01b145b8061072957506001600160e01b0319821663780e9d6360e01b145b8061074457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6012818154811061075a57600080fd5b600091825260209091200154905081565b60606002805461077a90612db5565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690612db5565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600061080882611a5a565b61086f5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089682610df7565b9050806001600160a01b0316836001600160a01b031614156109055760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610866565b336001600160a01b038216148061092157506109218133610689565b6109935760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610866565b61099e838383611aa0565b505050565b630a85bd0160e11b5b949350505050565b60006109bf600a5490565b905090565b6001600160a01b0381166000908152601660209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610ab757838290600052602060002090600302016040518060800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a7857602002820191906000526020600020905b815481526020019060010190808311610a64575b50505091835250506002919091015460ff80821660208085019190915261010090920416151560409092019190915290825260019290920191016109fc565b505050509050919050565b61099e838383611afc565b6000610ad883610e09565b8210610b315760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610866565b6000610b3b6109b4565b905060008060005b83811015610be5576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610b9657805192505b876001600160a01b0316836001600160a01b03161415610bd25786841415610bc45750935061074492505050565b83610bce81612df0565b9450505b5080610bdd81612df0565b915050610b43565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610866565b6011818154811061075a57600080fd5b600060018210158015610c6a5750610d048211155b15610c7757506000919050565b610d058210158015610c8b575061115c8211155b15610c9857506001919050565b61115d8210158015610cac57506113f88211155b15610cb957506002919050565b919050565b61099e83838360405180602001604052806000815250611243565b6000610ce36109b4565b8210610d3d5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610866565b5090565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161086690612c61565b6001811015610dbc5760405162461bcd60e51b815260206004820152601b60248201527f4d6178206d696e74206d757374206265206174206c65617374203100000000006044820152606401610866565b600155565b6000546001600160a01b03163314610deb5760405162461bcd60e51b815260040161086690612c61565b61099e600e8383612635565b6000610e0282611e81565b5192915050565b60006001600160a01b038216610e755760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610866565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161086690612c61565b610ece6000611fe9565b565b604080518082019091526000808252602082015261074482611e81565b60606003805461077a90612db5565b610f2c60405180608001604052806000815260200160608152602001600060ff1681526020016000151581525090565b6001600160a01b0383166000908152601660205260409020805483908110610f5657610f56612e4b565b90600052602060002090600302016040518060800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fc857602002820191906000526020600020905b815481526020019060010190808311610fb4575b50505091835250506002919091015460ff80821660208401526101009091041615156040909101529392505050565b6000546001600160a01b031633146110215760405162461bcd60e51b815260040161086690612c61565b600082116110715760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206174206c65617374203120746f6b656e2e00000000006044820152606401610866565b60038160ff16106110b75760405162461bcd60e51b815260206004820152601060248201526f696e76616c69642063617465676f727960801b6044820152606401610866565b60ff81166000908152600960205260409020600190810154906110da9084612d72565b60ff83166000908152600860205260409020546110f79190612d1e565b11156111325760405162461bcd60e51b815260206004820152600a602482015269105b1b081b5a5b9d195960b21b6044820152606401610866565b60ff81166000908152600860205260409020546111529084846001612039565b60ff811660009081526008602052604081208054849290611174908490612d1e565b9091555050505050565b6001600160a01b0382163314156111d75760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610866565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124e848484611afc565b61125a84848484612055565b6112765760405162461bcd60e51b815260040161086690612c96565b50505050565b6013818154811061075a57600080fd5b60606000611298611778565b905060008151116112b857604051806020016040528060008152506112e3565b806112c28461215f565b6040516020016112d3929190612b2f565b6040516020818303038152906040525b9392505050565b600e80546112f790612db5565b80601f016020809104026020016040519081016040528092919081815260200182805461132390612db5565b80156113705780601f1061134557610100808354040283529160200191611370565b820191906000526020600020905b81548152906001019060200180831161135357829003601f168201915b505050505081565b60108160ff168154811061138e5761138e612e4b565b60009182526020909120015482146113d95760405162461bcd60e51b815260206004820152600e60248201526d4e656564206d6f7265206e66747360901b6044820152606401610866565b60128160ff16815481106113ef576113ef612e4b565b906000526020600020015460138260ff168154811061141057611410612e4b565b90600052602060002001541061145b5760405162461bcd60e51b815260206004820152601060248201526f105b1b081b999d1cc818db185a5b595960821b6044820152606401610866565b60038160ff16106114ae5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420636f6c6c656374696f6e20747970650000000000000000006044820152606401610866565b60005b8281101561163657601460008585848181106114cf576114cf612e4b565b602090810292909201358352508101919091526040016000205460ff161580156115115750600084848381811061150857611508612e4b565b90506020020135115b61154b5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590813919560aa1b6044820152606401610866565b6015546001600160a01b03166342842e0e333087878681811061157057611570612e4b565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156115c757600080fd5b505af11580156115db573d6000803e3d6000fd5b505050506001601460008686858181106115f7576115f7612e4b565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061162e90612df0565b9150506114b1565b5033600090815260166020908152604091829020825160808101845242815283518684028181018501909552868152919390928381019291889188918291850190849080828437600092018290525093855250505060ff85166020808401919091526040909201819052835460018181018655948252908290208351600390920201908155828201518051939491936116d7939285019291909101906126b5565b5060408201516002909101805460609093015115156101000261ffff1990931660ff9283161792909217909155601380549091831690811061171b5761171b612e4b565b6000918252602082200180549161173183612df0565b91905055507f51c7a0e579da28773f4d4c4a22a0c861b7c755357ac17a68918a4f38f651e35b8383428460405161176b9493929190612bfd565b60405180910390a1505050565b6060600e805461077a90612db5565b6000546001600160a01b031633146117b15760405162461bcd60e51b815260040161086690612c61565b6001600160a01b0381166118165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610866565b61181f81611fe9565b50565b33600090815260166020526040812080548390811061184357611843612e4b565b906000526020600020906003020190508060020160019054906101000a900460ff16156118a55760405162461bcd60e51b815260206004820152601060248201526f105b1b1c9958591e4818db185a5b595960821b6044820152606401610866565b600281015460118054909160ff169081106118c2576118c2612e4b565b906000526020600020015481600001546118dc9190612d1e565b42101561191b5760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b6044820152606401610866565b600281015460ff1660009081526008602090815260409182902054825190815233918101919091527f35538759d80c1fd7bb450a0d05601db5a99fa8b5d073a07c847a9fd61029b107910160405180910390a1600281015461198190339060ff1661225d565b60005b6001820154811015611a46576015546001830180546001600160a01b03909216916342842e0e913091339190869081106119c0576119c0612e4b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505050508080611a3e90612df0565b915050611984565b50600201805461ff00191661010017905550565b600080611a6683610c55565b60ff811660009081526009602052604090205490915083108015906112e3575060ff16600090815260086020526040902054909110919050565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611b0782611e81565b80519091506000906001600160a01b0316336001600160a01b03161480611b3e575033611b33846107fd565b6001600160a01b0316145b80611b5057508151611b509033610689565b905080611bba5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610866565b846001600160a01b031682600001516001600160a01b031614611c2e5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610866565b6001600160a01b038416611c925760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610866565b611ca26000848460000151611aa0565b6001600160a01b0385166000908152600560205260408120805460019290611cd49084906001600160801b0316612d4a565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611d2091859116612cfc565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611da8846001612d1e565b6000818152600460205260409020549091506001600160a01b0316611e3857611dd081611a5a565b15611e385760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b6040805180820190915260008082526020820152816000611ea182610c55565b60ff81166000908152600960205260409020549091508210801590611ed7575060ff811660009081526008602052604090205482105b15611f88576000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611f2a57949350505050565b50600019919091016000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915291929115611f8357949350505050565b611f2a565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610866565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112768484848460405180602001604052806000815250612355565b60006001600160a01b0384163b1561215757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612099903390899088908890600401612b5e565b602060405180830381600087803b1580156120b357600080fd5b505af19250505080156120e3575060408051601f3d908101601f191682019092526120e0918101906129cd565b60015b61213d573d808015612111576040519150601f19603f3d011682016040523d82523d6000602084013e612116565b606091505b5080516121355760405162461bcd60e51b815260040161086690612c96565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109ac565b5060016109ac565b6060816121835750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121ad578061219781612df0565b91506121a69050600a83612d36565b9150612187565b60008167ffffffffffffffff8111156121c8576121c8612e61565b6040519080825280601f01601f1916602001820160405280156121f2576020820181803683370190505b5090505b84156109ac57612207600183612d72565b9150612214600a86612e0b565b61221f906030612d1e565b60f81b81838151811061223457612234612e4b565b60200101906001600160f81b031916908160001a905350612256600a86612d36565b94506121f6565b60ff81166000908152600960205260409020546122ab5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207479706560a01b6044820152606401610866565b60ff811660009081526009602090815260408083206001015460089092529091205411156123085760405162461bcd60e51b815260206004820152600a602482015269105b1b081b5a5b9d195960b21b6044820152606401610866565b60ff8116600090815260086020526040812054612329918490600190612039565b60ff8116600090815260086020526040812080546001929061234c908490612d1e565b90915550505050565b6001600160a01b0384166123b55760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610866565b6123be85611a5a565b1561240b5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610866565b8161246d5760015483111561246d5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610866565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906124c9908790612cfc565b6001600160801b03168152602001846124e257856124e5565b60005b83602001516124f49190612cfc565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528c83526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915586905b8581101561262b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125d86000888487612055565b6125f45760405162461bcd60e51b815260040161086690612c96565b816125fe81612df0565b600a8054919450909150600061261383612df0565b9190505550808061262390612df0565b91505061258b565b5050505050505050565b82805461264190612db5565b90600052602060002090601f01602090048101928261266357600085556126a9565b82601f1061267c5782800160ff198235161785556126a9565b828001600101855582156126a9579182015b828111156126a957823582559160200191906001019061268e565b50610d3d9291506126f0565b8280548282559060005260206000209081019282156126a9579160200282015b828111156126a95782518255916020019190600101906126d5565b5b80821115610d3d57600081556001016126f1565b80356001600160a01b0381168114610cb957600080fd5b803560ff81168114610cb957600080fd5b60006020828403121561273f57600080fd5b6112e382612705565b6000806040838503121561275b57600080fd5b61276483612705565b915061277260208401612705565b90509250929050565b60008060006060848603121561279057600080fd5b61279984612705565b92506127a760208501612705565b9150604084013590509250925092565b600080600080608085870312156127cd57600080fd5b6127d685612705565b93506127e460208601612705565b925060408501359150606085013567ffffffffffffffff8082111561280857600080fd5b818701915087601f83011261281c57600080fd5b81358181111561282e5761282e612e61565b604051601f8201601f19908116603f0116810190838211818310171561285657612856612e61565b816040528281528a602084870101111561286f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156128a657600080fd5b6128af83612705565b9150602083013580151581146128c457600080fd5b809150509250929050565b600080604083850312156128e257600080fd5b6128eb83612705565b946020939093013593505050565b60008060006060848603121561290e57600080fd5b61291784612705565b92506020840135915061292c6040850161271c565b90509250925092565b60008060006040848603121561294a57600080fd5b833567ffffffffffffffff8082111561296257600080fd5b818601915086601f83011261297657600080fd5b81358181111561298557600080fd5b8760208260051b850101111561299a57600080fd5b60209283019550935061292c918601905061271c565b6000602082840312156129c257600080fd5b81356112e381612e77565b6000602082840312156129df57600080fd5b81516112e381612e77565b600080602083850312156129fd57600080fd5b823567ffffffffffffffff80821115612a1557600080fd5b818501915085601f830112612a2957600080fd5b813581811115612a3857600080fd5b866020828501011115612a4a57600080fd5b60209290920196919550909350505050565b600060208284031215612a6e57600080fd5b5035919050565b600060208284031215612a8757600080fd5b6112e38261271c565b60008151808452612aa8816020860160208601612d89565b601f01601f19169290920160200192915050565b6000608083018251845260208084015160808287015282815180855260a0880191508383019450600092505b80831015612b085784518252938301936001929092019190830190612ae8565b5060ff60408701511660408801526060860151151560608801528094505050505092915050565b60008351612b41818460208801612d89565b835190830190612b55818360208801612d89565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b9190830184612a90565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612bf057603f19888603018452612bde858351612abc565b94509285019290850190600101612bc2565b5092979650505050505050565b6060808252810184905260006001600160fb1b03851115612c1d57600080fd5b8460051b80876080850137600090830160800190815260208301949094525060ff9190911660409091015292915050565b6020815260006112e36020830184612a90565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020815260006112e36020830184612abc565b60006001600160801b03808316818516808303821115612b5557612b55612e1f565b60008219821115612d3157612d31612e1f565b500190565b600082612d4557612d45612e35565b500490565b60006001600160801b0383811690831681811015612d6a57612d6a612e1f565b039392505050565b600082821015612d8457612d84612e1f565b500390565b60005b83811015612da4578181015183820152602001612d8c565b838111156112765750506000910152565b600181811c90821680612dc957607f821691505b60208210811415612dea57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e0457612e04612e1f565b5060010190565b600082612e1a57612e1a612e35565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461181f57600080fdfea26469706673582212205d680cd5111c550dde45c2230322fbc669a4b0429ac1f90a4dde8057ee882b1264736f6c63430008070033697066733a2f2f516d54365331434e6d624c4c724837737531364d336d44594e75687572586f71747534327045374762647557654d2f

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806370a082311161015c578063b88d4fde116100ce578063d7224ba011610087578063d7224ba01461063c578063dbe7e3bd14610645578063e92b4cda14610668578063e985e9c51461067b578063f2fde38b146106b7578063fe5c873a146106ca57600080fd5b8063b88d4fde146105e0578063b8ccd4c2146105f3578063c87b56dd14610606578063cfc86f7b14610619578063d1ca41a914610621578063d547cfb71461063457600080fd5b806395d89b411161012057806395d89b41146105465780639bfd8d611461054e5780639d38e3ae146105775780639f526dfc14610597578063a22cb465146105aa578063a87430ba146105bd57600080fd5b806370a08231146104cc578063715018a6146104df5780638da5cb5b146104e75780638f4bb497146104f85780639231ab2a1461050557600080fd5b80633693b0f5116101f557806342842e0e116101b957806342842e0e1461044657806345c0f533146104595780634f6ccce714610480578063547520fe1461049357806355f804b3146104a65780636352211e146104b957600080fd5b80633693b0f5146103a557806338b90333146103e1578063393c3ba6146104005780633ed6fe76146104135780634036ab781461043357600080fd5b8063150b7a0211610247578063150b7a021461032257806318160ddd1461034e5780631959a0021461035657806323b872dd146103765780632913daa0146103895780632f745c591461039257600080fd5b806301ffc9a7146102845780630396eed3146102ac57806306fdde03146102cd578063081812fc146102e2578063095ea7b31461030d575b600080fd5b6102976102923660046129b0565b6106dd565b60405190151581526020015b60405180910390f35b6102bf6102ba366004612a5c565b61074a565b6040519081526020016102a3565b6102d561076b565b6040516102a39190612c4e565b6102f56102f0366004612a5c565b6107fd565b6040516001600160a01b0390911681526020016102a3565b61032061031b3660046128cf565b61088b565b005b6103356103303660046127b7565b6109a3565b6040516001600160e01b031990911681526020016102a3565b6102bf6109b4565b61036961036436600461272d565b6109c4565b6040516102a39190612b9b565b61032061038436600461277b565b610ac2565b6102bf60015481565b6102bf6103a03660046128cf565b610acd565b6103cc6103b3366004612a75565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016102a3565b600d546103ee9060ff1681565b60405160ff90911681526020016102a3565b6102bf61040e366004612a5c565b610c45565b6102bf610421366004612a75565b60086020526000908152604090205481565b6103ee610441366004612a5c565b610c55565b61032061045436600461277b565b610cbe565b6102bf7f000000000000000000000000000000000000000000000000000000000000271081565b6102bf61048e366004612a5c565b610cd9565b6103206104a1366004612a5c565b610d41565b6103206104b43660046129ea565b610dc1565b6102f56104c7366004612a5c565b610df7565b6102bf6104da36600461272d565b610e09565b610320610e9a565b6000546001600160a01b03166102f5565b600f546102979060ff1681565b610518610513366004612a5c565b610ed0565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102a3565b6102d5610eed565b6102bf61055c36600461272d565b6001600160a01b031660009081526016602052604090205490565b61058a6105853660046128cf565b610efc565b6040516102a39190612ce9565b6103206105a53660046128f9565b610ff7565b6103206105b8366004612893565b61117e565b6102bf6105cb36600461272d565b60166020526000908152604090206001015481565b6103206105ee3660046127b7565b611243565b6102bf610601366004612a5c565b61127c565b6102d5610614366004612a5c565b61128c565b6102d56112ea565b61032061062f366004612935565b611378565b6102d5611778565b6102bf600b5481565b610297610653366004612a5c565b60146020526000908152604090205460ff1681565b6015546102f5906001600160a01b031681565b610297610689366004612748565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6103206106c536600461272d565b611787565b6103206106d8366004612a5c565b611822565b60006001600160e01b031982166380ac58cd60e01b148061070e57506001600160e01b03198216635b5e139f60e01b145b8061072957506001600160e01b0319821663780e9d6360e01b145b8061074457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6012818154811061075a57600080fd5b600091825260209091200154905081565b60606002805461077a90612db5565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690612db5565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600061080882611a5a565b61086f5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089682610df7565b9050806001600160a01b0316836001600160a01b031614156109055760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610866565b336001600160a01b038216148061092157506109218133610689565b6109935760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610866565b61099e838383611aa0565b505050565b630a85bd0160e11b5b949350505050565b60006109bf600a5490565b905090565b6001600160a01b0381166000908152601660209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610ab757838290600052602060002090600302016040518060800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a7857602002820191906000526020600020905b815481526020019060010190808311610a64575b50505091835250506002919091015460ff80821660208085019190915261010090920416151560409092019190915290825260019290920191016109fc565b505050509050919050565b61099e838383611afc565b6000610ad883610e09565b8210610b315760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610866565b6000610b3b6109b4565b905060008060005b83811015610be5576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610b9657805192505b876001600160a01b0316836001600160a01b03161415610bd25786841415610bc45750935061074492505050565b83610bce81612df0565b9450505b5080610bdd81612df0565b915050610b43565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610866565b6011818154811061075a57600080fd5b600060018210158015610c6a5750610d048211155b15610c7757506000919050565b610d058210158015610c8b575061115c8211155b15610c9857506001919050565b61115d8210158015610cac57506113f88211155b15610cb957506002919050565b919050565b61099e83838360405180602001604052806000815250611243565b6000610ce36109b4565b8210610d3d5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610866565b5090565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161086690612c61565b6001811015610dbc5760405162461bcd60e51b815260206004820152601b60248201527f4d6178206d696e74206d757374206265206174206c65617374203100000000006044820152606401610866565b600155565b6000546001600160a01b03163314610deb5760405162461bcd60e51b815260040161086690612c61565b61099e600e8383612635565b6000610e0282611e81565b5192915050565b60006001600160a01b038216610e755760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610866565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161086690612c61565b610ece6000611fe9565b565b604080518082019091526000808252602082015261074482611e81565b60606003805461077a90612db5565b610f2c60405180608001604052806000815260200160608152602001600060ff1681526020016000151581525090565b6001600160a01b0383166000908152601660205260409020805483908110610f5657610f56612e4b565b90600052602060002090600302016040518060800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fc857602002820191906000526020600020905b815481526020019060010190808311610fb4575b50505091835250506002919091015460ff80821660208401526101009091041615156040909101529392505050565b6000546001600160a01b031633146110215760405162461bcd60e51b815260040161086690612c61565b600082116110715760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206174206c65617374203120746f6b656e2e00000000006044820152606401610866565b60038160ff16106110b75760405162461bcd60e51b815260206004820152601060248201526f696e76616c69642063617465676f727960801b6044820152606401610866565b60ff81166000908152600960205260409020600190810154906110da9084612d72565b60ff83166000908152600860205260409020546110f79190612d1e565b11156111325760405162461bcd60e51b815260206004820152600a602482015269105b1b081b5a5b9d195960b21b6044820152606401610866565b60ff81166000908152600860205260409020546111529084846001612039565b60ff811660009081526008602052604081208054849290611174908490612d1e565b9091555050505050565b6001600160a01b0382163314156111d75760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610866565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124e848484611afc565b61125a84848484612055565b6112765760405162461bcd60e51b815260040161086690612c96565b50505050565b6013818154811061075a57600080fd5b60606000611298611778565b905060008151116112b857604051806020016040528060008152506112e3565b806112c28461215f565b6040516020016112d3929190612b2f565b6040516020818303038152906040525b9392505050565b600e80546112f790612db5565b80601f016020809104026020016040519081016040528092919081815260200182805461132390612db5565b80156113705780601f1061134557610100808354040283529160200191611370565b820191906000526020600020905b81548152906001019060200180831161135357829003601f168201915b505050505081565b60108160ff168154811061138e5761138e612e4b565b60009182526020909120015482146113d95760405162461bcd60e51b815260206004820152600e60248201526d4e656564206d6f7265206e66747360901b6044820152606401610866565b60128160ff16815481106113ef576113ef612e4b565b906000526020600020015460138260ff168154811061141057611410612e4b565b90600052602060002001541061145b5760405162461bcd60e51b815260206004820152601060248201526f105b1b081b999d1cc818db185a5b595960821b6044820152606401610866565b60038160ff16106114ae5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420636f6c6c656374696f6e20747970650000000000000000006044820152606401610866565b60005b8281101561163657601460008585848181106114cf576114cf612e4b565b602090810292909201358352508101919091526040016000205460ff161580156115115750600084848381811061150857611508612e4b565b90506020020135115b61154b5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590813919560aa1b6044820152606401610866565b6015546001600160a01b03166342842e0e333087878681811061157057611570612e4b565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156115c757600080fd5b505af11580156115db573d6000803e3d6000fd5b505050506001601460008686858181106115f7576115f7612e4b565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061162e90612df0565b9150506114b1565b5033600090815260166020908152604091829020825160808101845242815283518684028181018501909552868152919390928381019291889188918291850190849080828437600092018290525093855250505060ff85166020808401919091526040909201819052835460018181018655948252908290208351600390920201908155828201518051939491936116d7939285019291909101906126b5565b5060408201516002909101805460609093015115156101000261ffff1990931660ff9283161792909217909155601380549091831690811061171b5761171b612e4b565b6000918252602082200180549161173183612df0565b91905055507f51c7a0e579da28773f4d4c4a22a0c861b7c755357ac17a68918a4f38f651e35b8383428460405161176b9493929190612bfd565b60405180910390a1505050565b6060600e805461077a90612db5565b6000546001600160a01b031633146117b15760405162461bcd60e51b815260040161086690612c61565b6001600160a01b0381166118165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610866565b61181f81611fe9565b50565b33600090815260166020526040812080548390811061184357611843612e4b565b906000526020600020906003020190508060020160019054906101000a900460ff16156118a55760405162461bcd60e51b815260206004820152601060248201526f105b1b1c9958591e4818db185a5b595960821b6044820152606401610866565b600281015460118054909160ff169081106118c2576118c2612e4b565b906000526020600020015481600001546118dc9190612d1e565b42101561191b5760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b6044820152606401610866565b600281015460ff1660009081526008602090815260409182902054825190815233918101919091527f35538759d80c1fd7bb450a0d05601db5a99fa8b5d073a07c847a9fd61029b107910160405180910390a1600281015461198190339060ff1661225d565b60005b6001820154811015611a46576015546001830180546001600160a01b03909216916342842e0e913091339190869081106119c0576119c0612e4b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505050508080611a3e90612df0565b915050611984565b50600201805461ff00191661010017905550565b600080611a6683610c55565b60ff811660009081526009602052604090205490915083108015906112e3575060ff16600090815260086020526040902054909110919050565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611b0782611e81565b80519091506000906001600160a01b0316336001600160a01b03161480611b3e575033611b33846107fd565b6001600160a01b0316145b80611b5057508151611b509033610689565b905080611bba5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610866565b846001600160a01b031682600001516001600160a01b031614611c2e5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610866565b6001600160a01b038416611c925760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610866565b611ca26000848460000151611aa0565b6001600160a01b0385166000908152600560205260408120805460019290611cd49084906001600160801b0316612d4a565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611d2091859116612cfc565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611da8846001612d1e565b6000818152600460205260409020549091506001600160a01b0316611e3857611dd081611a5a565b15611e385760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b6040805180820190915260008082526020820152816000611ea182610c55565b60ff81166000908152600960205260409020549091508210801590611ed7575060ff811660009081526008602052604090205482105b15611f88576000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611f2a57949350505050565b50600019919091016000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915291929115611f8357949350505050565b611f2a565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610866565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112768484848460405180602001604052806000815250612355565b60006001600160a01b0384163b1561215757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612099903390899088908890600401612b5e565b602060405180830381600087803b1580156120b357600080fd5b505af19250505080156120e3575060408051601f3d908101601f191682019092526120e0918101906129cd565b60015b61213d573d808015612111576040519150601f19603f3d011682016040523d82523d6000602084013e612116565b606091505b5080516121355760405162461bcd60e51b815260040161086690612c96565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109ac565b5060016109ac565b6060816121835750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121ad578061219781612df0565b91506121a69050600a83612d36565b9150612187565b60008167ffffffffffffffff8111156121c8576121c8612e61565b6040519080825280601f01601f1916602001820160405280156121f2576020820181803683370190505b5090505b84156109ac57612207600183612d72565b9150612214600a86612e0b565b61221f906030612d1e565b60f81b81838151811061223457612234612e4b565b60200101906001600160f81b031916908160001a905350612256600a86612d36565b94506121f6565b60ff81166000908152600960205260409020546122ab5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207479706560a01b6044820152606401610866565b60ff811660009081526009602090815260408083206001015460089092529091205411156123085760405162461bcd60e51b815260206004820152600a602482015269105b1b081b5a5b9d195960b21b6044820152606401610866565b60ff8116600090815260086020526040812054612329918490600190612039565b60ff8116600090815260086020526040812080546001929061234c908490612d1e565b90915550505050565b6001600160a01b0384166123b55760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610866565b6123be85611a5a565b1561240b5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610866565b8161246d5760015483111561246d5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610866565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906124c9908790612cfc565b6001600160801b03168152602001846124e257856124e5565b60005b83602001516124f49190612cfc565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528c83526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915586905b8581101561262b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125d86000888487612055565b6125f45760405162461bcd60e51b815260040161086690612c96565b816125fe81612df0565b600a8054919450909150600061261383612df0565b9190505550808061262390612df0565b91505061258b565b5050505050505050565b82805461264190612db5565b90600052602060002090601f01602090048101928261266357600085556126a9565b82601f1061267c5782800160ff198235161785556126a9565b828001600101855582156126a9579182015b828111156126a957823582559160200191906001019061268e565b50610d3d9291506126f0565b8280548282559060005260206000209081019282156126a9579160200282015b828111156126a95782518255916020019190600101906126d5565b5b80821115610d3d57600081556001016126f1565b80356001600160a01b0381168114610cb957600080fd5b803560ff81168114610cb957600080fd5b60006020828403121561273f57600080fd5b6112e382612705565b6000806040838503121561275b57600080fd5b61276483612705565b915061277260208401612705565b90509250929050565b60008060006060848603121561279057600080fd5b61279984612705565b92506127a760208501612705565b9150604084013590509250925092565b600080600080608085870312156127cd57600080fd5b6127d685612705565b93506127e460208601612705565b925060408501359150606085013567ffffffffffffffff8082111561280857600080fd5b818701915087601f83011261281c57600080fd5b81358181111561282e5761282e612e61565b604051601f8201601f19908116603f0116810190838211818310171561285657612856612e61565b816040528281528a602084870101111561286f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156128a657600080fd5b6128af83612705565b9150602083013580151581146128c457600080fd5b809150509250929050565b600080604083850312156128e257600080fd5b6128eb83612705565b946020939093013593505050565b60008060006060848603121561290e57600080fd5b61291784612705565b92506020840135915061292c6040850161271c565b90509250925092565b60008060006040848603121561294a57600080fd5b833567ffffffffffffffff8082111561296257600080fd5b818601915086601f83011261297657600080fd5b81358181111561298557600080fd5b8760208260051b850101111561299a57600080fd5b60209283019550935061292c918601905061271c565b6000602082840312156129c257600080fd5b81356112e381612e77565b6000602082840312156129df57600080fd5b81516112e381612e77565b600080602083850312156129fd57600080fd5b823567ffffffffffffffff80821115612a1557600080fd5b818501915085601f830112612a2957600080fd5b813581811115612a3857600080fd5b866020828501011115612a4a57600080fd5b60209290920196919550909350505050565b600060208284031215612a6e57600080fd5b5035919050565b600060208284031215612a8757600080fd5b6112e38261271c565b60008151808452612aa8816020860160208601612d89565b601f01601f19169290920160200192915050565b6000608083018251845260208084015160808287015282815180855260a0880191508383019450600092505b80831015612b085784518252938301936001929092019190830190612ae8565b5060ff60408701511660408801526060860151151560608801528094505050505092915050565b60008351612b41818460208801612d89565b835190830190612b55818360208801612d89565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b9190830184612a90565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612bf057603f19888603018452612bde858351612abc565b94509285019290850190600101612bc2565b5092979650505050505050565b6060808252810184905260006001600160fb1b03851115612c1d57600080fd5b8460051b80876080850137600090830160800190815260208301949094525060ff9190911660409091015292915050565b6020815260006112e36020830184612a90565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020815260006112e36020830184612abc565b60006001600160801b03808316818516808303821115612b5557612b55612e1f565b60008219821115612d3157612d31612e1f565b500190565b600082612d4557612d45612e35565b500490565b60006001600160801b0383811690831681811015612d6a57612d6a612e1f565b039392505050565b600082821015612d8457612d84612e1f565b500390565b60005b83811015612da4578181015183820152602001612d8c565b838111156112765750506000910152565b600181811c90821680612dc957607f821691505b60208210811415612dea57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e0457612e04612e1f565b5060010190565b600082612e1a57612e1a612e35565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461181f57600080fdfea26469706673582212205d680cd5111c550dde45c2230322fbc669a4b0429ac1f90a4dde8057ee882b1264736f6c63430008070033

Deployed Bytecode Sourcemap

48879:2684:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32500:370;;;;;;:::i;:::-;;:::i;:::-;;;9649:14:1;;9642:22;9624:41;;9612:2;9597:18;32500:370:0;;;;;;;;49119:54;;;;;;:::i;:::-;;:::i;:::-;;;22139:25:1;;;22127:2;22112:18;49119:54:0;21993:177:1;34637:94:0;;;:::i;:::-;;;;;;;:::i;36052:204::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7077:32:1;;;7059:51;;7047:2;7032:18;36052:204:0;6913:203:1;35615:379:0;;;;;;:::i;:::-;;:::i;:::-;;11082:207;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;9838:33:1;;;9820:52;;9808:2;9793:18;11082:207:0;9676:202:1;30864:96:0;;;:::i;51082:146::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36902:142::-;;;;;;:::i;:::-;;:::i;29106:27::-;;;;;;31692:744;;;;;;:::i;:::-;;:::i;29932:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;22628:25:1;;;22684:2;22669:18;;22662:34;;;;22601:18;29932:47:0;22454:248:1;46504:33:0;;;;;;;;;;;;22879:4:1;22867:17;;;22849:36;;22837:2;22822:18;46504:33:0;22707:184:1;49059:53:0;;;;;;:::i;:::-;;:::i;29796:54::-;;;;;;:::i;:::-;;;;;;;;;;;;;;38253:318;;;;;;:::i;:::-;;:::i;37107:157::-;;;;;;:::i;:::-;;:::i;29062:39::-;;;;;31224:177;;;;;;:::i;:::-;;:::i;48099:173::-;;;;;;:::i;:::-;;:::i;48513:106::-;;;;;;:::i;:::-;;:::i;34460:118::-;;;;;;:::i;:::-;;:::i;32926:211::-;;;;;;:::i;:::-;;:::i;27334:103::-;;;:::i;26685:87::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;26685:87;;46639:31;;;;;;;;;48627:134;;;;;;:::i;:::-;;:::i;:::-;;;;21858:13:1;;-1:-1:-1;;;;;21854:39:1;21836:58;;21954:4;21942:17;;;21936:24;21962:18;21932:49;21910:20;;;21903:79;;;;21809:18;48627:134:0;21628:360:1;34792:98:0;;;:::i;51416:144::-;;;;;;:::i;:::-;-1:-1:-1;;;;;51518:18:0;51480:13;51518:18;;;:5;:18;;;;;:34;;51416:144;51236:172;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46971:416::-;;;;;;:::i;:::-;;:::i;36320:274::-;;;;;;:::i;:::-;;:::i;49689:35::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37327:311;;;;;;:::i;:::-;;:::i;49180:41::-;;;;;;:::i;:::-;;:::i;34953:288::-;;;;;;:::i;:::-;;:::i;46544:86::-;;;:::i;49733:780::-;;;;;;:::i;:::-;;:::i;48407:98::-;;;:::i;42337:43::-;;;;;;49230:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;49274:81;;;;;-1:-1:-1;;;;;49274:81:0;;;36657:186;;;;;;:::i;:::-;-1:-1:-1;;;;;36802:25:0;;;36779:4;36802:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;36657:186;27590:201;;;;;;:::i;:::-;;:::i;50521:553::-;;;;;;:::i;:::-;;:::i;32500:370::-;32627:4;-1:-1:-1;;;;;;32657:40:0;;-1:-1:-1;;;32657:40:0;;:99;;-1:-1:-1;;;;;;;32708:48:0;;-1:-1:-1;;;32708:48:0;32657:99;:160;;;-1:-1:-1;;;;;;;32767:50:0;;-1:-1:-1;;;32767:50:0;32657:160;:207;;;-1:-1:-1;;;;;;;;;;13179:40:0;;;32828:36;32643:221;32500:370;-1:-1:-1;;32500:370:0:o;49119:54::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49119:54:0;:::o;34637:94::-;34691:13;34720:5;34713:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34637:94;:::o;36052:204::-;36120:7;36144:16;36152:7;36144;:16::i;:::-;36136:74;;;;-1:-1:-1;;;36136:74:0;;20750:2:1;36136:74:0;;;20732:21:1;20789:2;20769:18;;;20762:30;20828:34;20808:18;;;20801:62;-1:-1:-1;;;20879:18:1;;;20872:43;20932:19;;36136:74:0;;;;;;;;;-1:-1:-1;36226:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36226:24:0;;36052:204::o;35615:379::-;35684:13;35700:24;35716:7;35700:15;:24::i;:::-;35684:40;;35745:5;-1:-1:-1;;;;;35739:11:0;:2;-1:-1:-1;;;;;35739:11:0;;;35731:58;;;;-1:-1:-1;;;35731:58:0;;17648:2:1;35731:58:0;;;17630:21:1;17687:2;17667:18;;;17660:30;17726:34;17706:18;;;17699:62;-1:-1:-1;;;17777:18:1;;;17770:32;17819:19;;35731:58:0;17446:398:1;35731:58:0;25491:10;-1:-1:-1;;;;;35814:21:0;;;;:62;;-1:-1:-1;35839:37:0;35856:5;25491:10;36657:186;:::i;35839:37::-;35798:153;;;;-1:-1:-1;;;35798:153:0;;14241:2:1;35798:153:0;;;14223:21:1;14280:2;14260:18;;;14253:30;14319:34;14299:18;;;14292:62;14390:27;14370:18;;;14363:55;14435:19;;35798:153:0;14039:421:1;35798:153:0;35960:28;35969:2;35973:7;35982:5;35960:8;:28::i;:::-;35677:317;35615:379;;:::o;11082:207::-;-1:-1:-1;;;11082:207:0;;;;;;;:::o;30864:96::-;30917:7;30940:14;31130:12;;;31041:114;30940:14;30933:21;;30864:96;:::o;51082:146::-;-1:-1:-1;;;;;51193:18:0;;;;;;:5;:18;;;;;;;;51186:34;;;;;;;;;;;;;;;;;51143:25;;51186:34;;51193:18;;51186:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51186:34:0;;;-1:-1:-1;;51186:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51082:146;;;:::o;36902:142::-;37010:28;37020:4;37026:2;37030:7;37010:9;:28::i;31692:744::-;31801:7;31836:16;31846:5;31836:9;:16::i;:::-;31828:5;:24;31820:71;;;;-1:-1:-1;;;31820:71:0;;10532:2:1;31820:71:0;;;10514:21:1;10571:2;10551:18;;;10544:30;10610:34;10590:18;;;10583:62;-1:-1:-1;;;10661:18:1;;;10654:32;10703:19;;31820:71:0;10330:398:1;31820:71:0;31898:22;31923:13;:11;:13::i;:::-;31898:38;;31943:19;31973:25;32023:9;32018:350;32042:14;32038:1;:18;32018:350;;;32072:31;32106:14;;;:11;:14;;;;;;;;;32072:48;;;;;;;;;-1:-1:-1;;;;;32072:48:0;;;;;-1:-1:-1;;;32072:48:0;;;;;;;;;;;;32133:28;32129:89;;32194:14;;;-1:-1:-1;32129:89:0;32251:5;-1:-1:-1;;;;;32230:26:0;:17;-1:-1:-1;;;;;32230:26:0;;32226:135;;;32288:5;32273:11;:20;32269:59;;;-1:-1:-1;32315:1:0;-1:-1:-1;32308:8:0;;-1:-1:-1;;;32308:8:0;32269:59;32338:13;;;;:::i;:::-;;;;32226:135;-1:-1:-1;32058:3:0;;;;:::i;:::-;;;;32018:350;;;-1:-1:-1;32374:56:0;;-1:-1:-1;;;32374:56:0;;19574:2:1;32374:56:0;;;19556:21:1;19613:2;19593:18;;;19586:30;19652:34;19632:18;;;19625:62;-1:-1:-1;;;19703:18:1;;;19696:44;19757:19;;32374:56:0;19372:410:1;49059:53:0;;;;;;;;;;;;38253:318;38307:11;38344:1;38335:7;:10;;:27;;;;;38358:4;38349:7;:13;;38335:27;38332:234;;;-1:-1:-1;38391:1:0;;38253:318;-1:-1:-1;38253:318:0:o;38332:234::-;38427:4;38418:7;:13;;:30;;;;;38444:4;38435:7;:13;;38418:30;38415:151;;;-1:-1:-1;38477:1:0;;38253:318;-1:-1:-1;38253:318:0:o;38415:151::-;38505:4;38496:7;:13;;:30;;;;;38522:4;38513:7;:13;;38496:30;38493:73;;;-1:-1:-1;38555:1:0;;38253:318;-1:-1:-1;38253:318:0:o;38493:73::-;38253:318;;;:::o;37107:157::-;37219:39;37236:4;37242:2;37246:7;37219:39;;;;;;;;;;;;:16;:39::i;31224:177::-;31291:7;31323:13;:11;:13::i;:::-;31315:5;:21;31307:69;;;;-1:-1:-1;;;31307:69:0;;13075:2:1;31307:69:0;;;13057:21:1;13114:2;13094:18;;;13087:30;13153:34;13133:18;;;13126:62;-1:-1:-1;;;13204:18:1;;;13197:33;13247:19;;31307:69:0;12873:399:1;31307:69:0;-1:-1:-1;31390:5:0;31224:177::o;48099:173::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;25491:10;26905:23;26897:68;;;;-1:-1:-1;;;26897:68:0;;;;;;;:::i;:::-;48192:1:::1;48177:11;:16;;48169:56;;;::::0;-1:-1:-1;;;48169:56:0;;10935:2:1;48169:56:0::1;::::0;::::1;10917:21:1::0;10974:2;10954:18;;;10947:30;11013:29;10993:18;;;10986:57;11060:18;;48169:56:0::1;10733:351:1::0;48169:56:0::1;48237:12;:26:::0;48099:173::o;48513:106::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;25491:10;26905:23;26897:68;;;;-1:-1:-1;;;26897:68:0;;;;;;;:::i;:::-;48588:23:::1;:13;48604:7:::0;;48588:23:::1;:::i;34460:118::-:0;34524:7;34547:20;34559:7;34547:11;:20::i;:::-;:25;;34460:118;-1:-1:-1;;34460:118:0:o;32926:211::-;32990:7;-1:-1:-1;;;;;33014:19:0;;33006:75;;;;-1:-1:-1;;;33006:75:0;;15007:2:1;33006:75:0;;;14989:21:1;15046:2;15026:18;;;15019:30;15085:34;15065:18;;;15058:62;-1:-1:-1;;;15136:18:1;;;15129:41;15187:19;;33006:75:0;14805:407:1;33006:75:0;-1:-1:-1;;;;;;33103:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;33103:27:0;;32926:211::o;27334:103::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;25491:10;26905:23;26897:68;;;;-1:-1:-1;;;26897:68:0;;;;;;;:::i;:::-;27399:30:::1;27426:1;27399:18;:30::i;:::-;27334:103::o:0;48627:134::-;-1:-1:-1;;;;;;;;;;;;;;;;;48733:20:0;48745:7;48733:11;:20::i;34792:98::-;34848:13;34877:7;34870:14;;;;;:::i;51236:172::-;51318:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51318:23:0;-1:-1:-1;;;;;51366:18:0;;;;;;:5;:18;;;;;:34;;51394:5;;51366:34;;;;;;:::i;:::-;;;;;;;;;;;51359:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51359:41:0;;;-1:-1:-1;;51359:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;51236:172;-1:-1:-1;;;51236:172:0:o;46971:416::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;25491:10;26905:23;26897:68;;;;-1:-1:-1;;;26897:68:0;;;;;;;:::i;:::-;47076:1:::1;47069:4;:8;47061:48;;;::::0;-1:-1:-1;;;47061:48:0;;13479:2:1;47061:48:0::1;::::0;::::1;13461:21:1::0;13518:2;13498:18;;;13491:30;13557:29;13537:18;;;13530:57;13604:18;;47061:48:0::1;13277:351:1::0;47061:48:0::1;47135:1;47129:5;:7;;;47121:35;;;::::0;-1:-1:-1;;;47121:35:0;;11291:2:1;47121:35:0::1;::::0;::::1;11273:21:1::0;11330:2;11310:18;;;11303:30;-1:-1:-1;;;11349:18:1;;;11342:46;11405:18;;47121:35:0::1;11089:340:1::0;47121:35:0::1;47220:22;::::0;::::1;;::::0;;;:15:::1;:22;::::0;;;;:26:::1;::::0;;::::1;::::0;;47209:6:::1;::::0;:4;:6:::1;:::i;:::-;47175:30;::::0;::::1;;::::0;;;:23:::1;:30;::::0;;;;;:41:::1;::::0;;::::1;:::i;:::-;:71;;47167:93;;;::::0;-1:-1:-1;;;47167:93:0;;11636:2:1;47167:93:0::1;::::0;::::1;11618:21:1::0;11675:2;11655:18;;;11648:30;-1:-1:-1;;;11694:18:1;;;11687:40;11744:18;;47167:93:0::1;11434:334:1::0;47167:93:0::1;47282:30;::::0;::::1;;::::0;;;:23:::1;:30;::::0;;;;;47272:57:::1;::::0;47313:3;47318:4;47324::::1;47272:9;:57::i;:::-;47341:30;::::0;::::1;;::::0;;;:23:::1;:30;::::0;;;;:37;;47374:4;;47341:30;:37:::1;::::0;47374:4;;47341:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;46971:416:0:o;36320:274::-;-1:-1:-1;;;;;36411:24:0;;25491:10;36411:24;;36403:63;;;;-1:-1:-1;;;36403:63:0;;16532:2:1;36403:63:0;;;16514:21:1;16571:2;16551:18;;;16544:30;16610:28;16590:18;;;16583:56;16656:18;;36403:63:0;16330:350:1;36403:63:0;25491:10;36475:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;36475:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;36475:53:0;;;;;;;;;;36540:48;;9624:41:1;;;36475:42:0;;25491:10;36540:48;;9597:18:1;36540:48:0;;;;;;;36320:274;;:::o;37327:311::-;37464:28;37474:4;37480:2;37484:7;37464:9;:28::i;:::-;37515:48;37538:4;37544:2;37548:7;37557:5;37515:22;:48::i;:::-;37499:133;;;;-1:-1:-1;;;37499:133:0;;;;;;;:::i;:::-;37327:311;;;;:::o;49180:41::-;;;;;;;;;;;;34953:288;35051:13;35076:21;35100:10;:8;:10::i;:::-;35076:34;;35155:1;35137:7;35131:21;:25;:104;;;;;;;;;;;;;;;;;35192:7;35201:18;:7;:16;:18::i;:::-;35175:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35131:104;35117:118;34953:288;-1:-1:-1;;;34953:288:0:o;46544:86::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49733:780::-;49836:11;49848:5;49836:18;;;;;;;;;;:::i;:::-;;;;;;;;;;;49821:33;;49813:59;;;;-1:-1:-1;;;49813:59:0;;19231:2:1;49813:59:0;;;19213:21:1;19270:2;19250:18;;;19243:30;-1:-1:-1;;;19289:18:1;;;19282:44;19343:18;;49813:59:0;19029:338:1;49813:59:0;49913:19;49933:5;49913:26;;;;;;;;;;:::i;:::-;;;;;;;;;49891:14;49906:5;49891:21;;;;;;;;;;:::i;:::-;;;;;;;;;:48;49883:76;;;;-1:-1:-1;;;49883:76:0;;15419:2:1;49883:76:0;;;15401:21:1;15458:2;15438:18;;;15431:30;-1:-1:-1;;;15477:18:1;;;15470:46;15533:18;;49883:76:0;15217:340:1;49883:76:0;49984:1;49978:5;:7;;;49970:42;;;;-1:-1:-1;;;49970:42:0;;12723:2:1;49970:42:0;;;12705:21:1;12762:2;12742:18;;;12735:30;12801:25;12781:18;;;12774:53;12844:18;;49970:42:0;12521:347:1;49970:42:0;50027:6;50023:241;50037:17;;;50023:241;;;50086:7;:18;50094:6;;50101:1;50094:9;;;;;;;:::i;:::-;;;;;;;;;;50086:18;;-1:-1:-1;50086:18:0;;;;;;;;-1:-1:-1;50086:18:0;;;;50085:19;:34;;;;;50118:1;50108:6;;50115:1;50108:9;;;;;;;:::i;:::-;;;;;;;:11;50085:34;50077:57;;;;-1:-1:-1;;;50077:57:0;;14667:2:1;50077:57:0;;;14649:21:1;14706:2;14686:18;;;14679:30;-1:-1:-1;;;14725:18:1;;;14718:41;14776:18;;50077:57:0;14465:335:1;50077:57:0;50149:12;;-1:-1:-1;;;;;50149:12:0;:29;50179:10;50198:4;50204:6;;50211:1;50204:9;;;;;;;:::i;:::-;50149:65;;-1:-1:-1;;;;;;50149:65:0;;;;;;;-1:-1:-1;;;;;7379:15:1;;;50149:65:0;;;7361:34:1;7431:15;;;;7411:18;;;7404:43;-1:-1:-1;50204:9:0;;;;;;7463:18:1;;;7456:34;7296:18;;50149:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50248:4;50229:7;:18;50237:6;;50244:1;50237:9;;;;;;;:::i;:::-;;;;;;;50229:18;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;50056:3;;;;;:::i;:::-;;;;50023:241;;;-1:-1:-1;50280:10:0;50274:17;;;;:5;:17;;;;;;;;;50306:113;;;;;;;50329:15;50306:113;;;;;;;;;;;;;;;;;;50274:17;;50306:113;;;;;;;50360:6;;;;;;50306:113;;;50360:6;;50306:113;50360:6;50306:113;;;;;;;;-1:-1:-1;50306:113:0;;;-1:-1:-1;;;50306:113:0;;;;;;;;;;;;;;;;;;50274:146;;50306:113;50274:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50274:146:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50274:146:0;;;;;;;;;;;;;;;50431:14;:21;;:14;;:21;;;;;;;;;:::i;:::-;;;;;;;;;:23;;;;;;:::i;:::-;;;;;;50470:35;50476:6;;50483:15;50499:5;50470:35;;;;;;;;;:::i;:::-;;;;;;;;49733:780;;;:::o;48407:98::-;48451:13;48484;48477:20;;;;;:::i;27590:201::-;26731:7;26758:6;-1:-1:-1;;;;;26758:6:0;25491:10;26905:23;26897:68;;;;-1:-1:-1;;;26897:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27679:22:0;::::1;27671:73;;;::::0;-1:-1:-1;;;27671:73:0;;11975:2:1;27671:73:0::1;::::0;::::1;11957:21:1::0;12014:2;11994:18;;;11987:30;12053:34;12033:18;;;12026:62;-1:-1:-1;;;12104:18:1;;;12097:36;12150:19;;27671:73:0::1;11773:402:1::0;27671:73:0::1;27755:28;27774:8;27755:18;:28::i;:::-;27590:201:::0;:::o;50521:553::-;50607:10;50579:19;50601:17;;;:5;:17;;;;;:33;;50628:5;;50601:33;;;;;;:::i;:::-;;;;;;;;;;;50579:55;;50654:3;:13;;;;;;;;;;;;50653:14;50645:42;;;;-1:-1:-1;;;50645:42:0;;20405:2:1;50645:42:0;;;20387:21:1;20444:2;20424:18;;;20417:30;-1:-1:-1;;;20463:18:1;;;20456:46;20519:18;;50645:42:0;20203:340:1;50645:42:0;50747:11;;;;50735;:24;;:11;;50747;;;50735:24;;;;;;:::i;:::-;;;;;;;;;50724:3;:9;;;:36;;;;:::i;:::-;50706:15;:55;;50698:80;;;;-1:-1:-1;;;50698:80:0;;17306:2:1;50698:80:0;;;17288:21:1;17345:2;17325:18;;;17318:30;-1:-1:-1;;;17364:18:1;;;17357:43;17417:18;;50698:80:0;17104:337:1;50698:80:0;50824:11;;;;;;50800:36;;;;:23;:36;;;;;;;;;;50794:54;;22349:25:1;;;50837:10:0;22390:18:1;;;22383:60;;;;50794:54:0;;22322:18:1;50794:54:0;;;;;;;50877:11;;;;50859:30;;50866:10;;50877:11;;50859:6;:30::i;:::-;50904:6;50900:136;50918:10;;;:17;50914:21;;50900:136;;;50955:12;;;51010:10;;:13;;-1:-1:-1;;;;;50955:12:0;;;;:29;;50993:4;;50999:10;;51010;51021:1;;51010:13;;;;;;:::i;:::-;;;;;;;;;;;50955:69;;-1:-1:-1;;;;;;50955:69:0;;;;;;;-1:-1:-1;;;;;7379:15:1;;;50955:69:0;;;7361:34:1;7431:15;;;;7411:18;;;7404:43;7463:18;;;7456:34;7296:18;;50955:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50937:3;;;;;:::i;:::-;;;;50900:136;;;-1:-1:-1;51046:13:0;;:20;;-1:-1:-1;;51046:20:0;;;;;-1:-1:-1;50521:553:0:o;37873:205::-;37930:4;37945:11;37959:16;37967:7;37959;:16::i;:::-;37989:22;;;;;;;:15;:22;;;;;:28;37945:30;;-1:-1:-1;37989:39:0;-1:-1:-1;37989:39:0;;;:83;;-1:-1:-1;38042:30:0;;;;;;:23;:30;;;;;;38032:40;;;;37982:90;-1:-1:-1;37873:205:0:o;42159:172::-;42256:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;42256:29:0;-1:-1:-1;;;;;42256:29:0;;;;;;;;;42297:28;;42256:24;;42297:28;;;;;;;42159:172;;;:::o;40528:1529::-;40625:35;40663:20;40675:7;40663:11;:20::i;:::-;40734:18;;40625:58;;-1:-1:-1;40692:22:0;;-1:-1:-1;;;;;40718:34:0;25491:10;-1:-1:-1;;;;;40718:34:0;;:81;;;-1:-1:-1;25491:10:0;40763:20;40775:7;40763:11;:20::i;:::-;-1:-1:-1;;;;;40763:36:0;;40718:81;:142;;;-1:-1:-1;40827:18:0;;40810:50;;25491:10;36657:186;:::i;40810:50::-;40692:169;;40886:17;40870:101;;;;-1:-1:-1;;;40870:101:0;;16887:2:1;40870:101:0;;;16869:21:1;16926:2;16906:18;;;16899:30;16965:34;16945:18;;;16938:62;-1:-1:-1;;;17016:18:1;;;17009:48;17074:19;;40870:101:0;16685:414:1;40870:101:0;41018:4;-1:-1:-1;;;;;40996:26:0;:13;:18;;;-1:-1:-1;;;;;40996:26:0;;40980:98;;;;-1:-1:-1;;;40980:98:0;;15764:2:1;40980:98:0;;;15746:21:1;15803:2;15783:18;;;15776:30;15842:34;15822:18;;;15815:62;-1:-1:-1;;;15893:18:1;;;15886:36;15939:19;;40980:98:0;15562:402:1;40980:98:0;-1:-1:-1;;;;;41093:16:0;;41085:66;;;;-1:-1:-1;;;41085:66:0;;13835:2:1;41085:66:0;;;13817:21:1;13874:2;13854:18;;;13847:30;13913:34;13893:18;;;13886:62;-1:-1:-1;;;13964:18:1;;;13957:35;14009:19;;41085:66:0;13633:401:1;41085:66:0;41260:49;41277:1;41281:7;41290:13;:18;;;41260:8;:49::i;:::-;-1:-1:-1;;;;;41318:18:0;;;;;;:12;:18;;;;;:31;;41348:1;;41318:18;:31;;41348:1;;-1:-1:-1;;;;;41318:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;41318:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41356:16:0;;-1:-1:-1;41356:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;41356:16:0;;:29;;-1:-1:-1;;41356:29:0;;:::i;:::-;;;-1:-1:-1;;;;;41356:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41415:43:0;;;;;;;;-1:-1:-1;;;;;41415:43:0;;;;;;41441:15;41415:43;;;;;;;;;-1:-1:-1;41392:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;41392:66:0;-1:-1:-1;;;;;;41392:66:0;;;;;;;;;;;41708:11;41404:7;-1:-1:-1;41708:11:0;:::i;:::-;41771:1;41730:24;;;:11;:24;;;;;:29;41686:33;;-1:-1:-1;;;;;;41730:29:0;41726:236;;41788:20;41796:11;41788:7;:20::i;:::-;41784:171;;;41848:97;;;;;;;;41875:18;;-1:-1:-1;;;;;41848:97:0;;;;;;41906:28;;;;41848:97;;;;;;;;;;-1:-1:-1;41821:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;41821:124:0;-1:-1:-1;;;;;;41821:124:0;;;;;;;;;;;;41784:171;41994:7;41990:2;-1:-1:-1;;;;;41975:27:0;41984:4;-1:-1:-1;;;;;41975:27:0;;;;;;;;;;;40618:1439;;;40528:1529;;;:::o;33389:1017::-;-1:-1:-1;;;;;;;;;;;;;;;;;33513:7:0;33498:12;33564:16;33513:7;33564;:16::i;:::-;33595:22;;;;;;;:15;:22;;;;;:28;33550:30;;-1:-1:-1;33595:36:0;-1:-1:-1;33595:36:0;;;:77;;-1:-1:-1;33642:30:0;;;;;;;:23;:30;;;;;;33635:37;;33595:77;33591:737;;;33689:31;33723:17;;;:11;:17;;;;;;;;;33689:51;;;;;;;;;-1:-1:-1;;;;;33689:51:0;;;;;-1:-1:-1;;;33689:51:0;;;;;;;;;;;;33759:28;33755:85;;33815:9;33389:1017;-1:-1:-1;;;;33389:1017:0:o;33755:85::-;-1:-1:-1;;;34136:6:0;;;;34173:17;;;;:11;:17;;;;;;;;;34161:29;;;;;;;;;-1:-1:-1;;;;;34161:29:0;;;;;-1:-1:-1;;;34161:29:0;;;;;;;;;;;;34136:6;;;34213:28;34209:93;;34273:9;33389:1017;-1:-1:-1;;;;33389:1017:0:o;34209:93::-;34104:213;;33591:737;-1:-1:-1;34343:57:0;;-1:-1:-1;;;34343:57:0;;19989:2:1;34343:57:0;;;19971:21:1;20028:2;20008:18;;;20001:30;20067:34;20047:18;;;20040:62;-1:-1:-1;;;20118:18:1;;;20111:45;20173:19;;34343:57:0;19787:411:1;27949:191:0;28023:16;28042:6;;-1:-1:-1;;;;;28059:17:0;;;-1:-1:-1;;;;;;28059:17:0;;;;;;28092:40;;28042:6;;;;;;;28092:40;;28023:16;28092:40;28012:128;27949:191;:::o;38084:163::-;38188:53;38198:12;38211:2;38215:8;38225:11;38188:53;;;;;;;;;;;;:9;:53::i;44020:690::-;44157:4;-1:-1:-1;;;;;44174:13:0;;2633:19;:23;44170:535;;44213:72;;-1:-1:-1;;;44213:72:0;;-1:-1:-1;;;;;44213:36:0;;;;;:72;;25491:10;;44264:4;;44270:7;;44279:5;;44213:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44213:72:0;;;;;;;;-1:-1:-1;;44213:72:0;;;;;;;;;;;;:::i;:::-;;;44200:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44444:13:0;;44440:215;;44477:61;;-1:-1:-1;;;44477:61:0;;;;;;;:::i;44440:215::-;44623:6;44617:13;44608:6;44604:2;44600:15;44593:38;44200:464;-1:-1:-1;;;;;;44335:55:0;-1:-1:-1;;;44335:55:0;;-1:-1:-1;44328:62:0;;44170:535;-1:-1:-1;44693:4:0;44686:11;;20242:723;20298:13;20519:10;20515:53;;-1:-1:-1;;20546:10:0;;;;;;;;;;;;-1:-1:-1;;;20546:10:0;;;;;20242:723::o;20515:53::-;20593:5;20578:12;20634:78;20641:9;;20634:78;;20667:8;;;;:::i;:::-;;-1:-1:-1;20690:10:0;;-1:-1:-1;20698:2:0;20690:10;;:::i;:::-;;;20634:78;;;20722:19;20754:6;20744:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20744:17:0;;20722:39;;20772:154;20779:10;;20772:154;;20806:11;20816:1;20806:11;;:::i;:::-;;-1:-1:-1;20875:10:0;20883:2;20875:5;:10;:::i;:::-;20862:24;;:2;:24;:::i;:::-;20849:39;;20832:6;20839;20832:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;20832:56:0;;;;;;;;-1:-1:-1;20903:11:0;20912:2;20903:11;;:::i;:::-;;;20772:154;;47606:327;47675:22;;;47704:1;47675:22;;;:15;:22;;;;;:28;47667:54;;;;-1:-1:-1;;;47667:54:0;;12382:2:1;47667:54:0;;;12364:21:1;12421:2;12401:18;;;12394:30;-1:-1:-1;;;12440:18:1;;;12433:42;12492:18;;47667:54:0;12180:336:1;47667:54:0;47774:22;;;;;;;:15;:22;;;;;;;;:26;;;47740:23;:30;;;;;;;:60;;47732:82;;;;-1:-1:-1;;;47732:82:0;;11636:2:1;47732:82:0;;;11618:21:1;11675:2;11655:18;;;11648:30;-1:-1:-1;;;11694:18:1;;;11687:40;11744:18;;47732:82:0;11434:334:1;47732:82:0;47835:30;;;;;;;:23;:30;;;;;;47825:55;;47866:3;;47871:1;;47825:9;:55::i;:::-;47891:30;;;;;;;:23;:30;;;;;:34;;47924:1;;47891:30;:34;;47924:1;;47891:34;:::i;:::-;;;;-1:-1:-1;;;;47606:327:0:o;38900:1408::-;-1:-1:-1;;;;;39063:16:0;;39055:62;;;;-1:-1:-1;;;39055:62:0;;18829:2:1;39055:62:0;;;18811:21:1;18868:2;18848:18;;;18841:30;18907:34;18887:18;;;18880:62;-1:-1:-1;;;18958:18:1;;;18951:31;18999:19;;39055:62:0;18627:397:1;39055:62:0;39254:21;39262:12;39254:7;:21::i;:::-;39253:22;39245:64;;;;-1:-1:-1;;;39245:64:0;;18471:2:1;39245:64:0;;;18453:21:1;18510:2;18490:18;;;18483:30;18549:31;18529:18;;;18522:59;18598:18;;39245:64:0;18269:353:1;39245:64:0;39395:20;39391:116;;39448:12;;39436:8;:24;;39428:71;;;;-1:-1:-1;;;39428:71:0;;21164:2:1;39428:71:0;;;21146:21:1;21203:2;21183:18;;;21176:30;21242:34;21222:18;;;21215:62;-1:-1:-1;;;21293:18:1;;;21286:32;21335:19;;39428:71:0;20962:398:1;39428:71:0;-1:-1:-1;;;;;39618:16:0;;39585:30;39618:16;;;:12;:16;;;;;;;;;39585:49;;;;;;;;;-1:-1:-1;;;;;39585:49:0;;;;;-1:-1:-1;;;39585:49:0;;;;;;;;;;;39660:139;;;;;;;;39680:19;;39585:49;;39660:139;;;39680:39;;39710:8;;39680:39;:::i;:::-;-1:-1:-1;;;;;39660:139:0;;;;;39756:11;:35;;39782:8;39756:35;;;39770:1;39756:35;39728:11;:24;;;:64;;;;:::i;:::-;-1:-1:-1;;;;;39660:139:0;;;;;;-1:-1:-1;;;;;39641:16:0;;;;;;;:12;:16;;;;;;;;:158;;;;;;;;-1:-1:-1;;;39641:158:0;;;;;;;;;;;;39834:43;;;;;;;;;;;39860:15;39834:43;;;;;;;;39806:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;39806:71:0;-1:-1:-1;;;;;;39806:71:0;;;;;;;;;;;;;;;;;;39818:12;;39930:304;39954:8;39950:1;:12;39930:304;;;39983:38;;40008:12;;-1:-1:-1;;;;;39983:38:0;;;40000:1;;39983:38;;40000:1;;39983:38;40048:59;40079:1;40083:2;40087:12;40101:5;40048:22;:59::i;:::-;40030:150;;;;-1:-1:-1;;;40030:150:0;;;;;;;:::i;:::-;40189:14;;;;:::i;:::-;40212:12;:14;;40189;;-1:-1:-1;40212:14:0;;-1:-1:-1;40212:12:0;:14;;;:::i;:::-;;;;;;39964:3;;;;;:::i;:::-;;;;39930:304;;;;39048:1260;;38900:1408;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:156;258:20;;318:4;307:16;;297:27;;287:55;;338:1;335;328:12;353:186;412:6;465:2;453:9;444:7;440:23;436:32;433:52;;;481:1;478;471:12;433:52;504:29;523:9;504:29;:::i;544:260::-;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;712:29;731:9;712:29;:::i;:::-;702:39;;760:38;794:2;783:9;779:18;760:38;:::i;:::-;750:48;;544:260;;;;;:::o;809:328::-;886:6;894;902;955:2;943:9;934:7;930:23;926:32;923:52;;;971:1;968;961:12;923:52;994:29;1013:9;994:29;:::i;:::-;984:39;;1042:38;1076:2;1065:9;1061:18;1042:38;:::i;:::-;1032:48;;1127:2;1116:9;1112:18;1099:32;1089:42;;809:328;;;;;:::o;1142:1138::-;1237:6;1245;1253;1261;1314:3;1302:9;1293:7;1289:23;1285:33;1282:53;;;1331:1;1328;1321:12;1282:53;1354:29;1373:9;1354:29;:::i;:::-;1344:39;;1402:38;1436:2;1425:9;1421:18;1402:38;:::i;:::-;1392:48;;1487:2;1476:9;1472:18;1459:32;1449:42;;1542:2;1531:9;1527:18;1514:32;1565:18;1606:2;1598:6;1595:14;1592:34;;;1622:1;1619;1612:12;1592:34;1660:6;1649:9;1645:22;1635:32;;1705:7;1698:4;1694:2;1690:13;1686:27;1676:55;;1727:1;1724;1717:12;1676:55;1763:2;1750:16;1785:2;1781;1778:10;1775:36;;;1791:18;;:::i;:::-;1866:2;1860:9;1834:2;1920:13;;-1:-1:-1;;1916:22:1;;;1940:2;1912:31;1908:40;1896:53;;;1964:18;;;1984:22;;;1961:46;1958:72;;;2010:18;;:::i;:::-;2050:10;2046:2;2039:22;2085:2;2077:6;2070:18;2125:7;2120:2;2115;2111;2107:11;2103:20;2100:33;2097:53;;;2146:1;2143;2136:12;2097:53;2202:2;2197;2193;2189:11;2184:2;2176:6;2172:15;2159:46;2247:1;2242:2;2237;2229:6;2225:15;2221:24;2214:35;2268:6;2258:16;;;;;;;1142:1138;;;;;;;:::o;2285:347::-;2350:6;2358;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;2450:29;2469:9;2450:29;:::i;:::-;2440:39;;2529:2;2518:9;2514:18;2501:32;2576:5;2569:13;2562:21;2555:5;2552:32;2542:60;;2598:1;2595;2588:12;2542:60;2621:5;2611:15;;;2285:347;;;;;:::o;2637:254::-;2705:6;2713;2766:2;2754:9;2745:7;2741:23;2737:32;2734:52;;;2782:1;2779;2772:12;2734:52;2805:29;2824:9;2805:29;:::i;:::-;2795:39;2881:2;2866:18;;;;2853:32;;-1:-1:-1;;;2637:254:1:o;2896:324::-;2971:6;2979;2987;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;3079:29;3098:9;3079:29;:::i;:::-;3069:39;;3155:2;3144:9;3140:18;3127:32;3117:42;;3178:36;3210:2;3199:9;3195:18;3178:36;:::i;:::-;3168:46;;2896:324;;;;;:::o;3225:691::-;3318:6;3326;3334;3387:2;3375:9;3366:7;3362:23;3358:32;3355:52;;;3403:1;3400;3393:12;3355:52;3443:9;3430:23;3472:18;3513:2;3505:6;3502:14;3499:34;;;3529:1;3526;3519:12;3499:34;3567:6;3556:9;3552:22;3542:32;;3612:7;3605:4;3601:2;3597:13;3593:27;3583:55;;3634:1;3631;3624:12;3583:55;3674:2;3661:16;3700:2;3692:6;3689:14;3686:34;;;3716:1;3713;3706:12;3686:34;3771:7;3764:4;3754:6;3751:1;3747:14;3743:2;3739:23;3735:34;3732:47;3729:67;;;3792:1;3789;3782:12;3729:67;3823:4;3815:13;;;;-1:-1:-1;3847:6:1;-1:-1:-1;3872:38:1;;3889:20;;;-1:-1:-1;3872:38:1;:::i;3921:245::-;3979:6;4032:2;4020:9;4011:7;4007:23;4003:32;4000:52;;;4048:1;4045;4038:12;4000:52;4087:9;4074:23;4106:30;4130:5;4106:30;:::i;4171:249::-;4240:6;4293:2;4281:9;4272:7;4268:23;4264:32;4261:52;;;4309:1;4306;4299:12;4261:52;4341:9;4335:16;4360:30;4384:5;4360:30;:::i;4425:592::-;4496:6;4504;4557:2;4545:9;4536:7;4532:23;4528:32;4525:52;;;4573:1;4570;4563:12;4525:52;4613:9;4600:23;4642:18;4683:2;4675:6;4672:14;4669:34;;;4699:1;4696;4689:12;4669:34;4737:6;4726:9;4722:22;4712:32;;4782:7;4775:4;4771:2;4767:13;4763:27;4753:55;;4804:1;4801;4794:12;4753:55;4844:2;4831:16;4870:2;4862:6;4859:14;4856:34;;;4886:1;4883;4876:12;4856:34;4931:7;4926:2;4917:6;4913:2;4909:15;4905:24;4902:37;4899:57;;;4952:1;4949;4942:12;4899:57;4983:2;4975:11;;;;;5005:6;;-1:-1:-1;4425:592:1;;-1:-1:-1;;;;4425:592:1:o;5022:180::-;5081:6;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;-1:-1:-1;5173:23:1;;5022:180;-1:-1:-1;5022:180:1:o;5207:182::-;5264:6;5317:2;5305:9;5296:7;5292:23;5288:32;5285:52;;;5333:1;5330;5323:12;5285:52;5356:27;5373:9;5356:27;:::i;5394:257::-;5435:3;5473:5;5467:12;5500:6;5495:3;5488:19;5516:63;5572:6;5565:4;5560:3;5556:14;5549:4;5542:5;5538:16;5516:63;:::i;:::-;5633:2;5612:15;-1:-1:-1;;5608:29:1;5599:39;;;;5640:4;5595:50;;5394:257;-1:-1:-1;;5394:257:1:o;5656:777::-;5706:3;5745:4;5740:3;5736:14;5777:5;5771:12;5766:3;5759:25;5803:4;5853:2;5846:5;5842:14;5836:21;5887:4;5882:2;5877:3;5873:12;5866:26;5914:4;5947:12;5941:19;5982:6;5976:4;5969:20;6016:3;6011;6007:13;5998:22;;6061:2;6047:12;6043:21;6029:35;;6082:1;6073:10;;6092:175;6106:6;6103:1;6100:13;6092:175;;;6169:13;;6155:28;;6242:15;;;;6128:1;6121:9;;;;;6205:14;;;;6092:175;;;6096:3;6328:4;6320;6313:5;6309:16;6303:23;6299:34;6292:4;6287:3;6283:14;6276:58;6397:4;6390:5;6386:16;6380:23;6373:31;6366:39;6359:4;6354:3;6350:14;6343:63;6422:5;6415:12;;;;;;5656:777;;;;:::o;6438:470::-;6617:3;6655:6;6649:13;6671:53;6717:6;6712:3;6705:4;6697:6;6693:17;6671:53;:::i;:::-;6787:13;;6746:16;;;;6809:57;6787:13;6746:16;6843:4;6831:17;;6809:57;:::i;:::-;6882:20;;6438:470;-1:-1:-1;;;;6438:470:1:o;7501:488::-;-1:-1:-1;;;;;7770:15:1;;;7752:34;;7822:15;;7817:2;7802:18;;7795:43;7869:2;7854:18;;7847:34;;;7917:3;7912:2;7897:18;;7890:31;;;7695:4;;7938:45;;7963:19;;7955:6;7938:45;:::i;:::-;7930:53;7501:488;-1:-1:-1;;;;;;7501:488:1:o;7994:841::-;8186:4;8215:2;8255;8244:9;8240:18;8285:2;8274:9;8267:21;8308:6;8343;8337:13;8374:6;8366;8359:22;8412:2;8401:9;8397:18;8390:25;;8474:2;8464:6;8461:1;8457:14;8446:9;8442:30;8438:39;8424:53;;8512:2;8504:6;8500:15;8533:1;8543:263;8557:6;8554:1;8551:13;8543:263;;;8650:2;8646:7;8634:9;8626:6;8622:22;8618:36;8613:3;8606:49;8678:48;8719:6;8710;8704:13;8678:48;:::i;:::-;8668:58;-1:-1:-1;8784:12:1;;;;8749:15;;;;8579:1;8572:9;8543:263;;;-1:-1:-1;8823:6:1;;7994:841;-1:-1:-1;;;;;;;7994:841:1:o;8840:639::-;9081:2;9063:21;;;9100:18;;9093:34;;;-1:-1:-1;;;;;;9139:31:1;;9136:51;;;9183:1;9180;9173:12;9136:51;9217:6;9214:1;9210:14;9275:6;9267;9261:3;9250:9;9246:19;9233:49;9353:1;9305:22;;;9329:3;9301:32;9342:13;;;9405:4;9390:20;;9383:36;;;;-1:-1:-1;9467:4:1;9455:17;;;;9450:2;9435:18;;;9428:45;9301:32;8840:639;-1:-1:-1;;8840:639:1:o;10106:219::-;10255:2;10244:9;10237:21;10218:4;10275:44;10315:2;10304:9;10300:18;10292:6;10275:44;:::i;15969:356::-;16171:2;16153:21;;;16190:18;;;16183:30;16249:34;16244:2;16229:18;;16222:62;16316:2;16301:18;;15969:356::o;17849:415::-;18051:2;18033:21;;;18090:2;18070:18;;;18063:30;18129:34;18124:2;18109:18;;18102:62;-1:-1:-1;;;18195:2:1;18180:18;;18173:49;18254:3;18239:19;;17849:415::o;21365:258::-;21544:2;21533:9;21526:21;21507:4;21564:53;21613:2;21602:9;21598:18;21590:6;21564:53;:::i;22896:253::-;22936:3;-1:-1:-1;;;;;23025:2:1;23022:1;23018:10;23055:2;23052:1;23048:10;23086:3;23082:2;23078:12;23073:3;23070:21;23067:47;;;23094:18;;:::i;23154:128::-;23194:3;23225:1;23221:6;23218:1;23215:13;23212:39;;;23231:18;;:::i;:::-;-1:-1:-1;23267:9:1;;23154:128::o;23287:120::-;23327:1;23353;23343:35;;23358:18;;:::i;:::-;-1:-1:-1;23392:9:1;;23287:120::o;23412:246::-;23452:4;-1:-1:-1;;;;;23565:10:1;;;;23535;;23587:12;;;23584:38;;;23602:18;;:::i;:::-;23639:13;;23412:246;-1:-1:-1;;;23412:246:1:o;23663:125::-;23703:4;23731:1;23728;23725:8;23722:34;;;23736:18;;:::i;:::-;-1:-1:-1;23773:9:1;;23663:125::o;23793:258::-;23865:1;23875:113;23889:6;23886:1;23883:13;23875:113;;;23965:11;;;23959:18;23946:11;;;23939:39;23911:2;23904:10;23875:113;;;24006:6;24003:1;24000:13;23997:48;;;-1:-1:-1;;24041:1:1;24023:16;;24016:27;23793:258::o;24056:380::-;24135:1;24131:12;;;;24178;;;24199:61;;24253:4;24245:6;24241:17;24231:27;;24199:61;24306:2;24298:6;24295:14;24275:18;24272:38;24269:161;;;24352:10;24347:3;24343:20;24340:1;24333:31;24387:4;24384:1;24377:15;24415:4;24412:1;24405:15;24269:161;;24056:380;;;:::o;24441:135::-;24480:3;-1:-1:-1;;24501:17:1;;24498:43;;;24521:18;;:::i;:::-;-1:-1:-1;24568:1:1;24557:13;;24441:135::o;24581:112::-;24613:1;24639;24629:35;;24644:18;;:::i;:::-;-1:-1:-1;24678:9:1;;24581:112::o;24698:127::-;24759:10;24754:3;24750:20;24747:1;24740:31;24790:4;24787:1;24780:15;24814:4;24811:1;24804:15;24830:127;24891:10;24886:3;24882:20;24879:1;24872:31;24922:4;24919:1;24912:15;24946:4;24943:1;24936:15;24962:127;25023:10;25018:3;25014:20;25011:1;25004:31;25054:4;25051:1;25044:15;25078:4;25075:1;25068:15;25094:127;25155:10;25150:3;25146:20;25143:1;25136:31;25186:4;25183:1;25176:15;25210:4;25207:1;25200:15;25226:131;-1:-1:-1;;;;;;25300:32:1;;25290:43;;25280:71;;25347:1;25344;25337:12

Swarm Source

ipfs://5d680cd5111c550dde45c2230322fbc669a4b0429ac1f90a4dde8057ee882b12
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.