ETH Price: $3,362.66 (+0.01%)

Token

Hyundai Metamobility (HMM)
 

Overview

Max Total Supply

0 HMM

Holders

1,931

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
16 HMM
0x0662596a2a8f7fe81e13f5b68f77e851a1251f73
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:
HyundaiMetamobility

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 7 of 14: HyundaiMetamobility.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "./ERC721.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
import "./ERC721URIStorage.sol";
  
contract HyundaiMetamobility is ERC721, Ownable {
    using SafeMath for uint256;

    uint256 internal TOTAL_TOKEN_MAX = 5000;
    uint256 public remainSupply = 5000;
    uint256 public RESERVE = 192;
    uint256 public currentSupply;
    string internal baseURI;

    constructor(string memory baseURI_) ERC721("Hyundai Metamobility", "HMM") {
        baseURI = baseURI_;
    }

    function multiAirDrop(address[] calldata _accounts, uint256[] calldata _amounts) external onlyOwner {
        require(_accounts.length == _amounts.length, "Accounts length must equal amount length");
        for (uint256 i; i < _amounts.length; i++) {
            for (uint256 j; j < _amounts[i]; j++) {
                require(currentSupply < TOTAL_TOKEN_MAX, "TOTAL_TOKEN_MAX EXCESS, Can no longer airdrop.");
                _safeMint(_accounts[i], currentSupply + 1);
                currentSupply++;
                remainSupply--;
            }
        }
    }
    
    function singleAmountAirDrop(address[] memory _accounts, uint256 _amount) external onlyOwner {
        for (uint i = 0; i < _accounts.length; i++) {
            for(uint j = 0; j < _amount; j++) {
                require(currentSupply < TOTAL_TOKEN_MAX, "TOTAL_TOKEN_MAX EXCESS, Can no longer airdrop.");
                _safeMint(_accounts[i], currentSupply+1);
                currentSupply++;
                remainSupply--;
            }
        }
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_; 
    }

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

File 1 of 14: Address.sol
// SPDX-License-Identifier: MIT
// 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 2 of 14: Context.sol
// SPDX-License-Identifier: MIT
// 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 3 of 14: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 4 of 14: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @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(), ".json")) : "";
    }

    /**
     * @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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 5 of 14: ERC721Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Context.sol";
/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }

    function MultiBurn(uint256[] calldata tokenIds) public virtual {
        //solhint-disable-next-line max-line-length
        for (uint256 i; i < tokenIds.length; i++) {
            require(_isApprovedOrOwner(_msgSender(), tokenIds[i]), "ERC721Burnable: caller is not owner nor approved");
            _burn(tokenIds[i]);
        }

    }
}

File 6 of 14: ERC721URIStorage.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol)

pragma solidity ^0.8.0;

import "./ERC721.sol";

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally checks to see if a
     * token-specific URI was set for the token, and if so, it deletes the token URI from
     * the storage mapping.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

File 8 of 14: IERC165.sol
// SPDX-License-Identifier: MIT
// 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 9 of 14: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 10 of 14: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 11 of 14: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// 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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 14: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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 13 of 14: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 14 of 14: Strings.sol
// SPDX-License-Identifier: MIT
// 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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","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":[],"name":"RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","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":[{"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":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiAirDrop","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":"remainSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"singleAmountAirDrop","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":[{"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"}]

608060405261138860075561138860085560c06009553480156200002257600080fd5b5060405162003ae738038062003ae7833981810160405281019062000048919062000324565b6040518060400160405280601481526020017f4879756e646169204d6574616d6f62696c6974790000000000000000000000008152506040518060400160405280600381526020017f484d4d00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cc929190620001f6565b508060019080519060200190620000e5929190620001f6565b50505062000108620000fc6200012860201b60201c565b6200013060201b60201c565b80600b908051906020019062000120929190620001f6565b5050620004f9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000204906200040a565b90600052602060002090601f01602090048101928262000228576000855562000274565b82601f106200024357805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027357825182559160200191906001019062000256565b5b50905062000283919062000287565b5090565b5b80821115620002a257600081600090555060010162000288565b5090565b6000620002bd620002b7846200039e565b62000375565b905082815260208101848484011115620002dc57620002db620004d9565b5b620002e9848285620003d4565b509392505050565b600082601f830112620003095762000308620004d4565b5b81516200031b848260208601620002a6565b91505092915050565b6000602082840312156200033d576200033c620004e3565b5b600082015167ffffffffffffffff8111156200035e576200035d620004de565b5b6200036c84828501620002f1565b91505092915050565b60006200038162000394565b90506200038f828262000440565b919050565b6000604051905090565b600067ffffffffffffffff821115620003bc57620003bb620004a5565b5b620003c782620004e8565b9050602081019050919050565b60005b83811015620003f4578082015181840152602081019050620003d7565b8381111562000404576000848401525b50505050565b600060028204905060018216806200042357607f821691505b602082108114156200043a576200043962000476565b5b50919050565b6200044b82620004e8565b810181811067ffffffffffffffff821117156200046d576200046c620004a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6135de80620005096000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063771282f6116100b8578063a22cb4651161007c578063a22cb46514610351578063b88d4fde1461036d578063c87b56dd14610389578063e985e9c5146103b9578063f2fde38b146103e9578063f905f7dc1461040557610142565b8063771282f6146102bd5780638da5cb5b146102db57806395d89b41146102f957806398803670146103175780639d2cc4361461033357610142565b80633f5a31521161010a5780633f5a3152146101fd57806342842e0e1461021b57806355f804b3146102375780636352211e1461025357806370a0823114610283578063715018a6146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806323b872dd146101e1575b600080fd5b610161600480360381019061015c919061243e565b610421565b60405161016e919061290d565b60405180910390f35b61017f610503565b60405161018c9190612928565b60405180910390f35b6101af60048036038101906101aa91906124e1565b610595565b6040516101bc91906128a6565b60405180910390f35b6101df60048036038101906101da9190612321565b61061a565b005b6101fb60048036038101906101f6919061220b565b610732565b005b610205610792565b6040516102129190612b8a565b60405180910390f35b6102356004803603810190610230919061220b565b610798565b005b610251600480360381019061024c9190612498565b6107b8565b005b61026d600480360381019061026891906124e1565b61084e565b60405161027a91906128a6565b60405180910390f35b61029d6004803603810190610298919061219e565b610900565b6040516102aa9190612b8a565b60405180910390f35b6102bb6109b8565b005b6102c5610a40565b6040516102d29190612b8a565b60405180910390f35b6102e3610a46565b6040516102f091906128a6565b60405180910390f35b610301610a70565b60405161030e9190612928565b60405180910390f35b610331600480360381019061032c9190612361565b610b02565b005b61033b610cdb565b6040516103489190612b8a565b60405180910390f35b61036b600480360381019061036691906122e1565b610ce1565b005b6103876004803603810190610382919061225e565b610cf7565b005b6103a3600480360381019061039e91906124e1565b610d59565b6040516103b09190612928565b60405180910390f35b6103d360048036038101906103ce91906121cb565b610e00565b6040516103e0919061290d565b60405180910390f35b61040360048036038101906103fe919061219e565b610e94565b005b61041f600480360381019061041a91906123e2565b610f8c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ec57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104fc57506104fb826110f3565b5b9050919050565b60606000805461051290612e36565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90612e36565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60006105a08261115d565b6105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690612aaa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106258261084e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612b2a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106b56111c9565b73ffffffffffffffffffffffffffffffffffffffff1614806106e457506106e3816106de6111c9565b610e00565b5b610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612a2a565b60405180910390fd5b61072d83836111d1565b505050565b61074361073d6111c9565b8261128a565b610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077990612b6a565b60405180910390fd5b61078d838383611368565b505050565b60085481565b6107b383838360405180602001604052806000815250610cf7565b505050565b6107c06111c9565b73ffffffffffffffffffffffffffffffffffffffff166107de610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082b90612aca565b60405180910390fd5b80600b908051906020019061084a929190611e68565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90612a6a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612a4a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c06111c9565b73ffffffffffffffffffffffffffffffffffffffff166109de610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90612aca565b60405180910390fd5b610a3e60006115cf565b565b600a5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a7f90612e36565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab90612e36565b8015610af85780601f10610acd57610100808354040283529160200191610af8565b820191906000526020600020905b815481529060010190602001808311610adb57829003601f168201915b5050505050905090565b610b0a6111c9565b73ffffffffffffffffffffffffffffffffffffffff16610b28610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590612aca565b60405180910390fd5b818190508484905014610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612aea565b60405180910390fd5b60005b82829050811015610cd45760005b838383818110610bea57610be9612fa0565b5b90506020020135811015610cc057600754600a5410610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590612b4a565b60405180910390fd5b610c7d868684818110610c5457610c53612fa0565b5b9050602002016020810190610c69919061219e565b6001600a54610c789190612c9b565b611695565b600a6000815480929190610c9090612e99565b919050555060086000815480929190610ca890612e0c565b91905055508080610cb890612e99565b915050610bd7565b508080610ccc90612e99565b915050610bc9565b5050505050565b60095481565b610cf3610cec6111c9565b83836116b3565b5050565b610d08610d026111c9565b8361128a565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90612b6a565b60405180910390fd5b610d5384848484611820565b50505050565b6060610d648261115d565b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612b0a565b60405180910390fd5b6000610dad61187c565b90506000815111610dcd5760405180602001604052806000815250610df8565b80610dd78461190e565b604051602001610de8929190612877565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e9c6111c9565b73ffffffffffffffffffffffffffffffffffffffff16610eba610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790612aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f779061296a565b60405180910390fd5b610f89816115cf565b50565b610f946111c9565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610a46565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90612aca565b60405180910390fd5b60005b82518110156110ee5760005b828110156110da57600754600a5410611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90612b4a565b60405180910390fd5b61109784838151811061107b5761107a612fa0565b5b60200260200101516001600a546110929190612c9b565b611695565b600a60008154809291906110aa90612e99565b9190505550600860008154809291906110c290612e0c565b919050555080806110d290612e99565b915050611017565b5080806110e690612e99565b91505061100b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112448361084e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112958261115d565b6112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90612a0a565b60405180910390fd5b60006112df8361084e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132157506113208185610e00565b5b8061135f57508373ffffffffffffffffffffffffffffffffffffffff1661134784610595565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113888261084e565b73ffffffffffffffffffffffffffffffffffffffff16146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d59061298a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611445906129ca565b60405180910390fd5b611459838383611a6f565b6114646000826111d1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b49190612d22565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150b9190612c9b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115ca838383611a74565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6116af828260405180602001604052806000815250611a79565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906129ea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611813919061290d565b60405180910390a3505050565b61182b848484611368565b61183784848484611ad4565b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061294a565b60405180910390fd5b50505050565b6060600b805461188b90612e36565b80601f01602080910402602001604051908101604052809291908181526020018280546118b790612e36565b80156119045780601f106118d957610100808354040283529160200191611904565b820191906000526020600020905b8154815290600101906020018083116118e757829003601f168201915b5050505050905090565b60606000821415611956576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a6a565b600082905060005b6000821461198857808061197190612e99565b915050600a826119819190612cf1565b915061195e565b60008167ffffffffffffffff8111156119a4576119a3612fcf565b5b6040519080825280601f01601f1916602001820160405280156119d65781602001600182028036833780820191505090505b5090505b60008514611a63576001826119ef9190612d22565b9150600a856119fe9190612ee2565b6030611a0a9190612c9b565b60f81b818381518110611a2057611a1f612fa0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a5c9190612cf1565b94506119da565b8093505050505b919050565b505050565b505050565b611a838383611c6b565b611a906000848484611ad4565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061294a565b60405180910390fd5b505050565b6000611af58473ffffffffffffffffffffffffffffffffffffffff16611e45565b15611c5e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b1e6111c9565b8786866040518563ffffffff1660e01b8152600401611b4094939291906128c1565b602060405180830381600087803b158015611b5a57600080fd5b505af1925050508015611b8b57506040513d601f19601f82011682018060405250810190611b88919061246b565b60015b611c0e573d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b50600081511415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061294a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c63565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612a8a565b60405180910390fd5b611ce48161115d565b15611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b906129aa565b60405180910390fd5b611d3060008383611a6f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d809190612c9b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e4160008383611a74565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611e7490612e36565b90600052602060002090601f016020900481019282611e965760008555611edd565b82601f10611eaf57805160ff1916838001178555611edd565b82800160010185558215611edd579182015b82811115611edc578251825591602001919060010190611ec1565b5b509050611eea9190611eee565b5090565b5b80821115611f07576000816000905550600101611eef565b5090565b6000611f1e611f1984612bca565b612ba5565b90508083825260208201905082856020860282011115611f4157611f40613008565b5b60005b85811015611f715781611f578882611fff565b845260208401935060208301925050600181019050611f44565b5050509392505050565b6000611f8e611f8984612bf6565b612ba5565b905082815260208101848484011115611faa57611fa961300d565b5b611fb5848285612dca565b509392505050565b6000611fd0611fcb84612c27565b612ba5565b905082815260208101848484011115611fec57611feb61300d565b5b611ff7848285612dca565b509392505050565b60008135905061200e8161354c565b92915050565b60008083601f84011261202a57612029613003565b5b8235905067ffffffffffffffff81111561204757612046612ffe565b5b60208301915083602082028301111561206357612062613008565b5b9250929050565b600082601f83011261207f5761207e613003565b5b813561208f848260208601611f0b565b91505092915050565b60008083601f8401126120ae576120ad613003565b5b8235905067ffffffffffffffff8111156120cb576120ca612ffe565b5b6020830191508360208202830111156120e7576120e6613008565b5b9250929050565b6000813590506120fd81613563565b92915050565b6000813590506121128161357a565b92915050565b6000815190506121278161357a565b92915050565b600082601f83011261214257612141613003565b5b8135612152848260208601611f7b565b91505092915050565b600082601f8301126121705761216f613003565b5b8135612180848260208601611fbd565b91505092915050565b60008135905061219881613591565b92915050565b6000602082840312156121b4576121b3613017565b5b60006121c284828501611fff565b91505092915050565b600080604083850312156121e2576121e1613017565b5b60006121f085828601611fff565b925050602061220185828601611fff565b9150509250929050565b60008060006060848603121561222457612223613017565b5b600061223286828701611fff565b935050602061224386828701611fff565b925050604061225486828701612189565b9150509250925092565b6000806000806080858703121561227857612277613017565b5b600061228687828801611fff565b945050602061229787828801611fff565b93505060406122a887828801612189565b925050606085013567ffffffffffffffff8111156122c9576122c8613012565b5b6122d58782880161212d565b91505092959194509250565b600080604083850312156122f8576122f7613017565b5b600061230685828601611fff565b9250506020612317858286016120ee565b9150509250929050565b6000806040838503121561233857612337613017565b5b600061234685828601611fff565b925050602061235785828601612189565b9150509250929050565b6000806000806040858703121561237b5761237a613017565b5b600085013567ffffffffffffffff81111561239957612398613012565b5b6123a587828801612014565b9450945050602085013567ffffffffffffffff8111156123c8576123c7613012565b5b6123d487828801612098565b925092505092959194509250565b600080604083850312156123f9576123f8613017565b5b600083013567ffffffffffffffff81111561241757612416613012565b5b6124238582860161206a565b925050602061243485828601612189565b9150509250929050565b60006020828403121561245457612453613017565b5b600061246284828501612103565b91505092915050565b60006020828403121561248157612480613017565b5b600061248f84828501612118565b91505092915050565b6000602082840312156124ae576124ad613017565b5b600082013567ffffffffffffffff8111156124cc576124cb613012565b5b6124d88482850161215b565b91505092915050565b6000602082840312156124f7576124f6613017565b5b600061250584828501612189565b91505092915050565b61251781612d56565b82525050565b61252681612d68565b82525050565b600061253782612c58565b6125418185612c6e565b9350612551818560208601612dd9565b61255a8161301c565b840191505092915050565b600061257082612c63565b61257a8185612c7f565b935061258a818560208601612dd9565b6125938161301c565b840191505092915050565b60006125a982612c63565b6125b38185612c90565b93506125c3818560208601612dd9565b80840191505092915050565b60006125dc603283612c7f565b91506125e78261302d565b604082019050919050565b60006125ff602683612c7f565b915061260a8261307c565b604082019050919050565b6000612622602583612c7f565b915061262d826130cb565b604082019050919050565b6000612645601c83612c7f565b91506126508261311a565b602082019050919050565b6000612668602483612c7f565b915061267382613143565b604082019050919050565b600061268b601983612c7f565b915061269682613192565b602082019050919050565b60006126ae602c83612c7f565b91506126b9826131bb565b604082019050919050565b60006126d1603883612c7f565b91506126dc8261320a565b604082019050919050565b60006126f4602a83612c7f565b91506126ff82613259565b604082019050919050565b6000612717602983612c7f565b9150612722826132a8565b604082019050919050565b600061273a602083612c7f565b9150612745826132f7565b602082019050919050565b600061275d602c83612c7f565b915061276882613320565b604082019050919050565b6000612780600583612c90565b915061278b8261336f565b600582019050919050565b60006127a3602083612c7f565b91506127ae82613398565b602082019050919050565b60006127c6602883612c7f565b91506127d1826133c1565b604082019050919050565b60006127e9602f83612c7f565b91506127f482613410565b604082019050919050565b600061280c602183612c7f565b91506128178261345f565b604082019050919050565b600061282f602e83612c7f565b915061283a826134ae565b604082019050919050565b6000612852603183612c7f565b915061285d826134fd565b604082019050919050565b61287181612dc0565b82525050565b6000612883828561259e565b915061288f828461259e565b915061289a82612773565b91508190509392505050565b60006020820190506128bb600083018461250e565b92915050565b60006080820190506128d6600083018761250e565b6128e3602083018661250e565b6128f06040830185612868565b8181036060830152612902818461252c565b905095945050505050565b6000602082019050612922600083018461251d565b92915050565b600060208201905081810360008301526129428184612565565b905092915050565b60006020820190508181036000830152612963816125cf565b9050919050565b60006020820190508181036000830152612983816125f2565b9050919050565b600060208201905081810360008301526129a381612615565b9050919050565b600060208201905081810360008301526129c381612638565b9050919050565b600060208201905081810360008301526129e38161265b565b9050919050565b60006020820190508181036000830152612a038161267e565b9050919050565b60006020820190508181036000830152612a23816126a1565b9050919050565b60006020820190508181036000830152612a43816126c4565b9050919050565b60006020820190508181036000830152612a63816126e7565b9050919050565b60006020820190508181036000830152612a838161270a565b9050919050565b60006020820190508181036000830152612aa38161272d565b9050919050565b60006020820190508181036000830152612ac381612750565b9050919050565b60006020820190508181036000830152612ae381612796565b9050919050565b60006020820190508181036000830152612b03816127b9565b9050919050565b60006020820190508181036000830152612b23816127dc565b9050919050565b60006020820190508181036000830152612b43816127ff565b9050919050565b60006020820190508181036000830152612b6381612822565b9050919050565b60006020820190508181036000830152612b8381612845565b9050919050565b6000602082019050612b9f6000830184612868565b92915050565b6000612baf612bc0565b9050612bbb8282612e68565b919050565b6000604051905090565b600067ffffffffffffffff821115612be557612be4612fcf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c1157612c10612fcf565b5b612c1a8261301c565b9050602081019050919050565b600067ffffffffffffffff821115612c4257612c41612fcf565b5b612c4b8261301c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ca682612dc0565b9150612cb183612dc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ce657612ce5612f13565b5b828201905092915050565b6000612cfc82612dc0565b9150612d0783612dc0565b925082612d1757612d16612f42565b5b828204905092915050565b6000612d2d82612dc0565b9150612d3883612dc0565b925082821015612d4b57612d4a612f13565b5b828203905092915050565b6000612d6182612da0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612df7578082015181840152602081019050612ddc565b83811115612e06576000848401525b50505050565b6000612e1782612dc0565b91506000821415612e2b57612e2a612f13565b5b600182039050919050565b60006002820490506001821680612e4e57607f821691505b60208210811415612e6257612e61612f71565b5b50919050565b612e718261301c565b810181811067ffffffffffffffff82111715612e9057612e8f612fcf565b5b80604052505050565b6000612ea482612dc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ed757612ed6612f13565b5b600182019050919050565b6000612eed82612dc0565b9150612ef883612dc0565b925082612f0857612f07612f42565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4163636f756e7473206c656e677468206d75737420657175616c20616d6f756e60008201527f74206c656e677468000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f54414c5f544f4b454e5f4d4158204558434553532c2043616e206e6f206c60008201527f6f6e6765722061697264726f702e000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61355581612d56565b811461356057600080fd5b50565b61356c81612d68565b811461357757600080fd5b50565b61358381612d74565b811461358e57600080fd5b50565b61359a81612dc0565b81146135a557600080fd5b5056fea2646970667358221220290880758f64e8c8edadaada0224b7a013ce5ea0d0a708df03c5af542682e59764736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f6879756e6461692d6e66742e6d7970696e6174612e636c6f75642f697066732f516d6576566e3662584475556841533375327877375937624d415758736d374169744165344b7a4c6a56646b6f472f000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063771282f6116100b8578063a22cb4651161007c578063a22cb46514610351578063b88d4fde1461036d578063c87b56dd14610389578063e985e9c5146103b9578063f2fde38b146103e9578063f905f7dc1461040557610142565b8063771282f6146102bd5780638da5cb5b146102db57806395d89b41146102f957806398803670146103175780639d2cc4361461033357610142565b80633f5a31521161010a5780633f5a3152146101fd57806342842e0e1461021b57806355f804b3146102375780636352211e1461025357806370a0823114610283578063715018a6146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806323b872dd146101e1575b600080fd5b610161600480360381019061015c919061243e565b610421565b60405161016e919061290d565b60405180910390f35b61017f610503565b60405161018c9190612928565b60405180910390f35b6101af60048036038101906101aa91906124e1565b610595565b6040516101bc91906128a6565b60405180910390f35b6101df60048036038101906101da9190612321565b61061a565b005b6101fb60048036038101906101f6919061220b565b610732565b005b610205610792565b6040516102129190612b8a565b60405180910390f35b6102356004803603810190610230919061220b565b610798565b005b610251600480360381019061024c9190612498565b6107b8565b005b61026d600480360381019061026891906124e1565b61084e565b60405161027a91906128a6565b60405180910390f35b61029d6004803603810190610298919061219e565b610900565b6040516102aa9190612b8a565b60405180910390f35b6102bb6109b8565b005b6102c5610a40565b6040516102d29190612b8a565b60405180910390f35b6102e3610a46565b6040516102f091906128a6565b60405180910390f35b610301610a70565b60405161030e9190612928565b60405180910390f35b610331600480360381019061032c9190612361565b610b02565b005b61033b610cdb565b6040516103489190612b8a565b60405180910390f35b61036b600480360381019061036691906122e1565b610ce1565b005b6103876004803603810190610382919061225e565b610cf7565b005b6103a3600480360381019061039e91906124e1565b610d59565b6040516103b09190612928565b60405180910390f35b6103d360048036038101906103ce91906121cb565b610e00565b6040516103e0919061290d565b60405180910390f35b61040360048036038101906103fe919061219e565b610e94565b005b61041f600480360381019061041a91906123e2565b610f8c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ec57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104fc57506104fb826110f3565b5b9050919050565b60606000805461051290612e36565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90612e36565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60006105a08261115d565b6105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690612aaa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106258261084e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612b2a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106b56111c9565b73ffffffffffffffffffffffffffffffffffffffff1614806106e457506106e3816106de6111c9565b610e00565b5b610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612a2a565b60405180910390fd5b61072d83836111d1565b505050565b61074361073d6111c9565b8261128a565b610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077990612b6a565b60405180910390fd5b61078d838383611368565b505050565b60085481565b6107b383838360405180602001604052806000815250610cf7565b505050565b6107c06111c9565b73ffffffffffffffffffffffffffffffffffffffff166107de610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082b90612aca565b60405180910390fd5b80600b908051906020019061084a929190611e68565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90612a6a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612a4a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c06111c9565b73ffffffffffffffffffffffffffffffffffffffff166109de610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90612aca565b60405180910390fd5b610a3e60006115cf565b565b600a5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a7f90612e36565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab90612e36565b8015610af85780601f10610acd57610100808354040283529160200191610af8565b820191906000526020600020905b815481529060010190602001808311610adb57829003601f168201915b5050505050905090565b610b0a6111c9565b73ffffffffffffffffffffffffffffffffffffffff16610b28610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590612aca565b60405180910390fd5b818190508484905014610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612aea565b60405180910390fd5b60005b82829050811015610cd45760005b838383818110610bea57610be9612fa0565b5b90506020020135811015610cc057600754600a5410610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590612b4a565b60405180910390fd5b610c7d868684818110610c5457610c53612fa0565b5b9050602002016020810190610c69919061219e565b6001600a54610c789190612c9b565b611695565b600a6000815480929190610c9090612e99565b919050555060086000815480929190610ca890612e0c565b91905055508080610cb890612e99565b915050610bd7565b508080610ccc90612e99565b915050610bc9565b5050505050565b60095481565b610cf3610cec6111c9565b83836116b3565b5050565b610d08610d026111c9565b8361128a565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90612b6a565b60405180910390fd5b610d5384848484611820565b50505050565b6060610d648261115d565b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612b0a565b60405180910390fd5b6000610dad61187c565b90506000815111610dcd5760405180602001604052806000815250610df8565b80610dd78461190e565b604051602001610de8929190612877565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e9c6111c9565b73ffffffffffffffffffffffffffffffffffffffff16610eba610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790612aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f779061296a565b60405180910390fd5b610f89816115cf565b50565b610f946111c9565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610a46565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90612aca565b60405180910390fd5b60005b82518110156110ee5760005b828110156110da57600754600a5410611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90612b4a565b60405180910390fd5b61109784838151811061107b5761107a612fa0565b5b60200260200101516001600a546110929190612c9b565b611695565b600a60008154809291906110aa90612e99565b9190505550600860008154809291906110c290612e0c565b919050555080806110d290612e99565b915050611017565b5080806110e690612e99565b91505061100b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112448361084e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112958261115d565b6112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90612a0a565b60405180910390fd5b60006112df8361084e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132157506113208185610e00565b5b8061135f57508373ffffffffffffffffffffffffffffffffffffffff1661134784610595565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113888261084e565b73ffffffffffffffffffffffffffffffffffffffff16146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d59061298a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611445906129ca565b60405180910390fd5b611459838383611a6f565b6114646000826111d1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b49190612d22565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150b9190612c9b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115ca838383611a74565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6116af828260405180602001604052806000815250611a79565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906129ea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611813919061290d565b60405180910390a3505050565b61182b848484611368565b61183784848484611ad4565b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061294a565b60405180910390fd5b50505050565b6060600b805461188b90612e36565b80601f01602080910402602001604051908101604052809291908181526020018280546118b790612e36565b80156119045780601f106118d957610100808354040283529160200191611904565b820191906000526020600020905b8154815290600101906020018083116118e757829003601f168201915b5050505050905090565b60606000821415611956576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a6a565b600082905060005b6000821461198857808061197190612e99565b915050600a826119819190612cf1565b915061195e565b60008167ffffffffffffffff8111156119a4576119a3612fcf565b5b6040519080825280601f01601f1916602001820160405280156119d65781602001600182028036833780820191505090505b5090505b60008514611a63576001826119ef9190612d22565b9150600a856119fe9190612ee2565b6030611a0a9190612c9b565b60f81b818381518110611a2057611a1f612fa0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a5c9190612cf1565b94506119da565b8093505050505b919050565b505050565b505050565b611a838383611c6b565b611a906000848484611ad4565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061294a565b60405180910390fd5b505050565b6000611af58473ffffffffffffffffffffffffffffffffffffffff16611e45565b15611c5e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b1e6111c9565b8786866040518563ffffffff1660e01b8152600401611b4094939291906128c1565b602060405180830381600087803b158015611b5a57600080fd5b505af1925050508015611b8b57506040513d601f19601f82011682018060405250810190611b88919061246b565b60015b611c0e573d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b50600081511415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061294a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c63565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612a8a565b60405180910390fd5b611ce48161115d565b15611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b906129aa565b60405180910390fd5b611d3060008383611a6f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d809190612c9b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e4160008383611a74565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611e7490612e36565b90600052602060002090601f016020900481019282611e965760008555611edd565b82601f10611eaf57805160ff1916838001178555611edd565b82800160010185558215611edd579182015b82811115611edc578251825591602001919060010190611ec1565b5b509050611eea9190611eee565b5090565b5b80821115611f07576000816000905550600101611eef565b5090565b6000611f1e611f1984612bca565b612ba5565b90508083825260208201905082856020860282011115611f4157611f40613008565b5b60005b85811015611f715781611f578882611fff565b845260208401935060208301925050600181019050611f44565b5050509392505050565b6000611f8e611f8984612bf6565b612ba5565b905082815260208101848484011115611faa57611fa961300d565b5b611fb5848285612dca565b509392505050565b6000611fd0611fcb84612c27565b612ba5565b905082815260208101848484011115611fec57611feb61300d565b5b611ff7848285612dca565b509392505050565b60008135905061200e8161354c565b92915050565b60008083601f84011261202a57612029613003565b5b8235905067ffffffffffffffff81111561204757612046612ffe565b5b60208301915083602082028301111561206357612062613008565b5b9250929050565b600082601f83011261207f5761207e613003565b5b813561208f848260208601611f0b565b91505092915050565b60008083601f8401126120ae576120ad613003565b5b8235905067ffffffffffffffff8111156120cb576120ca612ffe565b5b6020830191508360208202830111156120e7576120e6613008565b5b9250929050565b6000813590506120fd81613563565b92915050565b6000813590506121128161357a565b92915050565b6000815190506121278161357a565b92915050565b600082601f83011261214257612141613003565b5b8135612152848260208601611f7b565b91505092915050565b600082601f8301126121705761216f613003565b5b8135612180848260208601611fbd565b91505092915050565b60008135905061219881613591565b92915050565b6000602082840312156121b4576121b3613017565b5b60006121c284828501611fff565b91505092915050565b600080604083850312156121e2576121e1613017565b5b60006121f085828601611fff565b925050602061220185828601611fff565b9150509250929050565b60008060006060848603121561222457612223613017565b5b600061223286828701611fff565b935050602061224386828701611fff565b925050604061225486828701612189565b9150509250925092565b6000806000806080858703121561227857612277613017565b5b600061228687828801611fff565b945050602061229787828801611fff565b93505060406122a887828801612189565b925050606085013567ffffffffffffffff8111156122c9576122c8613012565b5b6122d58782880161212d565b91505092959194509250565b600080604083850312156122f8576122f7613017565b5b600061230685828601611fff565b9250506020612317858286016120ee565b9150509250929050565b6000806040838503121561233857612337613017565b5b600061234685828601611fff565b925050602061235785828601612189565b9150509250929050565b6000806000806040858703121561237b5761237a613017565b5b600085013567ffffffffffffffff81111561239957612398613012565b5b6123a587828801612014565b9450945050602085013567ffffffffffffffff8111156123c8576123c7613012565b5b6123d487828801612098565b925092505092959194509250565b600080604083850312156123f9576123f8613017565b5b600083013567ffffffffffffffff81111561241757612416613012565b5b6124238582860161206a565b925050602061243485828601612189565b9150509250929050565b60006020828403121561245457612453613017565b5b600061246284828501612103565b91505092915050565b60006020828403121561248157612480613017565b5b600061248f84828501612118565b91505092915050565b6000602082840312156124ae576124ad613017565b5b600082013567ffffffffffffffff8111156124cc576124cb613012565b5b6124d88482850161215b565b91505092915050565b6000602082840312156124f7576124f6613017565b5b600061250584828501612189565b91505092915050565b61251781612d56565b82525050565b61252681612d68565b82525050565b600061253782612c58565b6125418185612c6e565b9350612551818560208601612dd9565b61255a8161301c565b840191505092915050565b600061257082612c63565b61257a8185612c7f565b935061258a818560208601612dd9565b6125938161301c565b840191505092915050565b60006125a982612c63565b6125b38185612c90565b93506125c3818560208601612dd9565b80840191505092915050565b60006125dc603283612c7f565b91506125e78261302d565b604082019050919050565b60006125ff602683612c7f565b915061260a8261307c565b604082019050919050565b6000612622602583612c7f565b915061262d826130cb565b604082019050919050565b6000612645601c83612c7f565b91506126508261311a565b602082019050919050565b6000612668602483612c7f565b915061267382613143565b604082019050919050565b600061268b601983612c7f565b915061269682613192565b602082019050919050565b60006126ae602c83612c7f565b91506126b9826131bb565b604082019050919050565b60006126d1603883612c7f565b91506126dc8261320a565b604082019050919050565b60006126f4602a83612c7f565b91506126ff82613259565b604082019050919050565b6000612717602983612c7f565b9150612722826132a8565b604082019050919050565b600061273a602083612c7f565b9150612745826132f7565b602082019050919050565b600061275d602c83612c7f565b915061276882613320565b604082019050919050565b6000612780600583612c90565b915061278b8261336f565b600582019050919050565b60006127a3602083612c7f565b91506127ae82613398565b602082019050919050565b60006127c6602883612c7f565b91506127d1826133c1565b604082019050919050565b60006127e9602f83612c7f565b91506127f482613410565b604082019050919050565b600061280c602183612c7f565b91506128178261345f565b604082019050919050565b600061282f602e83612c7f565b915061283a826134ae565b604082019050919050565b6000612852603183612c7f565b915061285d826134fd565b604082019050919050565b61287181612dc0565b82525050565b6000612883828561259e565b915061288f828461259e565b915061289a82612773565b91508190509392505050565b60006020820190506128bb600083018461250e565b92915050565b60006080820190506128d6600083018761250e565b6128e3602083018661250e565b6128f06040830185612868565b8181036060830152612902818461252c565b905095945050505050565b6000602082019050612922600083018461251d565b92915050565b600060208201905081810360008301526129428184612565565b905092915050565b60006020820190508181036000830152612963816125cf565b9050919050565b60006020820190508181036000830152612983816125f2565b9050919050565b600060208201905081810360008301526129a381612615565b9050919050565b600060208201905081810360008301526129c381612638565b9050919050565b600060208201905081810360008301526129e38161265b565b9050919050565b60006020820190508181036000830152612a038161267e565b9050919050565b60006020820190508181036000830152612a23816126a1565b9050919050565b60006020820190508181036000830152612a43816126c4565b9050919050565b60006020820190508181036000830152612a63816126e7565b9050919050565b60006020820190508181036000830152612a838161270a565b9050919050565b60006020820190508181036000830152612aa38161272d565b9050919050565b60006020820190508181036000830152612ac381612750565b9050919050565b60006020820190508181036000830152612ae381612796565b9050919050565b60006020820190508181036000830152612b03816127b9565b9050919050565b60006020820190508181036000830152612b23816127dc565b9050919050565b60006020820190508181036000830152612b43816127ff565b9050919050565b60006020820190508181036000830152612b6381612822565b9050919050565b60006020820190508181036000830152612b8381612845565b9050919050565b6000602082019050612b9f6000830184612868565b92915050565b6000612baf612bc0565b9050612bbb8282612e68565b919050565b6000604051905090565b600067ffffffffffffffff821115612be557612be4612fcf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c1157612c10612fcf565b5b612c1a8261301c565b9050602081019050919050565b600067ffffffffffffffff821115612c4257612c41612fcf565b5b612c4b8261301c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ca682612dc0565b9150612cb183612dc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ce657612ce5612f13565b5b828201905092915050565b6000612cfc82612dc0565b9150612d0783612dc0565b925082612d1757612d16612f42565b5b828204905092915050565b6000612d2d82612dc0565b9150612d3883612dc0565b925082821015612d4b57612d4a612f13565b5b828203905092915050565b6000612d6182612da0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612df7578082015181840152602081019050612ddc565b83811115612e06576000848401525b50505050565b6000612e1782612dc0565b91506000821415612e2b57612e2a612f13565b5b600182039050919050565b60006002820490506001821680612e4e57607f821691505b60208210811415612e6257612e61612f71565b5b50919050565b612e718261301c565b810181811067ffffffffffffffff82111715612e9057612e8f612fcf565b5b80604052505050565b6000612ea482612dc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ed757612ed6612f13565b5b600182019050919050565b6000612eed82612dc0565b9150612ef883612dc0565b925082612f0857612f07612f42565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4163636f756e7473206c656e677468206d75737420657175616c20616d6f756e60008201527f74206c656e677468000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f54414c5f544f4b454e5f4d4158204558434553532c2043616e206e6f206c60008201527f6f6e6765722061697264726f702e000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61355581612d56565b811461356057600080fd5b50565b61356c81612d68565b811461357757600080fd5b50565b61358381612d74565b811461358e57600080fd5b50565b61359a81612dc0565b81146135a557600080fd5b5056fea2646970667358221220290880758f64e8c8edadaada0224b7a013ce5ea0d0a708df03c5af542682e59764736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f6879756e6461692d6e66742e6d7970696e6174612e636c6f75642f697066732f516d6576566e3662584475556841533375327877375937624d415758736d374169744165344b7a4c6a56646b6f472f000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://hyundai-nft.mypinata.cloud/ipfs/QmevVn6bXDuUhAS3u2xw7Y7bMAWXsm7AitAe4KzLjVdkoG/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000057
Arg [2] : 68747470733a2f2f6879756e6461692d6e66742e6d7970696e6174612e636c6f
Arg [3] : 75642f697066732f516d6576566e366258447555684153337532787737593762
Arg [4] : 4d415758736d374169744165344b7a4c6a56646b6f472f000000000000000000


Deployed Bytecode Sourcemap

164:1637:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:288:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2411:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3932:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3470:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4659:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;296:34:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5055:179:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1588:99:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2114:235:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1852:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:11;;;:::i;:::-;;370:28:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2573:102:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;549:566:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;336:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4216:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5300:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2741:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4435:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1125:457:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1505:288:3;1607:4;1653:25;1638:40;;;:11;:40;;;;:100;;;;1705:33;1690:48;;;:11;:48;;;;1638:100;:148;;;;1750:36;1774:11;1750:23;:36::i;:::-;1638:148;1623:163;;1505:288;;;:::o;2411:98::-;2465:13;2497:5;2490:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2411:98;:::o;3932:217::-;4008:7;4035:16;4043:7;4035;:16::i;:::-;4027:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4118:15;:24;4134:7;4118:24;;;;;;;;;;;;;;;;;;;;;4111:31;;3932:217;;;:::o;3470:401::-;3550:13;3566:23;3581:7;3566:14;:23::i;:::-;3550:39;;3613:5;3607:11;;:2;:11;;;;3599:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3704:5;3688:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3713:37;3730:5;3737:12;:10;:12::i;:::-;3713:16;:37::i;:::-;3688:62;3667:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3843:21;3852:2;3856:7;3843:8;:21::i;:::-;3540:331;3470:401;;:::o;4659:330::-;4848:41;4867:12;:10;:12::i;:::-;4881:7;4848:18;:41::i;:::-;4840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4954:28;4964:4;4970:2;4974:7;4954:9;:28::i;:::-;4659:330;;;:::o;296:34:6:-;;;;:::o;5055:179:3:-;5188:39;5205:4;5211:2;5215:7;5188:39;;;;;;;;;;;;:16;:39::i;:::-;5055:179;;;:::o;1588:99:6:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:8:6::1;1661:7;:18;;;;;;;;;;;;:::i;:::-;;1588:99:::0;:::o;2114:235:3:-;2186:7;2205:13;2221:7;:16;2229:7;2221:16;;;;;;;;;;;;;;;;;;;;;2205:32;;2272:1;2255:19;;:5;:19;;;;2247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2337:5;2330:12;;;2114:235;;;:::o;1852:205::-;1924:7;1968:1;1951:19;;:5;:19;;;;1943:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1852:205;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;370:28:6:-;;;;:::o;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2573:102:3:-;2629:13;2661:7;2654:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2573:102;:::o;549:566:6:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;687:8:6::1;;:15;;667:9;;:16;;:35;659:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;762:9;757:352;777:8;;:15;;773:1;:19;757:352;;;818:9;813:286;833:8;;842:1;833:11;;;;;;;:::i;:::-;;;;;;;;829:1;:15;813:286;;;893:15;;877:13;;:31;869:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;977:42;987:9;;997:1;987:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1017:1;1001:13;;:17;;;;:::i;:::-;977:9;:42::i;:::-;1037:13;;:15;;;;;;;;;:::i;:::-;;;;;;1070:12;;:14;;;;;;;;;:::i;:::-;;;;;;846:3;;;;;:::i;:::-;;;;813:286;;;;794:3;;;;;:::i;:::-;;;;757:352;;;;549:566:::0;;;;:::o;336:28::-;;;;:::o;4216:153:3:-;4310:52;4329:12;:10;:12::i;:::-;4343:8;4353;4310:18;:52::i;:::-;4216:153;;:::o;5300:320::-;5469:41;5488:12;:10;:12::i;:::-;5502:7;5469:18;:41::i;:::-;5461:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5574:39;5588:4;5594:2;5598:7;5607:5;5574:13;:39::i;:::-;5300:320;;;;:::o;2741:338::-;2814:13;2847:16;2855:7;2847;:16::i;:::-;2839:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2926:21;2950:10;:8;:10::i;:::-;2926:34;;3001:1;2983:7;2977:21;:25;:95;;;;;;;;;;;;;;;;;3029:7;3038:18;:7;:16;:18::i;:::-;3012:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2977:95;2970:102;;;2741:338;;;:::o;4435:162::-;4532:4;4555:18;:25;4574:5;4555:25;;;;;;;;;;;;;;;:35;4581:8;4555:35;;;;;;;;;;;;;;;;;;;;;;;;;4548:42;;4435:162;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;1125:457:6:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;:6:6::1;1228:348;1249:9;:16;1245:1;:20;1228:348;;;1290:6;1286:280;1306:7;1302:1;:11;1286:280;;;1362:15;;1346:13;;:31;1338:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;1446:40;1456:9;1466:1;1456:12;;;;;;;;:::i;:::-;;;;;;;;1484:1;1470:13;;:15;;;;:::i;:::-;1446:9;:40::i;:::-;1504:13;;:15;;;;;;;;;:::i;:::-;;;;;;1537:12;;:14;;;;;;;;;:::i;:::-;;;;;;1315:3;;;;;:::i;:::-;;;;1286:280;;;;1267:3;;;;;:::i;:::-;;;;1228:348;;;;1125:457:::0;;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7092:125:3:-;7157:4;7208:1;7180:30;;:7;:16;7188:7;7180:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7173:37;;7092:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;11101:171:3:-;11202:2;11175:15;:24;11191:7;11175:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11257:7;11253:2;11219:46;;11228:23;11243:7;11228:14;:23::i;:::-;11219:46;;;;;;;;;;;;11101:171;;:::o;7375:344::-;7468:4;7492:16;7500:7;7492;:16::i;:::-;7484:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7567:13;7583:23;7598:7;7583:14;:23::i;:::-;7567:39;;7635:5;7624:16;;:7;:16;;;:52;;;;7644:32;7661:5;7668:7;7644:16;:32::i;:::-;7624:52;:87;;;;7704:7;7680:31;;:20;7692:7;7680:11;:20::i;:::-;:31;;;7624:87;7616:96;;;7375:344;;;;:::o;10385:605::-;10539:4;10512:31;;:23;10527:7;10512:14;:23::i;:::-;:31;;;10504:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10617:1;10603:16;;:2;:16;;;;10595:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10671:39;10692:4;10698:2;10702:7;10671:20;:39::i;:::-;10772:29;10789:1;10793:7;10772:8;:29::i;:::-;10831:1;10812:9;:15;10822:4;10812:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10859:1;10842:9;:13;10852:2;10842:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10889:2;10870:7;:16;10878:7;10870:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10926:7;10922:2;10907:27;;10916:4;10907:27;;;;;;;;;;;;10945:38;10965:4;10971:2;10975:7;10945:19;:38::i;:::-;10385:605;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;8049:108:3:-;8124:26;8134:2;8138:7;8124:26;;;;;;;;;;;;:9;:26::i;:::-;8049:108;;:::o;11407:307::-;11557:8;11548:17;;:5;:17;;;;11540:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11643:8;11605:18;:25;11624:5;11605:25;;;;;;;;;;;;;;;:35;11631:8;11605:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11688:8;11666:41;;11681:5;11666:41;;;11698:8;11666:41;;;;;;:::i;:::-;;;;;;;;11407:307;;;:::o;6482:::-;6633:28;6643:4;6649:2;6653:7;6633:9;:28::i;:::-;6679:48;6702:4;6708:2;6712:7;6721:5;6679:22;:48::i;:::-;6671:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6482:307;;;;:::o;1693:106:6:-;1753:13;1785:7;1778:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1693:106;:::o;328:703:13:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;13601:122:3:-;;;;:::o;14095:121::-;;;;:::o;8378:311::-;8503:18;8509:2;8513:7;8503:5;:18::i;:::-;8552:54;8583:1;8587:2;8591:7;8600:5;8552:22;:54::i;:::-;8531:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8378:311;;;:::o;12267:778::-;12417:4;12437:15;:2;:13;;;:15::i;:::-;12433:606;;;12488:2;12472:36;;;12509:12;:10;:12::i;:::-;12523:4;12529:7;12538:5;12472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12468:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12728:1;12711:6;:13;:18;12707:266;;;12753:60;;;;;;;;;;:::i;:::-;;;;;;;;12707:266;12925:6;12919:13;12910:6;12906:2;12902:15;12895:38;12468:519;12604:41;;;12594:51;;;:6;:51;;;;12587:58;;;;;12433:606;13024:4;13017:11;;12267:778;;;;;;;:::o;9011:427::-;9104:1;9090:16;;:2;:16;;;;9082:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9162:16;9170:7;9162;:16::i;:::-;9161:17;9153:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9222:45;9251:1;9255:2;9259:7;9222:20;:45::i;:::-;9295:1;9278:9;:13;9288:2;9278:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9325:2;9306:7;:16;9314:7;9306:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9368:7;9364:2;9343:33;;9360:1;9343:33;;;;;;;;;;;;9387:44;9415:1;9419:2;9423:7;9387:19;:44::i;:::-;9011:427;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:14:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2732:568::-;2805:8;2815:6;2865:3;2858:4;2850:6;2846:17;2842:27;2832:122;;2873:79;;:::i;:::-;2832:122;2986:6;2973:20;2963:30;;3016:18;3008:6;3005:30;3002:117;;;3038:79;;:::i;:::-;3002:117;3152:4;3144:6;3140:17;3128:29;;3206:3;3198:4;3190:6;3186:17;3176:8;3172:32;3169:41;3166:128;;;3213:79;;:::i;:::-;3166:128;2732:568;;;;;:::o;3306:133::-;3349:5;3387:6;3374:20;3365:29;;3403:30;3427:5;3403:30;:::i;:::-;3306:133;;;;:::o;3445:137::-;3490:5;3528:6;3515:20;3506:29;;3544:32;3570:5;3544:32;:::i;:::-;3445:137;;;;:::o;3588:141::-;3644:5;3675:6;3669:13;3660:22;;3691:32;3717:5;3691:32;:::i;:::-;3588:141;;;;:::o;3748:338::-;3803:5;3852:3;3845:4;3837:6;3833:17;3829:27;3819:122;;3860:79;;:::i;:::-;3819:122;3977:6;3964:20;4002:78;4076:3;4068:6;4061:4;4053:6;4049:17;4002:78;:::i;:::-;3993:87;;3809:277;3748:338;;;;:::o;4106:340::-;4162:5;4211:3;4204:4;4196:6;4192:17;4188:27;4178:122;;4219:79;;:::i;:::-;4178:122;4336:6;4323:20;4361:79;4436:3;4428:6;4421:4;4413:6;4409:17;4361:79;:::i;:::-;4352:88;;4168:278;4106:340;;;;:::o;4452:139::-;4498:5;4536:6;4523:20;4514:29;;4552:33;4579:5;4552:33;:::i;:::-;4452:139;;;;:::o;4597:329::-;4656:6;4705:2;4693:9;4684:7;4680:23;4676:32;4673:119;;;4711:79;;:::i;:::-;4673:119;4831:1;4856:53;4901:7;4892:6;4881:9;4877:22;4856:53;:::i;:::-;4846:63;;4802:117;4597:329;;;;:::o;4932:474::-;5000:6;5008;5057:2;5045:9;5036:7;5032:23;5028:32;5025:119;;;5063:79;;:::i;:::-;5025:119;5183:1;5208:53;5253:7;5244:6;5233:9;5229:22;5208:53;:::i;:::-;5198:63;;5154:117;5310:2;5336:53;5381:7;5372:6;5361:9;5357:22;5336:53;:::i;:::-;5326:63;;5281:118;4932:474;;;;;:::o;5412:619::-;5489:6;5497;5505;5554:2;5542:9;5533:7;5529:23;5525:32;5522:119;;;5560:79;;:::i;:::-;5522:119;5680:1;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5651:117;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5935:2;5961:53;6006:7;5997:6;5986:9;5982:22;5961:53;:::i;:::-;5951:63;;5906:118;5412:619;;;;;:::o;6037:943::-;6132:6;6140;6148;6156;6205:3;6193:9;6184:7;6180:23;6176:33;6173:120;;;6212:79;;:::i;:::-;6173:120;6332:1;6357:53;6402:7;6393:6;6382:9;6378:22;6357:53;:::i;:::-;6347:63;;6303:117;6459:2;6485:53;6530:7;6521:6;6510:9;6506:22;6485:53;:::i;:::-;6475:63;;6430:118;6587:2;6613:53;6658:7;6649:6;6638:9;6634:22;6613:53;:::i;:::-;6603:63;;6558:118;6743:2;6732:9;6728:18;6715:32;6774:18;6766:6;6763:30;6760:117;;;6796:79;;:::i;:::-;6760:117;6901:62;6955:7;6946:6;6935:9;6931:22;6901:62;:::i;:::-;6891:72;;6686:287;6037:943;;;;;;;:::o;6986:468::-;7051:6;7059;7108:2;7096:9;7087:7;7083:23;7079:32;7076:119;;;7114:79;;:::i;:::-;7076:119;7234:1;7259:53;7304:7;7295:6;7284:9;7280:22;7259:53;:::i;:::-;7249:63;;7205:117;7361:2;7387:50;7429:7;7420:6;7409:9;7405:22;7387:50;:::i;:::-;7377:60;;7332:115;6986:468;;;;;:::o;7460:474::-;7528:6;7536;7585:2;7573:9;7564:7;7560:23;7556:32;7553:119;;;7591:79;;:::i;:::-;7553:119;7711:1;7736:53;7781:7;7772:6;7761:9;7757:22;7736:53;:::i;:::-;7726:63;;7682:117;7838:2;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7809:118;7460:474;;;;;:::o;7940:934::-;8062:6;8070;8078;8086;8135:2;8123:9;8114:7;8110:23;8106:32;8103:119;;;8141:79;;:::i;:::-;8103:119;8289:1;8278:9;8274:17;8261:31;8319:18;8311:6;8308:30;8305:117;;;8341:79;;:::i;:::-;8305:117;8454:80;8526:7;8517:6;8506:9;8502:22;8454:80;:::i;:::-;8436:98;;;;8232:312;8611:2;8600:9;8596:18;8583:32;8642:18;8634:6;8631:30;8628:117;;;8664:79;;:::i;:::-;8628:117;8777:80;8849:7;8840:6;8829:9;8825:22;8777:80;:::i;:::-;8759:98;;;;8554:313;7940:934;;;;;;;:::o;8880:684::-;8973:6;8981;9030:2;9018:9;9009:7;9005:23;9001:32;8998:119;;;9036:79;;:::i;:::-;8998:119;9184:1;9173:9;9169:17;9156:31;9214:18;9206:6;9203:30;9200:117;;;9236:79;;:::i;:::-;9200:117;9341:78;9411:7;9402:6;9391:9;9387:22;9341:78;:::i;:::-;9331:88;;9127:302;9468:2;9494:53;9539:7;9530:6;9519:9;9515:22;9494:53;:::i;:::-;9484:63;;9439:118;8880:684;;;;;:::o;9570:327::-;9628:6;9677:2;9665:9;9656:7;9652:23;9648:32;9645:119;;;9683:79;;:::i;:::-;9645:119;9803:1;9828:52;9872:7;9863:6;9852:9;9848:22;9828:52;:::i;:::-;9818:62;;9774:116;9570:327;;;;:::o;9903:349::-;9972:6;10021:2;10009:9;10000:7;9996:23;9992:32;9989:119;;;10027:79;;:::i;:::-;9989:119;10147:1;10172:63;10227:7;10218:6;10207:9;10203:22;10172:63;:::i;:::-;10162:73;;10118:127;9903:349;;;;:::o;10258:509::-;10327:6;10376:2;10364:9;10355:7;10351:23;10347:32;10344:119;;;10382:79;;:::i;:::-;10344:119;10530:1;10519:9;10515:17;10502:31;10560:18;10552:6;10549:30;10546:117;;;10582:79;;:::i;:::-;10546:117;10687:63;10742:7;10733:6;10722:9;10718:22;10687:63;:::i;:::-;10677:73;;10473:287;10258:509;;;;:::o;10773:329::-;10832:6;10881:2;10869:9;10860:7;10856:23;10852:32;10849:119;;;10887:79;;:::i;:::-;10849:119;11007:1;11032:53;11077:7;11068:6;11057:9;11053:22;11032:53;:::i;:::-;11022:63;;10978:117;10773:329;;;;:::o;11108:118::-;11195:24;11213:5;11195:24;:::i;:::-;11190:3;11183:37;11108:118;;:::o;11232:109::-;11313:21;11328:5;11313:21;:::i;:::-;11308:3;11301:34;11232:109;;:::o;11347:360::-;11433:3;11461:38;11493:5;11461:38;:::i;:::-;11515:70;11578:6;11573:3;11515:70;:::i;:::-;11508:77;;11594:52;11639:6;11634:3;11627:4;11620:5;11616:16;11594:52;:::i;:::-;11671:29;11693:6;11671:29;:::i;:::-;11666:3;11662:39;11655:46;;11437:270;11347:360;;;;:::o;11713:364::-;11801:3;11829:39;11862:5;11829:39;:::i;:::-;11884:71;11948:6;11943:3;11884:71;:::i;:::-;11877:78;;11964:52;12009:6;12004:3;11997:4;11990:5;11986:16;11964:52;:::i;:::-;12041:29;12063:6;12041:29;:::i;:::-;12036:3;12032:39;12025:46;;11805:272;11713:364;;;;:::o;12083:377::-;12189:3;12217:39;12250:5;12217:39;:::i;:::-;12272:89;12354:6;12349:3;12272:89;:::i;:::-;12265:96;;12370:52;12415:6;12410:3;12403:4;12396:5;12392:16;12370:52;:::i;:::-;12447:6;12442:3;12438:16;12431:23;;12193:267;12083:377;;;;:::o;12466:366::-;12608:3;12629:67;12693:2;12688:3;12629:67;:::i;:::-;12622:74;;12705:93;12794:3;12705:93;:::i;:::-;12823:2;12818:3;12814:12;12807:19;;12466:366;;;:::o;12838:::-;12980:3;13001:67;13065:2;13060:3;13001:67;:::i;:::-;12994:74;;13077:93;13166:3;13077:93;:::i;:::-;13195:2;13190:3;13186:12;13179:19;;12838:366;;;:::o;13210:::-;13352:3;13373:67;13437:2;13432:3;13373:67;:::i;:::-;13366:74;;13449:93;13538:3;13449:93;:::i;:::-;13567:2;13562:3;13558:12;13551:19;;13210:366;;;:::o;13582:::-;13724:3;13745:67;13809:2;13804:3;13745:67;:::i;:::-;13738:74;;13821:93;13910:3;13821:93;:::i;:::-;13939:2;13934:3;13930:12;13923:19;;13582:366;;;:::o;13954:::-;14096:3;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;13954:366;;;:::o;14326:::-;14468:3;14489:67;14553:2;14548:3;14489:67;:::i;:::-;14482:74;;14565:93;14654:3;14565:93;:::i;:::-;14683:2;14678:3;14674:12;14667:19;;14326:366;;;:::o;14698:::-;14840:3;14861:67;14925:2;14920:3;14861:67;:::i;:::-;14854:74;;14937:93;15026:3;14937:93;:::i;:::-;15055:2;15050:3;15046:12;15039:19;;14698:366;;;:::o;15070:::-;15212:3;15233:67;15297:2;15292:3;15233:67;:::i;:::-;15226:74;;15309:93;15398:3;15309:93;:::i;:::-;15427:2;15422:3;15418:12;15411:19;;15070:366;;;:::o;15442:::-;15584:3;15605:67;15669:2;15664:3;15605:67;:::i;:::-;15598:74;;15681:93;15770:3;15681:93;:::i;:::-;15799:2;15794:3;15790:12;15783:19;;15442:366;;;:::o;15814:::-;15956:3;15977:67;16041:2;16036:3;15977:67;:::i;:::-;15970:74;;16053:93;16142:3;16053:93;:::i;:::-;16171:2;16166:3;16162:12;16155:19;;15814:366;;;:::o;16186:::-;16328:3;16349:67;16413:2;16408:3;16349:67;:::i;:::-;16342:74;;16425:93;16514:3;16425:93;:::i;:::-;16543:2;16538:3;16534:12;16527:19;;16186:366;;;:::o;16558:::-;16700:3;16721:67;16785:2;16780:3;16721:67;:::i;:::-;16714:74;;16797:93;16886:3;16797:93;:::i;:::-;16915:2;16910:3;16906:12;16899:19;;16558:366;;;:::o;16930:400::-;17090:3;17111:84;17193:1;17188:3;17111:84;:::i;:::-;17104:91;;17204:93;17293:3;17204:93;:::i;:::-;17322:1;17317:3;17313:11;17306:18;;16930:400;;;:::o;17336:366::-;17478:3;17499:67;17563:2;17558:3;17499:67;:::i;:::-;17492:74;;17575:93;17664:3;17575:93;:::i;:::-;17693:2;17688:3;17684:12;17677:19;;17336:366;;;:::o;17708:::-;17850:3;17871:67;17935:2;17930:3;17871:67;:::i;:::-;17864:74;;17947:93;18036:3;17947:93;:::i;:::-;18065:2;18060:3;18056:12;18049:19;;17708:366;;;:::o;18080:::-;18222:3;18243:67;18307:2;18302:3;18243:67;:::i;:::-;18236:74;;18319:93;18408:3;18319:93;:::i;:::-;18437:2;18432:3;18428:12;18421:19;;18080:366;;;:::o;18452:::-;18594:3;18615:67;18679:2;18674:3;18615:67;:::i;:::-;18608:74;;18691:93;18780:3;18691:93;:::i;:::-;18809:2;18804:3;18800:12;18793:19;;18452:366;;;:::o;18824:::-;18966:3;18987:67;19051:2;19046:3;18987:67;:::i;:::-;18980:74;;19063:93;19152:3;19063:93;:::i;:::-;19181:2;19176:3;19172:12;19165:19;;18824:366;;;:::o;19196:::-;19338:3;19359:67;19423:2;19418:3;19359:67;:::i;:::-;19352:74;;19435:93;19524:3;19435:93;:::i;:::-;19553:2;19548:3;19544:12;19537:19;;19196:366;;;:::o;19568:118::-;19655:24;19673:5;19655:24;:::i;:::-;19650:3;19643:37;19568:118;;:::o;19692:701::-;19973:3;19995:95;20086:3;20077:6;19995:95;:::i;:::-;19988:102;;20107:95;20198:3;20189:6;20107:95;:::i;:::-;20100:102;;20219:148;20363:3;20219:148;:::i;:::-;20212:155;;20384:3;20377:10;;19692:701;;;;;:::o;20399:222::-;20492:4;20530:2;20519:9;20515:18;20507:26;;20543:71;20611:1;20600:9;20596:17;20587:6;20543:71;:::i;:::-;20399:222;;;;:::o;20627:640::-;20822:4;20860:3;20849:9;20845:19;20837:27;;20874:71;20942:1;20931:9;20927:17;20918:6;20874:71;:::i;:::-;20955:72;21023:2;21012:9;21008:18;20999:6;20955:72;:::i;:::-;21037;21105:2;21094:9;21090:18;21081:6;21037:72;:::i;:::-;21156:9;21150:4;21146:20;21141:2;21130:9;21126:18;21119:48;21184:76;21255:4;21246:6;21184:76;:::i;:::-;21176:84;;20627:640;;;;;;;:::o;21273:210::-;21360:4;21398:2;21387:9;21383:18;21375:26;;21411:65;21473:1;21462:9;21458:17;21449:6;21411:65;:::i;:::-;21273:210;;;;:::o;21489:313::-;21602:4;21640:2;21629:9;21625:18;21617:26;;21689:9;21683:4;21679:20;21675:1;21664:9;21660:17;21653:47;21717:78;21790:4;21781:6;21717:78;:::i;:::-;21709:86;;21489:313;;;;:::o;21808:419::-;21974:4;22012:2;22001:9;21997:18;21989:26;;22061:9;22055:4;22051:20;22047:1;22036:9;22032:17;22025:47;22089:131;22215:4;22089:131;:::i;:::-;22081:139;;21808:419;;;:::o;22233:::-;22399:4;22437:2;22426:9;22422:18;22414:26;;22486:9;22480:4;22476:20;22472:1;22461:9;22457:17;22450:47;22514:131;22640:4;22514:131;:::i;:::-;22506:139;;22233:419;;;:::o;22658:::-;22824:4;22862:2;22851:9;22847:18;22839:26;;22911:9;22905:4;22901:20;22897:1;22886:9;22882:17;22875:47;22939:131;23065:4;22939:131;:::i;:::-;22931:139;;22658:419;;;:::o;23083:::-;23249:4;23287:2;23276:9;23272:18;23264:26;;23336:9;23330:4;23326:20;23322:1;23311:9;23307:17;23300:47;23364:131;23490:4;23364:131;:::i;:::-;23356:139;;23083:419;;;:::o;23508:::-;23674:4;23712:2;23701:9;23697:18;23689:26;;23761:9;23755:4;23751:20;23747:1;23736:9;23732:17;23725:47;23789:131;23915:4;23789:131;:::i;:::-;23781:139;;23508:419;;;:::o;23933:::-;24099:4;24137:2;24126:9;24122:18;24114:26;;24186:9;24180:4;24176:20;24172:1;24161:9;24157:17;24150:47;24214:131;24340:4;24214:131;:::i;:::-;24206:139;;23933:419;;;:::o;24358:::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:131;24765:4;24639:131;:::i;:::-;24631:139;;24358:419;;;:::o;24783:::-;24949:4;24987:2;24976:9;24972:18;24964:26;;25036:9;25030:4;25026:20;25022:1;25011:9;25007:17;25000:47;25064:131;25190:4;25064:131;:::i;:::-;25056:139;;24783:419;;;:::o;25208:::-;25374:4;25412:2;25401:9;25397:18;25389:26;;25461:9;25455:4;25451:20;25447:1;25436:9;25432:17;25425:47;25489:131;25615:4;25489:131;:::i;:::-;25481:139;;25208:419;;;:::o;25633:::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:::-;26649:4;26687:2;26676:9;26672:18;26664:26;;26736:9;26730:4;26726:20;26722:1;26711:9;26707:17;26700:47;26764:131;26890:4;26764:131;:::i;:::-;26756:139;;26483:419;;;:::o;26908:::-;27074:4;27112:2;27101:9;27097:18;27089:26;;27161:9;27155:4;27151:20;27147:1;27136:9;27132:17;27125:47;27189:131;27315:4;27189:131;:::i;:::-;27181:139;;26908:419;;;:::o;27333:::-;27499:4;27537:2;27526:9;27522:18;27514:26;;27586:9;27580:4;27576:20;27572:1;27561:9;27557:17;27550:47;27614:131;27740:4;27614:131;:::i;:::-;27606:139;;27333:419;;;:::o;27758:::-;27924:4;27962:2;27951:9;27947:18;27939:26;;28011:9;28005:4;28001:20;27997:1;27986:9;27982:17;27975:47;28039:131;28165:4;28039:131;:::i;:::-;28031:139;;27758:419;;;:::o;28183:::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:::-;29199:4;29237:2;29226:9;29222:18;29214:26;;29286:9;29280:4;29276:20;29272:1;29261:9;29257:17;29250:47;29314:131;29440:4;29314:131;:::i;:::-;29306:139;;29033:419;;;:::o;29458:222::-;29551:4;29589:2;29578:9;29574:18;29566:26;;29602:71;29670:1;29659:9;29655:17;29646:6;29602:71;:::i;:::-;29458:222;;;;:::o;29686:129::-;29720:6;29747:20;;:::i;:::-;29737:30;;29776:33;29804:4;29796:6;29776:33;:::i;:::-;29686:129;;;:::o;29821:75::-;29854:6;29887:2;29881:9;29871:19;;29821:75;:::o;29902:311::-;29979:4;30069:18;30061:6;30058:30;30055:56;;;30091:18;;:::i;:::-;30055:56;30141:4;30133:6;30129:17;30121:25;;30201:4;30195;30191:15;30183:23;;29902:311;;;:::o;30219:307::-;30280:4;30370:18;30362:6;30359:30;30356:56;;;30392:18;;:::i;:::-;30356:56;30430:29;30452:6;30430:29;:::i;:::-;30422:37;;30514:4;30508;30504:15;30496:23;;30219:307;;;:::o;30532:308::-;30594:4;30684:18;30676:6;30673:30;30670:56;;;30706:18;;:::i;:::-;30670:56;30744:29;30766:6;30744:29;:::i;:::-;30736:37;;30828:4;30822;30818:15;30810:23;;30532:308;;;:::o;30846:98::-;30897:6;30931:5;30925:12;30915:22;;30846:98;;;:::o;30950:99::-;31002:6;31036:5;31030:12;31020:22;;30950:99;;;:::o;31055:168::-;31138:11;31172:6;31167:3;31160:19;31212:4;31207:3;31203:14;31188:29;;31055:168;;;;:::o;31229:169::-;31313:11;31347:6;31342:3;31335:19;31387:4;31382:3;31378:14;31363:29;;31229:169;;;;:::o;31404:148::-;31506:11;31543:3;31528:18;;31404:148;;;;:::o;31558:305::-;31598:3;31617:20;31635:1;31617:20;:::i;:::-;31612:25;;31651:20;31669:1;31651:20;:::i;:::-;31646:25;;31805:1;31737:66;31733:74;31730:1;31727:81;31724:107;;;31811:18;;:::i;:::-;31724:107;31855:1;31852;31848:9;31841:16;;31558:305;;;;:::o;31869:185::-;31909:1;31926:20;31944:1;31926:20;:::i;:::-;31921:25;;31960:20;31978:1;31960:20;:::i;:::-;31955:25;;31999:1;31989:35;;32004:18;;:::i;:::-;31989:35;32046:1;32043;32039:9;32034:14;;31869:185;;;;:::o;32060:191::-;32100:4;32120:20;32138:1;32120:20;:::i;:::-;32115:25;;32154:20;32172:1;32154:20;:::i;:::-;32149:25;;32193:1;32190;32187:8;32184:34;;;32198:18;;:::i;:::-;32184:34;32243:1;32240;32236:9;32228:17;;32060:191;;;;:::o;32257:96::-;32294:7;32323:24;32341:5;32323:24;:::i;:::-;32312:35;;32257:96;;;:::o;32359:90::-;32393:7;32436:5;32429:13;32422:21;32411:32;;32359:90;;;:::o;32455:149::-;32491:7;32531:66;32524:5;32520:78;32509:89;;32455:149;;;:::o;32610:126::-;32647:7;32687:42;32680:5;32676:54;32665:65;;32610:126;;;:::o;32742:77::-;32779:7;32808:5;32797:16;;32742:77;;;:::o;32825:154::-;32909:6;32904:3;32899;32886:30;32971:1;32962:6;32957:3;32953:16;32946:27;32825:154;;;:::o;32985:307::-;33053:1;33063:113;33077:6;33074:1;33071:13;33063:113;;;33162:1;33157:3;33153:11;33147:18;33143:1;33138:3;33134:11;33127:39;33099:2;33096:1;33092:10;33087:15;;33063:113;;;33194:6;33191:1;33188:13;33185:101;;;33274:1;33265:6;33260:3;33256:16;33249:27;33185:101;33034:258;32985:307;;;:::o;33298:171::-;33337:3;33360:24;33378:5;33360:24;:::i;:::-;33351:33;;33406:4;33399:5;33396:15;33393:41;;;33414:18;;:::i;:::-;33393:41;33461:1;33454:5;33450:13;33443:20;;33298:171;;;:::o;33475:320::-;33519:6;33556:1;33550:4;33546:12;33536:22;;33603:1;33597:4;33593:12;33624:18;33614:81;;33680:4;33672:6;33668:17;33658:27;;33614:81;33742:2;33734:6;33731:14;33711:18;33708:38;33705:84;;;33761:18;;:::i;:::-;33705:84;33526:269;33475:320;;;:::o;33801:281::-;33884:27;33906:4;33884:27;:::i;:::-;33876:6;33872:40;34014:6;34002:10;33999:22;33978:18;33966:10;33963:34;33960:62;33957:88;;;34025:18;;:::i;:::-;33957:88;34065:10;34061:2;34054:22;33844:238;33801:281;;:::o;34088:233::-;34127:3;34150:24;34168:5;34150:24;:::i;:::-;34141:33;;34196:66;34189:5;34186:77;34183:103;;;34266:18;;:::i;:::-;34183:103;34313:1;34306:5;34302:13;34295:20;;34088:233;;;:::o;34327:176::-;34359:1;34376:20;34394:1;34376:20;:::i;:::-;34371:25;;34410:20;34428:1;34410:20;:::i;:::-;34405:25;;34449:1;34439:35;;34454:18;;:::i;:::-;34439:35;34495:1;34492;34488:9;34483:14;;34327:176;;;;:::o;34509:180::-;34557:77;34554:1;34547:88;34654:4;34651:1;34644:15;34678:4;34675:1;34668:15;34695:180;34743:77;34740:1;34733:88;34840:4;34837:1;34830:15;34864:4;34861:1;34854:15;34881:180;34929:77;34926:1;34919:88;35026:4;35023:1;35016:15;35050:4;35047:1;35040:15;35067:180;35115:77;35112:1;35105:88;35212:4;35209:1;35202:15;35236:4;35233:1;35226:15;35253:180;35301:77;35298:1;35291:88;35398:4;35395:1;35388:15;35422:4;35419:1;35412:15;35439:117;35548:1;35545;35538:12;35562:117;35671:1;35668;35661:12;35685:117;35794:1;35791;35784:12;35808:117;35917:1;35914;35907:12;35931:117;36040:1;36037;36030:12;36054:117;36163:1;36160;36153:12;36177:102;36218:6;36269:2;36265:7;36260:2;36253:5;36249:14;36245:28;36235:38;;36177:102;;;:::o;36285:237::-;36425:34;36421:1;36413:6;36409:14;36402:58;36494:20;36489:2;36481:6;36477:15;36470:45;36285:237;:::o;36528:225::-;36668:34;36664:1;36656:6;36652:14;36645:58;36737:8;36732:2;36724:6;36720:15;36713:33;36528:225;:::o;36759:224::-;36899:34;36895:1;36887:6;36883:14;36876:58;36968:7;36963:2;36955:6;36951:15;36944:32;36759:224;:::o;36989:178::-;37129:30;37125:1;37117:6;37113:14;37106:54;36989:178;:::o;37173:223::-;37313:34;37309:1;37301:6;37297:14;37290:58;37382:6;37377:2;37369:6;37365:15;37358:31;37173:223;:::o;37402:175::-;37542:27;37538:1;37530:6;37526:14;37519:51;37402:175;:::o;37583:231::-;37723:34;37719:1;37711:6;37707:14;37700:58;37792:14;37787:2;37779:6;37775:15;37768:39;37583:231;:::o;37820:243::-;37960:34;37956:1;37948:6;37944:14;37937:58;38029:26;38024:2;38016:6;38012:15;38005:51;37820:243;:::o;38069:229::-;38209:34;38205:1;38197:6;38193:14;38186:58;38278:12;38273:2;38265:6;38261:15;38254:37;38069:229;:::o;38304:228::-;38444:34;38440:1;38432:6;38428:14;38421:58;38513:11;38508:2;38500:6;38496:15;38489:36;38304:228;:::o;38538:182::-;38678:34;38674:1;38666:6;38662:14;38655:58;38538:182;:::o;38726:231::-;38866:34;38862:1;38854:6;38850:14;38843:58;38935:14;38930:2;38922:6;38918:15;38911:39;38726:231;:::o;38963:155::-;39103:7;39099:1;39091:6;39087:14;39080:31;38963:155;:::o;39124:182::-;39264:34;39260:1;39252:6;39248:14;39241:58;39124:182;:::o;39312:227::-;39452:34;39448:1;39440:6;39436:14;39429:58;39521:10;39516:2;39508:6;39504:15;39497:35;39312:227;:::o;39545:234::-;39685:34;39681:1;39673:6;39669:14;39662:58;39754:17;39749:2;39741:6;39737:15;39730:42;39545:234;:::o;39785:220::-;39925:34;39921:1;39913:6;39909:14;39902:58;39994:3;39989:2;39981:6;39977:15;39970:28;39785:220;:::o;40011:233::-;40151:34;40147:1;40139:6;40135:14;40128:58;40220:16;40215:2;40207:6;40203:15;40196:41;40011:233;:::o;40250:236::-;40390:34;40386:1;40378:6;40374:14;40367:58;40459:19;40454:2;40446:6;40442:15;40435:44;40250:236;:::o;40492:122::-;40565:24;40583:5;40565:24;:::i;:::-;40558:5;40555:35;40545:63;;40604:1;40601;40594:12;40545:63;40492:122;:::o;40620:116::-;40690:21;40705:5;40690:21;:::i;:::-;40683:5;40680:32;40670:60;;40726:1;40723;40716:12;40670:60;40620:116;:::o;40742:120::-;40814:23;40831:5;40814:23;:::i;:::-;40807:5;40804:34;40794:62;;40852:1;40849;40842:12;40794:62;40742:120;:::o;40868:122::-;40941:24;40959:5;40941:24;:::i;:::-;40934:5;40931:35;40921:63;;40980:1;40977;40970:12;40921:63;40868:122;:::o

Swarm Source

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