ETH Price: $3,804.20 (+6.46%)

Token

ERC-20: ELONTUSK (ELONTUSK)
 

Overview

Max Total Supply

1,610 ELONTUSK

Holders

505

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
bombo.eth
Balance
1 ELONTUSK
0x15a643aa08663e67cfa375287a6c5789599049f9
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:
ELONTUSKS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-20
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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

// 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/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/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: https://github.com/chiru-labs/ERC721A/blob/main/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata 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 that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // 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) internal _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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

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

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    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 OwnerQueryForNonexistentToken();
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _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 virtual override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _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);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = 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;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * 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`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    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.
     * And also called after one token has been burned.
     *
     * 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` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: contracts/elontusks/ElontuskNFt.sol


pragma solidity ^0.8.7;





interface IToken {
	function updateRewardOnMint(address _user, uint256 _amount) external;
    function updateReward(address _from, address _to) external;
    function getReward(address _to) external;
    function burn(address _from, uint256 _amount) external;
    function getTotalClaimable(address _user) external view returns(uint256);
}


contract ELONTUSKS is ERC721A, Ownable {
    using Strings for uint256;
    address breedingContract;
    IToken public yieldToken;

    string public baseApiURI;
    bytes32 private whitelistRoot;
  

    //General Settings
    uint16 public maxMintAmountPerTransaction = 1;
    uint16 public maxMintAmountPerWallet = 1;

   

    //Inventory
    uint256 public maxSupply = 500;
    uint256 public freeLimit = 500;

    //Prices
    uint256 public cost = 0.015 ether;

    //Utility
    bool public paused = false;

    //mapping
	mapping(address => uint256) public balanceOG;

    

    constructor(string memory _baseUrl, address  _tokenAddress) ERC721A("ELONTUSK", "ELONTUSK") {   
        baseApiURI = _baseUrl;
         yieldToken = IToken(_tokenAddress);
    }

     function setFreeLimit(uint256 _limit) public onlyOwner{
        freeLimit = _limit;
    }

    //This function will be used to extend the project with more capabilities 
    function setBreedingContractAddress(address _bAddress) public onlyOwner {
        breedingContract = _bAddress;
    }

    //set yield token 
    function setYieldToken(address _address) public onlyOwner {
        yieldToken = IToken(_address);
    }


    //this function can be called only from the extending contract
    function mintExternal(address _address, uint256 _mintAmount) external {
        require(
            msg.sender == breedingContract,
            "Sorry you dont have permission to mint"
        );
        _safeMint(_address, _mintAmount);
        yieldToken.updateRewardOnMint(_address, _mintAmount);
		balanceOG[_address] += _mintAmount;
    }

   
   
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    // public
    function mint(uint256 _mintAmount) public payable {
        if (msg.sender != owner()) {
            uint256 ownerTokenCount = balanceOf(msg.sender);

            require(!paused);
            require(_mintAmount > 0, "Mint amount should be greater than 0");
            require(
                _mintAmount <= maxMintAmountPerTransaction,
                "Sorry you cant mint this amount at once"
            );
            require(
                totalSupply() + _mintAmount <= maxSupply,
                "Exceeds Max Supply"
            );
            require(
                (ownerTokenCount + _mintAmount) <= maxMintAmountPerWallet,
                "Sorry you cant mint more"
            );

              if(totalSupply() > freeLimit){
                //not free
                require(msg.value >= cost * _mintAmount, "Insuffient funds");
            }else{
                uint256 a = freeLimit - totalSupply();
                
                if(_mintAmount > a){
                   uint256 c = _mintAmount - a; 
                   //pay only for A 
                    require(msg.value >= cost * c, "Insuffient funds");
                }

            }
        }

        _mintLoop(msg.sender, _mintAmount);
        yieldToken.updateRewardOnMint(msg.sender, _mintAmount);
		balanceOG[msg.sender] += _mintAmount;
    }

    function gift(address _to, uint256 _mintAmount) public onlyOwner {
        _mintLoop(_to, _mintAmount);
        yieldToken.updateRewardOnMint(_to, _mintAmount);
		balanceOG[_to] += _mintAmount;
    }

    function airdrop(address[] memory _airdropAddresses) public onlyOwner {
        for (uint256 i = 0; i < _airdropAddresses.length; i++) {
            address to = _airdropAddresses[i];
            _mintLoop(to, 1);
            yieldToken.updateRewardOnMint(to, 1);
		    balanceOG[to]++;
        }
    }

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(abi.encodePacked(currentBaseURI, tokenId.toString()))
                : "";
    }

    	function getReward() external {
		yieldToken.updateReward(msg.sender, address(0));
		yieldToken.getReward(msg.sender);
	}


    //overides
   function transferFrom(address from, address to, uint256 tokenId) public override {
		yieldToken.updateReward(from, to);
		balanceOG[from]--;
		balanceOG[to]++;
		ERC721A.transferFrom(from, to, tokenId);
	}

    	function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override {
		yieldToken.updateReward(from, to);
			balanceOG[from]--;
			balanceOG[to]++;
		ERC721A.safeTransferFrom(from, to, tokenId, _data);
	}


    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxMintAmountPerTransaction(uint16 _amount) public onlyOwner {
        maxMintAmountPerTransaction = _amount;
    }

    function setMaxMintAmountPerWallet(uint16 _amount) public onlyOwner {
        maxMintAmountPerWallet = _amount;
    }


    function setMaxSupply(uint256 _supply) public onlyOwner {
        maxSupply = _supply;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseApiURI = _newBaseURI;
    }

    function togglePause() public onlyOwner {
        paused = !paused;
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        _safeMint(_receiver, _mintAmount);
    }

    //Burn them paperhands
    function batchBurn(uint256[] memory _nftIds) public onlyOwner {
            for(uint256 i = 0; i < _nftIds.length; i++){
                 address tokenOwner = ownerOf(_nftIds[i]);
                 yieldToken.updateReward(tokenOwner, address(this));
		        balanceOG[tokenOwner]--;
                _burn(_nftIds[i]);
            }
    }

    function burn(uint256 _nftId) public onlyOwner{
       
        address tokenOwner = ownerOf(_nftId);
        yieldToken.updateReward(tokenOwner, address(this));
		balanceOG[tokenOwner]--;
        _burn(_nftId);
    }
   

    

    function withdraw() public payable onlyOwner {
        (bool hq, ) = payable(owner()).call{value: address(this).balance}("");
        require(hq);

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUrl","type":"string"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"address[]","name":"_airdropAddresses","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"balanceOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseApiURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_nftIds","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":"maxMintAmountPerTransaction","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bAddress","type":"address"}],"name":"setBreedingContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setFreeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setYieldToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"setmaxMintAmountPerTransaction","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":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"yieldToken","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526001600d60006101000a81548161ffff021916908361ffff1602179055506001600d60026101000a81548161ffff021916908361ffff1602179055506101f4600e556101f4600f5566354a6ba7a180006010556000601160006101000a81548160ff0219169083151502179055503480156200007f57600080fd5b5060405162005a2f38038062005a2f8339818101604052810190620000a59190620003f5565b6040518060400160405280600881526020017f454c4f4e5455534b0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f454c4f4e5455534b000000000000000000000000000000000000000000000000815250816002908051906020019062000129929190620002b0565b50806003908051906020019062000142929190620002b0565b5062000153620001dd60201b60201c565b60008190555050506200017b6200016f620001e260201b60201c565b620001ea60201b60201c565b81600b908051906020019062000193929190620002b0565b5080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200062d565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002be9062000524565b90600052602060002090601f016020900481019282620002e257600085556200032e565b82601f10620002fd57805160ff19168380011785556200032e565b828001600101855582156200032e579182015b828111156200032d57825182559160200191906001019062000310565b5b5090506200033d919062000341565b5090565b5b808211156200035c57600081600090555060010162000342565b5090565b600062000377620003718462000484565b6200045b565b905082815260208101848484011115620003965762000395620005f3565b5b620003a3848285620004ee565b509392505050565b600081519050620003bc8162000613565b92915050565b600082601f830112620003da57620003d9620005ee565b5b8151620003ec84826020860162000360565b91505092915050565b600080604083850312156200040f576200040e620005fd565b5b600083015167ffffffffffffffff81111562000430576200042f620005f8565b5b6200043e85828601620003c2565b92505060206200045185828601620003ab565b9150509250929050565b6000620004676200047a565b90506200047582826200055a565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a257620004a1620005bf565b5b620004ad8262000602565b9050602081019050919050565b6000620004c782620004ce565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200050e578082015181840152602081019050620004f1565b838111156200051e576000848401525b50505050565b600060028204905060018216806200053d57607f821691505b6020821081141562000554576200055362000590565b5b50919050565b620005658262000602565b810181811067ffffffffffffffff82111715620005875762000586620005bf565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200061e81620004ba565b81146200062a57600080fd5b50565b6153f2806200063d6000396000f3fe6080604052600436106102675760003560e01c8063715018a611610144578063c87b56dd116100b6578063dc8e92ea1161007a578063dc8e92ea146108c4578063e97800cb146108ed578063e985e9c514610916578063f2fde38b14610953578063f4da18461461097c578063f8604f11146109a557610267565b8063c87b56dd146107cd578063cbce4c971461080a578063cef1172914610833578063d5abeb011461085c578063dc33e6811461088757610267565b8063a0712d6811610108578063a0712d68146106f2578063a22cb4651461070e578063b88d4fde14610737578063bbb8974414610760578063bc951b911461078b578063c4ae3168146107b657610267565b8063715018a614610631578063729ad39e1461064857806376d5de85146106715780638da5cb5b1461069c57806395d89b41146106c757610267565b80633d18b912116101dd57806355f804b3116101a157806355f804b3146105115780635c975abb1461053a5780636352211e1461056557806368570bd6146105a25780636f8b44b0146105cb57806370a08231146105f457610267565b80633d18b9121461045457806341827f131461046b57806342842e0e1461049657806342966c68146104bf57806344a0d68a146104e857610267565b806318160ddd1161022f57806318160ddd1461036557806323b872dd1461039057806323ffce85146103b9578063269bbebd146103e257806338712d8d1461040d5780633ccfd60b1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806313faede61461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061458c565b6109ce565b6040516102a091906149ff565b60405180910390f35b3480156102b557600080fd5b506102be610ab0565b6040516102cb9190614a35565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061465c565b610b42565b604051610308919061491d565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906144ba565b610bbe565b005b34801561034657600080fd5b5061034f610cc9565b60405161035c9190614b92565b60405180910390f35b34801561037157600080fd5b5061037a610ccf565b6040516103879190614b92565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906143a4565b610ce6565b005b3480156103c557600080fd5b506103e060048036038101906103db9190614337565b610e2f565b005b3480156103ee57600080fd5b506103f7610eef565b6040516104049190614b92565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190614337565b610ef5565b6040516104419190614b92565b60405180910390f35b610452610f0d565b005b34801561046057600080fd5b50610469611009565b005b34801561047757600080fd5b50610480611128565b60405161048d9190614a35565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906143a4565b6111b6565b005b3480156104cb57600080fd5b506104e660048036038101906104e1919061465c565b6111d6565b005b3480156104f457600080fd5b5061050f600480360381019061050a919061465c565b611350565b005b34801561051d57600080fd5b50610538600480360381019061053391906145e6565b6113d6565b005b34801561054657600080fd5b5061054f61146c565b60405161055c91906149ff565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061465c565b61147f565b604051610599919061491d565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614337565b611495565b005b3480156105d757600080fd5b506105f260048036038101906105ed919061465c565b611555565b005b34801561060057600080fd5b5061061b60048036038101906106169190614337565b6115db565b6040516106289190614b92565b60405180910390f35b34801561063d57600080fd5b506106466116ab565b005b34801561065457600080fd5b5061066f600480360381019061066a91906144fa565b611733565b005b34801561067d57600080fd5b506106866118e2565b6040516106939190614a1a565b60405180910390f35b3480156106a857600080fd5b506106b1611908565b6040516106be919061491d565b60405180910390f35b3480156106d357600080fd5b506106dc611932565b6040516106e99190614a35565b60405180910390f35b61070c6004803603810190610707919061465c565b6119c4565b005b34801561071a57600080fd5b506107356004803603810190610730919061447a565b611d57565b005b34801561074357600080fd5b5061075e600480360381019061075991906143f7565b611ecf565b005b34801561076c57600080fd5b5061077561201a565b6040516107829190614b77565b60405180910390f35b34801561079757600080fd5b506107a061202e565b6040516107ad9190614b77565b60405180910390f35b3480156107c257600080fd5b506107cb612042565b005b3480156107d957600080fd5b506107f460048036038101906107ef919061465c565b6120ea565b6040516108019190614a35565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906144ba565b612191565b005b34801561083f57600080fd5b5061085a6004803603810190610855919061462f565b612300565b005b34801561086857600080fd5b5061087161239c565b60405161087e9190614b92565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614337565b6123a2565b6040516108bb9190614b92565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190614543565b6123b4565b005b3480156108f957600080fd5b50610914600480360381019061090f919061462f565b612582565b005b34801561092257600080fd5b5061093d60048036038101906109389190614364565b61261e565b60405161094a91906149ff565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190614337565b6126b2565b005b34801561098857600080fd5b506109a3600480360381019061099e91906144ba565b6127aa565b005b3480156109b157600080fd5b506109cc60048036038101906109c7919061465c565b61292d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa95750610aa8826129b3565b5b9050919050565b606060028054610abf90614f25565b80601f0160208091040260200160405190810160405280929190818152602001828054610aeb90614f25565b8015610b385780601f10610b0d57610100808354040283529160200191610b38565b820191906000526020600020905b815481529060010190602001808311610b1b57829003601f168201915b5050505050905090565b6000610b4d82612a1d565b610b83576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc98261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c50612a6b565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c825750610c8081610c7b612a6b565b61261e565b155b15610cb9576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc4838383612a73565b505050565b60105481565b6000610cd9612b25565b6001546000540303905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a84846040518363ffffffff1660e01b8152600401610d43929190614938565b600060405180830381600087803b158015610d5d57600080fd5b505af1158015610d71573d6000803e3d6000fd5b50505050601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610dc590614efb565b9190505550601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1a90614f88565b9190505550610e2a838383612b2a565b505050565b610e37612a6b565b73ffffffffffffffffffffffffffffffffffffffff16610e55611908565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614af7565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60126020528060005260406000206000915090505481565b610f15612a6b565b73ffffffffffffffffffffffffffffffffffffffff16610f33611908565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090614af7565b60405180910390fd5b6000610f93611908565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fb690614908565b60006040518083038185875af1925050503d8060008114610ff3576040519150601f19603f3d011682016040523d82523d6000602084013e610ff8565b606091505b505090508061100657600080fd5b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a3360006040518363ffffffff1660e01b8152600401611067929190614938565b600060405180830381600087803b15801561108157600080fd5b505af1158015611095573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b81526004016110f4919061491d565b600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b50505050565b600b805461113590614f25565b80601f016020809104026020016040519081016040528092919081815260200182805461116190614f25565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b505050505081565b6111d183838360405180602001604052806000815250611ecf565b505050565b6111de612a6b565b73ffffffffffffffffffffffffffffffffffffffff166111fc611908565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614af7565b60405180910390fd5b600061125d8261147f565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a82306040518363ffffffff1660e01b81526004016112bc929190614938565b600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061133e90614efb565b919050555061134c82612b3a565b5050565b611358612a6b565b73ffffffffffffffffffffffffffffffffffffffff16611376611908565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390614af7565b60405180910390fd5b8060108190555050565b6113de612a6b565b73ffffffffffffffffffffffffffffffffffffffff166113fc611908565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614af7565b60405180910390fd5b80600b9080519060200190611468929190613fb7565b5050565b601160009054906101000a900460ff1681565b600061148a82612b48565b600001519050919050565b61149d612a6b565b73ffffffffffffffffffffffffffffffffffffffff166114bb611908565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890614af7565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61155d612a6b565b73ffffffffffffffffffffffffffffffffffffffff1661157b611908565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890614af7565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611643576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116b3612a6b565b73ffffffffffffffffffffffffffffffffffffffff166116d1611908565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614af7565b60405180910390fd5b6117316000612dd7565b565b61173b612a6b565b73ffffffffffffffffffffffffffffffffffffffff16611759611908565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614af7565b60405180910390fd5b60005b81518110156118de5760008282815181106117d0576117cf61508f565b5b602002602001015190506117e5816001612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c018260016040518363ffffffff1660e01b81526004016118439291906149ad565b600060405180830381600087803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118c590614f88565b91905055505080806118d690614f88565b9150506117b2565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461194190614f25565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90614f25565b80156119ba5780601f1061198f576101008083540402835291602001916119ba565b820191906000526020600020905b81548152906001019060200180831161199d57829003601f168201915b5050505050905090565b6119cc611908565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c65576000611a09336115db565b9050601160009054906101000a900460ff1615611a2557600080fd5b60008211611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614b37565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff16821115611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614ad7565b60405180910390fd5b600e5482611acb610ccf565b611ad59190614cda565b1115611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90614a57565b60405180910390fd5b600d60029054906101000a900461ffff1661ffff168282611b379190614cda565b1115611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90614b57565b60405180910390fd5b600f54611b83610ccf565b1115611bde5781601054611b979190614d61565b341015611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614ab7565b60405180910390fd5b611c63565b6000611be8610ccf565b600f54611bf59190614dbb565b905080831115611c615760008184611c0d9190614dbb565b905080601054611c1d9190614d61565b341015611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614ab7565b60405180910390fd5b505b505b505b611c6f3382612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0133836040518363ffffffff1660e01b8152600401611ccc9291906149d6565b600060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b5050505080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4d9190614cda565b9250508190555050565b611d5f612a6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc4576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611dd1612a6b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e7e612a6b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ec391906149ff565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a85856040518363ffffffff1660e01b8152600401611f2c929190614938565b600060405180830381600087803b158015611f4657600080fd5b505af1158015611f5a573d6000803e3d6000fd5b50505050601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611fae90614efb565b9190505550601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061200390614f88565b919050555061201484848484612eab565b50505050565b600d60009054906101000a900461ffff1681565b600d60029054906101000a900461ffff1681565b61204a612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612068611908565b73ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614af7565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60606120f582612a1d565b612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b90614b17565b60405180910390fd5b600061213e612f27565b9050600081511161215e5760405180602001604052806000815250612189565b8061216884612fb9565b6040516020016121799291906148e4565b6040516020818303038152906040525b915050919050565b612199612a6b565b73ffffffffffffffffffffffffffffffffffffffff166121b7611908565b73ffffffffffffffffffffffffffffffffffffffff161461220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614af7565b60405180910390fd5b6122178282612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0183836040518363ffffffff1660e01b81526004016122749291906149d6565b600060405180830381600087803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b5050505080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f59190614cda565b925050819055505050565b612308612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612326611908565b73ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614af7565b60405180910390fd5b80600d60026101000a81548161ffff021916908361ffff16021790555050565b600e5481565b60006123ad8261311a565b9050919050565b6123bc612a6b565b73ffffffffffffffffffffffffffffffffffffffff166123da611908565b73ffffffffffffffffffffffffffffffffffffffff1614612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790614af7565b60405180910390fd5b60005b815181101561257e5760006124618383815181106124545761245361508f565b5b602002602001015161147f565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a82306040518363ffffffff1660e01b81526004016124c0929190614938565b600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061254290614efb565b919050555061256a83838151811061255d5761255c61508f565b5b6020026020010151612b3a565b50808061257690614f88565b915050612433565b5050565b61258a612a6b565b73ffffffffffffffffffffffffffffffffffffffff166125a8611908565b73ffffffffffffffffffffffffffffffffffffffff16146125fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f590614af7565b60405180910390fd5b80600d60006101000a81548161ffff021916908361ffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ba612a6b565b73ffffffffffffffffffffffffffffffffffffffff166126d8611908565b73ffffffffffffffffffffffffffffffffffffffff161461272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614a77565b60405180910390fd5b6127a781612dd7565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461283a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283190614a97565b60405180910390fd5b6128448282613184565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0183836040518363ffffffff1660e01b81526004016128a19291906149d6565b600060405180830381600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b5050505080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129229190614cda565b925050819055505050565b612935612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612953611908565b73ffffffffffffffffffffffffffffffffffffffff16146129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614af7565b60405180910390fd5b80600f8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612a28612b25565b11158015612a37575060005482105b8015612a64575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b612b358383836131a2565b505050565b612b45816000613658565b50565b612b5061403d565b600082905080612b5e612b25565b11158015612b6d575060005481105b15612da0576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d9e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c82578092505050612dd2565b5b600115612d9d57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d98578092505050612dd2565b612c83565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ea78282613184565b5050565b612eb68484846131a2565b612ed58373ffffffffffffffffffffffffffffffffffffffff16613a48565b8015612eea5750612ee884848484613a6b565b155b15612f21576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600b8054612f3690614f25565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614f25565b8015612faf5780601f10612f8457610100808354040283529160200191612faf565b820191906000526020600020905b815481529060010190602001808311612f9257829003601f168201915b5050505050905090565b60606000821415613001576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613115565b600082905060005b6000821461303357808061301c90614f88565b915050600a8261302c9190614d30565b9150613009565b60008167ffffffffffffffff81111561304f5761304e6150be565b5b6040519080825280601f01601f1916602001820160405280156130815781602001600182028036833780820191505090505b5090505b6000851461310e5760018261309a9190614dbb565b9150600a856130a99190614fd1565b60306130b59190614cda565b60f81b8183815181106130cb576130ca61508f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131079190614d30565b9450613085565b8093505050505b919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61319e828260405180602001604052806000815250613bcb565b5050565b60006131ad82612b48565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613218576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613239612a6b565b73ffffffffffffffffffffffffffffffffffffffff161480613268575061326785613262612a6b565b61261e565b5b806132ad5750613276612a6b565b73ffffffffffffffffffffffffffffffffffffffff1661329584610b42565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806132e6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561334d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61335a8585856001613bdd565b61336660008487612a73565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156135e65760005482146135e557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136518585856001613be3565b5050505050565b600061366383612b48565b905060008160000151905082156137445760008173ffffffffffffffffffffffffffffffffffffffff16613695612a6b565b73ffffffffffffffffffffffffffffffffffffffff1614806136c457506136c3826136be612a6b565b61261e565b5b8061370957506136d2612a6b565b73ffffffffffffffffffffffffffffffffffffffff166136f186610b42565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613742576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b613752816000866001613bdd565b61375e60008583612a73565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139c25760005482146139c157848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a30816000866001613be3565b60016000815480929190600101919050555050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a91612a6b565b8786866040518563ffffffff1660e01b8152600401613ab39493929190614961565b602060405180830381600087803b158015613acd57600080fd5b505af1925050508015613afe57506040513d601f19601f82011682018060405250810190613afb91906145b9565b60015b613b78573d8060008114613b2e576040519150601f19603f3d011682016040523d82523d6000602084013e613b33565b606091505b50600081511415613b70576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b613bd88383836001613be9565b505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613c56576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613c91576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613c9e6000868387613bdd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613e685750613e678773ffffffffffffffffffffffffffffffffffffffff16613a48565b5b15613f2e575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613edd6000888480600101955088613a6b565b613f13576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613e6e578260005414613f2957600080fd5b613f9a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f2f575b816000819055505050613fb06000868387613be3565b5050505050565b828054613fc390614f25565b90600052602060002090601f016020900481019282613fe5576000855561402c565b82601f10613ffe57805160ff191683800117855561402c565b8280016001018555821561402c579182015b8281111561402b578251825591602001919060010190614010565b5b5090506140399190614080565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115614099576000816000905550600101614081565b5090565b60006140b06140ab84614bd2565b614bad565b905080838252602082019050828560208602820111156140d3576140d26150f2565b5b60005b8581101561410357816140e98882614201565b8452602084019350602083019250506001810190506140d6565b5050509392505050565b600061412061411b84614bfe565b614bad565b90508083825260208201905082856020860282011115614143576141426150f2565b5b60005b8581101561417357816141598882614322565b845260208401935060208301925050600181019050614146565b5050509392505050565b600061419061418b84614c2a565b614bad565b9050828152602081018484840111156141ac576141ab6150f7565b5b6141b7848285614eb9565b509392505050565b60006141d26141cd84614c5b565b614bad565b9050828152602081018484840111156141ee576141ed6150f7565b5b6141f9848285614eb9565b509392505050565b60008135905061421081615349565b92915050565b600082601f83011261422b5761422a6150ed565b5b813561423b84826020860161409d565b91505092915050565b600082601f830112614259576142586150ed565b5b813561426984826020860161410d565b91505092915050565b60008135905061428181615360565b92915050565b60008135905061429681615377565b92915050565b6000815190506142ab81615377565b92915050565b600082601f8301126142c6576142c56150ed565b5b81356142d684826020860161417d565b91505092915050565b600082601f8301126142f4576142f36150ed565b5b81356143048482602086016141bf565b91505092915050565b60008135905061431c8161538e565b92915050565b600081359050614331816153a5565b92915050565b60006020828403121561434d5761434c615101565b5b600061435b84828501614201565b91505092915050565b6000806040838503121561437b5761437a615101565b5b600061438985828601614201565b925050602061439a85828601614201565b9150509250929050565b6000806000606084860312156143bd576143bc615101565b5b60006143cb86828701614201565b93505060206143dc86828701614201565b92505060406143ed86828701614322565b9150509250925092565b6000806000806080858703121561441157614410615101565b5b600061441f87828801614201565b945050602061443087828801614201565b935050604061444187828801614322565b925050606085013567ffffffffffffffff811115614462576144616150fc565b5b61446e878288016142b1565b91505092959194509250565b6000806040838503121561449157614490615101565b5b600061449f85828601614201565b92505060206144b085828601614272565b9150509250929050565b600080604083850312156144d1576144d0615101565b5b60006144df85828601614201565b92505060206144f085828601614322565b9150509250929050565b6000602082840312156145105761450f615101565b5b600082013567ffffffffffffffff81111561452e5761452d6150fc565b5b61453a84828501614216565b91505092915050565b60006020828403121561455957614558615101565b5b600082013567ffffffffffffffff811115614577576145766150fc565b5b61458384828501614244565b91505092915050565b6000602082840312156145a2576145a1615101565b5b60006145b084828501614287565b91505092915050565b6000602082840312156145cf576145ce615101565b5b60006145dd8482850161429c565b91505092915050565b6000602082840312156145fc576145fb615101565b5b600082013567ffffffffffffffff81111561461a576146196150fc565b5b614626848285016142df565b91505092915050565b60006020828403121561464557614644615101565b5b60006146538482850161430d565b91505092915050565b60006020828403121561467257614671615101565b5b600061468084828501614322565b91505092915050565b61469281614def565b82525050565b6146a181614e01565b82525050565b60006146b282614c8c565b6146bc8185614ca2565b93506146cc818560208601614ec8565b6146d581615106565b840191505092915050565b6146e981614e71565b82525050565b6146f881614e83565b82525050565b600061470982614c97565b6147138185614cbe565b9350614723818560208601614ec8565b61472c81615106565b840191505092915050565b600061474282614c97565b61474c8185614ccf565b935061475c818560208601614ec8565b80840191505092915050565b6000614775601283614cbe565b915061478082615117565b602082019050919050565b6000614798602683614cbe565b91506147a382615140565b604082019050919050565b60006147bb602683614cbe565b91506147c68261518f565b604082019050919050565b60006147de601083614cbe565b91506147e9826151de565b602082019050919050565b6000614801602783614cbe565b915061480c82615207565b604082019050919050565b6000614824602083614cbe565b915061482f82615256565b602082019050919050565b6000614847602f83614cbe565b91506148528261527f565b604082019050919050565b600061486a600083614cb3565b9150614875826152ce565b600082019050919050565b600061488d602483614cbe565b9150614898826152d1565b604082019050919050565b60006148b0601883614cbe565b91506148bb82615320565b602082019050919050565b6148cf81614e39565b82525050565b6148de81614e67565b82525050565b60006148f08285614737565b91506148fc8284614737565b91508190509392505050565b60006149138261485d565b9150819050919050565b60006020820190506149326000830184614689565b92915050565b600060408201905061494d6000830185614689565b61495a6020830184614689565b9392505050565b60006080820190506149766000830187614689565b6149836020830186614689565b61499060408301856148d5565b81810360608301526149a281846146a7565b905095945050505050565b60006040820190506149c26000830185614689565b6149cf60208301846146ef565b9392505050565b60006040820190506149eb6000830185614689565b6149f860208301846148d5565b9392505050565b6000602082019050614a146000830184614698565b92915050565b6000602082019050614a2f60008301846146e0565b92915050565b60006020820190508181036000830152614a4f81846146fe565b905092915050565b60006020820190508181036000830152614a7081614768565b9050919050565b60006020820190508181036000830152614a908161478b565b9050919050565b60006020820190508181036000830152614ab0816147ae565b9050919050565b60006020820190508181036000830152614ad0816147d1565b9050919050565b60006020820190508181036000830152614af0816147f4565b9050919050565b60006020820190508181036000830152614b1081614817565b9050919050565b60006020820190508181036000830152614b308161483a565b9050919050565b60006020820190508181036000830152614b5081614880565b9050919050565b60006020820190508181036000830152614b70816148a3565b9050919050565b6000602082019050614b8c60008301846148c6565b92915050565b6000602082019050614ba760008301846148d5565b92915050565b6000614bb7614bc8565b9050614bc38282614f57565b919050565b6000604051905090565b600067ffffffffffffffff821115614bed57614bec6150be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c1957614c186150be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c4557614c446150be565b5b614c4e82615106565b9050602081019050919050565b600067ffffffffffffffff821115614c7657614c756150be565b5b614c7f82615106565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ce582614e67565b9150614cf083614e67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d2557614d24615002565b5b828201905092915050565b6000614d3b82614e67565b9150614d4683614e67565b925082614d5657614d55615031565b5b828204905092915050565b6000614d6c82614e67565b9150614d7783614e67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db057614daf615002565b5b828202905092915050565b6000614dc682614e67565b9150614dd183614e67565b925082821015614de457614de3615002565b5b828203905092915050565b6000614dfa82614e47565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e7c82614e95565b9050919050565b6000614e8e82614e67565b9050919050565b6000614ea082614ea7565b9050919050565b6000614eb282614e47565b9050919050565b82818337600083830152505050565b60005b83811015614ee6578082015181840152602081019050614ecb565b83811115614ef5576000848401525b50505050565b6000614f0682614e67565b91506000821415614f1a57614f19615002565b5b600182039050919050565b60006002820490506001821680614f3d57607f821691505b60208210811415614f5157614f50615060565b5b50919050565b614f6082615106565b810181811067ffffffffffffffff82111715614f7f57614f7e6150be565b5b80604052505050565b6000614f9382614e67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc657614fc5615002565b5b600182019050919050565b6000614fdc82614e67565b9150614fe783614e67565b925082614ff757614ff6615031565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365656473204d617820537570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f7520646f6e742068617665207065726d697373696f6e207460008201527f6f206d696e740000000000000000000000000000000000000000000000000000602082015250565b7f496e7375666669656e742066756e647300000000000000000000000000000000600082015250565b7f536f72727920796f752063616e74206d696e74207468697320616d6f756e742060008201527f6174206f6e636500000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d696e7420616d6f756e742073686f756c64206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f752063616e74206d696e74206d6f72650000000000000000600082015250565b61535281614def565b811461535d57600080fd5b50565b61536981614e01565b811461537457600080fd5b50565b61538081614e0d565b811461538b57600080fd5b50565b61539781614e39565b81146153a257600080fd5b50565b6153ae81614e67565b81146153b957600080fd5b5056fea264697066735822122072e5a056dae252d681817a6b66c9f9880fb14afc6d3bb6c3d6063e256a7b47c664736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000751c48675caa3463526b6ba655a1db9f4a0b05f3000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f75732d63656e7472616c312d6d6f666f732d36396136322e636c6f756466756e6374696f6e732e6e65742f6170702f656c6f6e7475736b2f746f6b656e2f0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c8063715018a611610144578063c87b56dd116100b6578063dc8e92ea1161007a578063dc8e92ea146108c4578063e97800cb146108ed578063e985e9c514610916578063f2fde38b14610953578063f4da18461461097c578063f8604f11146109a557610267565b8063c87b56dd146107cd578063cbce4c971461080a578063cef1172914610833578063d5abeb011461085c578063dc33e6811461088757610267565b8063a0712d6811610108578063a0712d68146106f2578063a22cb4651461070e578063b88d4fde14610737578063bbb8974414610760578063bc951b911461078b578063c4ae3168146107b657610267565b8063715018a614610631578063729ad39e1461064857806376d5de85146106715780638da5cb5b1461069c57806395d89b41146106c757610267565b80633d18b912116101dd57806355f804b3116101a157806355f804b3146105115780635c975abb1461053a5780636352211e1461056557806368570bd6146105a25780636f8b44b0146105cb57806370a08231146105f457610267565b80633d18b9121461045457806341827f131461046b57806342842e0e1461049657806342966c68146104bf57806344a0d68a146104e857610267565b806318160ddd1161022f57806318160ddd1461036557806323b872dd1461039057806323ffce85146103b9578063269bbebd146103e257806338712d8d1461040d5780633ccfd60b1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806313faede61461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061458c565b6109ce565b6040516102a091906149ff565b60405180910390f35b3480156102b557600080fd5b506102be610ab0565b6040516102cb9190614a35565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061465c565b610b42565b604051610308919061491d565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906144ba565b610bbe565b005b34801561034657600080fd5b5061034f610cc9565b60405161035c9190614b92565b60405180910390f35b34801561037157600080fd5b5061037a610ccf565b6040516103879190614b92565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906143a4565b610ce6565b005b3480156103c557600080fd5b506103e060048036038101906103db9190614337565b610e2f565b005b3480156103ee57600080fd5b506103f7610eef565b6040516104049190614b92565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190614337565b610ef5565b6040516104419190614b92565b60405180910390f35b610452610f0d565b005b34801561046057600080fd5b50610469611009565b005b34801561047757600080fd5b50610480611128565b60405161048d9190614a35565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906143a4565b6111b6565b005b3480156104cb57600080fd5b506104e660048036038101906104e1919061465c565b6111d6565b005b3480156104f457600080fd5b5061050f600480360381019061050a919061465c565b611350565b005b34801561051d57600080fd5b50610538600480360381019061053391906145e6565b6113d6565b005b34801561054657600080fd5b5061054f61146c565b60405161055c91906149ff565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061465c565b61147f565b604051610599919061491d565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614337565b611495565b005b3480156105d757600080fd5b506105f260048036038101906105ed919061465c565b611555565b005b34801561060057600080fd5b5061061b60048036038101906106169190614337565b6115db565b6040516106289190614b92565b60405180910390f35b34801561063d57600080fd5b506106466116ab565b005b34801561065457600080fd5b5061066f600480360381019061066a91906144fa565b611733565b005b34801561067d57600080fd5b506106866118e2565b6040516106939190614a1a565b60405180910390f35b3480156106a857600080fd5b506106b1611908565b6040516106be919061491d565b60405180910390f35b3480156106d357600080fd5b506106dc611932565b6040516106e99190614a35565b60405180910390f35b61070c6004803603810190610707919061465c565b6119c4565b005b34801561071a57600080fd5b506107356004803603810190610730919061447a565b611d57565b005b34801561074357600080fd5b5061075e600480360381019061075991906143f7565b611ecf565b005b34801561076c57600080fd5b5061077561201a565b6040516107829190614b77565b60405180910390f35b34801561079757600080fd5b506107a061202e565b6040516107ad9190614b77565b60405180910390f35b3480156107c257600080fd5b506107cb612042565b005b3480156107d957600080fd5b506107f460048036038101906107ef919061465c565b6120ea565b6040516108019190614a35565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906144ba565b612191565b005b34801561083f57600080fd5b5061085a6004803603810190610855919061462f565b612300565b005b34801561086857600080fd5b5061087161239c565b60405161087e9190614b92565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614337565b6123a2565b6040516108bb9190614b92565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190614543565b6123b4565b005b3480156108f957600080fd5b50610914600480360381019061090f919061462f565b612582565b005b34801561092257600080fd5b5061093d60048036038101906109389190614364565b61261e565b60405161094a91906149ff565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190614337565b6126b2565b005b34801561098857600080fd5b506109a3600480360381019061099e91906144ba565b6127aa565b005b3480156109b157600080fd5b506109cc60048036038101906109c7919061465c565b61292d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa95750610aa8826129b3565b5b9050919050565b606060028054610abf90614f25565b80601f0160208091040260200160405190810160405280929190818152602001828054610aeb90614f25565b8015610b385780601f10610b0d57610100808354040283529160200191610b38565b820191906000526020600020905b815481529060010190602001808311610b1b57829003601f168201915b5050505050905090565b6000610b4d82612a1d565b610b83576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc98261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c50612a6b565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c825750610c8081610c7b612a6b565b61261e565b155b15610cb9576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc4838383612a73565b505050565b60105481565b6000610cd9612b25565b6001546000540303905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a84846040518363ffffffff1660e01b8152600401610d43929190614938565b600060405180830381600087803b158015610d5d57600080fd5b505af1158015610d71573d6000803e3d6000fd5b50505050601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610dc590614efb565b9190505550601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1a90614f88565b9190505550610e2a838383612b2a565b505050565b610e37612a6b565b73ffffffffffffffffffffffffffffffffffffffff16610e55611908565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614af7565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60126020528060005260406000206000915090505481565b610f15612a6b565b73ffffffffffffffffffffffffffffffffffffffff16610f33611908565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090614af7565b60405180910390fd5b6000610f93611908565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fb690614908565b60006040518083038185875af1925050503d8060008114610ff3576040519150601f19603f3d011682016040523d82523d6000602084013e610ff8565b606091505b505090508061100657600080fd5b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a3360006040518363ffffffff1660e01b8152600401611067929190614938565b600060405180830381600087803b15801561108157600080fd5b505af1158015611095573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b81526004016110f4919061491d565b600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b50505050565b600b805461113590614f25565b80601f016020809104026020016040519081016040528092919081815260200182805461116190614f25565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b505050505081565b6111d183838360405180602001604052806000815250611ecf565b505050565b6111de612a6b565b73ffffffffffffffffffffffffffffffffffffffff166111fc611908565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614af7565b60405180910390fd5b600061125d8261147f565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a82306040518363ffffffff1660e01b81526004016112bc929190614938565b600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061133e90614efb565b919050555061134c82612b3a565b5050565b611358612a6b565b73ffffffffffffffffffffffffffffffffffffffff16611376611908565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390614af7565b60405180910390fd5b8060108190555050565b6113de612a6b565b73ffffffffffffffffffffffffffffffffffffffff166113fc611908565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614af7565b60405180910390fd5b80600b9080519060200190611468929190613fb7565b5050565b601160009054906101000a900460ff1681565b600061148a82612b48565b600001519050919050565b61149d612a6b565b73ffffffffffffffffffffffffffffffffffffffff166114bb611908565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890614af7565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61155d612a6b565b73ffffffffffffffffffffffffffffffffffffffff1661157b611908565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890614af7565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611643576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116b3612a6b565b73ffffffffffffffffffffffffffffffffffffffff166116d1611908565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614af7565b60405180910390fd5b6117316000612dd7565b565b61173b612a6b565b73ffffffffffffffffffffffffffffffffffffffff16611759611908565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614af7565b60405180910390fd5b60005b81518110156118de5760008282815181106117d0576117cf61508f565b5b602002602001015190506117e5816001612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c018260016040518363ffffffff1660e01b81526004016118439291906149ad565b600060405180830381600087803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118c590614f88565b91905055505080806118d690614f88565b9150506117b2565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461194190614f25565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90614f25565b80156119ba5780601f1061198f576101008083540402835291602001916119ba565b820191906000526020600020905b81548152906001019060200180831161199d57829003601f168201915b5050505050905090565b6119cc611908565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c65576000611a09336115db565b9050601160009054906101000a900460ff1615611a2557600080fd5b60008211611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614b37565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff16821115611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614ad7565b60405180910390fd5b600e5482611acb610ccf565b611ad59190614cda565b1115611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90614a57565b60405180910390fd5b600d60029054906101000a900461ffff1661ffff168282611b379190614cda565b1115611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90614b57565b60405180910390fd5b600f54611b83610ccf565b1115611bde5781601054611b979190614d61565b341015611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614ab7565b60405180910390fd5b611c63565b6000611be8610ccf565b600f54611bf59190614dbb565b905080831115611c615760008184611c0d9190614dbb565b905080601054611c1d9190614d61565b341015611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614ab7565b60405180910390fd5b505b505b505b611c6f3382612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0133836040518363ffffffff1660e01b8152600401611ccc9291906149d6565b600060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b5050505080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4d9190614cda565b9250508190555050565b611d5f612a6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc4576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611dd1612a6b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e7e612a6b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ec391906149ff565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a85856040518363ffffffff1660e01b8152600401611f2c929190614938565b600060405180830381600087803b158015611f4657600080fd5b505af1158015611f5a573d6000803e3d6000fd5b50505050601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611fae90614efb565b9190505550601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061200390614f88565b919050555061201484848484612eab565b50505050565b600d60009054906101000a900461ffff1681565b600d60029054906101000a900461ffff1681565b61204a612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612068611908565b73ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614af7565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60606120f582612a1d565b612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b90614b17565b60405180910390fd5b600061213e612f27565b9050600081511161215e5760405180602001604052806000815250612189565b8061216884612fb9565b6040516020016121799291906148e4565b6040516020818303038152906040525b915050919050565b612199612a6b565b73ffffffffffffffffffffffffffffffffffffffff166121b7611908565b73ffffffffffffffffffffffffffffffffffffffff161461220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614af7565b60405180910390fd5b6122178282612e9d565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0183836040518363ffffffff1660e01b81526004016122749291906149d6565b600060405180830381600087803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b5050505080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f59190614cda565b925050819055505050565b612308612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612326611908565b73ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614af7565b60405180910390fd5b80600d60026101000a81548161ffff021916908361ffff16021790555050565b600e5481565b60006123ad8261311a565b9050919050565b6123bc612a6b565b73ffffffffffffffffffffffffffffffffffffffff166123da611908565b73ffffffffffffffffffffffffffffffffffffffff1614612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790614af7565b60405180910390fd5b60005b815181101561257e5760006124618383815181106124545761245361508f565b5b602002602001015161147f565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a82306040518363ffffffff1660e01b81526004016124c0929190614938565b600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b50505050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061254290614efb565b919050555061256a83838151811061255d5761255c61508f565b5b6020026020010151612b3a565b50808061257690614f88565b915050612433565b5050565b61258a612a6b565b73ffffffffffffffffffffffffffffffffffffffff166125a8611908565b73ffffffffffffffffffffffffffffffffffffffff16146125fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f590614af7565b60405180910390fd5b80600d60006101000a81548161ffff021916908361ffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ba612a6b565b73ffffffffffffffffffffffffffffffffffffffff166126d8611908565b73ffffffffffffffffffffffffffffffffffffffff161461272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614a77565b60405180910390fd5b6127a781612dd7565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461283a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283190614a97565b60405180910390fd5b6128448282613184565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cc240c0183836040518363ffffffff1660e01b81526004016128a19291906149d6565b600060405180830381600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b5050505080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129229190614cda565b925050819055505050565b612935612a6b565b73ffffffffffffffffffffffffffffffffffffffff16612953611908565b73ffffffffffffffffffffffffffffffffffffffff16146129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614af7565b60405180910390fd5b80600f8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612a28612b25565b11158015612a37575060005482105b8015612a64575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b612b358383836131a2565b505050565b612b45816000613658565b50565b612b5061403d565b600082905080612b5e612b25565b11158015612b6d575060005481105b15612da0576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d9e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c82578092505050612dd2565b5b600115612d9d57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d98578092505050612dd2565b612c83565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ea78282613184565b5050565b612eb68484846131a2565b612ed58373ffffffffffffffffffffffffffffffffffffffff16613a48565b8015612eea5750612ee884848484613a6b565b155b15612f21576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600b8054612f3690614f25565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614f25565b8015612faf5780601f10612f8457610100808354040283529160200191612faf565b820191906000526020600020905b815481529060010190602001808311612f9257829003601f168201915b5050505050905090565b60606000821415613001576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613115565b600082905060005b6000821461303357808061301c90614f88565b915050600a8261302c9190614d30565b9150613009565b60008167ffffffffffffffff81111561304f5761304e6150be565b5b6040519080825280601f01601f1916602001820160405280156130815781602001600182028036833780820191505090505b5090505b6000851461310e5760018261309a9190614dbb565b9150600a856130a99190614fd1565b60306130b59190614cda565b60f81b8183815181106130cb576130ca61508f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131079190614d30565b9450613085565b8093505050505b919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61319e828260405180602001604052806000815250613bcb565b5050565b60006131ad82612b48565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613218576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613239612a6b565b73ffffffffffffffffffffffffffffffffffffffff161480613268575061326785613262612a6b565b61261e565b5b806132ad5750613276612a6b565b73ffffffffffffffffffffffffffffffffffffffff1661329584610b42565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806132e6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561334d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61335a8585856001613bdd565b61336660008487612a73565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156135e65760005482146135e557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136518585856001613be3565b5050505050565b600061366383612b48565b905060008160000151905082156137445760008173ffffffffffffffffffffffffffffffffffffffff16613695612a6b565b73ffffffffffffffffffffffffffffffffffffffff1614806136c457506136c3826136be612a6b565b61261e565b5b8061370957506136d2612a6b565b73ffffffffffffffffffffffffffffffffffffffff166136f186610b42565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613742576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b613752816000866001613bdd565b61375e60008583612a73565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139c25760005482146139c157848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a30816000866001613be3565b60016000815480929190600101919050555050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a91612a6b565b8786866040518563ffffffff1660e01b8152600401613ab39493929190614961565b602060405180830381600087803b158015613acd57600080fd5b505af1925050508015613afe57506040513d601f19601f82011682018060405250810190613afb91906145b9565b60015b613b78573d8060008114613b2e576040519150601f19603f3d011682016040523d82523d6000602084013e613b33565b606091505b50600081511415613b70576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b613bd88383836001613be9565b505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613c56576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613c91576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613c9e6000868387613bdd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613e685750613e678773ffffffffffffffffffffffffffffffffffffffff16613a48565b5b15613f2e575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613edd6000888480600101955088613a6b565b613f13576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613e6e578260005414613f2957600080fd5b613f9a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f2f575b816000819055505050613fb06000868387613be3565b5050505050565b828054613fc390614f25565b90600052602060002090601f016020900481019282613fe5576000855561402c565b82601f10613ffe57805160ff191683800117855561402c565b8280016001018555821561402c579182015b8281111561402b578251825591602001919060010190614010565b5b5090506140399190614080565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115614099576000816000905550600101614081565b5090565b60006140b06140ab84614bd2565b614bad565b905080838252602082019050828560208602820111156140d3576140d26150f2565b5b60005b8581101561410357816140e98882614201565b8452602084019350602083019250506001810190506140d6565b5050509392505050565b600061412061411b84614bfe565b614bad565b90508083825260208201905082856020860282011115614143576141426150f2565b5b60005b8581101561417357816141598882614322565b845260208401935060208301925050600181019050614146565b5050509392505050565b600061419061418b84614c2a565b614bad565b9050828152602081018484840111156141ac576141ab6150f7565b5b6141b7848285614eb9565b509392505050565b60006141d26141cd84614c5b565b614bad565b9050828152602081018484840111156141ee576141ed6150f7565b5b6141f9848285614eb9565b509392505050565b60008135905061421081615349565b92915050565b600082601f83011261422b5761422a6150ed565b5b813561423b84826020860161409d565b91505092915050565b600082601f830112614259576142586150ed565b5b813561426984826020860161410d565b91505092915050565b60008135905061428181615360565b92915050565b60008135905061429681615377565b92915050565b6000815190506142ab81615377565b92915050565b600082601f8301126142c6576142c56150ed565b5b81356142d684826020860161417d565b91505092915050565b600082601f8301126142f4576142f36150ed565b5b81356143048482602086016141bf565b91505092915050565b60008135905061431c8161538e565b92915050565b600081359050614331816153a5565b92915050565b60006020828403121561434d5761434c615101565b5b600061435b84828501614201565b91505092915050565b6000806040838503121561437b5761437a615101565b5b600061438985828601614201565b925050602061439a85828601614201565b9150509250929050565b6000806000606084860312156143bd576143bc615101565b5b60006143cb86828701614201565b93505060206143dc86828701614201565b92505060406143ed86828701614322565b9150509250925092565b6000806000806080858703121561441157614410615101565b5b600061441f87828801614201565b945050602061443087828801614201565b935050604061444187828801614322565b925050606085013567ffffffffffffffff811115614462576144616150fc565b5b61446e878288016142b1565b91505092959194509250565b6000806040838503121561449157614490615101565b5b600061449f85828601614201565b92505060206144b085828601614272565b9150509250929050565b600080604083850312156144d1576144d0615101565b5b60006144df85828601614201565b92505060206144f085828601614322565b9150509250929050565b6000602082840312156145105761450f615101565b5b600082013567ffffffffffffffff81111561452e5761452d6150fc565b5b61453a84828501614216565b91505092915050565b60006020828403121561455957614558615101565b5b600082013567ffffffffffffffff811115614577576145766150fc565b5b61458384828501614244565b91505092915050565b6000602082840312156145a2576145a1615101565b5b60006145b084828501614287565b91505092915050565b6000602082840312156145cf576145ce615101565b5b60006145dd8482850161429c565b91505092915050565b6000602082840312156145fc576145fb615101565b5b600082013567ffffffffffffffff81111561461a576146196150fc565b5b614626848285016142df565b91505092915050565b60006020828403121561464557614644615101565b5b60006146538482850161430d565b91505092915050565b60006020828403121561467257614671615101565b5b600061468084828501614322565b91505092915050565b61469281614def565b82525050565b6146a181614e01565b82525050565b60006146b282614c8c565b6146bc8185614ca2565b93506146cc818560208601614ec8565b6146d581615106565b840191505092915050565b6146e981614e71565b82525050565b6146f881614e83565b82525050565b600061470982614c97565b6147138185614cbe565b9350614723818560208601614ec8565b61472c81615106565b840191505092915050565b600061474282614c97565b61474c8185614ccf565b935061475c818560208601614ec8565b80840191505092915050565b6000614775601283614cbe565b915061478082615117565b602082019050919050565b6000614798602683614cbe565b91506147a382615140565b604082019050919050565b60006147bb602683614cbe565b91506147c68261518f565b604082019050919050565b60006147de601083614cbe565b91506147e9826151de565b602082019050919050565b6000614801602783614cbe565b915061480c82615207565b604082019050919050565b6000614824602083614cbe565b915061482f82615256565b602082019050919050565b6000614847602f83614cbe565b91506148528261527f565b604082019050919050565b600061486a600083614cb3565b9150614875826152ce565b600082019050919050565b600061488d602483614cbe565b9150614898826152d1565b604082019050919050565b60006148b0601883614cbe565b91506148bb82615320565b602082019050919050565b6148cf81614e39565b82525050565b6148de81614e67565b82525050565b60006148f08285614737565b91506148fc8284614737565b91508190509392505050565b60006149138261485d565b9150819050919050565b60006020820190506149326000830184614689565b92915050565b600060408201905061494d6000830185614689565b61495a6020830184614689565b9392505050565b60006080820190506149766000830187614689565b6149836020830186614689565b61499060408301856148d5565b81810360608301526149a281846146a7565b905095945050505050565b60006040820190506149c26000830185614689565b6149cf60208301846146ef565b9392505050565b60006040820190506149eb6000830185614689565b6149f860208301846148d5565b9392505050565b6000602082019050614a146000830184614698565b92915050565b6000602082019050614a2f60008301846146e0565b92915050565b60006020820190508181036000830152614a4f81846146fe565b905092915050565b60006020820190508181036000830152614a7081614768565b9050919050565b60006020820190508181036000830152614a908161478b565b9050919050565b60006020820190508181036000830152614ab0816147ae565b9050919050565b60006020820190508181036000830152614ad0816147d1565b9050919050565b60006020820190508181036000830152614af0816147f4565b9050919050565b60006020820190508181036000830152614b1081614817565b9050919050565b60006020820190508181036000830152614b308161483a565b9050919050565b60006020820190508181036000830152614b5081614880565b9050919050565b60006020820190508181036000830152614b70816148a3565b9050919050565b6000602082019050614b8c60008301846148c6565b92915050565b6000602082019050614ba760008301846148d5565b92915050565b6000614bb7614bc8565b9050614bc38282614f57565b919050565b6000604051905090565b600067ffffffffffffffff821115614bed57614bec6150be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c1957614c186150be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c4557614c446150be565b5b614c4e82615106565b9050602081019050919050565b600067ffffffffffffffff821115614c7657614c756150be565b5b614c7f82615106565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ce582614e67565b9150614cf083614e67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d2557614d24615002565b5b828201905092915050565b6000614d3b82614e67565b9150614d4683614e67565b925082614d5657614d55615031565b5b828204905092915050565b6000614d6c82614e67565b9150614d7783614e67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db057614daf615002565b5b828202905092915050565b6000614dc682614e67565b9150614dd183614e67565b925082821015614de457614de3615002565b5b828203905092915050565b6000614dfa82614e47565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e7c82614e95565b9050919050565b6000614e8e82614e67565b9050919050565b6000614ea082614ea7565b9050919050565b6000614eb282614e47565b9050919050565b82818337600083830152505050565b60005b83811015614ee6578082015181840152602081019050614ecb565b83811115614ef5576000848401525b50505050565b6000614f0682614e67565b91506000821415614f1a57614f19615002565b5b600182039050919050565b60006002820490506001821680614f3d57607f821691505b60208210811415614f5157614f50615060565b5b50919050565b614f6082615106565b810181811067ffffffffffffffff82111715614f7f57614f7e6150be565b5b80604052505050565b6000614f9382614e67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc657614fc5615002565b5b600182019050919050565b6000614fdc82614e67565b9150614fe783614e67565b925082614ff757614ff6615031565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365656473204d617820537570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f7520646f6e742068617665207065726d697373696f6e207460008201527f6f206d696e740000000000000000000000000000000000000000000000000000602082015250565b7f496e7375666669656e742066756e647300000000000000000000000000000000600082015250565b7f536f72727920796f752063616e74206d696e74207468697320616d6f756e742060008201527f6174206f6e636500000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d696e7420616d6f756e742073686f756c64206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b7f536f72727920796f752063616e74206d696e74206d6f72650000000000000000600082015250565b61535281614def565b811461535d57600080fd5b50565b61536981614e01565b811461537457600080fd5b50565b61538081614e0d565b811461538b57600080fd5b50565b61539781614e39565b81146153a257600080fd5b50565b6153ae81614e67565b81146153b957600080fd5b5056fea264697066735822122072e5a056dae252d681817a6b66c9f9880fb14afc6d3bb6c3d6063e256a7b47c664736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000751c48675caa3463526b6ba655a1db9f4a0b05f3000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f75732d63656e7472616c312d6d6f666f732d36396136322e636c6f756466756e6374696f6e732e6e65742f6170702f656c6f6e7475736b2f746f6b656e2f0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseUrl (string): https://us-central1-mofos-69a62.cloudfunctions.net/app/elontusk/token/
Arg [1] : _tokenAddress (address): 0x751C48675CAa3463526b6bA655A1Db9F4A0B05F3

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000751c48675caa3463526b6ba655a1db9f4a0b05f3
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [3] : 68747470733a2f2f75732d63656e7472616c312d6d6f666f732d36396136322e
Arg [4] : 636c6f756466756e6374696f6e732e6e65742f6170702f656c6f6e7475736b2f
Arg [5] : 746f6b656e2f0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47595:6547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29401:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32514:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34017:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33580:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48049:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28650:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52093:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48734:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47996:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48153:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53982:157;;;:::i;:::-;;51944:124;;;;;;;;;;;;;:::i;:::-;;47737:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35123:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53738:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52569:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53031:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48106:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32322:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48583:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52929:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29770:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7119:103;;;;;;;;;;;;;:::i;:::-;;51012:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47704:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6468:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32683:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49424:1369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34293:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52312:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47834:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47886:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53146:75;;;;;;;;;;;;;:::i;:::-;;51448:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50801:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52800:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47959:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49288:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53385:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52663:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34651:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7377:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48918:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48404:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29401:305;29503:4;29555:25;29540:40;;;:11;:40;;;;:105;;;;29612:33;29597:48;;;:11;:48;;;;29540:105;:158;;;;29662:36;29686:11;29662:23;:36::i;:::-;29540:158;29520:178;;29401:305;;;:::o;32514:100::-;32568:13;32601:5;32594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32514:100;:::o;34017:204::-;34085:7;34110:16;34118:7;34110;:16::i;:::-;34105:64;;34135:34;;;;;;;;;;;;;;34105:64;34189:15;:24;34205:7;34189:24;;;;;;;;;;;;;;;;;;;;;34182:31;;34017:204;;;:::o;33580:371::-;33653:13;33669:24;33685:7;33669:15;:24::i;:::-;33653:40;;33714:5;33708:11;;:2;:11;;;33704:48;;;33728:24;;;;;;;;;;;;;;33704:48;33785:5;33769:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33795:37;33812:5;33819:12;:10;:12::i;:::-;33795:16;:37::i;:::-;33794:38;33769:63;33765:138;;;33856:35;;;;;;;;;;;;;;33765:138;33915:28;33924:2;33928:7;33937:5;33915:8;:28::i;:::-;33642:309;33580:371;;:::o;48049:33::-;;;;:::o;28650:303::-;28694:7;28919:15;:13;:15::i;:::-;28904:12;;28888:13;;:28;:46;28881:53;;28650:303;:::o;52093:210::-;52179:10;;;;;;;;;;;:23;;;52203:4;52209:2;52179:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52217:9;:15;52227:4;52217:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;52239:9;:13;52249:2;52239:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;;52259:39;52280:4;52286:2;52290:7;52259:20;:39::i;:::-;52093:210;;;:::o;48734:106::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48823:8:::1;48803:10;;:29;;;;;;;;;;;;;;;;;;48734:106:::0;:::o;47996:30::-;;;;:::o;48153:44::-;;;;;;;;;;;;;;;;;:::o;53982:157::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54039:7:::1;54060;:5;:7::i;:::-;54052:21;;54081;54052:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54038:69;;;54126:2;54118:11;;;::::0;::::1;;54027:112;53982:157::o:0;51944:124::-;51979:10;;;;;;;;;;;:23;;;52003:10;52023:1;51979:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52031:10;;;;;;;;;;;:20;;;52052:10;52031:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51944:124::o;47737:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35123:185::-;35261:39;35278:4;35284:2;35288:7;35261:39;;;;;;;;;;;;:16;:39::i;:::-;35123:185;;;:::o;53738:223::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53804:18:::1;53825:15;53833:6;53825:7;:15::i;:::-;53804:36;;53851:10;;;;;;;;;;;:23;;;53875:10;53895:4;53851:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53906:9;:21;53916:10;53906:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;53940:13;53946:6;53940:5;:13::i;:::-;53784:177;53738:223:::0;:::o;52569:86::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52639:8:::1;52632:4;:15;;;;52569:86:::0;:::o;53031:107::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53119:11:::1;53106:10;:24;;;;;;;;;;;;:::i;:::-;;53031:107:::0;:::o;48106:26::-;;;;;;;;;;;;;:::o;32322:125::-;32386:7;32413:21;32426:7;32413:12;:21::i;:::-;:26;;;32406:33;;32322:125;;;:::o;48583:119::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48685:9:::1;48666:16;;:28;;;;;;;;;;;;;;;;;;48583:119:::0;:::o;52929:94::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53008:7:::1;52996:9;:19;;;;52929:94:::0;:::o;29770:206::-;29834:7;29875:1;29858:19;;:5;:19;;;29854:60;;;29886:28;;;;;;;;;;;;;;29854:60;29940:12;:19;29953:5;29940:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29932:36;;29925:43;;29770:206;;;:::o;7119:103::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7184:30:::1;7211:1;7184:18;:30::i;:::-;7119:103::o:0;51012:309::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51098:9:::1;51093:221;51117:17;:24;51113:1;:28;51093:221;;;51163:10;51176:17;51194:1;51176:20;;;;;;;;:::i;:::-;;;;;;;;51163:33;;51211:16;51221:2;51225:1;51211:9;:16::i;:::-;51242:10;;;;;;;;;;;:29;;;51272:2;51276:1;51242:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51287:9;:13;51297:2;51287:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;;51148:166;51143:3;;;;;:::i;:::-;;;;51093:221;;;;51012:309:::0;:::o;47704:24::-;;;;;;;;;;;;;:::o;6468:87::-;6514:7;6541:6;;;;;;;;;;;6534:13;;6468:87;:::o;32683:104::-;32739:13;32772:7;32765:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32683:104;:::o;49424:1369::-;49503:7;:5;:7::i;:::-;49489:21;;:10;:21;;;49485:1148;;49527:23;49553:21;49563:10;49553:9;:21::i;:::-;49527:47;;49600:6;;;;;;;;;;;49599:7;49591:16;;;;;;49644:1;49630:11;:15;49622:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49742:27;;;;;;;;;;;49727:42;;:11;:42;;49701:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;49916:9;;49901:11;49885:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;49859:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;50055:22;;;;;;;;;;;50020:57;;50039:11;50021:15;:29;;;;:::i;:::-;50020:57;;49994:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;50175:9;;50159:13;:11;:13::i;:::-;:25;50156:466;;;50260:11;50253:4;;:18;;;;:::i;:::-;50240:9;:31;;50232:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50156:466;;;50331:9;50355:13;:11;:13::i;:::-;50343:9;;:25;;;;:::i;:::-;50331:37;;50422:1;50408:11;:15;50405:200;;;50446:9;50472:1;50458:11;:15;;;;:::i;:::-;50446:27;;50563:1;50556:4;;:8;;;;:::i;:::-;50543:9;:21;;50535:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;50424:181;50405:200;50312:310;50156:466;49512:1121;49485:1148;50645:34;50655:10;50667:11;50645:9;:34::i;:::-;50690:10;;;;;;;;;;;:29;;;50720:10;50732:11;50690:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50774:11;50749:9;:21;50759:10;50749:21;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;49424:1369;:::o;34293:287::-;34404:12;:10;:12::i;:::-;34392:24;;:8;:24;;;34388:54;;;34425:17;;;;;;;;;;;;;;34388:54;34500:8;34455:18;:32;34474:12;:10;:12::i;:::-;34455:32;;;;;;;;;;;;;;;:42;34488:8;34455:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34553:8;34524:48;;34539:12;:10;:12::i;:::-;34524:48;;;34563:8;34524:48;;;;;;:::i;:::-;;;;;;;;34293:287;;:::o;52312:247::-;52422:10;;;;;;;;;;;:23;;;52446:4;52452:2;52422:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52461:9;:15;52471:4;52461:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;52484:9;:13;52494:2;52484:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;;52504:50;52529:4;52535:2;52539:7;52548:5;52504:24;:50::i;:::-;52312:247;;;;:::o;47834:45::-;;;;;;;;;;;;;:::o;47886:40::-;;;;;;;;;;;;;:::o;53146:75::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53207:6:::1;;;;;;;;;;;53206:7;53197:6;;:16;;;;;;;;;;;;;;;;;;53146:75::o:0;51448:487::-;51566:13;51619:16;51627:7;51619;:16::i;:::-;51597:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51721:28;51752:10;:8;:10::i;:::-;51721:41;;51824:1;51799:14;51793:28;:32;:134;;;;;;;;;;;;;;;;;51869:14;51885:18;:7;:16;:18::i;:::-;51852:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51793:134;51773:154;;;51448:487;;;:::o;50801:203::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50877:27:::1;50887:3;50892:11;50877:9;:27::i;:::-;50915:10;;;;;;;;;;;:29;;;50945:3;50950:11;50915:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50985:11;50967:9;:14;50977:3;50967:14;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;50801:203:::0;;:::o;52800:119::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52904:7:::1;52879:22;;:32;;;;;;;;;;;;;;;;;;52800:119:::0;:::o;47959:30::-;;;;:::o;49288:113::-;49346:7;49373:20;49387:5;49373:13;:20::i;:::-;49366:27;;49288:113;;;:::o;53385:345::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53466:9:::1;53462:261;53485:7;:14;53481:1;:18;53462:261;;;53525:18;53546:19;53554:7;53562:1;53554:10;;;;;;;;:::i;:::-;;;;;;;;53546:7;:19::i;:::-;53525:40;;53585:10;;;;;;;;;;;:23;;;53609:10;53629:4;53585:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53648:9;:21;53658:10;53648:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;53690:17;53696:7;53704:1;53696:10;;;;;;;;:::i;:::-;;;;;;;;53690:5;:17::i;:::-;53505:218;53501:3;;;;;:::i;:::-;;;;53462:261;;;;53385:345:::0;:::o;52663:129::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52777:7:::1;52747:27;;:37;;;;;;;;;;;;;;;;;;52663:129:::0;:::o;34651:164::-;34748:4;34772:18;:25;34791:5;34772:25;;;;;;;;;;;;;;;:35;34798:8;34772:35;;;;;;;;;;;;;;;;;;;;;;;;;34765:42;;34651:164;;;;:::o;7377:201::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:1:::1;7466:22;;:8;:22;;;;7458:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7542:28;7561:8;7542:18;:28::i;:::-;7377:201:::0;:::o;48918:352::-;49035:16;;;;;;;;;;;49021:30;;:10;:30;;;48999:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;49128:32;49138:8;49148:11;49128:9;:32::i;:::-;49171:10;;;;;;;;;;;:29;;;49201:8;49211:11;49171:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49251:11;49228:9;:19;49238:8;49228:19;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;48918:352;;:::o;48404:91::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48481:6:::1;48469:9;:18;;;;48404:91:::0;:::o;19252:157::-;19337:4;19376:25;19361:40;;;:11;:40;;;;19354:47;;19252:157;;;:::o;36003:187::-;36060:4;36103:7;36084:15;:13;:15::i;:::-;:26;;:53;;;;;36124:13;;36114:7;:23;36084:53;:98;;;;;36155:11;:20;36167:7;36155:20;;;;;;;;;;;:27;;;;;;;;;;;;36154:28;36084:98;36077:105;;36003:187;;;:::o;5192:98::-;5245:7;5272:10;5265:17;;5192:98;:::o;44173:196::-;44315:2;44288:15;:24;44304:7;44288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44353:7;44349:2;44333:28;;44342:5;44333:28;;;;;;;;;;;;44173:196;;;:::o;28424:92::-;28480:7;28424:92;:::o;34882:170::-;35016:28;35026:4;35032:2;35036:7;35016:9;:28::i;:::-;34882:170;;;:::o;41329:89::-;41389:21;41395:7;41404:5;41389;:21::i;:::-;41329:89;:::o;31151:1109::-;31213:21;;:::i;:::-;31247:12;31262:7;31247:22;;31330:4;31311:15;:13;:15::i;:::-;:23;;:47;;;;;31345:13;;31338:4;:20;31311:47;31307:886;;;31379:31;31413:11;:17;31425:4;31413:17;;;;;;;;;;;31379:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31454:9;:16;;;31449:729;;31525:1;31499:28;;:9;:14;;;:28;;;31495:101;;31563:9;31556:16;;;;;;31495:101;31898:261;31905:4;31898:261;;;31938:6;;;;;;;;31983:11;:17;31995:4;31983:17;;;;;;;;;;;31971:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32057:1;32031:28;;:9;:14;;;:28;;;32027:109;;32099:9;32092:16;;;;;;32027:109;31898:261;;;31449:729;31360:833;31307:886;32221:31;;;;;;;;;;;;;;31151:1109;;;;:::o;7738:191::-;7812:16;7831:6;;;;;;;;;;;7812:25;;7857:8;7848:6;;:17;;;;;;;;;;;;;;;;;;7912:8;7881:40;;7902:8;7881:40;;;;;;;;;;;;7801:128;7738:191;:::o;53229:120::-;53308:33;53318:9;53329:11;53308:9;:33::i;:::-;53229:120;;:::o;35379:369::-;35546:28;35556:4;35562:2;35566:7;35546:9;:28::i;:::-;35589:15;:2;:13;;;:15::i;:::-;:76;;;;;35609:56;35640:4;35646:2;35650:7;35659:5;35609:30;:56::i;:::-;35608:57;35589:76;35585:156;;;35689:40;;;;;;;;;;;;;;35585:156;35379:369;;;;:::o;51329:111::-;51389:13;51422:10;51415:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51329:111;:::o;2754:723::-;2810:13;3040:1;3031:5;:10;3027:53;;;3058:10;;;;;;;;;;;;;;;;;;;;;3027:53;3090:12;3105:5;3090:20;;3121:14;3146:78;3161:1;3153:4;:9;3146:78;;3179:8;;;;;:::i;:::-;;;;3210:2;3202:10;;;;;:::i;:::-;;;3146:78;;;3234:19;3266:6;3256:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:39;;3284:154;3300:1;3291:5;:10;3284:154;;3328:1;3318:11;;;;;:::i;:::-;;;3395:2;3387:5;:10;;;;:::i;:::-;3374:2;:24;;;;:::i;:::-;3361:39;;3344:6;3351;3344:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3424:2;3415:11;;;;;:::i;:::-;;;3284:154;;;3462:6;3448:21;;;;;2754:723;;;;:::o;30058:137::-;30119:7;30154:12;:19;30167:5;30154:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;30146:41;;30139:48;;30058:137;;;:::o;36198:104::-;36267:27;36277:2;36281:8;36267:27;;;;;;;;;;;;:9;:27::i;:::-;36198:104;;:::o;39116:2130::-;39231:35;39269:21;39282:7;39269:12;:21::i;:::-;39231:59;;39329:4;39307:26;;:13;:18;;;:26;;;39303:67;;39342:28;;;;;;;;;;;;;;39303:67;39383:22;39425:4;39409:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39446:36;39463:4;39469:12;:10;:12::i;:::-;39446:16;:36::i;:::-;39409:73;:126;;;;39523:12;:10;:12::i;:::-;39499:36;;:20;39511:7;39499:11;:20::i;:::-;:36;;;39409:126;39383:153;;39554:17;39549:66;;39580:35;;;;;;;;;;;;;;39549:66;39644:1;39630:16;;:2;:16;;;39626:52;;;39655:23;;;;;;;;;;;;;;39626:52;39691:43;39713:4;39719:2;39723:7;39732:1;39691:21;:43::i;:::-;39799:35;39816:1;39820:7;39829:4;39799:8;:35::i;:::-;40160:1;40130:12;:18;40143:4;40130:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40204:1;40176:12;:16;40189:2;40176:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40222:31;40256:11;:20;40268:7;40256:20;;;;;;;;;;;40222:54;;40307:2;40291:8;:13;;;:18;;;;;;;;;;;;;;;;;;40357:15;40324:8;:23;;;:49;;;;;;;;;;;;;;;;;;40625:19;40657:1;40647:7;:11;40625:33;;40673:31;40707:11;:24;40719:11;40707:24;;;;;;;;;;;40673:58;;40775:1;40750:27;;:8;:13;;;;;;;;;;;;:27;;;40746:384;;;40960:13;;40945:11;:28;40941:174;;41014:4;40998:8;:13;;;:20;;;;;;;;;;;;;;;;;;41067:13;:28;;;41041:8;:23;;;:54;;;;;;;;;;;;;;;;;;40941:174;40746:384;40105:1036;;;41177:7;41173:2;41158:27;;41167:4;41158:27;;;;;;;;;;;;41196:42;41217:4;41223:2;41227:7;41236:1;41196:20;:42::i;:::-;39220:2026;;39116:2130;;;:::o;41647:2408::-;41727:35;41765:21;41778:7;41765:12;:21::i;:::-;41727:59;;41799:12;41814:13;:18;;;41799:33;;41849:13;41845:290;;;41879:22;41921:4;41905:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;41946:36;41963:4;41969:12;:10;:12::i;:::-;41946:16;:36::i;:::-;41905:77;:134;;;;42027:12;:10;:12::i;:::-;42003:36;;:20;42015:7;42003:11;:20::i;:::-;:36;;;41905:134;41879:161;;42062:17;42057:66;;42088:35;;;;;;;;;;;;;;42057:66;41864:271;41845:290;42147:51;42169:4;42183:1;42187:7;42196:1;42147:21;:51::i;:::-;42263:35;42280:1;42284:7;42293:4;42263:8;:35::i;:::-;42594:31;42628:12;:18;42641:4;42628:18;;;;;;;;;;;;;;;42594:52;;42684:1;42661:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42728:1;42700:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42828:31;42862:11;:20;42874:7;42862:20;;;;;;;;;;;42828:54;;42913:4;42897:8;:13;;;:20;;;;;;;;;;;;;;;;;;42965:15;42932:8;:23;;;:49;;;;;;;;;;;;;;;;;;43014:4;42996:8;:15;;;:22;;;;;;;;;;;;;;;;;;43266:19;43298:1;43288:7;:11;43266:33;;43314:31;43348:11;:24;43360:11;43348:24;;;;;;;;;;;43314:58;;43416:1;43391:27;;:8;:13;;;;;;;;;;;;:27;;;43387:384;;;43601:13;;43586:11;:28;43582:174;;43655:4;43639:8;:13;;;:20;;;;;;;;;;;;;;;;;;43708:13;:28;;;43682:8;:23;;;:54;;;;;;;;;;;;;;;;;;43582:174;43387:384;42569:1213;;;;43826:7;43822:1;43799:35;;43808:4;43799:35;;;;;;;;;;;;43845:50;43866:4;43880:1;43884:7;43893:1;43845:20;:50::i;:::-;44022:12;;:14;;;;;;;;;;;;;41716:2339;;41647:2408;;:::o;9169:326::-;9229:4;9486:1;9464:7;:19;;;:23;9457:30;;9169:326;;;:::o;44861:667::-;45024:4;45061:2;45045:36;;;45082:12;:10;:12::i;:::-;45096:4;45102:7;45111:5;45045:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45041:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45296:1;45279:6;:13;:18;45275:235;;;45325:40;;;;;;;;;;;;;;45275:235;45468:6;45462:13;45453:6;45449:2;45445:15;45438:38;45041:480;45174:45;;;45164:55;;;:6;:55;;;;45157:62;;;44861:667;;;;;;:::o;36665:163::-;36788:32;36794:2;36798:8;36808:5;36815:4;36788:5;:32::i;:::-;36665:163;;;:::o;46176:159::-;;;;;:::o;46994:158::-;;;;;:::o;37087:1775::-;37226:20;37249:13;;37226:36;;37291:1;37277:16;;:2;:16;;;37273:48;;;37302:19;;;;;;;;;;;;;;37273:48;37348:1;37336:8;:13;37332:44;;;37358:18;;;;;;;;;;;;;;37332:44;37389:61;37419:1;37423:2;37427:12;37441:8;37389:21;:61::i;:::-;37762:8;37727:12;:16;37740:2;37727:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37826:8;37786:12;:16;37799:2;37786:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37885:2;37852:11;:25;37864:12;37852:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37952:15;37902:11;:25;37914:12;37902:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37985:20;38008:12;37985:35;;38035:11;38064:8;38049:12;:23;38035:37;;38093:4;:23;;;;;38101:15;:2;:13;;;:15::i;:::-;38093:23;38089:641;;;38137:314;38193:12;38189:2;38168:38;;38185:1;38168:38;;;;;;;;;;;;38234:69;38273:1;38277:2;38281:14;;;;;;38297:5;38234:30;:69::i;:::-;38229:174;;38339:40;;;;;;;;;;;;;;38229:174;38446:3;38430:12;:19;;38137:314;;38532:12;38515:13;;:29;38511:43;;38546:8;;;38511:43;38089:641;;;38595:120;38651:14;;;;;;38647:2;38626:40;;38643:1;38626:40;;;;;;;;;;;;38710:3;38694:12;:19;;38595:120;;38089:641;38760:12;38744:13;:28;;;;37702:1082;;38794:60;38823:1;38827:2;38831:12;38845:8;38794:20;:60::i;:::-;37215:1647;37087:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:137::-;4453:5;4491:6;4478:20;4469:29;;4507:32;4533:5;4507:32;:::i;:::-;4408:137;;;;:::o;4551:139::-;4597:5;4635:6;4622:20;4613:29;;4651:33;4678:5;4651:33;:::i;:::-;4551:139;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:943::-;6231:6;6239;6247;6255;6304:3;6292:9;6283:7;6279:23;6275:33;6272:120;;;6311:79;;:::i;:::-;6272:120;6431:1;6456:53;6501:7;6492:6;6481:9;6477:22;6456:53;:::i;:::-;6446:63;;6402:117;6558:2;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;:::i;:::-;6574:63;;6529:118;6686:2;6712:53;6757:7;6748:6;6737:9;6733:22;6712:53;:::i;:::-;6702:63;;6657:118;6842:2;6831:9;6827:18;6814:32;6873:18;6865:6;6862:30;6859:117;;;6895:79;;:::i;:::-;6859:117;7000:62;7054:7;7045:6;7034:9;7030:22;7000:62;:::i;:::-;6990:72;;6785:287;6136:943;;;;;;;:::o;7085:468::-;7150:6;7158;7207:2;7195:9;7186:7;7182:23;7178:32;7175:119;;;7213:79;;:::i;:::-;7175:119;7333:1;7358:53;7403:7;7394:6;7383:9;7379:22;7358:53;:::i;:::-;7348:63;;7304:117;7460:2;7486:50;7528:7;7519:6;7508:9;7504:22;7486:50;:::i;:::-;7476:60;;7431:115;7085:468;;;;;:::o;7559:474::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7937:2;7963:53;8008:7;7999:6;7988:9;7984:22;7963:53;:::i;:::-;7953:63;;7908:118;7559:474;;;;;:::o;8039:539::-;8123:6;8172:2;8160:9;8151:7;8147:23;8143:32;8140:119;;;8178:79;;:::i;:::-;8140:119;8326:1;8315:9;8311:17;8298:31;8356:18;8348:6;8345:30;8342:117;;;8378:79;;:::i;:::-;8342:117;8483:78;8553:7;8544:6;8533:9;8529:22;8483:78;:::i;:::-;8473:88;;8269:302;8039:539;;;;:::o;8584:::-;8668:6;8717:2;8705:9;8696:7;8692:23;8688:32;8685:119;;;8723:79;;:::i;:::-;8685:119;8871:1;8860:9;8856:17;8843:31;8901:18;8893:6;8890:30;8887:117;;;8923:79;;:::i;:::-;8887:117;9028:78;9098:7;9089:6;9078:9;9074:22;9028:78;:::i;:::-;9018:88;;8814:302;8584:539;;;;:::o;9129:327::-;9187:6;9236:2;9224:9;9215:7;9211:23;9207:32;9204:119;;;9242:79;;:::i;:::-;9204:119;9362:1;9387:52;9431:7;9422:6;9411:9;9407:22;9387:52;:::i;:::-;9377:62;;9333:116;9129:327;;;;:::o;9462:349::-;9531:6;9580:2;9568:9;9559:7;9555:23;9551:32;9548:119;;;9586:79;;:::i;:::-;9548:119;9706:1;9731:63;9786:7;9777:6;9766:9;9762:22;9731:63;:::i;:::-;9721:73;;9677:127;9462:349;;;;:::o;9817:509::-;9886:6;9935:2;9923:9;9914:7;9910:23;9906:32;9903:119;;;9941:79;;:::i;:::-;9903:119;10089:1;10078:9;10074:17;10061:31;10119:18;10111:6;10108:30;10105:117;;;10141:79;;:::i;:::-;10105:117;10246:63;10301:7;10292:6;10281:9;10277:22;10246:63;:::i;:::-;10236:73;;10032:287;9817:509;;;;:::o;10332:327::-;10390:6;10439:2;10427:9;10418:7;10414:23;10410:32;10407:119;;;10445:79;;:::i;:::-;10407:119;10565:1;10590:52;10634:7;10625:6;10614:9;10610:22;10590:52;:::i;:::-;10580:62;;10536:116;10332:327;;;;:::o;10665:329::-;10724:6;10773:2;10761:9;10752:7;10748:23;10744:32;10741:119;;;10779:79;;:::i;:::-;10741:119;10899:1;10924:53;10969:7;10960:6;10949:9;10945:22;10924:53;:::i;:::-;10914:63;;10870:117;10665:329;;;;:::o;11000:118::-;11087:24;11105:5;11087:24;:::i;:::-;11082:3;11075:37;11000:118;;:::o;11124:109::-;11205:21;11220:5;11205:21;:::i;:::-;11200:3;11193:34;11124:109;;:::o;11239:360::-;11325:3;11353:38;11385:5;11353:38;:::i;:::-;11407:70;11470:6;11465:3;11407:70;:::i;:::-;11400:77;;11486:52;11531:6;11526:3;11519:4;11512:5;11508:16;11486:52;:::i;:::-;11563:29;11585:6;11563:29;:::i;:::-;11558:3;11554:39;11547:46;;11329:270;11239:360;;;;:::o;11605:161::-;11707:52;11753:5;11707:52;:::i;:::-;11702:3;11695:65;11605:161;;:::o;11772:147::-;11867:45;11906:5;11867:45;:::i;:::-;11862:3;11855:58;11772:147;;:::o;11925:364::-;12013:3;12041:39;12074:5;12041:39;:::i;:::-;12096:71;12160:6;12155:3;12096:71;:::i;:::-;12089:78;;12176:52;12221:6;12216:3;12209:4;12202:5;12198:16;12176:52;:::i;:::-;12253:29;12275:6;12253:29;:::i;:::-;12248:3;12244:39;12237:46;;12017:272;11925:364;;;;:::o;12295:377::-;12401:3;12429:39;12462:5;12429:39;:::i;:::-;12484:89;12566:6;12561:3;12484:89;:::i;:::-;12477:96;;12582:52;12627:6;12622:3;12615:4;12608:5;12604:16;12582:52;:::i;:::-;12659:6;12654:3;12650:16;12643:23;;12405:267;12295:377;;;;:::o;12678:366::-;12820:3;12841:67;12905:2;12900:3;12841:67;:::i;:::-;12834:74;;12917:93;13006:3;12917:93;:::i;:::-;13035:2;13030:3;13026:12;13019:19;;12678:366;;;:::o;13050:::-;13192:3;13213:67;13277:2;13272:3;13213:67;:::i;:::-;13206:74;;13289:93;13378:3;13289:93;:::i;:::-;13407:2;13402:3;13398:12;13391:19;;13050:366;;;:::o;13422:::-;13564:3;13585:67;13649:2;13644:3;13585:67;:::i;:::-;13578:74;;13661:93;13750:3;13661:93;:::i;:::-;13779:2;13774:3;13770:12;13763:19;;13422:366;;;:::o;13794:::-;13936:3;13957:67;14021:2;14016:3;13957:67;:::i;:::-;13950:74;;14033:93;14122:3;14033:93;:::i;:::-;14151:2;14146:3;14142:12;14135:19;;13794:366;;;:::o;14166:::-;14308:3;14329:67;14393:2;14388:3;14329:67;:::i;:::-;14322:74;;14405:93;14494:3;14405:93;:::i;:::-;14523:2;14518:3;14514:12;14507:19;;14166:366;;;:::o;14538:::-;14680:3;14701:67;14765:2;14760:3;14701:67;:::i;:::-;14694:74;;14777:93;14866:3;14777:93;:::i;:::-;14895:2;14890:3;14886:12;14879:19;;14538:366;;;:::o;14910:::-;15052:3;15073:67;15137:2;15132:3;15073:67;:::i;:::-;15066:74;;15149:93;15238:3;15149:93;:::i;:::-;15267:2;15262:3;15258:12;15251:19;;14910:366;;;:::o;15282:398::-;15441:3;15462:83;15543:1;15538:3;15462:83;:::i;:::-;15455:90;;15554:93;15643:3;15554:93;:::i;:::-;15672:1;15667:3;15663:11;15656:18;;15282:398;;;:::o;15686:366::-;15828:3;15849:67;15913:2;15908:3;15849:67;:::i;:::-;15842:74;;15925:93;16014:3;15925:93;:::i;:::-;16043:2;16038:3;16034:12;16027:19;;15686:366;;;:::o;16058:::-;16200:3;16221:67;16285:2;16280:3;16221:67;:::i;:::-;16214:74;;16297:93;16386:3;16297:93;:::i;:::-;16415:2;16410:3;16406:12;16399:19;;16058:366;;;:::o;16430:115::-;16515:23;16532:5;16515:23;:::i;:::-;16510:3;16503:36;16430:115;;:::o;16551:118::-;16638:24;16656:5;16638:24;:::i;:::-;16633:3;16626:37;16551:118;;:::o;16675:435::-;16855:3;16877:95;16968:3;16959:6;16877:95;:::i;:::-;16870:102;;16989:95;17080:3;17071:6;16989:95;:::i;:::-;16982:102;;17101:3;17094:10;;16675:435;;;;;:::o;17116:379::-;17300:3;17322:147;17465:3;17322:147;:::i;:::-;17315:154;;17486:3;17479:10;;17116:379;;;:::o;17501:222::-;17594:4;17632:2;17621:9;17617:18;17609:26;;17645:71;17713:1;17702:9;17698:17;17689:6;17645:71;:::i;:::-;17501:222;;;;:::o;17729:332::-;17850:4;17888:2;17877:9;17873:18;17865:26;;17901:71;17969:1;17958:9;17954:17;17945:6;17901:71;:::i;:::-;17982:72;18050:2;18039:9;18035:18;18026:6;17982:72;:::i;:::-;17729:332;;;;;:::o;18067:640::-;18262:4;18300:3;18289:9;18285:19;18277:27;;18314:71;18382:1;18371:9;18367:17;18358:6;18314:71;:::i;:::-;18395:72;18463:2;18452:9;18448:18;18439:6;18395:72;:::i;:::-;18477;18545:2;18534:9;18530:18;18521:6;18477:72;:::i;:::-;18596:9;18590:4;18586:20;18581:2;18570:9;18566:18;18559:48;18624:76;18695:4;18686:6;18624:76;:::i;:::-;18616:84;;18067:640;;;;;;;:::o;18713:348::-;18842:4;18880:2;18869:9;18865:18;18857:26;;18893:71;18961:1;18950:9;18946:17;18937:6;18893:71;:::i;:::-;18974:80;19050:2;19039:9;19035:18;19026:6;18974:80;:::i;:::-;18713:348;;;;;:::o;19067:332::-;19188:4;19226:2;19215:9;19211:18;19203:26;;19239:71;19307:1;19296:9;19292:17;19283:6;19239:71;:::i;:::-;19320:72;19388:2;19377:9;19373:18;19364:6;19320:72;:::i;:::-;19067:332;;;;;:::o;19405:210::-;19492:4;19530:2;19519:9;19515:18;19507:26;;19543:65;19605:1;19594:9;19590:17;19581:6;19543:65;:::i;:::-;19405:210;;;;:::o;19621:252::-;19729:4;19767:2;19756:9;19752:18;19744:26;;19780:86;19863:1;19852:9;19848:17;19839:6;19780:86;:::i;:::-;19621:252;;;;:::o;19879:313::-;19992:4;20030:2;20019:9;20015:18;20007:26;;20079:9;20073:4;20069:20;20065:1;20054:9;20050:17;20043:47;20107:78;20180:4;20171:6;20107:78;:::i;:::-;20099:86;;19879:313;;;;:::o;20198:419::-;20364:4;20402:2;20391:9;20387:18;20379:26;;20451:9;20445:4;20441:20;20437:1;20426:9;20422:17;20415:47;20479:131;20605:4;20479:131;:::i;:::-;20471:139;;20198:419;;;:::o;20623:::-;20789:4;20827:2;20816:9;20812:18;20804:26;;20876:9;20870:4;20866:20;20862:1;20851:9;20847:17;20840:47;20904:131;21030:4;20904:131;:::i;:::-;20896:139;;20623:419;;;:::o;21048:::-;21214:4;21252:2;21241:9;21237:18;21229:26;;21301:9;21295:4;21291:20;21287:1;21276:9;21272:17;21265:47;21329:131;21455:4;21329:131;:::i;:::-;21321:139;;21048:419;;;:::o;21473:::-;21639:4;21677:2;21666:9;21662:18;21654:26;;21726:9;21720:4;21716:20;21712:1;21701:9;21697:17;21690:47;21754:131;21880:4;21754:131;:::i;:::-;21746:139;;21473:419;;;:::o;21898:::-;22064:4;22102:2;22091:9;22087:18;22079:26;;22151:9;22145:4;22141:20;22137:1;22126:9;22122:17;22115:47;22179:131;22305:4;22179:131;:::i;:::-;22171:139;;21898:419;;;:::o;22323:::-;22489:4;22527:2;22516:9;22512:18;22504:26;;22576:9;22570:4;22566:20;22562:1;22551:9;22547:17;22540:47;22604:131;22730:4;22604:131;:::i;:::-;22596:139;;22323:419;;;:::o;22748:::-;22914:4;22952:2;22941:9;22937:18;22929:26;;23001:9;22995:4;22991:20;22987:1;22976:9;22972:17;22965:47;23029:131;23155:4;23029:131;:::i;:::-;23021:139;;22748:419;;;:::o;23173:::-;23339:4;23377:2;23366:9;23362:18;23354:26;;23426:9;23420:4;23416:20;23412:1;23401:9;23397:17;23390:47;23454:131;23580:4;23454:131;:::i;:::-;23446:139;;23173:419;;;:::o;23598:::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:218::-;24114:4;24152:2;24141:9;24137:18;24129:26;;24165:69;24231:1;24220:9;24216:17;24207:6;24165:69;:::i;:::-;24023:218;;;;:::o;24247:222::-;24340:4;24378:2;24367:9;24363:18;24355:26;;24391:71;24459:1;24448:9;24444:17;24435:6;24391:71;:::i;:::-;24247:222;;;;:::o;24475:129::-;24509:6;24536:20;;:::i;:::-;24526:30;;24565:33;24593:4;24585:6;24565:33;:::i;:::-;24475:129;;;:::o;24610:75::-;24643:6;24676:2;24670:9;24660:19;;24610:75;:::o;24691:311::-;24768:4;24858:18;24850:6;24847:30;24844:56;;;24880:18;;:::i;:::-;24844:56;24930:4;24922:6;24918:17;24910:25;;24990:4;24984;24980:15;24972:23;;24691:311;;;:::o;25008:::-;25085:4;25175:18;25167:6;25164:30;25161:56;;;25197:18;;:::i;:::-;25161:56;25247:4;25239:6;25235:17;25227:25;;25307:4;25301;25297:15;25289:23;;25008:311;;;:::o;25325:307::-;25386:4;25476:18;25468:6;25465:30;25462:56;;;25498:18;;:::i;:::-;25462:56;25536:29;25558:6;25536:29;:::i;:::-;25528:37;;25620:4;25614;25610:15;25602:23;;25325:307;;;:::o;25638:308::-;25700:4;25790:18;25782:6;25779:30;25776:56;;;25812:18;;:::i;:::-;25776:56;25850:29;25872:6;25850:29;:::i;:::-;25842:37;;25934:4;25928;25924:15;25916:23;;25638:308;;;:::o;25952:98::-;26003:6;26037:5;26031:12;26021:22;;25952:98;;;:::o;26056:99::-;26108:6;26142:5;26136:12;26126:22;;26056:99;;;:::o;26161:168::-;26244:11;26278:6;26273:3;26266:19;26318:4;26313:3;26309:14;26294:29;;26161:168;;;;:::o;26335:147::-;26436:11;26473:3;26458:18;;26335:147;;;;:::o;26488:169::-;26572:11;26606:6;26601:3;26594:19;26646:4;26641:3;26637:14;26622:29;;26488:169;;;;:::o;26663:148::-;26765:11;26802:3;26787:18;;26663:148;;;;:::o;26817:305::-;26857:3;26876:20;26894:1;26876:20;:::i;:::-;26871:25;;26910:20;26928:1;26910:20;:::i;:::-;26905:25;;27064:1;26996:66;26992:74;26989:1;26986:81;26983:107;;;27070:18;;:::i;:::-;26983:107;27114:1;27111;27107:9;27100:16;;26817:305;;;;:::o;27128:185::-;27168:1;27185:20;27203:1;27185:20;:::i;:::-;27180:25;;27219:20;27237:1;27219:20;:::i;:::-;27214:25;;27258:1;27248:35;;27263:18;;:::i;:::-;27248:35;27305:1;27302;27298:9;27293:14;;27128:185;;;;:::o;27319:348::-;27359:7;27382:20;27400:1;27382:20;:::i;:::-;27377:25;;27416:20;27434:1;27416:20;:::i;:::-;27411:25;;27604:1;27536:66;27532:74;27529:1;27526:81;27521:1;27514:9;27507:17;27503:105;27500:131;;;27611:18;;:::i;:::-;27500:131;27659:1;27656;27652:9;27641:20;;27319:348;;;;:::o;27673:191::-;27713:4;27733:20;27751:1;27733:20;:::i;:::-;27728:25;;27767:20;27785:1;27767:20;:::i;:::-;27762:25;;27806:1;27803;27800:8;27797:34;;;27811:18;;:::i;:::-;27797:34;27856:1;27853;27849:9;27841:17;;27673:191;;;;:::o;27870:96::-;27907:7;27936:24;27954:5;27936:24;:::i;:::-;27925:35;;27870:96;;;:::o;27972:90::-;28006:7;28049:5;28042:13;28035:21;28024:32;;27972:90;;;:::o;28068:149::-;28104:7;28144:66;28137:5;28133:78;28122:89;;28068:149;;;:::o;28223:89::-;28259:7;28299:6;28292:5;28288:18;28277:29;;28223:89;;;:::o;28318:126::-;28355:7;28395:42;28388:5;28384:54;28373:65;;28318:126;;;:::o;28450:77::-;28487:7;28516:5;28505:16;;28450:77;;;:::o;28533:141::-;28598:9;28631:37;28662:5;28631:37;:::i;:::-;28618:50;;28533:141;;;:::o;28680:121::-;28738:9;28771:24;28789:5;28771:24;:::i;:::-;28758:37;;28680:121;;;:::o;28807:126::-;28857:9;28890:37;28921:5;28890:37;:::i;:::-;28877:50;;28807:126;;;:::o;28939:113::-;28989:9;29022:24;29040:5;29022:24;:::i;:::-;29009:37;;28939:113;;;:::o;29058:154::-;29142:6;29137:3;29132;29119:30;29204:1;29195:6;29190:3;29186:16;29179:27;29058:154;;;:::o;29218:307::-;29286:1;29296:113;29310:6;29307:1;29304:13;29296:113;;;29395:1;29390:3;29386:11;29380:18;29376:1;29371:3;29367:11;29360:39;29332:2;29329:1;29325:10;29320:15;;29296:113;;;29427:6;29424:1;29421:13;29418:101;;;29507:1;29498:6;29493:3;29489:16;29482:27;29418:101;29267:258;29218:307;;;:::o;29531:171::-;29570:3;29593:24;29611:5;29593:24;:::i;:::-;29584:33;;29639:4;29632:5;29629:15;29626:41;;;29647:18;;:::i;:::-;29626:41;29694:1;29687:5;29683:13;29676:20;;29531:171;;;:::o;29708:320::-;29752:6;29789:1;29783:4;29779:12;29769:22;;29836:1;29830:4;29826:12;29857:18;29847:81;;29913:4;29905:6;29901:17;29891:27;;29847:81;29975:2;29967:6;29964:14;29944:18;29941:38;29938:84;;;29994:18;;:::i;:::-;29938:84;29759:269;29708:320;;;:::o;30034:281::-;30117:27;30139:4;30117:27;:::i;:::-;30109:6;30105:40;30247:6;30235:10;30232:22;30211:18;30199:10;30196:34;30193:62;30190:88;;;30258:18;;:::i;:::-;30190:88;30298:10;30294:2;30287:22;30077:238;30034:281;;:::o;30321:233::-;30360:3;30383:24;30401:5;30383:24;:::i;:::-;30374:33;;30429:66;30422:5;30419:77;30416:103;;;30499:18;;:::i;:::-;30416:103;30546:1;30539:5;30535:13;30528:20;;30321:233;;;:::o;30560:176::-;30592:1;30609:20;30627:1;30609:20;:::i;:::-;30604:25;;30643:20;30661:1;30643:20;:::i;:::-;30638:25;;30682:1;30672:35;;30687:18;;:::i;:::-;30672:35;30728:1;30725;30721:9;30716:14;;30560:176;;;;:::o;30742:180::-;30790:77;30787:1;30780:88;30887:4;30884:1;30877:15;30911:4;30908:1;30901:15;30928:180;30976:77;30973:1;30966:88;31073:4;31070:1;31063:15;31097:4;31094:1;31087:15;31114:180;31162:77;31159:1;31152:88;31259:4;31256:1;31249:15;31283:4;31280:1;31273:15;31300:180;31348:77;31345:1;31338:88;31445:4;31442:1;31435:15;31469:4;31466:1;31459:15;31486:180;31534:77;31531:1;31524:88;31631:4;31628:1;31621:15;31655:4;31652:1;31645:15;31672:117;31781:1;31778;31771:12;31795:117;31904:1;31901;31894:12;31918:117;32027:1;32024;32017:12;32041:117;32150:1;32147;32140:12;32164:117;32273:1;32270;32263:12;32287:102;32328:6;32379:2;32375:7;32370:2;32363:5;32359:14;32355:28;32345:38;;32287:102;;;:::o;32395:168::-;32535:20;32531:1;32523:6;32519:14;32512:44;32395:168;:::o;32569:225::-;32709:34;32705:1;32697:6;32693:14;32686:58;32778:8;32773:2;32765:6;32761:15;32754:33;32569:225;:::o;32800:::-;32940:34;32936:1;32928:6;32924:14;32917:58;33009:8;33004:2;32996:6;32992:15;32985:33;32800:225;:::o;33031:166::-;33171:18;33167:1;33159:6;33155:14;33148:42;33031:166;:::o;33203:226::-;33343:34;33339:1;33331:6;33327:14;33320:58;33412:9;33407:2;33399:6;33395:15;33388:34;33203:226;:::o;33435:182::-;33575:34;33571:1;33563:6;33559:14;33552:58;33435:182;:::o;33623:234::-;33763:34;33759:1;33751:6;33747:14;33740:58;33832:17;33827:2;33819:6;33815:15;33808:42;33623:234;:::o;33863:114::-;;:::o;33983:223::-;34123:34;34119:1;34111:6;34107:14;34100:58;34192:6;34187:2;34179:6;34175:15;34168:31;33983:223;:::o;34212:174::-;34352:26;34348:1;34340:6;34336:14;34329:50;34212:174;:::o;34392:122::-;34465:24;34483:5;34465:24;:::i;:::-;34458:5;34455:35;34445:63;;34504:1;34501;34494:12;34445:63;34392:122;:::o;34520:116::-;34590:21;34605:5;34590:21;:::i;:::-;34583:5;34580:32;34570:60;;34626:1;34623;34616:12;34570:60;34520:116;:::o;34642:120::-;34714:23;34731:5;34714:23;:::i;:::-;34707:5;34704:34;34694:62;;34752:1;34749;34742:12;34694:62;34642:120;:::o;34768:::-;34840:23;34857:5;34840:23;:::i;:::-;34833:5;34830:34;34820:62;;34878:1;34875;34868:12;34820:62;34768:120;:::o;34894:122::-;34967:24;34985:5;34967:24;:::i;:::-;34960:5;34957:35;34947:63;;35006:1;35003;34996:12;34947:63;34894:122;:::o

Swarm Source

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