ETH Price: $2,530.27 (-2.77%)

Token

thisisart (TIA)
 

Overview

Max Total Supply

3,333 TIA

Holders

350

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 TIA
0x376ac2ba9355ffa251a2b712a8fdf0361dfb9844
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:
ThisIsArt

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-05-22
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// 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: @openzeppelin/contracts/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _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 {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/goblinpunks.sol



pragma solidity >=0.7.0 <0.9.0;




contract ThisIsArt is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "ipfs://QmP7syK4SMJWaDJP5HVjC1PU5JkgFvYjWYhcNz9mfyQf8y/";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.001 ether;
  uint256 public maxSupply = 3333;
  uint256 public maxMintAmountPerTx = 10;
  uint256 public maximumLimit = 10;

  bool public paused = true;
  bool public revealed = true;

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    string memory _hiddenMetadataUri
  ) ERC721(_tokenName, _tokenSymbol) {
    setHiddenMetadataUri(_hiddenMetadataUri);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");
    require((balanceOf(msg.sender) + _mintAmount) <= maximumLimit, "Cannot exceed limit");

    _mintLoop(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

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

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner {
    // This will transfer the remaining contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumLimit","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":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405260366080818152906200296c60a03980516200002991600891602090910190620001e9565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200005891600991620001e9565b5066038d7ea4c68000600b55610d05600c55600a600d819055600e55600f805461ff001960ff19909116600117166101001790553480156200009957600080fd5b50604051620029a2380380620029a2833981016040819052620000bc9162000342565b825183908390620000d5906000906020850190620001e9565b508051620000eb906001906020840190620001e9565b50505062000108620001026200011c60201b60201c565b62000120565b620001138162000172565b50505062000457565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200017c6200011c565b6001600160a01b03166200018f620001da565b6001600160a01b031614620001c15760405162461bcd60e51b8152600401620001b890620003cf565b60405180910390fd5b8051620001d690600a906020840190620001e9565b5050565b6006546001600160a01b031690565b828054620001f79062000404565b90600052602060002090601f0160209004810192826200021b576000855562000266565b82601f106200023657805160ff191683800117855562000266565b8280016001018555821562000266579182015b828111156200026657825182559160200191906001019062000249565b506200027492915062000278565b5090565b5b8082111562000274576000815560010162000279565b600082601f830112620002a0578081fd5b81516001600160401b0380821115620002bd57620002bd62000441565b604051601f8301601f19908116603f01168101908282118183101715620002e857620002e862000441565b8160405283815260209250868385880101111562000304578485fd5b8491505b8382101562000327578582018301518183018401529082019062000308565b838211156200033857848385830101525b9695505050505050565b60008060006060848603121562000357578283fd5b83516001600160401b03808211156200036e578485fd5b6200037c878388016200028f565b9450602086015191508082111562000392578384fd5b620003a0878388016200028f565b93506040860151915080821115620003b6578283fd5b50620003c5868287016200028f565b9150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6002810460018216806200041957607f821691505b602082108114156200043b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61250580620004676000396000f3fe60806040526004361061021a5760003560e01c806362b99ad411610123578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146105c4578063e0a80853146105d9578063e985e9c5146105f9578063efbd73f414610619578063f2fde38b146106395761021a565b8063a22cb4651461052f578063a45ba8e71461054f578063b071401b14610564578063b88d4fde14610584578063c87b56dd146105a45761021a565b80637ec4a659116100f25780637ec4a659146104bd5780638da5cb5b146104dd57806394354fd0146104f257806395d89b4114610507578063a0712d681461051c5761021a565b806362b99ad4146104535780636352211e1461046857806370a0823114610488578063715018a6146104a85761021a565b806326741170116101a657806344a0d68a1161017557806344a0d68a146103d45780634fdd43cb146103f457806351830227146104145780635503a0e8146104295780635c975abb1461043e5761021a565b8063267411701461035d5780633ccfd60b1461037257806342842e0e14610387578063438b6300146103a75761021a565b806313faede6116101ed57806313faede6146102c657806316ba10e0146102e857806316c38b3c1461030857806318160ddd1461032857806323b872dd1461033d5761021a565b806301ffc9a71461021f57806306fdde0314610255578063081812fc14610277578063095ea7b3146102a4575b600080fd5b34801561022b57600080fd5b5061023f61023a366004611bbf565b610659565b60405161024c9190611dfd565b60405180910390f35b34801561026157600080fd5b5061026a6106a1565b60405161024c9190611e08565b34801561028357600080fd5b50610297610292366004611c3d565b610733565b60405161024c9190611d68565b3480156102b057600080fd5b506102c46102bf366004611b7c565b61077f565b005b3480156102d257600080fd5b506102db610817565b60405161024c919061236a565b3480156102f457600080fd5b506102c4610303366004611bf7565b61081d565b34801561031457600080fd5b506102c4610323366004611ba5565b610873565b34801561033457600080fd5b506102db6108c5565b34801561034957600080fd5b506102c4610358366004611a9f565b6108d6565b34801561036957600080fd5b506102db61090e565b34801561037e57600080fd5b506102c4610914565b34801561039357600080fd5b506102c46103a2366004611a9f565b6109c6565b3480156103b357600080fd5b506103c76103c2366004611a53565b6109e1565b60405161024c9190611db9565b3480156103e057600080fd5b506102c46103ef366004611c3d565b610ade565b34801561040057600080fd5b506102c461040f366004611bf7565b610b22565b34801561042057600080fd5b5061023f610b74565b34801561043557600080fd5b5061026a610b82565b34801561044a57600080fd5b5061023f610c10565b34801561045f57600080fd5b5061026a610c19565b34801561047457600080fd5b50610297610483366004611c3d565b610c26565b34801561049457600080fd5b506102db6104a3366004611a53565b610c5b565b3480156104b457600080fd5b506102c4610c9f565b3480156104c957600080fd5b506102c46104d8366004611bf7565b610cea565b3480156104e957600080fd5b50610297610d3c565b3480156104fe57600080fd5b506102db610d4b565b34801561051357600080fd5b5061026a610d51565b6102c461052a366004611c3d565b610d60565b34801561053b57600080fd5b506102c461054a366004611b53565b610e54565b34801561055b57600080fd5b5061026a610e66565b34801561057057600080fd5b506102c461057f366004611c3d565b610e73565b34801561059057600080fd5b506102c461059f366004611ada565b610eb7565b3480156105b057600080fd5b5061026a6105bf366004611c3d565b610ef6565b3480156105d057600080fd5b506102db61101d565b3480156105e557600080fd5b506102c46105f4366004611ba5565b611023565b34801561060557600080fd5b5061023f610614366004611a6d565b61107c565b34801561062557600080fd5b506102c4610634366004611c55565b6110aa565b34801561064557600080fd5b506102c4610654366004611a53565b611158565b60006001600160e01b031982166380ac58cd60e01b148061068a57506001600160e01b03198216635b5e139f60e01b145b806106995750610699826111c6565b90505b919050565b6060600080546106b09061240d565b80601f01602080910402602001604051908101604052809291908181526020018280546106dc9061240d565b80156107295780601f106106fe57610100808354040283529160200191610729565b820191906000526020600020905b81548152906001019060200180831161070c57829003601f168201915b5050505050905090565b600061073e826111df565b6107635760405162461bcd60e51b815260040161075a90612176565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061078a82610c26565b9050806001600160a01b0316836001600160a01b031614156107be5760405162461bcd60e51b815260040161075a9061227d565b806001600160a01b03166107d06111fc565b6001600160a01b031614806107ec57506107ec816106146111fc565b6108085760405162461bcd60e51b815260040161075a90612051565b6108128383611200565b505050565b600b5481565b6108256111fc565b6001600160a01b0316610836610d3c565b6001600160a01b03161461085c5760405162461bcd60e51b815260040161075a906121c2565b805161086f90600990602084019061191d565b5050565b61087b6111fc565b6001600160a01b031661088c610d3c565b6001600160a01b0316146108b25760405162461bcd60e51b815260040161075a906121c2565b600f805460ff1916911515919091179055565b60006108d1600761126e565b905090565b6108e76108e16111fc565b82611272565b6109035760405162461bcd60e51b815260040161075a906122ec565b6108128383836112f7565b600e5481565b61091c6111fc565b6001600160a01b031661092d610d3c565b6001600160a01b0316146109535760405162461bcd60e51b815260040161075a906121c2565b600061095d610d3c565b6001600160a01b03164760405161097390611d65565b60006040518083038185875af1925050503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50509050806109c357600080fd5b50565b61081283838360405180602001604052806000815250610eb7565b606060006109ee83610c5b565b905060008167ffffffffffffffff811115610a1957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a42578160200160208202803683370190505b509050600160005b8381108015610a5b5750600c548211155b15610ad4576000610a6b83610c26565b9050866001600160a01b0316816001600160a01b03161415610ac15782848381518110610aa857634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610abd81612448565b9250505b82610acb81612448565b93505050610a4a565b5090949350505050565b610ae66111fc565b6001600160a01b0316610af7610d3c565b6001600160a01b031614610b1d5760405162461bcd60e51b815260040161075a906121c2565b600b55565b610b2a6111fc565b6001600160a01b0316610b3b610d3c565b6001600160a01b031614610b615760405162461bcd60e51b815260040161075a906121c2565b805161086f90600a90602084019061191d565b600f54610100900460ff1681565b60098054610b8f9061240d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb9061240d565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b505050505081565b600f5460ff1681565b60088054610b8f9061240d565b6000818152600260205260408120546001600160a01b0316806106995760405162461bcd60e51b815260040161075a906120f8565b60006001600160a01b038216610c835760405162461bcd60e51b815260040161075a906120ae565b506001600160a01b031660009081526003602052604090205490565b610ca76111fc565b6001600160a01b0316610cb8610d3c565b6001600160a01b031614610cde5760405162461bcd60e51b815260040161075a906121c2565b610ce8600061142a565b565b610cf26111fc565b6001600160a01b0316610d03610d3c565b6001600160a01b031614610d295760405162461bcd60e51b815260040161075a906121c2565b805161086f90600890602084019061191d565b6006546001600160a01b031690565b600d5481565b6060600180546106b09061240d565b80600081118015610d735750600d548111155b610d8f5760405162461bcd60e51b815260040161075a90611f2f565b600c5481610d9d600761126e565b610da7919061237f565b1115610dc55760405162461bcd60e51b815260040161075a906122be565b600f5460ff1615610de85760405162461bcd60e51b815260040161075a906121f7565b81600b54610df691906123ab565b341015610e155760405162461bcd60e51b815260040161075a9061233d565b600e5482610e2233610c5b565b610e2c919061237f565b1115610e4a5760405162461bcd60e51b815260040161075a90612024565b61086f338361147c565b61086f610e5f6111fc565b83836114b6565b600a8054610b8f9061240d565b610e7b6111fc565b6001600160a01b0316610e8c610d3c565b6001600160a01b031614610eb25760405162461bcd60e51b815260040161075a906121c2565b600d55565b610ec8610ec26111fc565b83611272565b610ee45760405162461bcd60e51b815260040161075a906122ec565b610ef084848484611559565b50505050565b6060610f01826111df565b610f1d5760405162461bcd60e51b815260040161075a9061222e565b600f54610100900460ff16610fbe57600a8054610f399061240d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f659061240d565b8015610fb25780601f10610f8757610100808354040283529160200191610fb2565b820191906000526020600020905b815481529060010190602001808311610f9557829003601f168201915b5050505050905061069c565b6000610fc861158c565b90506000815111610fe85760405180602001604052806000815250611016565b80610ff28461159b565b600960405160200161100693929190611ca3565b6040516020818303038152906040525b9392505050565b600c5481565b61102b6111fc565b6001600160a01b031661103c610d3c565b6001600160a01b0316146110625760405162461bcd60e51b815260040161075a906121c2565b600f80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816000811180156110bd5750600d548111155b6110d95760405162461bcd60e51b815260040161075a90611f2f565b600c54816110e7600761126e565b6110f1919061237f565b111561110f5760405162461bcd60e51b815260040161075a906122be565b6111176111fc565b6001600160a01b0316611128610d3c565b6001600160a01b03161461114e5760405162461bcd60e51b815260040161075a906121c2565b610812828461147c565b6111606111fc565b6001600160a01b0316611171610d3c565b6001600160a01b0316146111975760405162461bcd60e51b815260040161075a906121c2565b6001600160a01b0381166111bd5760405162461bcd60e51b815260040161075a90611e6d565b6109c38161142a565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061123582610c26565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5490565b600061127d826111df565b6112995760405162461bcd60e51b815260040161075a90611fd8565b60006112a483610c26565b9050806001600160a01b0316846001600160a01b031614806112df5750836001600160a01b03166112d484610733565b6001600160a01b0316145b806112ef57506112ef818561107c565b949350505050565b826001600160a01b031661130a82610c26565b6001600160a01b0316146113305760405162461bcd60e51b815260040161075a90611eb3565b6001600160a01b0382166113565760405162461bcd60e51b815260040161075a90611f5d565b611361838383610812565b61136c600082611200565b6001600160a01b03831660009081526003602052604081208054600192906113959084906123ca565b90915550506001600160a01b03821660009081526003602052604081208054600192906113c390849061237f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610812838383610812565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108125761149160076116b6565b6114a48361149f600761126e565b6116bf565b806114ae81612448565b91505061147f565b816001600160a01b0316836001600160a01b031614156114e85760405162461bcd60e51b815260040161075a90611fa1565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061154c908590611dfd565b60405180910390a3505050565b6115648484846112f7565b611570848484846116d9565b610ef05760405162461bcd60e51b815260040161075a90611e1b565b6060600880546106b09061240d565b6060816115c057506040805180820190915260018152600360fc1b602082015261069c565b8160005b81156115ea57806115d481612448565b91506115e39050600a83612397565b91506115c4565b60008167ffffffffffffffff81111561161357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561163d576020820181803683370190505b5090505b84156112ef576116526001836123ca565b915061165f600a86612463565b61166a90603061237f565b60f81b81838151811061168d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116af600a86612397565b9450611641565b80546001019055565b61086f8282604051806020016040528060008152506117f4565b60006116ed846001600160a01b0316611827565b156117e957836001600160a01b031663150b7a026117096111fc565b8786866040518563ffffffff1660e01b815260040161172b9493929190611d7c565b602060405180830381600087803b15801561174557600080fd5b505af1925050508015611775575060408051601f3d908101601f1916820190925261177291810190611bdb565b60015b6117cf573d8080156117a3576040519150601f19603f3d011682016040523d82523d6000602084013e6117a8565b606091505b5080516117c75760405162461bcd60e51b815260040161075a90611e1b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112ef565b506001949350505050565b6117fe8383611836565b61180b60008484846116d9565b6108125760405162461bcd60e51b815260040161075a90611e1b565b6001600160a01b03163b151590565b6001600160a01b03821661185c5760405162461bcd60e51b815260040161075a90612141565b611865816111df565b156118825760405162461bcd60e51b815260040161075a90611ef8565b61188e60008383610812565b6001600160a01b03821660009081526003602052604081208054600192906118b790849061237f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461086f60008383610812565b8280546119299061240d565b90600052602060002090601f01602090048101928261194b5760008555611991565b82601f1061196457805160ff1916838001178555611991565b82800160010185558215611991579182015b82811115611991578251825591602001919060010190611976565b5061199d9291506119a1565b5090565b5b8082111561199d57600081556001016119a2565b600067ffffffffffffffff808411156119d1576119d16124a3565b604051601f8501601f19908116603f011681019082821181831017156119f9576119f96124a3565b81604052809350858152868686011115611a1257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461069c57600080fd5b8035801515811461069c57600080fd5b600060208284031215611a64578081fd5b61101682611a2c565b60008060408385031215611a7f578081fd5b611a8883611a2c565b9150611a9660208401611a2c565b90509250929050565b600080600060608486031215611ab3578081fd5b611abc84611a2c565b9250611aca60208501611a2c565b9150604084013590509250925092565b60008060008060808587031215611aef578081fd5b611af885611a2c565b9350611b0660208601611a2c565b925060408501359150606085013567ffffffffffffffff811115611b28578182fd5b8501601f81018713611b38578182fd5b611b47878235602084016119b6565b91505092959194509250565b60008060408385031215611b65578182fd5b611b6e83611a2c565b9150611a9660208401611a43565b60008060408385031215611b8e578182fd5b611b9783611a2c565b946020939093013593505050565b600060208284031215611bb6578081fd5b61101682611a43565b600060208284031215611bd0578081fd5b8135611016816124b9565b600060208284031215611bec578081fd5b8151611016816124b9565b600060208284031215611c08578081fd5b813567ffffffffffffffff811115611c1e578182fd5b8201601f81018413611c2e578182fd5b6112ef848235602084016119b6565b600060208284031215611c4e578081fd5b5035919050565b60008060408385031215611c67578182fd5b82359150611a9660208401611a2c565b60008151808452611c8f8160208601602086016123e1565b601f01601f19169290920160200192915050565b600084516020611cb68285838a016123e1565b855191840191611cc98184848a016123e1565b8554920191839060028104600180831680611ce557607f831692505b858310811415611d0357634e487b7160e01b88526022600452602488fd5b808015611d175760018114611d2857611d54565b60ff19851688528388019550611d54565b611d318b612373565b895b85811015611d4c5781548a820152908401908801611d33565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611daf90830184611c77565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611df157835183529284019291840191600101611dd5565b50909695505050505050565b901515815260200190565b6000602082526110166020830184611c77565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526013908201527210d85b9b9bdd08195e18d95959081b1a5b5a5d606a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54686520636f6e74726163742069732070617573656421000000000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272496e73756666696369656e742066756e64732160681b604082015260600190565b90815260200190565b60009081526020902090565b6000821982111561239257612392612477565b500190565b6000826123a6576123a661248d565b500490565b60008160001904831182151516156123c5576123c5612477565b500290565b6000828210156123dc576123dc612477565b500390565b60005b838110156123fc5781810151838201526020016123e4565b83811115610ef05750506000910152565b60028104600182168061242157607f821691505b6020821081141561244257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561245c5761245c612477565b5060010190565b6000826124725761247261248d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109c357600080fdfea2646970667358221220b2ccab4395c88c017ee6f706a66dc34884957eb2158c8df5051262587a389bbf64736f6c63430008010033697066733a2f2f516d503773794b34534d4a5761444a503548566a43315055354a6b674676596a575968634e7a396d6679516638792f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000974686973697361727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544941000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c806362b99ad411610123578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146105c4578063e0a80853146105d9578063e985e9c5146105f9578063efbd73f414610619578063f2fde38b146106395761021a565b8063a22cb4651461052f578063a45ba8e71461054f578063b071401b14610564578063b88d4fde14610584578063c87b56dd146105a45761021a565b80637ec4a659116100f25780637ec4a659146104bd5780638da5cb5b146104dd57806394354fd0146104f257806395d89b4114610507578063a0712d681461051c5761021a565b806362b99ad4146104535780636352211e1461046857806370a0823114610488578063715018a6146104a85761021a565b806326741170116101a657806344a0d68a1161017557806344a0d68a146103d45780634fdd43cb146103f457806351830227146104145780635503a0e8146104295780635c975abb1461043e5761021a565b8063267411701461035d5780633ccfd60b1461037257806342842e0e14610387578063438b6300146103a75761021a565b806313faede6116101ed57806313faede6146102c657806316ba10e0146102e857806316c38b3c1461030857806318160ddd1461032857806323b872dd1461033d5761021a565b806301ffc9a71461021f57806306fdde0314610255578063081812fc14610277578063095ea7b3146102a4575b600080fd5b34801561022b57600080fd5b5061023f61023a366004611bbf565b610659565b60405161024c9190611dfd565b60405180910390f35b34801561026157600080fd5b5061026a6106a1565b60405161024c9190611e08565b34801561028357600080fd5b50610297610292366004611c3d565b610733565b60405161024c9190611d68565b3480156102b057600080fd5b506102c46102bf366004611b7c565b61077f565b005b3480156102d257600080fd5b506102db610817565b60405161024c919061236a565b3480156102f457600080fd5b506102c4610303366004611bf7565b61081d565b34801561031457600080fd5b506102c4610323366004611ba5565b610873565b34801561033457600080fd5b506102db6108c5565b34801561034957600080fd5b506102c4610358366004611a9f565b6108d6565b34801561036957600080fd5b506102db61090e565b34801561037e57600080fd5b506102c4610914565b34801561039357600080fd5b506102c46103a2366004611a9f565b6109c6565b3480156103b357600080fd5b506103c76103c2366004611a53565b6109e1565b60405161024c9190611db9565b3480156103e057600080fd5b506102c46103ef366004611c3d565b610ade565b34801561040057600080fd5b506102c461040f366004611bf7565b610b22565b34801561042057600080fd5b5061023f610b74565b34801561043557600080fd5b5061026a610b82565b34801561044a57600080fd5b5061023f610c10565b34801561045f57600080fd5b5061026a610c19565b34801561047457600080fd5b50610297610483366004611c3d565b610c26565b34801561049457600080fd5b506102db6104a3366004611a53565b610c5b565b3480156104b457600080fd5b506102c4610c9f565b3480156104c957600080fd5b506102c46104d8366004611bf7565b610cea565b3480156104e957600080fd5b50610297610d3c565b3480156104fe57600080fd5b506102db610d4b565b34801561051357600080fd5b5061026a610d51565b6102c461052a366004611c3d565b610d60565b34801561053b57600080fd5b506102c461054a366004611b53565b610e54565b34801561055b57600080fd5b5061026a610e66565b34801561057057600080fd5b506102c461057f366004611c3d565b610e73565b34801561059057600080fd5b506102c461059f366004611ada565b610eb7565b3480156105b057600080fd5b5061026a6105bf366004611c3d565b610ef6565b3480156105d057600080fd5b506102db61101d565b3480156105e557600080fd5b506102c46105f4366004611ba5565b611023565b34801561060557600080fd5b5061023f610614366004611a6d565b61107c565b34801561062557600080fd5b506102c4610634366004611c55565b6110aa565b34801561064557600080fd5b506102c4610654366004611a53565b611158565b60006001600160e01b031982166380ac58cd60e01b148061068a57506001600160e01b03198216635b5e139f60e01b145b806106995750610699826111c6565b90505b919050565b6060600080546106b09061240d565b80601f01602080910402602001604051908101604052809291908181526020018280546106dc9061240d565b80156107295780601f106106fe57610100808354040283529160200191610729565b820191906000526020600020905b81548152906001019060200180831161070c57829003601f168201915b5050505050905090565b600061073e826111df565b6107635760405162461bcd60e51b815260040161075a90612176565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061078a82610c26565b9050806001600160a01b0316836001600160a01b031614156107be5760405162461bcd60e51b815260040161075a9061227d565b806001600160a01b03166107d06111fc565b6001600160a01b031614806107ec57506107ec816106146111fc565b6108085760405162461bcd60e51b815260040161075a90612051565b6108128383611200565b505050565b600b5481565b6108256111fc565b6001600160a01b0316610836610d3c565b6001600160a01b03161461085c5760405162461bcd60e51b815260040161075a906121c2565b805161086f90600990602084019061191d565b5050565b61087b6111fc565b6001600160a01b031661088c610d3c565b6001600160a01b0316146108b25760405162461bcd60e51b815260040161075a906121c2565b600f805460ff1916911515919091179055565b60006108d1600761126e565b905090565b6108e76108e16111fc565b82611272565b6109035760405162461bcd60e51b815260040161075a906122ec565b6108128383836112f7565b600e5481565b61091c6111fc565b6001600160a01b031661092d610d3c565b6001600160a01b0316146109535760405162461bcd60e51b815260040161075a906121c2565b600061095d610d3c565b6001600160a01b03164760405161097390611d65565b60006040518083038185875af1925050503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50509050806109c357600080fd5b50565b61081283838360405180602001604052806000815250610eb7565b606060006109ee83610c5b565b905060008167ffffffffffffffff811115610a1957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a42578160200160208202803683370190505b509050600160005b8381108015610a5b5750600c548211155b15610ad4576000610a6b83610c26565b9050866001600160a01b0316816001600160a01b03161415610ac15782848381518110610aa857634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610abd81612448565b9250505b82610acb81612448565b93505050610a4a565b5090949350505050565b610ae66111fc565b6001600160a01b0316610af7610d3c565b6001600160a01b031614610b1d5760405162461bcd60e51b815260040161075a906121c2565b600b55565b610b2a6111fc565b6001600160a01b0316610b3b610d3c565b6001600160a01b031614610b615760405162461bcd60e51b815260040161075a906121c2565b805161086f90600a90602084019061191d565b600f54610100900460ff1681565b60098054610b8f9061240d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb9061240d565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b505050505081565b600f5460ff1681565b60088054610b8f9061240d565b6000818152600260205260408120546001600160a01b0316806106995760405162461bcd60e51b815260040161075a906120f8565b60006001600160a01b038216610c835760405162461bcd60e51b815260040161075a906120ae565b506001600160a01b031660009081526003602052604090205490565b610ca76111fc565b6001600160a01b0316610cb8610d3c565b6001600160a01b031614610cde5760405162461bcd60e51b815260040161075a906121c2565b610ce8600061142a565b565b610cf26111fc565b6001600160a01b0316610d03610d3c565b6001600160a01b031614610d295760405162461bcd60e51b815260040161075a906121c2565b805161086f90600890602084019061191d565b6006546001600160a01b031690565b600d5481565b6060600180546106b09061240d565b80600081118015610d735750600d548111155b610d8f5760405162461bcd60e51b815260040161075a90611f2f565b600c5481610d9d600761126e565b610da7919061237f565b1115610dc55760405162461bcd60e51b815260040161075a906122be565b600f5460ff1615610de85760405162461bcd60e51b815260040161075a906121f7565b81600b54610df691906123ab565b341015610e155760405162461bcd60e51b815260040161075a9061233d565b600e5482610e2233610c5b565b610e2c919061237f565b1115610e4a5760405162461bcd60e51b815260040161075a90612024565b61086f338361147c565b61086f610e5f6111fc565b83836114b6565b600a8054610b8f9061240d565b610e7b6111fc565b6001600160a01b0316610e8c610d3c565b6001600160a01b031614610eb25760405162461bcd60e51b815260040161075a906121c2565b600d55565b610ec8610ec26111fc565b83611272565b610ee45760405162461bcd60e51b815260040161075a906122ec565b610ef084848484611559565b50505050565b6060610f01826111df565b610f1d5760405162461bcd60e51b815260040161075a9061222e565b600f54610100900460ff16610fbe57600a8054610f399061240d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f659061240d565b8015610fb25780601f10610f8757610100808354040283529160200191610fb2565b820191906000526020600020905b815481529060010190602001808311610f9557829003601f168201915b5050505050905061069c565b6000610fc861158c565b90506000815111610fe85760405180602001604052806000815250611016565b80610ff28461159b565b600960405160200161100693929190611ca3565b6040516020818303038152906040525b9392505050565b600c5481565b61102b6111fc565b6001600160a01b031661103c610d3c565b6001600160a01b0316146110625760405162461bcd60e51b815260040161075a906121c2565b600f80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816000811180156110bd5750600d548111155b6110d95760405162461bcd60e51b815260040161075a90611f2f565b600c54816110e7600761126e565b6110f1919061237f565b111561110f5760405162461bcd60e51b815260040161075a906122be565b6111176111fc565b6001600160a01b0316611128610d3c565b6001600160a01b03161461114e5760405162461bcd60e51b815260040161075a906121c2565b610812828461147c565b6111606111fc565b6001600160a01b0316611171610d3c565b6001600160a01b0316146111975760405162461bcd60e51b815260040161075a906121c2565b6001600160a01b0381166111bd5760405162461bcd60e51b815260040161075a90611e6d565b6109c38161142a565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061123582610c26565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5490565b600061127d826111df565b6112995760405162461bcd60e51b815260040161075a90611fd8565b60006112a483610c26565b9050806001600160a01b0316846001600160a01b031614806112df5750836001600160a01b03166112d484610733565b6001600160a01b0316145b806112ef57506112ef818561107c565b949350505050565b826001600160a01b031661130a82610c26565b6001600160a01b0316146113305760405162461bcd60e51b815260040161075a90611eb3565b6001600160a01b0382166113565760405162461bcd60e51b815260040161075a90611f5d565b611361838383610812565b61136c600082611200565b6001600160a01b03831660009081526003602052604081208054600192906113959084906123ca565b90915550506001600160a01b03821660009081526003602052604081208054600192906113c390849061237f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610812838383610812565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108125761149160076116b6565b6114a48361149f600761126e565b6116bf565b806114ae81612448565b91505061147f565b816001600160a01b0316836001600160a01b031614156114e85760405162461bcd60e51b815260040161075a90611fa1565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061154c908590611dfd565b60405180910390a3505050565b6115648484846112f7565b611570848484846116d9565b610ef05760405162461bcd60e51b815260040161075a90611e1b565b6060600880546106b09061240d565b6060816115c057506040805180820190915260018152600360fc1b602082015261069c565b8160005b81156115ea57806115d481612448565b91506115e39050600a83612397565b91506115c4565b60008167ffffffffffffffff81111561161357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561163d576020820181803683370190505b5090505b84156112ef576116526001836123ca565b915061165f600a86612463565b61166a90603061237f565b60f81b81838151811061168d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116af600a86612397565b9450611641565b80546001019055565b61086f8282604051806020016040528060008152506117f4565b60006116ed846001600160a01b0316611827565b156117e957836001600160a01b031663150b7a026117096111fc565b8786866040518563ffffffff1660e01b815260040161172b9493929190611d7c565b602060405180830381600087803b15801561174557600080fd5b505af1925050508015611775575060408051601f3d908101601f1916820190925261177291810190611bdb565b60015b6117cf573d8080156117a3576040519150601f19603f3d011682016040523d82523d6000602084013e6117a8565b606091505b5080516117c75760405162461bcd60e51b815260040161075a90611e1b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112ef565b506001949350505050565b6117fe8383611836565b61180b60008484846116d9565b6108125760405162461bcd60e51b815260040161075a90611e1b565b6001600160a01b03163b151590565b6001600160a01b03821661185c5760405162461bcd60e51b815260040161075a90612141565b611865816111df565b156118825760405162461bcd60e51b815260040161075a90611ef8565b61188e60008383610812565b6001600160a01b03821660009081526003602052604081208054600192906118b790849061237f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461086f60008383610812565b8280546119299061240d565b90600052602060002090601f01602090048101928261194b5760008555611991565b82601f1061196457805160ff1916838001178555611991565b82800160010185558215611991579182015b82811115611991578251825591602001919060010190611976565b5061199d9291506119a1565b5090565b5b8082111561199d57600081556001016119a2565b600067ffffffffffffffff808411156119d1576119d16124a3565b604051601f8501601f19908116603f011681019082821181831017156119f9576119f96124a3565b81604052809350858152868686011115611a1257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461069c57600080fd5b8035801515811461069c57600080fd5b600060208284031215611a64578081fd5b61101682611a2c565b60008060408385031215611a7f578081fd5b611a8883611a2c565b9150611a9660208401611a2c565b90509250929050565b600080600060608486031215611ab3578081fd5b611abc84611a2c565b9250611aca60208501611a2c565b9150604084013590509250925092565b60008060008060808587031215611aef578081fd5b611af885611a2c565b9350611b0660208601611a2c565b925060408501359150606085013567ffffffffffffffff811115611b28578182fd5b8501601f81018713611b38578182fd5b611b47878235602084016119b6565b91505092959194509250565b60008060408385031215611b65578182fd5b611b6e83611a2c565b9150611a9660208401611a43565b60008060408385031215611b8e578182fd5b611b9783611a2c565b946020939093013593505050565b600060208284031215611bb6578081fd5b61101682611a43565b600060208284031215611bd0578081fd5b8135611016816124b9565b600060208284031215611bec578081fd5b8151611016816124b9565b600060208284031215611c08578081fd5b813567ffffffffffffffff811115611c1e578182fd5b8201601f81018413611c2e578182fd5b6112ef848235602084016119b6565b600060208284031215611c4e578081fd5b5035919050565b60008060408385031215611c67578182fd5b82359150611a9660208401611a2c565b60008151808452611c8f8160208601602086016123e1565b601f01601f19169290920160200192915050565b600084516020611cb68285838a016123e1565b855191840191611cc98184848a016123e1565b8554920191839060028104600180831680611ce557607f831692505b858310811415611d0357634e487b7160e01b88526022600452602488fd5b808015611d175760018114611d2857611d54565b60ff19851688528388019550611d54565b611d318b612373565b895b85811015611d4c5781548a820152908401908801611d33565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611daf90830184611c77565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611df157835183529284019291840191600101611dd5565b50909695505050505050565b901515815260200190565b6000602082526110166020830184611c77565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526013908201527210d85b9b9bdd08195e18d95959081b1a5b5a5d606a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54686520636f6e74726163742069732070617573656421000000000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272496e73756666696369656e742066756e64732160681b604082015260600190565b90815260200190565b60009081526020902090565b6000821982111561239257612392612477565b500190565b6000826123a6576123a661248d565b500490565b60008160001904831182151516156123c5576123c5612477565b500290565b6000828210156123dc576123dc612477565b500390565b60005b838110156123fc5781810151838201526020016123e4565b83811115610ef05750506000910152565b60028104600182168061242157607f821691505b6020821081141561244257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561245c5761245c612477565b5060010190565b6000826124725761247261248d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109c357600080fdfea2646970667358221220b2ccab4395c88c017ee6f706a66dc34884957eb2158c8df5051262587a389bbf64736f6c63430008010033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000974686973697361727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544941000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): thisisart
Arg [1] : _tokenSymbol (string): TIA
Arg [2] : _hiddenMetadataUri (string): 1

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 7468697369736172740000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5449410000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 3100000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38875:4255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25678:305;;;;;;;;;;-1:-1:-1;25678:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26623:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28182:221::-;;;;;;;;;;-1:-1:-1;28182:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27705:411::-;;;;;;;;;;-1:-1:-1;27705:411:0;;;;;:::i;:::-;;:::i;:::-;;39193:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42156:100::-;;;;;;;;;;-1:-1:-1;42156:100:0;;;;;:::i;:::-;;:::i;42262:77::-;;;;;;;;;;-1:-1:-1;42262:77:0;;;;;:::i;:::-;;:::i;39865:89::-;;;;;;;;;;;;;:::i;28932:339::-;;;;;;;;;;-1:-1:-1;28932:339:0;;;;;:::i;:::-;;:::i;39310:32::-;;;;;;;;;;;;;:::i;42345:462::-;;;;;;;;;;;;;:::i;29342:185::-;;;;;;;;;;-1:-1:-1;29342:185:0;;;;;:::i;:::-;;:::i;40468:635::-;;;;;;;;;;-1:-1:-1;40468:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41696:74::-;;;;;;;;;;-1:-1:-1;41696:74:0;;;;;:::i;:::-;;:::i;41912:132::-;;;;;;;;;;-1:-1:-1;41912:132:0;;;;;:::i;:::-;;:::i;39379:27::-;;;;;;;;;;;;;:::i;39115:33::-;;;;;;;;;;;;;:::i;39349:25::-;;;;;;;;;;;;;:::i;39028:82::-;;;;;;;;;;;;;:::i;26317:239::-;;;;;;;;;;-1:-1:-1;26317:239:0;;;;;:::i;:::-;;:::i;26047:208::-;;;;;;;;;;-1:-1:-1;26047:208:0;;;;;:::i;:::-;;:::i;6299:103::-;;;;;;;;;;;;;:::i;42050:100::-;;;;;;;;;;-1:-1:-1;42050:100:0;;;;;:::i;:::-;;:::i;5648:87::-;;;;;;;;;;;;;:::i;39267:38::-;;;;;;;;;;;;;:::i;26792:104::-;;;;;;;;;;;;;:::i;39960:339::-;;;;;;:::i;:::-;;:::i;28475:155::-;;;;;;;;;;-1:-1:-1;28475:155:0;;;;;:::i;:::-;;:::i;39153:31::-;;;;;;;;;;;;;:::i;41776:130::-;;;;;;;;;;-1:-1:-1;41776:130:0;;;;;:::i;:::-;;:::i;29598:328::-;;;;;;;;;;-1:-1:-1;29598:328:0;;;;;:::i;:::-;;:::i;41109:494::-;;;;;;;;;;-1:-1:-1;41109:494:0;;;;;:::i;:::-;;:::i;39231:31::-;;;;;;;;;;;;;:::i;41609:81::-;;;;;;;;;;-1:-1:-1;41609:81:0;;;;;:::i;:::-;;:::i;28701:164::-;;;;;;;;;;-1:-1:-1;28701:164:0;;;;;:::i;:::-;;:::i;40307:155::-;;;;;;;;;;-1:-1:-1;40307:155:0;;;;;:::i;:::-;;:::i;6557:201::-;;;;;;;;;;-1:-1:-1;6557:201:0;;;;;:::i;:::-;;:::i;25678:305::-;25780:4;-1:-1:-1;;;;;;25817:40:0;;-1:-1:-1;;;25817:40:0;;:105;;-1:-1:-1;;;;;;;25874:48:0;;-1:-1:-1;;;25874:48:0;25817:105;:158;;;;25939:36;25963:11;25939:23;:36::i;:::-;25797:178;;25678:305;;;;:::o;26623:100::-;26677:13;26710:5;26703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26623:100;:::o;28182:221::-;28258:7;28286:16;28294:7;28286;:16::i;:::-;28278:73;;;;-1:-1:-1;;;28278:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;28371:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28371:24:0;;28182:221::o;27705:411::-;27786:13;27802:23;27817:7;27802:14;:23::i;:::-;27786:39;;27850:5;-1:-1:-1;;;;;27844:11:0;:2;-1:-1:-1;;;;;27844:11:0;;;27836:57;;;;-1:-1:-1;;;27836:57:0;;;;;;;:::i;:::-;27944:5;-1:-1:-1;;;;;27928:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;27928:21:0;;:62;;;;27953:37;27970:5;27977:12;:10;:12::i;27953:37::-;27906:168;;;;-1:-1:-1;;;27906:168:0;;;;;;;:::i;:::-;28087:21;28096:2;28100:7;28087:8;:21::i;:::-;27705:411;;;:::o;39193:33::-;;;;:::o;42156:100::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;42228:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;42156:100:::0;:::o;42262:77::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;42318:6:::1;:15:::0;;-1:-1:-1;;42318:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42262:77::o;39865:89::-;39909:7;39932:16;:6;:14;:16::i;:::-;39925:23;;39865:89;:::o;28932:339::-;29127:41;29146:12;:10;:12::i;:::-;29160:7;29127:18;:41::i;:::-;29119:103;;;;-1:-1:-1;;;29119:103:0;;;;;;;:::i;:::-;29235:28;29245:4;29251:2;29255:7;29235:9;:28::i;39310:32::-;;;;:::o;42345:462::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;42629:7:::1;42650;:5;:7::i;:::-;-1:-1:-1::0;;;;;42642:21:0::1;42671;42642:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42628:69;;;42712:2;42704:11;;;::::0;::::1;;5939:1;42345:462::o:0;29342:185::-;29480:39;29497:4;29503:2;29507:7;29480:39;;;;;;;;;;;;:16;:39::i;40468:635::-;40543:16;40571:23;40597:17;40607:6;40597:9;:17::i;:::-;40571:43;;40621:30;40668:15;40654:30;;;;;;-1:-1:-1;;;40654:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40654:30:0;-1:-1:-1;40621:63:0;-1:-1:-1;40716:1:0;40691:22;40760:309;40785:15;40767;:33;:64;;;;;40822:9;;40804:14;:27;;40767:64;40760:309;;;40842:25;40870:23;40878:14;40870:7;:23::i;:::-;40842:51;;40929:6;-1:-1:-1;;;;;40908:27:0;:17;-1:-1:-1;;;;;40908:27:0;;40904:131;;;40981:14;40948:13;40962:15;40948:30;;;;;;-1:-1:-1;;;40948:30:0;;;;;;;;;;;;;;;;;;:47;41008:17;;;;:::i;:::-;;;;40904:131;41045:16;;;;:::i;:::-;;;;40760:309;;;;-1:-1:-1;41084:13:0;;40468:635;-1:-1:-1;;;;40468:635:0:o;41696:74::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;41752:4:::1;:12:::0;41696:74::o;41912:132::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;42000:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;39379:27::-:0;;;;;;;;;:::o;39115:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39349:25::-;;;;;;:::o;39028:82::-;;;;;;;:::i;26317:239::-;26389:7;26425:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26425:16:0;26460:19;26452:73;;;;-1:-1:-1;;;26452:73:0;;;;;;;:::i;26047:208::-;26119:7;-1:-1:-1;;;;;26147:19:0;;26139:74;;;;-1:-1:-1;;;26139:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26231:16:0;;;;;:9;:16;;;;;;;26047:208::o;6299:103::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;6364:30:::1;6391:1;6364:18;:30::i;:::-;6299:103::o:0;42050:100::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;42122:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;5648:87::-:0;5721:6;;-1:-1:-1;;;;;5721:6:0;5648:87;:::o;39267:38::-;;;;:::o;26792:104::-;26848:13;26881:7;26874:14;;;;;:::i;39960:339::-;40025:11;39699:1;39685:11;:15;:52;;;;;39719:18;;39704:11;:33;;39685:52;39677:85;;;;-1:-1:-1;;;39677:85:0;;;;;;;:::i;:::-;39811:9;;39796:11;39777:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39769:76;;;;-1:-1:-1;;;39769:76:0;;;;;;;:::i;:::-;40054:6:::1;::::0;::::1;;40053:7;40045:43;;;;-1:-1:-1::0;;;40045:43:0::1;;;;;;;:::i;:::-;40123:11;40116:4;;:18;;;;:::i;:::-;40103:9;:31;;40095:63;;;;-1:-1:-1::0;;;40095:63:0::1;;;;;;;:::i;:::-;40214:12;;40198:11;40174:21;40184:10;40174:9;:21::i;:::-;:35;;;;:::i;:::-;40173:53;;40165:85;;;;-1:-1:-1::0;;;40165:85:0::1;;;;;;;:::i;:::-;40259:34;40269:10;40281:11;40259:9;:34::i;28475:155::-:0;28570:52;28589:12;:10;:12::i;:::-;28603:8;28613;28570:18;:52::i;39153:31::-;;;;;;;:::i;41776:130::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;41860:18:::1;:40:::0;41776:130::o;29598:328::-;29773:41;29792:12;:10;:12::i;:::-;29806:7;29773:18;:41::i;:::-;29765:103;;;;-1:-1:-1;;;29765:103:0;;;;;;;:::i;:::-;29879:39;29893:4;29899:2;29903:7;29912:5;29879:13;:39::i;:::-;29598:328;;;;:::o;41109:494::-;41208:13;41249:17;41257:8;41249:7;:17::i;:::-;41233:98;;;;-1:-1:-1;;;41233:98:0;;;;;;;:::i;:::-;41344:8;;;;;;;41340:64;;41379:17;41372:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41340:64;41412:28;41443:10;:8;:10::i;:::-;41412:41;;41498:1;41473:14;41467:28;:32;:130;;;;;;;;;;;;;;;;;41535:14;41551:19;:8;:17;:19::i;:::-;41572:9;41518:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41467:130;41460:137;41109:494;-1:-1:-1;;;41109:494:0:o;39231:31::-;;;;:::o;41609:81::-;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;41667:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;41667:17:0;;::::1;::::0;;;::::1;::::0;;41609:81::o;28701:164::-;-1:-1:-1;;;;;28822:25:0;;;28798:4;28822:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28701:164::o;40307:155::-;40393:11;39699:1;39685:11;:15;:52;;;;;39719:18;;39704:11;:33;;39685:52;39677:85;;;;-1:-1:-1;;;39677:85:0;;;;;;;:::i;:::-;39811:9;;39796:11;39777:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39769:76;;;;-1:-1:-1;;;39769:76:0;;;;;;;:::i;:::-;5879:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;5868:23:0::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;5868:23:0::1;;5860:68;;;;-1:-1:-1::0;;;5860:68:0::1;;;;;;;:::i;:::-;40423:33:::2;40433:9;40444:11;40423:9;:33::i;6557:201::-:0;5879:12;:10;:12::i;:::-;-1:-1:-1;;;;;5868:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5868:23:0;;5860:68;;;;-1:-1:-1;;;5860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6646:22:0;::::1;6638:73;;;;-1:-1:-1::0;;;6638:73:0::1;;;;;;;:::i;:::-;6722:28;6741:8;6722:18;:28::i;18432:157::-:0;-1:-1:-1;;;;;;18541:40:0;;-1:-1:-1;;;18541:40:0;18432:157;;;:::o;31436:127::-;31501:4;31525:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31525:16:0;:30;;;31436:127::o;4372:98::-;4452:10;4372:98;:::o;35582:174::-;35657:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35657:29:0;-1:-1:-1;;;;;35657:29:0;;;;;;;;:24;;35711:23;35657:24;35711:14;:23::i;:::-;-1:-1:-1;;;;;35702:46:0;;;;;;;;;;;35582:174;;:::o;976:114::-;1068:14;;976:114::o;31730:348::-;31823:4;31848:16;31856:7;31848;:16::i;:::-;31840:73;;;;-1:-1:-1;;;31840:73:0;;;;;;;:::i;:::-;31924:13;31940:23;31955:7;31940:14;:23::i;:::-;31924:39;;31993:5;-1:-1:-1;;;;;31982:16:0;:7;-1:-1:-1;;;;;31982:16:0;;:51;;;;32026:7;-1:-1:-1;;;;;32002:31:0;:20;32014:7;32002:11;:20::i;:::-;-1:-1:-1;;;;;32002:31:0;;31982:51;:87;;;;32037:32;32054:5;32061:7;32037:16;:32::i;:::-;31974:96;31730:348;-1:-1:-1;;;;31730:348:0:o;34839:625::-;34998:4;-1:-1:-1;;;;;34971:31:0;:23;34986:7;34971:14;:23::i;:::-;-1:-1:-1;;;;;34971:31:0;;34963:81;;;;-1:-1:-1;;;34963:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35063:16:0;;35055:65;;;;-1:-1:-1;;;35055:65:0;;;;;;;:::i;:::-;35133:39;35154:4;35160:2;35164:7;35133:20;:39::i;:::-;35237:29;35254:1;35258:7;35237:8;:29::i;:::-;-1:-1:-1;;;;;35279:15:0;;;;;;:9;:15;;;;;:20;;35298:1;;35279:15;:20;;35298:1;;35279:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35310:13:0;;;;;;:9;:13;;;;;:18;;35327:1;;35310:13;:18;;35327:1;;35310:18;:::i;:::-;;;;-1:-1:-1;;35339:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35339:21:0;-1:-1:-1;;;;;35339:21:0;;;;;;;;;35378:27;;35339:16;;35378:27;;;;;;;35418:38;35438:4;35444:2;35448:7;35418:19;:38::i;6918:191::-;7011:6;;;-1:-1:-1;;;;;7028:17:0;;;-1:-1:-1;;;;;;7028:17:0;;;;;;;7061:40;;7011:6;;;7028:17;7011:6;;7061:40;;6992:16;;7061:40;6918:191;;:::o;42813:204::-;42893:9;42888:124;42912:11;42908:1;:15;42888:124;;;42939:18;:6;:16;:18::i;:::-;42966:38;42976:9;42987:16;:6;:14;:16::i;:::-;42966:9;:38::i;:::-;42925:3;;;;:::i;:::-;;;;42888:124;;35898:315;36053:8;-1:-1:-1;;;;;36044:17:0;:5;-1:-1:-1;;;;;36044:17:0;;;36036:55;;;;-1:-1:-1;;;36036:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36102:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;36102:46:0;;;;;;;36164:41;;;;;36102:46;;36164:41;:::i;:::-;;;;;;;;35898:315;;;:::o;30808:::-;30965:28;30975:4;30981:2;30985:7;30965:9;:28::i;:::-;31012:48;31035:4;31041:2;31045:7;31054:5;31012:22;:48::i;:::-;31004:111;;;;-1:-1:-1;;;31004:111:0;;;;;;;:::i;43023:104::-;43083:13;43112:9;43105:16;;;;;:::i;1934:723::-;1990:13;2211:10;2207:53;;-1:-1:-1;2238:10:0;;;;;;;;;;;;-1:-1:-1;;;2238:10:0;;;;;;2207:53;2285:5;2270:12;2326:78;2333:9;;2326:78;;2359:8;;;;:::i;:::-;;-1:-1:-1;2382:10:0;;-1:-1:-1;2390:2:0;2382:10;;:::i;:::-;;;2326:78;;;2414:19;2446:6;2436:17;;;;;;-1:-1:-1;;;2436:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2436:17:0;;2414:39;;2464:154;2471:10;;2464:154;;2498:11;2508:1;2498:11;;:::i;:::-;;-1:-1:-1;2567:10:0;2575:2;2567:5;:10;:::i;:::-;2554:24;;:2;:24;:::i;:::-;2541:39;;2524:6;2531;2524:14;;;;;;-1:-1:-1;;;2524:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;2524:56:0;;;;;;;;-1:-1:-1;2595:11:0;2604:2;2595:11;;:::i;:::-;;;2464:154;;1098:127;1187:19;;1205:1;1187:19;;;1098:127::o;32420:110::-;32496:26;32506:2;32510:7;32496:26;;;;;;;;;;;;:9;:26::i;36778:799::-;36933:4;36954:15;:2;-1:-1:-1;;;;;36954:13:0;;:15::i;:::-;36950:620;;;37006:2;-1:-1:-1;;;;;36990:36:0;;37027:12;:10;:12::i;:::-;37041:4;37047:7;37056:5;36990:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36990:72:0;;;;;;;;-1:-1:-1;;36990:72:0;;;;;;;;;;;;:::i;:::-;;;36986:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37232:13:0;;37228:272;;37275:60;;-1:-1:-1;;;37275:60:0;;;;;;;:::i;37228:272::-;37450:6;37444:13;37435:6;37431:2;37427:15;37420:38;36986:529;-1:-1:-1;;;;;;37113:51:0;-1:-1:-1;;;37113:51:0;;-1:-1:-1;37106:58:0;;36950:620;-1:-1:-1;37554:4:0;36778:799;;;;;;:::o;32757:321::-;32887:18;32893:2;32897:7;32887:5;:18::i;:::-;32938:54;32969:1;32973:2;32977:7;32986:5;32938:22;:54::i;:::-;32916:154;;;;-1:-1:-1;;;32916:154:0;;;;;;;:::i;8349:326::-;-1:-1:-1;;;;;8644:19:0;;:23;;;8349:326::o;33414:439::-;-1:-1:-1;;;;;33494:16:0;;33486:61;;;;-1:-1:-1;;;33486:61:0;;;;;;;:::i;:::-;33567:16;33575:7;33567;:16::i;:::-;33566:17;33558:58;;;;-1:-1:-1;;;33558:58:0;;;;;;;:::i;:::-;33629:45;33658:1;33662:2;33666:7;33629:20;:45::i;:::-;-1:-1:-1;;;;;33687:13:0;;;;;;:9;:13;;;;;:18;;33704:1;;33687:13;:18;;33704:1;;33687:18;:::i;:::-;;;;-1:-1:-1;;33716:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33716:21:0;-1:-1:-1;;;;;33716:21:0;;;;;;;;33755:33;;33716:16;;;33755:33;;33716:16;;33755:33;33801:44;33829:1;33833:2;33837:7;33801:19;:44::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:633:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;232:2;226:9;200:2;286:15;;-1:-1:-1;;282:24:1;;;308:2;278:33;274:42;262:55;;;332:18;;;352:22;;;329:46;326:2;;;378:18;;:::i;:::-;418:10;414:2;407:22;447:6;438:15;;477:6;469;462:22;517:3;508:6;503:3;499:16;496:25;493:2;;;534:1;531;524:12;493:2;584:6;579:3;572:4;564:6;560:17;547:44;639:1;632:4;623:6;615;611:19;607:30;600:41;;;;90:557;;;;;:::o;652:175::-;722:20;;-1:-1:-1;;;;;771:31:1;;761:42;;751:2;;817:1;814;807:12;832:162;899:20;;955:13;;948:21;938:32;;928:2;;984:1;981;974:12;999:198;;1111:2;1099:9;1090:7;1086:23;1082:32;1079:2;;;1132:6;1124;1117:22;1079:2;1160:31;1181:9;1160:31;:::i;1202:274::-;;;1331:2;1319:9;1310:7;1306:23;1302:32;1299:2;;;1352:6;1344;1337:22;1299:2;1380:31;1401:9;1380:31;:::i;:::-;1370:41;;1430:40;1466:2;1455:9;1451:18;1430:40;:::i;:::-;1420:50;;1289:187;;;;;:::o;1481:342::-;;;;1627:2;1615:9;1606:7;1602:23;1598:32;1595:2;;;1648:6;1640;1633:22;1595:2;1676:31;1697:9;1676:31;:::i;:::-;1666:41;;1726:40;1762:2;1751:9;1747:18;1726:40;:::i;:::-;1716:50;;1813:2;1802:9;1798:18;1785:32;1775:42;;1585:238;;;;;:::o;1828:702::-;;;;;2000:3;1988:9;1979:7;1975:23;1971:33;1968:2;;;2022:6;2014;2007:22;1968:2;2050:31;2071:9;2050:31;:::i;:::-;2040:41;;2100:40;2136:2;2125:9;2121:18;2100:40;:::i;:::-;2090:50;;2187:2;2176:9;2172:18;2159:32;2149:42;;2242:2;2231:9;2227:18;2214:32;2269:18;2261:6;2258:30;2255:2;;;2306:6;2298;2291:22;2255:2;2334:22;;2387:4;2379:13;;2375:27;-1:-1:-1;2365:2:1;;2421:6;2413;2406:22;2365:2;2449:75;2516:7;2511:2;2498:16;2493:2;2489;2485:11;2449:75;:::i;:::-;2439:85;;;1958:572;;;;;;;:::o;2535:268::-;;;2661:2;2649:9;2640:7;2636:23;2632:32;2629:2;;;2682:6;2674;2667:22;2629:2;2710:31;2731:9;2710:31;:::i;:::-;2700:41;;2760:37;2793:2;2782:9;2778:18;2760:37;:::i;2808:266::-;;;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2958:6;2950;2943:22;2905:2;2986:31;3007:9;2986:31;:::i;:::-;2976:41;3064:2;3049:18;;;;3036:32;;-1:-1:-1;;;2895:179:1:o;3079:192::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3209:6;3201;3194:22;3156:2;3237:28;3255:9;3237:28;:::i;3276:257::-;;3387:2;3375:9;3366:7;3362:23;3358:32;3355:2;;;3408:6;3400;3393:22;3355:2;3452:9;3439:23;3471:32;3497:5;3471:32;:::i;3538:261::-;;3660:2;3648:9;3639:7;3635:23;3631:32;3628:2;;;3681:6;3673;3666:22;3628:2;3718:9;3712:16;3737:32;3763:5;3737:32;:::i;3804:482::-;;3926:2;3914:9;3905:7;3901:23;3897:32;3894:2;;;3947:6;3939;3932:22;3894:2;3992:9;3979:23;4025:18;4017:6;4014:30;4011:2;;;4062:6;4054;4047:22;4011:2;4090:22;;4143:4;4135:13;;4131:27;-1:-1:-1;4121:2:1;;4177:6;4169;4162:22;4121:2;4205:75;4272:7;4267:2;4254:16;4249:2;4245;4241:11;4205:75;:::i;4291:190::-;;4403:2;4391:9;4382:7;4378:23;4374:32;4371:2;;;4424:6;4416;4409:22;4371:2;-1:-1:-1;4452:23:1;;4361:120;-1:-1:-1;4361:120:1:o;4486:266::-;;;4615:2;4603:9;4594:7;4590:23;4586:32;4583:2;;;4636:6;4628;4621:22;4583:2;4677:9;4664:23;4654:33;;4706:40;4742:2;4731:9;4727:18;4706:40;:::i;4757:259::-;;4838:5;4832:12;4865:6;4860:3;4853:19;4881:63;4937:6;4930:4;4925:3;4921:14;4914:4;4907:5;4903:16;4881:63;:::i;:::-;4998:2;4977:15;-1:-1:-1;;4973:29:1;4964:39;;;;5005:4;4960:50;;4808:208;-1:-1:-1;;4808:208:1:o;5021:1532::-;;5283:6;5277:13;5309:4;5322:51;5366:6;5361:3;5356:2;5348:6;5344:15;5322:51;:::i;:::-;5436:13;;5395:16;;;;5458:55;5436:13;5395:16;5480:15;;;5458:55;:::i;:::-;5604:13;;5535:20;;;5575:3;;5681:1;5666:17;;5702:1;5738:18;;;;5765:2;;5843:4;5833:8;5829:19;5817:31;;5765:2;5906;5896:8;5893:16;5873:18;5870:40;5867:2;;;-1:-1:-1;;;5933:33:1;;5989:4;5986:1;5979:15;6019:4;5940:3;6007:17;5867:2;6050:18;6077:110;;;;6201:1;6196:332;;;;6043:485;;6077:110;-1:-1:-1;;6112:24:1;;6098:39;;6157:20;;;;-1:-1:-1;6077:110:1;;6196:332;6232:39;6264:6;6232:39;:::i;:::-;6293:3;6309:169;6323:8;6320:1;6317:15;6309:169;;;6405:14;;6390:13;;;6383:37;6448:16;;;;6340:10;;6309:169;;;6313:3;;6509:8;6502:5;6498:20;6491:27;;6043:485;-1:-1:-1;6544:3:1;;5253:1300;-1:-1:-1;;;;;;;;;;;5253:1300:1:o;6558:205::-;6758:3;6749:14::o;6768:203::-;-1:-1:-1;;;;;6932:32:1;;;;6914:51;;6902:2;6887:18;;6869:102::o;6976:490::-;-1:-1:-1;;;;;7245:15:1;;;7227:34;;7297:15;;7292:2;7277:18;;7270:43;7344:2;7329:18;;7322:34;;;7392:3;7387:2;7372:18;;7365:31;;;6976:490;;7413:47;;7440:19;;7432:6;7413:47;:::i;:::-;7405:55;7179:287;-1:-1:-1;;;;;;7179:287:1:o;7471:635::-;7642:2;7694:21;;;7764:13;;7667:18;;;7786:22;;;7471:635;;7642:2;7865:15;;;;7839:2;7824:18;;;7471:635;7911:169;7925:6;7922:1;7919:13;7911:169;;;7986:13;;7974:26;;8055:15;;;;8020:12;;;;7947:1;7940:9;7911:169;;;-1:-1:-1;8097:3:1;;7622:484;-1:-1:-1;;;;;;7622:484:1:o;8111:187::-;8276:14;;8269:22;8251:41;;8239:2;8224:18;;8206:92::o;8303:221::-;;8452:2;8441:9;8434:21;8472:46;8514:2;8503:9;8499:18;8491:6;8472:46;:::i;8529:414::-;8731:2;8713:21;;;8770:2;8750:18;;;8743:30;8809:34;8804:2;8789:18;;8782:62;-1:-1:-1;;;8875:2:1;8860:18;;8853:48;8933:3;8918:19;;8703:240::o;8948:402::-;9150:2;9132:21;;;9189:2;9169:18;;;9162:30;9228:34;9223:2;9208:18;;9201:62;-1:-1:-1;;;9294:2:1;9279:18;;9272:36;9340:3;9325:19;;9122:228::o;9355:401::-;9557:2;9539:21;;;9596:2;9576:18;;;9569:30;9635:34;9630:2;9615:18;;9608:62;-1:-1:-1;;;9701:2:1;9686:18;;9679:35;9746:3;9731:19;;9529:227::o;9761:352::-;9963:2;9945:21;;;10002:2;9982:18;;;9975:30;10041;10036:2;10021:18;;10014:58;10104:2;10089:18;;9935:178::o;10118:344::-;10320:2;10302:21;;;10359:2;10339:18;;;10332:30;-1:-1:-1;;;10393:2:1;10378:18;;10371:50;10453:2;10438:18;;10292:170::o;10467:400::-;10669:2;10651:21;;;10708:2;10688:18;;;10681:30;10747:34;10742:2;10727:18;;10720:62;-1:-1:-1;;;10813:2:1;10798:18;;10791:34;10857:3;10842:19;;10641:226::o;10872:349::-;11074:2;11056:21;;;11113:2;11093:18;;;11086:30;11152:27;11147:2;11132:18;;11125:55;11212:2;11197:18;;11046:175::o;11226:408::-;11428:2;11410:21;;;11467:2;11447:18;;;11440:30;11506:34;11501:2;11486:18;;11479:62;-1:-1:-1;;;11572:2:1;11557:18;;11550:42;11624:3;11609:19;;11400:234::o;11639:343::-;11841:2;11823:21;;;11880:2;11860:18;;;11853:30;-1:-1:-1;;;11914:2:1;11899:18;;11892:49;11973:2;11958:18;;11813:169::o;11987:420::-;12189:2;12171:21;;;12228:2;12208:18;;;12201:30;12267:34;12262:2;12247:18;;12240:62;12338:26;12333:2;12318:18;;12311:54;12397:3;12382:19;;12161:246::o;12412:406::-;12614:2;12596:21;;;12653:2;12633:18;;;12626:30;12692:34;12687:2;12672:18;;12665:62;-1:-1:-1;;;12758:2:1;12743:18;;12736:40;12808:3;12793:19;;12586:232::o;12823:405::-;13025:2;13007:21;;;13064:2;13044:18;;;13037:30;13103:34;13098:2;13083:18;;13076:62;-1:-1:-1;;;13169:2:1;13154:18;;13147:39;13218:3;13203:19;;12997:231::o;13233:356::-;13435:2;13417:21;;;13454:18;;;13447:30;13513:34;13508:2;13493:18;;13486:62;13580:2;13565:18;;13407:182::o;13594:408::-;13796:2;13778:21;;;13835:2;13815:18;;;13808:30;13874:34;13869:2;13854:18;;13847:62;-1:-1:-1;;;13940:2:1;13925:18;;13918:42;13992:3;13977:19;;13768:234::o;14007:356::-;14209:2;14191:21;;;14228:18;;;14221:30;14287:34;14282:2;14267:18;;14260:62;14354:2;14339:18;;14181:182::o;14368:347::-;14570:2;14552:21;;;14609:2;14589:18;;;14582:30;14648:25;14643:2;14628:18;;14621:53;14706:2;14691:18;;14542:173::o;14720:411::-;14922:2;14904:21;;;14961:2;14941:18;;;14934:30;15000:34;14995:2;14980:18;;14973:62;-1:-1:-1;;;15066:2:1;15051:18;;15044:45;15121:3;15106:19;;14894:237::o;15136:397::-;15338:2;15320:21;;;15377:2;15357:18;;;15350:30;15416:34;15411:2;15396:18;;15389:62;-1:-1:-1;;;15482:2:1;15467:18;;15460:31;15523:3;15508:19;;15310:223::o;15538:344::-;15740:2;15722:21;;;15779:2;15759:18;;;15752:30;-1:-1:-1;;;15813:2:1;15798:18;;15791:50;15873:2;15858:18;;15712:170::o;15887:413::-;16089:2;16071:21;;;16128:2;16108:18;;;16101:30;16167:34;16162:2;16147:18;;16140:62;-1:-1:-1;;;16233:2:1;16218:18;;16211:47;16290:3;16275:19;;16061:239::o;16305:343::-;16507:2;16489:21;;;16546:2;16526:18;;;16519:30;-1:-1:-1;;;16580:2:1;16565:18;;16558:49;16639:2;16624:18;;16479:169::o;16653:177::-;16799:25;;;16787:2;16772:18;;16754:76::o;16835:129::-;;16903:17;;;16953:4;16937:21;;;16893:71::o;16969:128::-;;17040:1;17036:6;17033:1;17030:13;17027:2;;;17046:18;;:::i;:::-;-1:-1:-1;17082:9:1;;17017:80::o;17102:120::-;;17168:1;17158:2;;17173:18;;:::i;:::-;-1:-1:-1;17207:9:1;;17148:74::o;17227:168::-;;17333:1;17329;17325:6;17321:14;17318:1;17315:21;17310:1;17303:9;17296:17;17292:45;17289:2;;;17340:18;;:::i;:::-;-1:-1:-1;17380:9:1;;17279:116::o;17400:125::-;;17468:1;17465;17462:8;17459:2;;;17473:18;;:::i;:::-;-1:-1:-1;17510:9:1;;17449:76::o;17530:258::-;17602:1;17612:113;17626:6;17623:1;17620:13;17612:113;;;17702:11;;;17696:18;17683:11;;;17676:39;17648:2;17641:10;17612:113;;;17743:6;17740:1;17737:13;17734:2;;;-1:-1:-1;;17778:1:1;17760:16;;17753:27;17583:205::o;17793:380::-;17878:1;17868:12;;17925:1;17915:12;;;17936:2;;17990:4;17982:6;17978:17;17968:27;;17936:2;18043;18035:6;18032:14;18012:18;18009:38;18006:2;;;18089:10;18084:3;18080:20;18077:1;18070:31;18124:4;18121:1;18114:15;18152:4;18149:1;18142:15;18006:2;;17848:325;;;:::o;18178:135::-;;-1:-1:-1;;18238:17:1;;18235:2;;;18258:18;;:::i;:::-;-1:-1:-1;18305:1:1;18294:13;;18225:88::o;18318:112::-;;18376:1;18366:2;;18381:18;;:::i;:::-;-1:-1:-1;18415:9:1;;18356:74::o;18435:127::-;18496:10;18491:3;18487:20;18484:1;18477:31;18527:4;18524:1;18517:15;18551:4;18548:1;18541:15;18567:127;18628:10;18623:3;18619:20;18616:1;18609:31;18659:4;18656:1;18649:15;18683:4;18680:1;18673:15;18699:127;18760:10;18755:3;18751:20;18748:1;18741:31;18791:4;18788:1;18781:15;18815:4;18812:1;18805:15;18831:133;-1:-1:-1;;;;;;18907:32:1;;18897:43;;18887:2;;18954:1;18951;18944:12

Swarm Source

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