ETH Price: $3,396.80 (+2.43%)

WSOT (WSOTNFT)
 

Overview

TokenID

156

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
Wsot

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-17
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/utils/Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/utils/Address.sol


pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC721/IERC721Receiver.sol


pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/utils/introspection/ERC165.sol

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC721/IERC721.sol


pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC721/extensions/IERC721Metadata.sol


pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC721/ERC721.sol


pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

    /**
     * @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 of token that is not own");
        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);
    }

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC721/extensions/ERC721URIStorage.sol


pragma solidity ^0.8.0;


/**
 * @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 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 override {
        super._burn(tokenId);

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

// File: contracts/Wsot.sol

// contracts/Wsot.sol
pragma solidity ^0.8.0;


contract Wsot is ERC721URIStorage {
    address owner;

    constructor() ERC721('WSOT','WSOTNFT') {
        owner = msg.sender;
    }

    function awardItem(address player, string memory tokenURI,uint256 newItemId )
        public
        returns (uint256)
    {
        
        if (msg.sender != owner) return 0;
        _safeMint(player, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"uint256","name":"newItemId","type":"uint256"}],"name":"awardItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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"}]

60806040523480156200001157600080fd5b506040518060400160405280600481526020017f57534f54000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f57534f544e465400000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620000f9565b508060019080519060200190620000af929190620000f9565b50505033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020e565b8280546200010790620001a9565b90600052602060002090601f0160209004810192826200012b576000855562000177565b82601f106200014657805160ff191683800117855562000177565b8280016001018555821562000177579182015b828111156200017657825182559160200191906001019062000159565b5b5090506200018691906200018a565b5090565b5b80821115620001a55760008160009055506001016200018b565b5090565b60006002820490506001821680620001c257607f821691505b60208210811415620001d957620001d8620001df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612b34806200021e6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cd3dd21a146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611cc8565b610307565b604051610116919061248c565b60405180910390f35b6101276103e9565b60405161013491906124a7565b60405180910390f35b61015760048036038101906101529190611d1a565b61047b565b6040516101649190612425565b60405180910390f35b61018760048036038101906101829190611c8c565b610500565b005b6101a3600480360381019061019e9190611b1f565b610618565b005b6101bf60048036038101906101ba9190611b1f565b610678565b005b6101db60048036038101906101d69190611d1a565b610698565b6040516101e89190612425565b60405180910390f35b61020b60048036038101906102069190611aba565b61074a565b60405161021891906126c9565b60405180910390f35b610229610802565b60405161023691906124a7565b60405180910390f35b61025960048036038101906102549190611be9565b610894565b005b61027560048036038101906102709190611b6e565b610a15565b005b610291600480360381019061028c9190611d1a565b610a77565b60405161029e91906124a7565b60405180910390f35b6102c160048036038101906102bc9190611c25565b610bc9565b6040516102ce91906126c9565b60405180910390f35b6102f160048036038101906102ec9190611ae3565b610c48565b6040516102fe919061248c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610cdc565b5b9050919050565b6060600080546103f890612929565b80601f016020809104026020016040519081016040528092919081815260200182805461042490612929565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610d46565b6104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90612629565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061050b82610698565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561057c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057390612689565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661059b610db2565b73ffffffffffffffffffffffffffffffffffffffff1614806105ca57506105c9816105c4610db2565b610c48565b5b610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090612569565b60405180910390fd5b6106138383610dba565b505050565b610629610623610db2565b82610e73565b610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065f906126a9565b60405180910390fd5b610673838383610f51565b505050565b61069383838360405180602001604052806000815250610a15565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610738906125a9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b290612589565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461081190612929565b80601f016020809104026020016040519081016040528092919081815260200182805461083d90612929565b801561088a5780601f1061085f5761010080835404028352916020019161088a565b820191906000526020600020905b81548152906001019060200180831161086d57829003601f168201915b5050505050905090565b61089c610db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090190612529565b60405180910390fd5b8060056000610917610db2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166109c4610db2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a09919061248c565b60405180910390a35050565b610a26610a20610db2565b83610e73565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906126a9565b60405180910390fd5b610a71848484846111ad565b50505050565b6060610a8282610d46565b610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612609565b60405180910390fd5b6000600660008481526020019081526020016000208054610ae190612929565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0d90612929565b8015610b5a5780601f10610b2f57610100808354040283529160200191610b5a565b820191906000526020600020905b815481529060010190602001808311610b3d57829003601f168201915b505050505090506000610b6b611209565b9050600081511415610b81578192505050610bc4565b600082511115610bb6578082604051602001610b9e929190612401565b60405160208183030381529060405292505050610bc4565b610bbf84611220565b925050505b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c295760009050610c41565b610c3384836112c7565b610c3d82846112e5565b8190505b9392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610e2d83610698565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610e7e82610d46565b610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612549565b60405180910390fd5b6000610ec883610698565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610f3757508373ffffffffffffffffffffffffffffffffffffffff16610f1f8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f485750610f478185610c48565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610f7182610698565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90612649565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612509565b60405180910390fd5b611042838383611359565b61104d600082610dba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109d919061283f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110f491906127b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6111b8848484610f51565b6111c48484848461135e565b611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906124c9565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606061122b82610d46565b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190612669565b60405180910390fd5b6000611274611209565b9050600081511161129457604051806020016040528060008152506112bf565b8061129e846114f5565b6040516020016112af929190612401565b6040516020818303038152906040525b915050919050565b6112e18282604051806020016040528060008152506116a2565b5050565b6112ee82610d46565b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906125c9565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906113549291906118de565b505050565b505050565b600061137f8473ffffffffffffffffffffffffffffffffffffffff166116fd565b156114e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026113a8610db2565b8786866040518563ffffffff1660e01b81526004016113ca9493929190612440565b602060405180830381600087803b1580156113e457600080fd5b505af192505050801561141557506040513d601f19601f820116820180604052508101906114129190611cf1565b60015b611498573d8060008114611445576040519150601f19603f3d011682016040523d82523d6000602084013e61144a565b606091505b50600081511415611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906124c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506114ed565b600190505b949350505050565b6060600082141561153d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061169d565b600082905060005b6000821461156f5780806115589061295b565b915050600a82611568919061280e565b9150611545565b60008167ffffffffffffffff8111156115b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115e35781602001600182028036833780820191505090505b5090505b60008514611696576001826115fc919061283f565b9150600a8561160b91906129a4565b603061161791906127b8565b60f81b818381518110611653577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561168f919061280e565b94506115e7565b8093505050505b919050565b6116ac8383611710565b6116b9600084848461135e565b6116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906124c9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611777906125e9565b60405180910390fd5b61178981610d46565b156117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c0906124e9565b60405180910390fd5b6117d560008383611359565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182591906127b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546118ea90612929565b90600052602060002090601f01602090048101928261190c5760008555611953565b82601f1061192557805160ff1916838001178555611953565b82800160010185558215611953579182015b82811115611952578251825591602001919060010190611937565b5b5090506119609190611964565b5090565b5b8082111561197d576000816000905550600101611965565b5090565b600061199461198f84612715565b6126e4565b9050828152602081018484840111156119ac57600080fd5b6119b78482856128e7565b509392505050565b60006119d26119cd84612745565b6126e4565b9050828152602081018484840111156119ea57600080fd5b6119f58482856128e7565b509392505050565b600081359050611a0c81612aa2565b92915050565b600081359050611a2181612ab9565b92915050565b600081359050611a3681612ad0565b92915050565b600081519050611a4b81612ad0565b92915050565b600082601f830112611a6257600080fd5b8135611a72848260208601611981565b91505092915050565b600082601f830112611a8c57600080fd5b8135611a9c8482602086016119bf565b91505092915050565b600081359050611ab481612ae7565b92915050565b600060208284031215611acc57600080fd5b6000611ada848285016119fd565b91505092915050565b60008060408385031215611af657600080fd5b6000611b04858286016119fd565b9250506020611b15858286016119fd565b9150509250929050565b600080600060608486031215611b3457600080fd5b6000611b42868287016119fd565b9350506020611b53868287016119fd565b9250506040611b6486828701611aa5565b9150509250925092565b60008060008060808587031215611b8457600080fd5b6000611b92878288016119fd565b9450506020611ba3878288016119fd565b9350506040611bb487828801611aa5565b925050606085013567ffffffffffffffff811115611bd157600080fd5b611bdd87828801611a51565b91505092959194509250565b60008060408385031215611bfc57600080fd5b6000611c0a858286016119fd565b9250506020611c1b85828601611a12565b9150509250929050565b600080600060608486031215611c3a57600080fd5b6000611c48868287016119fd565b935050602084013567ffffffffffffffff811115611c6557600080fd5b611c7186828701611a7b565b9250506040611c8286828701611aa5565b9150509250925092565b60008060408385031215611c9f57600080fd5b6000611cad858286016119fd565b9250506020611cbe85828601611aa5565b9150509250929050565b600060208284031215611cda57600080fd5b6000611ce884828501611a27565b91505092915050565b600060208284031215611d0357600080fd5b6000611d1184828501611a3c565b91505092915050565b600060208284031215611d2c57600080fd5b6000611d3a84828501611aa5565b91505092915050565b611d4c81612873565b82525050565b611d5b81612885565b82525050565b6000611d6c82612775565b611d76818561278b565b9350611d868185602086016128f6565b611d8f81612a91565b840191505092915050565b6000611da582612780565b611daf818561279c565b9350611dbf8185602086016128f6565b611dc881612a91565b840191505092915050565b6000611dde82612780565b611de881856127ad565b9350611df88185602086016128f6565b80840191505092915050565b6000611e1160328361279c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000611e77601c8361279c565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000611eb760248361279c565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f1d60198361279c565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000611f5d602c8361279c565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000611fc360388361279c565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612029602a8361279c565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061208f60298361279c565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006120f5602e8361279c565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b600061215b60208361279c565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061219b60318361279c565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000612201602c8361279c565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061226760298361279c565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006122cd602f8361279c565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061233360218361279c565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061239960318361279c565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6123fb816128dd565b82525050565b600061240d8285611dd3565b91506124198284611dd3565b91508190509392505050565b600060208201905061243a6000830184611d43565b92915050565b60006080820190506124556000830187611d43565b6124626020830186611d43565b61246f60408301856123f2565b81810360608301526124818184611d61565b905095945050505050565b60006020820190506124a16000830184611d52565b92915050565b600060208201905081810360008301526124c18184611d9a565b905092915050565b600060208201905081810360008301526124e281611e04565b9050919050565b6000602082019050818103600083015261250281611e6a565b9050919050565b6000602082019050818103600083015261252281611eaa565b9050919050565b6000602082019050818103600083015261254281611f10565b9050919050565b6000602082019050818103600083015261256281611f50565b9050919050565b6000602082019050818103600083015261258281611fb6565b9050919050565b600060208201905081810360008301526125a28161201c565b9050919050565b600060208201905081810360008301526125c281612082565b9050919050565b600060208201905081810360008301526125e2816120e8565b9050919050565b600060208201905081810360008301526126028161214e565b9050919050565b600060208201905081810360008301526126228161218e565b9050919050565b60006020820190508181036000830152612642816121f4565b9050919050565b600060208201905081810360008301526126628161225a565b9050919050565b60006020820190508181036000830152612682816122c0565b9050919050565b600060208201905081810360008301526126a281612326565b9050919050565b600060208201905081810360008301526126c28161238c565b9050919050565b60006020820190506126de60008301846123f2565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561270b5761270a612a62565b5b8060405250919050565b600067ffffffffffffffff8211156127305761272f612a62565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156127605761275f612a62565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006127c3826128dd565b91506127ce836128dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612803576128026129d5565b5b828201905092915050565b6000612819826128dd565b9150612824836128dd565b92508261283457612833612a04565b5b828204905092915050565b600061284a826128dd565b9150612855836128dd565b925082821015612868576128676129d5565b5b828203905092915050565b600061287e826128bd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129145780820151818401526020810190506128f9565b83811115612923576000848401525b50505050565b6000600282049050600182168061294157607f821691505b6020821081141561295557612954612a33565b5b50919050565b6000612966826128dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612999576129986129d5565b5b600182019050919050565b60006129af826128dd565b91506129ba836128dd565b9250826129ca576129c9612a04565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612aab81612873565b8114612ab657600080fd5b50565b612ac281612885565b8114612acd57600080fd5b50565b612ad981612891565b8114612ae457600080fd5b50565b612af0816128dd565b8114612afb57600080fd5b5056fea2646970667358221220cd4383ee8cb98179413566f2e5d59902586a8ec90203470b035f032b69518d7064736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cd3dd21a146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611cc8565b610307565b604051610116919061248c565b60405180910390f35b6101276103e9565b60405161013491906124a7565b60405180910390f35b61015760048036038101906101529190611d1a565b61047b565b6040516101649190612425565b60405180910390f35b61018760048036038101906101829190611c8c565b610500565b005b6101a3600480360381019061019e9190611b1f565b610618565b005b6101bf60048036038101906101ba9190611b1f565b610678565b005b6101db60048036038101906101d69190611d1a565b610698565b6040516101e89190612425565b60405180910390f35b61020b60048036038101906102069190611aba565b61074a565b60405161021891906126c9565b60405180910390f35b610229610802565b60405161023691906124a7565b60405180910390f35b61025960048036038101906102549190611be9565b610894565b005b61027560048036038101906102709190611b6e565b610a15565b005b610291600480360381019061028c9190611d1a565b610a77565b60405161029e91906124a7565b60405180910390f35b6102c160048036038101906102bc9190611c25565b610bc9565b6040516102ce91906126c9565b60405180910390f35b6102f160048036038101906102ec9190611ae3565b610c48565b6040516102fe919061248c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610cdc565b5b9050919050565b6060600080546103f890612929565b80601f016020809104026020016040519081016040528092919081815260200182805461042490612929565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610d46565b6104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90612629565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061050b82610698565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561057c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057390612689565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661059b610db2565b73ffffffffffffffffffffffffffffffffffffffff1614806105ca57506105c9816105c4610db2565b610c48565b5b610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090612569565b60405180910390fd5b6106138383610dba565b505050565b610629610623610db2565b82610e73565b610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065f906126a9565b60405180910390fd5b610673838383610f51565b505050565b61069383838360405180602001604052806000815250610a15565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610738906125a9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b290612589565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461081190612929565b80601f016020809104026020016040519081016040528092919081815260200182805461083d90612929565b801561088a5780601f1061085f5761010080835404028352916020019161088a565b820191906000526020600020905b81548152906001019060200180831161086d57829003601f168201915b5050505050905090565b61089c610db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090190612529565b60405180910390fd5b8060056000610917610db2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166109c4610db2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a09919061248c565b60405180910390a35050565b610a26610a20610db2565b83610e73565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906126a9565b60405180910390fd5b610a71848484846111ad565b50505050565b6060610a8282610d46565b610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612609565b60405180910390fd5b6000600660008481526020019081526020016000208054610ae190612929565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0d90612929565b8015610b5a5780601f10610b2f57610100808354040283529160200191610b5a565b820191906000526020600020905b815481529060010190602001808311610b3d57829003601f168201915b505050505090506000610b6b611209565b9050600081511415610b81578192505050610bc4565b600082511115610bb6578082604051602001610b9e929190612401565b60405160208183030381529060405292505050610bc4565b610bbf84611220565b925050505b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c295760009050610c41565b610c3384836112c7565b610c3d82846112e5565b8190505b9392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610e2d83610698565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610e7e82610d46565b610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612549565b60405180910390fd5b6000610ec883610698565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610f3757508373ffffffffffffffffffffffffffffffffffffffff16610f1f8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f485750610f478185610c48565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610f7182610698565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90612649565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612509565b60405180910390fd5b611042838383611359565b61104d600082610dba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109d919061283f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110f491906127b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6111b8848484610f51565b6111c48484848461135e565b611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906124c9565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606061122b82610d46565b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190612669565b60405180910390fd5b6000611274611209565b9050600081511161129457604051806020016040528060008152506112bf565b8061129e846114f5565b6040516020016112af929190612401565b6040516020818303038152906040525b915050919050565b6112e18282604051806020016040528060008152506116a2565b5050565b6112ee82610d46565b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906125c9565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906113549291906118de565b505050565b505050565b600061137f8473ffffffffffffffffffffffffffffffffffffffff166116fd565b156114e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026113a8610db2565b8786866040518563ffffffff1660e01b81526004016113ca9493929190612440565b602060405180830381600087803b1580156113e457600080fd5b505af192505050801561141557506040513d601f19601f820116820180604052508101906114129190611cf1565b60015b611498573d8060008114611445576040519150601f19603f3d011682016040523d82523d6000602084013e61144a565b606091505b50600081511415611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906124c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506114ed565b600190505b949350505050565b6060600082141561153d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061169d565b600082905060005b6000821461156f5780806115589061295b565b915050600a82611568919061280e565b9150611545565b60008167ffffffffffffffff8111156115b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115e35781602001600182028036833780820191505090505b5090505b60008514611696576001826115fc919061283f565b9150600a8561160b91906129a4565b603061161791906127b8565b60f81b818381518110611653577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561168f919061280e565b94506115e7565b8093505050505b919050565b6116ac8383611710565b6116b9600084848461135e565b6116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906124c9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611777906125e9565b60405180910390fd5b61178981610d46565b156117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c0906124e9565b60405180910390fd5b6117d560008383611359565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182591906127b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546118ea90612929565b90600052602060002090601f01602090048101928261190c5760008555611953565b82601f1061192557805160ff1916838001178555611953565b82800160010185558215611953579182015b82811115611952578251825591602001919060010190611937565b5b5090506119609190611964565b5090565b5b8082111561197d576000816000905550600101611965565b5090565b600061199461198f84612715565b6126e4565b9050828152602081018484840111156119ac57600080fd5b6119b78482856128e7565b509392505050565b60006119d26119cd84612745565b6126e4565b9050828152602081018484840111156119ea57600080fd5b6119f58482856128e7565b509392505050565b600081359050611a0c81612aa2565b92915050565b600081359050611a2181612ab9565b92915050565b600081359050611a3681612ad0565b92915050565b600081519050611a4b81612ad0565b92915050565b600082601f830112611a6257600080fd5b8135611a72848260208601611981565b91505092915050565b600082601f830112611a8c57600080fd5b8135611a9c8482602086016119bf565b91505092915050565b600081359050611ab481612ae7565b92915050565b600060208284031215611acc57600080fd5b6000611ada848285016119fd565b91505092915050565b60008060408385031215611af657600080fd5b6000611b04858286016119fd565b9250506020611b15858286016119fd565b9150509250929050565b600080600060608486031215611b3457600080fd5b6000611b42868287016119fd565b9350506020611b53868287016119fd565b9250506040611b6486828701611aa5565b9150509250925092565b60008060008060808587031215611b8457600080fd5b6000611b92878288016119fd565b9450506020611ba3878288016119fd565b9350506040611bb487828801611aa5565b925050606085013567ffffffffffffffff811115611bd157600080fd5b611bdd87828801611a51565b91505092959194509250565b60008060408385031215611bfc57600080fd5b6000611c0a858286016119fd565b9250506020611c1b85828601611a12565b9150509250929050565b600080600060608486031215611c3a57600080fd5b6000611c48868287016119fd565b935050602084013567ffffffffffffffff811115611c6557600080fd5b611c7186828701611a7b565b9250506040611c8286828701611aa5565b9150509250925092565b60008060408385031215611c9f57600080fd5b6000611cad858286016119fd565b9250506020611cbe85828601611aa5565b9150509250929050565b600060208284031215611cda57600080fd5b6000611ce884828501611a27565b91505092915050565b600060208284031215611d0357600080fd5b6000611d1184828501611a3c565b91505092915050565b600060208284031215611d2c57600080fd5b6000611d3a84828501611aa5565b91505092915050565b611d4c81612873565b82525050565b611d5b81612885565b82525050565b6000611d6c82612775565b611d76818561278b565b9350611d868185602086016128f6565b611d8f81612a91565b840191505092915050565b6000611da582612780565b611daf818561279c565b9350611dbf8185602086016128f6565b611dc881612a91565b840191505092915050565b6000611dde82612780565b611de881856127ad565b9350611df88185602086016128f6565b80840191505092915050565b6000611e1160328361279c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000611e77601c8361279c565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000611eb760248361279c565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f1d60198361279c565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000611f5d602c8361279c565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000611fc360388361279c565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612029602a8361279c565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061208f60298361279c565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006120f5602e8361279c565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b600061215b60208361279c565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061219b60318361279c565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000612201602c8361279c565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061226760298361279c565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006122cd602f8361279c565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061233360218361279c565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061239960318361279c565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6123fb816128dd565b82525050565b600061240d8285611dd3565b91506124198284611dd3565b91508190509392505050565b600060208201905061243a6000830184611d43565b92915050565b60006080820190506124556000830187611d43565b6124626020830186611d43565b61246f60408301856123f2565b81810360608301526124818184611d61565b905095945050505050565b60006020820190506124a16000830184611d52565b92915050565b600060208201905081810360008301526124c18184611d9a565b905092915050565b600060208201905081810360008301526124e281611e04565b9050919050565b6000602082019050818103600083015261250281611e6a565b9050919050565b6000602082019050818103600083015261252281611eaa565b9050919050565b6000602082019050818103600083015261254281611f10565b9050919050565b6000602082019050818103600083015261256281611f50565b9050919050565b6000602082019050818103600083015261258281611fb6565b9050919050565b600060208201905081810360008301526125a28161201c565b9050919050565b600060208201905081810360008301526125c281612082565b9050919050565b600060208201905081810360008301526125e2816120e8565b9050919050565b600060208201905081810360008301526126028161214e565b9050919050565b600060208201905081810360008301526126228161218e565b9050919050565b60006020820190508181036000830152612642816121f4565b9050919050565b600060208201905081810360008301526126628161225a565b9050919050565b60006020820190508181036000830152612682816122c0565b9050919050565b600060208201905081810360008301526126a281612326565b9050919050565b600060208201905081810360008301526126c28161238c565b9050919050565b60006020820190506126de60008301846123f2565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561270b5761270a612a62565b5b8060405250919050565b600067ffffffffffffffff8211156127305761272f612a62565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156127605761275f612a62565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006127c3826128dd565b91506127ce836128dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612803576128026129d5565b5b828201905092915050565b6000612819826128dd565b9150612824836128dd565b92508261283457612833612a04565b5b828204905092915050565b600061284a826128dd565b9150612855836128dd565b925082821015612868576128676129d5565b5b828203905092915050565b600061287e826128bd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129145780820151818401526020810190506128f9565b83811115612923576000848401525b50505050565b6000600282049050600182168061294157607f821691505b6020821081141561295557612954612a33565b5b50919050565b6000612966826128dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612999576129986129d5565b5b600182019050919050565b60006129af826128dd565b91506129ba836128dd565b9250826129ca576129c9612a04565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612aab81612873565b8114612ab657600080fd5b50565b612ac281612885565b8114612acd57600080fd5b50565b612ad981612891565b8114612ae457600080fd5b50565b612af0816128dd565b8114612afb57600080fd5b5056fea2646970667358221220cd4383ee8cb98179413566f2e5d59902586a8ec90203470b035f032b69518d7064736f6c63430008000033

Deployed Bytecode Sourcemap

34983:450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21114:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22046:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23506:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23043:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24396:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24772:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21740:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21470:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22215:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23799:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24994:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33406:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35130:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24165:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21114:292;21216:4;21255:25;21240:40;;;:11;:40;;;;:105;;;;21312:33;21297:48;;;:11;:48;;;;21240:105;:158;;;;21362:36;21386:11;21362:23;:36::i;:::-;21240:158;21233:165;;21114:292;;;:::o;22046:100::-;22100:13;22133:5;22126:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22046:100;:::o;23506:221::-;23582:7;23610:16;23618:7;23610;:16::i;:::-;23602:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23695:15;:24;23711:7;23695:24;;;;;;;;;;;;;;;;;;;;;23688:31;;23506:221;;;:::o;23043:397::-;23124:13;23140:23;23155:7;23140:14;:23::i;:::-;23124:39;;23188:5;23182:11;;:2;:11;;;;23174:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23268:5;23252:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23277:37;23294:5;23301:12;:10;:12::i;:::-;23277:16;:37::i;:::-;23252:62;23244:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23411:21;23420:2;23424:7;23411:8;:21::i;:::-;23043:397;;;:::o;24396:305::-;24557:41;24576:12;:10;:12::i;:::-;24590:7;24557:18;:41::i;:::-;24549:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24665:28;24675:4;24681:2;24685:7;24665:9;:28::i;:::-;24396:305;;;:::o;24772:151::-;24876:39;24893:4;24899:2;24903:7;24876:39;;;;;;;;;;;;:16;:39::i;:::-;24772:151;;;:::o;21740:239::-;21812:7;21832:13;21848:7;:16;21856:7;21848:16;;;;;;;;;;;;;;;;;;;;;21832:32;;21900:1;21883:19;;:5;:19;;;;21875:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21966:5;21959:12;;;21740:239;;;:::o;21470:208::-;21542:7;21587:1;21570:19;;:5;:19;;;;21562:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21654:9;:16;21664:5;21654:16;;;;;;;;;;;;;;;;21647:23;;21470:208;;;:::o;22215:104::-;22271:13;22304:7;22297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22215:104;:::o;23799:295::-;23914:12;:10;:12::i;:::-;23902:24;;:8;:24;;;;23894:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24014:8;23969:18;:32;23988:12;:10;:12::i;:::-;23969:32;;;;;;;;;;;;;;;:42;24002:8;23969:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24067:8;24038:48;;24053:12;:10;:12::i;:::-;24038:48;;;24077:8;24038:48;;;;;;:::i;:::-;;;;;;;;23799:295;;:::o;24994:285::-;25126:41;25145:12;:10;:12::i;:::-;25159:7;25126:18;:41::i;:::-;25118:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25232:39;25246:4;25252:2;25256:7;25265:5;25232:13;:39::i;:::-;24994:285;;;;:::o;33406:679::-;33479:13;33513:16;33521:7;33513;:16::i;:::-;33505:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33596:23;33622:10;:19;33633:7;33622:19;;;;;;;;;;;33596:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33652:18;33673:10;:8;:10::i;:::-;33652:31;;33781:1;33765:4;33759:18;:23;33755:72;;;33806:9;33799:16;;;;;;33755:72;33957:1;33937:9;33931:23;:27;33927:108;;;34006:4;34012:9;33989:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33975:48;;;;;;33927:108;34054:23;34069:7;34054:14;:23::i;:::-;34047:30;;;;33406:679;;;;:::o;35130:300::-;35242:7;35295:5;;;;;;;;;;;35281:19;;:10;:19;;;35277:33;;35309:1;35302:8;;;;35277:33;35321:28;35331:6;35339:9;35321;:28::i;:::-;35360:33;35373:9;35384:8;35360:12;:33::i;:::-;35413:9;35406:16;;35130:300;;;;;;:::o;24165:164::-;24262:4;24286:18;:25;24305:5;24286:25;;;;;;;;;;;;;;;:35;24312:8;24286:35;;;;;;;;;;;;;;;;;;;;;;;;;24279:42;;24165:164;;;;:::o;14004:157::-;14089:4;14128:25;14113:40;;;:11;:40;;;;14106:47;;14004:157;;;:::o;26746:127::-;26811:4;26863:1;26835:30;;:7;:16;26843:7;26835:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26828:37;;26746:127;;;:::o;2835:98::-;2888:7;2915:10;2908:17;;2835:98;:::o;30623:174::-;30725:2;30698:15;:24;30714:7;30698:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30781:7;30777:2;30743:46;;30752:23;30767:7;30752:14;:23::i;:::-;30743:46;;;;;;;;;;;;30623:174;;:::o;27040:348::-;27133:4;27158:16;27166:7;27158;:16::i;:::-;27150:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27234:13;27250:23;27265:7;27250:14;:23::i;:::-;27234:39;;27303:5;27292:16;;:7;:16;;;:51;;;;27336:7;27312:31;;:20;27324:7;27312:11;:20::i;:::-;:31;;;27292:51;:87;;;;27347:32;27364:5;27371:7;27347:16;:32::i;:::-;27292:87;27284:96;;;27040:348;;;;:::o;29961:544::-;30086:4;30059:31;;:23;30074:7;30059:14;:23::i;:::-;:31;;;30051:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30169:1;30155:16;;:2;:16;;;;30147:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30225:39;30246:4;30252:2;30256:7;30225:20;:39::i;:::-;30329:29;30346:1;30350:7;30329:8;:29::i;:::-;30390:1;30371:9;:15;30381:4;30371:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30419:1;30402:9;:13;30412:2;30402:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30450:2;30431:7;:16;30439:7;30431:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30489:7;30485:2;30470:27;;30479:4;30470:27;;;;;;;;;;;;29961:544;;;:::o;26161:272::-;26275:28;26285:4;26291:2;26295:7;26275:9;:28::i;:::-;26322:48;26345:4;26351:2;26355:7;26364:5;26322:22;:48::i;:::-;26314:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26161:272;;;;:::o;22887:94::-;22938:13;22964:9;;;;;;;;;;;;;;22887:94;:::o;22390:360::-;22463:13;22497:16;22505:7;22497;:16::i;:::-;22489:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22578:21;22602:10;:8;:10::i;:::-;22578:34;;22654:1;22636:7;22630:21;:25;:112;;;;;;;;;;;;;;;;;22695:7;22704:18;:7;:16;:18::i;:::-;22678:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22630:112;22623:119;;;22390:360;;;:::o;27730:110::-;27806:26;27816:2;27820:7;27806:26;;;;;;;;;;;;:9;:26::i;:::-;27730:110;;:::o;34241:217::-;34341:16;34349:7;34341;:16::i;:::-;34333:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34441:9;34419:10;:19;34430:7;34419:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;34241:217;;:::o;32818:93::-;;;;:::o;31362:843::-;31483:4;31509:15;:2;:13;;;:15::i;:::-;31505:693;;;31561:2;31545:36;;;31582:12;:10;:12::i;:::-;31596:4;31602:7;31611:5;31545:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31541:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31808:1;31791:6;:13;:18;31787:341;;;31834:60;;;;;;;;;;:::i;:::-;;;;;;;;31787:341;32078:6;32072:13;32063:6;32059:2;32055:15;32048:38;31541:602;31678:45;;;31668:55;;;:6;:55;;;;31661:62;;;;;31505:693;32182:4;32175:11;;31362:843;;;;;;;:::o;395:723::-;451:13;681:1;672:5;:10;668:53;;;699:10;;;;;;;;;;;;;;;;;;;;;668:53;731:12;746:5;731:20;;762:14;787:78;802:1;794:4;:9;787:78;;820:8;;;;;:::i;:::-;;;;851:2;843:10;;;;;:::i;:::-;;;787:78;;;875:19;907:6;897:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;875:39;;925:154;941:1;932:5;:10;925:154;;969:1;959:11;;;;;:::i;:::-;;;1036:2;1028:5;:10;;;;:::i;:::-;1015:2;:24;;;;:::i;:::-;1002:39;;985:6;992;985:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1065:2;1056:11;;;;;:::i;:::-;;;925:154;;;1103:6;1089:21;;;;;395:723;;;;:::o;28067:250::-;28163:18;28169:2;28173:7;28163:5;:18::i;:::-;28200:54;28231:1;28235:2;28239:7;28248:5;28200:22;:54::i;:::-;28192:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28067:250;;;:::o;4006:422::-;4066:4;4274:12;4385:7;4373:20;4365:28;;4419:1;4412:4;:8;4405:15;;;4006:422;;;:::o;28653:382::-;28747:1;28733:16;;:2;:16;;;;28725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28806:16;28814:7;28806;:16::i;:::-;28805:17;28797:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28868:45;28897:1;28901:2;28905:7;28868:20;:45::i;:::-;28943:1;28926:9;:13;28936:2;28926:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28974:2;28955:7;:16;28963:7;28955:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29019:7;29015:2;28994:33;;29011:1;28994:33;;;;;;;;;;;;28653:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:665::-;;;;4620:2;4608:9;4599:7;4595:23;4591:32;4588:2;;;4636:1;4633;4626:12;4588:2;4679:1;4704:53;4749:7;4740:6;4729:9;4725:22;4704:53;:::i;:::-;4694:63;;4650:117;4834:2;4823:9;4819:18;4806:32;4865:18;4857:6;4854:30;4851:2;;;4897:1;4894;4887:12;4851:2;4925:63;4980:7;4971:6;4960:9;4956:22;4925:63;:::i;:::-;4915:73;;4777:221;5037:2;5063:53;5108:7;5099:6;5088:9;5084:22;5063:53;:::i;:::-;5053:63;;5008:118;4578:555;;;;;:::o;5139:407::-;;;5264:2;5252:9;5243:7;5239:23;5235:32;5232:2;;;5280:1;5277;5270:12;5232:2;5323:1;5348:53;5393:7;5384:6;5373:9;5369:22;5348:53;:::i;:::-;5338:63;;5294:117;5450:2;5476:53;5521:7;5512:6;5501:9;5497:22;5476:53;:::i;:::-;5466:63;;5421:118;5222:324;;;;;:::o;5552:260::-;;5659:2;5647:9;5638:7;5634:23;5630:32;5627:2;;;5675:1;5672;5665:12;5627:2;5718:1;5743:52;5787:7;5778:6;5767:9;5763:22;5743:52;:::i;:::-;5733:62;;5689:116;5617:195;;;;:::o;5818:282::-;;5936:2;5924:9;5915:7;5911:23;5907:32;5904:2;;;5952:1;5949;5942:12;5904:2;5995:1;6020:63;6075:7;6066:6;6055:9;6051:22;6020:63;:::i;:::-;6010:73;;5966:127;5894:206;;;;:::o;6106:262::-;;6214:2;6202:9;6193:7;6189:23;6185:32;6182:2;;;6230:1;6227;6220:12;6182:2;6273:1;6298:53;6343:7;6334:6;6323:9;6319:22;6298:53;:::i;:::-;6288:63;;6244:117;6172:196;;;;:::o;6374:118::-;6461:24;6479:5;6461:24;:::i;:::-;6456:3;6449:37;6439:53;;:::o;6498:109::-;6579:21;6594:5;6579:21;:::i;:::-;6574:3;6567:34;6557:50;;:::o;6613:360::-;;6727:38;6759:5;6727:38;:::i;:::-;6781:70;6844:6;6839:3;6781:70;:::i;:::-;6774:77;;6860:52;6905:6;6900:3;6893:4;6886:5;6882:16;6860:52;:::i;:::-;6937:29;6959:6;6937:29;:::i;:::-;6932:3;6928:39;6921:46;;6703:270;;;;;:::o;6979:364::-;;7095:39;7128:5;7095:39;:::i;:::-;7150:71;7214:6;7209:3;7150:71;:::i;:::-;7143:78;;7230:52;7275:6;7270:3;7263:4;7256:5;7252:16;7230:52;:::i;:::-;7307:29;7329:6;7307:29;:::i;:::-;7302:3;7298:39;7291:46;;7071:272;;;;;:::o;7349:377::-;;7483:39;7516:5;7483:39;:::i;:::-;7538:89;7620:6;7615:3;7538:89;:::i;:::-;7531:96;;7636:52;7681:6;7676:3;7669:4;7662:5;7658:16;7636:52;:::i;:::-;7713:6;7708:3;7704:16;7697:23;;7459:267;;;;;:::o;7732:382::-;;7895:67;7959:2;7954:3;7895:67;:::i;:::-;7888:74;;7992:34;7988:1;7983:3;7979:11;7972:55;8058:20;8053:2;8048:3;8044:12;8037:42;8105:2;8100:3;8096:12;8089:19;;7878:236;;;:::o;8120:326::-;;8283:67;8347:2;8342:3;8283:67;:::i;:::-;8276:74;;8380:30;8376:1;8371:3;8367:11;8360:51;8437:2;8432:3;8428:12;8421:19;;8266:180;;;:::o;8452:368::-;;8615:67;8679:2;8674:3;8615:67;:::i;:::-;8608:74;;8712:34;8708:1;8703:3;8699:11;8692:55;8778:6;8773:2;8768:3;8764:12;8757:28;8811:2;8806:3;8802:12;8795:19;;8598:222;;;:::o;8826:323::-;;8989:67;9053:2;9048:3;8989:67;:::i;:::-;8982:74;;9086:27;9082:1;9077:3;9073:11;9066:48;9140:2;9135:3;9131:12;9124:19;;8972:177;;;:::o;9155:376::-;;9318:67;9382:2;9377:3;9318:67;:::i;:::-;9311:74;;9415:34;9411:1;9406:3;9402:11;9395:55;9481:14;9476:2;9471:3;9467:12;9460:36;9522:2;9517:3;9513:12;9506:19;;9301:230;;;:::o;9537:388::-;;9700:67;9764:2;9759:3;9700:67;:::i;:::-;9693:74;;9797:34;9793:1;9788:3;9784:11;9777:55;9863:26;9858:2;9853:3;9849:12;9842:48;9916:2;9911:3;9907:12;9900:19;;9683:242;;;:::o;9931:374::-;;10094:67;10158:2;10153:3;10094:67;:::i;:::-;10087:74;;10191:34;10187:1;10182:3;10178:11;10171:55;10257:12;10252:2;10247:3;10243:12;10236:34;10296:2;10291:3;10287:12;10280:19;;10077:228;;;:::o;10311:373::-;;10474:67;10538:2;10533:3;10474:67;:::i;:::-;10467:74;;10571:34;10567:1;10562:3;10558:11;10551:55;10637:11;10632:2;10627:3;10623:12;10616:33;10675:2;10670:3;10666:12;10659:19;;10457:227;;;:::o;10690:378::-;;10853:67;10917:2;10912:3;10853:67;:::i;:::-;10846:74;;10950:34;10946:1;10941:3;10937:11;10930:55;11016:16;11011:2;11006:3;11002:12;10995:38;11059:2;11054:3;11050:12;11043:19;;10836:232;;;:::o;11074:330::-;;11237:67;11301:2;11296:3;11237:67;:::i;:::-;11230:74;;11334:34;11330:1;11325:3;11321:11;11314:55;11395:2;11390:3;11386:12;11379:19;;11220:184;;;:::o;11410:381::-;;11573:67;11637:2;11632:3;11573:67;:::i;:::-;11566:74;;11670:34;11666:1;11661:3;11657:11;11650:55;11736:19;11731:2;11726:3;11722:12;11715:41;11782:2;11777:3;11773:12;11766:19;;11556:235;;;:::o;11797:376::-;;11960:67;12024:2;12019:3;11960:67;:::i;:::-;11953:74;;12057:34;12053:1;12048:3;12044:11;12037:55;12123:14;12118:2;12113:3;12109:12;12102:36;12164:2;12159:3;12155:12;12148:19;;11943:230;;;:::o;12179:373::-;;12342:67;12406:2;12401:3;12342:67;:::i;:::-;12335:74;;12439:34;12435:1;12430:3;12426:11;12419:55;12505:11;12500:2;12495:3;12491:12;12484:33;12543:2;12538:3;12534:12;12527:19;;12325:227;;;:::o;12558:379::-;;12721:67;12785:2;12780:3;12721:67;:::i;:::-;12714:74;;12818:34;12814:1;12809:3;12805:11;12798:55;12884:17;12879:2;12874:3;12870:12;12863:39;12928:2;12923:3;12919:12;12912:19;;12704:233;;;:::o;12943:365::-;;13106:67;13170:2;13165:3;13106:67;:::i;:::-;13099:74;;13203:34;13199:1;13194:3;13190:11;13183:55;13269:3;13264:2;13259:3;13255:12;13248:25;13299:2;13294:3;13290:12;13283:19;;13089:219;;;:::o;13314:381::-;;13477:67;13541:2;13536:3;13477:67;:::i;:::-;13470:74;;13574:34;13570:1;13565:3;13561:11;13554:55;13640:19;13635:2;13630:3;13626:12;13619:41;13686:2;13681:3;13677:12;13670:19;;13460:235;;;:::o;13701:118::-;13788:24;13806:5;13788:24;:::i;:::-;13783:3;13776:37;13766:53;;:::o;13825:435::-;;14027:95;14118:3;14109:6;14027:95;:::i;:::-;14020:102;;14139:95;14230:3;14221:6;14139:95;:::i;:::-;14132:102;;14251:3;14244:10;;14009:251;;;;;:::o;14266:222::-;;14397:2;14386:9;14382:18;14374:26;;14410:71;14478:1;14467:9;14463:17;14454:6;14410:71;:::i;:::-;14364:124;;;;:::o;14494:640::-;;14727:3;14716:9;14712:19;14704:27;;14741:71;14809:1;14798:9;14794:17;14785:6;14741:71;:::i;:::-;14822:72;14890:2;14879:9;14875:18;14866:6;14822:72;:::i;:::-;14904;14972:2;14961:9;14957:18;14948:6;14904:72;:::i;:::-;15023:9;15017:4;15013:20;15008:2;14997:9;14993:18;14986:48;15051:76;15122:4;15113:6;15051:76;:::i;:::-;15043:84;;14694:440;;;;;;;:::o;15140:210::-;;15265:2;15254:9;15250:18;15242:26;;15278:65;15340:1;15329:9;15325:17;15316:6;15278:65;:::i;:::-;15232:118;;;;:::o;15356:313::-;;15507:2;15496:9;15492:18;15484:26;;15556:9;15550:4;15546:20;15542:1;15531:9;15527:17;15520:47;15584:78;15657:4;15648:6;15584:78;:::i;:::-;15576:86;;15474:195;;;;:::o;15675:419::-;;15879:2;15868:9;15864:18;15856:26;;15928:9;15922:4;15918:20;15914:1;15903:9;15899:17;15892:47;15956:131;16082:4;15956:131;:::i;:::-;15948:139;;15846:248;;;:::o;16100:419::-;;16304:2;16293:9;16289:18;16281:26;;16353:9;16347:4;16343:20;16339:1;16328:9;16324:17;16317:47;16381:131;16507:4;16381:131;:::i;:::-;16373:139;;16271:248;;;:::o;16525:419::-;;16729:2;16718:9;16714:18;16706:26;;16778:9;16772:4;16768:20;16764:1;16753:9;16749:17;16742:47;16806:131;16932:4;16806:131;:::i;:::-;16798:139;;16696:248;;;:::o;16950:419::-;;17154:2;17143:9;17139:18;17131:26;;17203:9;17197:4;17193:20;17189:1;17178:9;17174:17;17167:47;17231:131;17357:4;17231:131;:::i;:::-;17223:139;;17121:248;;;:::o;17375:419::-;;17579:2;17568:9;17564:18;17556:26;;17628:9;17622:4;17618:20;17614:1;17603:9;17599:17;17592:47;17656:131;17782:4;17656:131;:::i;:::-;17648:139;;17546:248;;;:::o;17800:419::-;;18004:2;17993:9;17989:18;17981:26;;18053:9;18047:4;18043:20;18039:1;18028:9;18024:17;18017:47;18081:131;18207:4;18081:131;:::i;:::-;18073:139;;17971:248;;;:::o;18225:419::-;;18429:2;18418:9;18414:18;18406:26;;18478:9;18472:4;18468:20;18464:1;18453:9;18449:17;18442:47;18506:131;18632:4;18506:131;:::i;:::-;18498:139;;18396:248;;;:::o;18650:419::-;;18854:2;18843:9;18839:18;18831:26;;18903:9;18897:4;18893:20;18889:1;18878:9;18874:17;18867:47;18931:131;19057:4;18931:131;:::i;:::-;18923:139;;18821:248;;;:::o;19075:419::-;;19279:2;19268:9;19264:18;19256:26;;19328:9;19322:4;19318:20;19314:1;19303:9;19299:17;19292:47;19356:131;19482:4;19356:131;:::i;:::-;19348:139;;19246:248;;;:::o;19500:419::-;;19704:2;19693:9;19689:18;19681:26;;19753:9;19747:4;19743:20;19739:1;19728:9;19724:17;19717:47;19781:131;19907:4;19781:131;:::i;:::-;19773:139;;19671:248;;;:::o;19925:419::-;;20129:2;20118:9;20114:18;20106:26;;20178:9;20172:4;20168:20;20164:1;20153:9;20149:17;20142:47;20206:131;20332:4;20206:131;:::i;:::-;20198:139;;20096:248;;;:::o;20350:419::-;;20554:2;20543:9;20539:18;20531:26;;20603:9;20597:4;20593:20;20589:1;20578:9;20574:17;20567:47;20631:131;20757:4;20631:131;:::i;:::-;20623:139;;20521:248;;;:::o;20775:419::-;;20979:2;20968:9;20964:18;20956:26;;21028:9;21022:4;21018:20;21014:1;21003:9;20999:17;20992:47;21056:131;21182:4;21056:131;:::i;:::-;21048:139;;20946:248;;;:::o;21200:419::-;;21404:2;21393:9;21389:18;21381:26;;21453:9;21447:4;21443:20;21439:1;21428:9;21424:17;21417:47;21481:131;21607:4;21481:131;:::i;:::-;21473:139;;21371:248;;;:::o;21625:419::-;;21829:2;21818:9;21814:18;21806:26;;21878:9;21872:4;21868:20;21864:1;21853:9;21849:17;21842:47;21906:131;22032:4;21906:131;:::i;:::-;21898:139;;21796:248;;;:::o;22050:419::-;;22254:2;22243:9;22239:18;22231:26;;22303:9;22297:4;22293:20;22289:1;22278:9;22274:17;22267:47;22331:131;22457:4;22331:131;:::i;:::-;22323:139;;22221:248;;;:::o;22475:222::-;;22606:2;22595:9;22591:18;22583:26;;22619:71;22687:1;22676:9;22672:17;22663:6;22619:71;:::i;:::-;22573:124;;;;:::o;22703:283::-;;22769:2;22763:9;22753:19;;22811:4;22803:6;22799:17;22918:6;22906:10;22903:22;22882:18;22870:10;22867:34;22864:62;22861:2;;;22929:18;;:::i;:::-;22861:2;22969:10;22965:2;22958:22;22743:243;;;;:::o;22992:331::-;;23143:18;23135:6;23132:30;23129:2;;;23165:18;;:::i;:::-;23129:2;23250:4;23246:9;23239:4;23231:6;23227:17;23223:33;23215:41;;23311:4;23305;23301:15;23293:23;;23058:265;;;:::o;23329:332::-;;23481:18;23473:6;23470:30;23467:2;;;23503:18;;:::i;:::-;23467:2;23588:4;23584:9;23577:4;23569:6;23565:17;23561:33;23553:41;;23649:4;23643;23639:15;23631:23;;23396:265;;;:::o;23667:98::-;;23752:5;23746:12;23736:22;;23725:40;;;:::o;23771:99::-;;23857:5;23851:12;23841:22;;23830:40;;;:::o;23876:168::-;;23993:6;23988:3;23981:19;24033:4;24028:3;24024:14;24009:29;;23971:73;;;;:::o;24050:169::-;;24168:6;24163:3;24156:19;24208:4;24203:3;24199:14;24184:29;;24146:73;;;;:::o;24225:148::-;;24364:3;24349:18;;24339:34;;;;:::o;24379:305::-;;24438:20;24456:1;24438:20;:::i;:::-;24433:25;;24472:20;24490:1;24472:20;:::i;:::-;24467:25;;24626:1;24558:66;24554:74;24551:1;24548:81;24545:2;;;24632:18;;:::i;:::-;24545:2;24676:1;24673;24669:9;24662:16;;24423:261;;;;:::o;24690:185::-;;24747:20;24765:1;24747:20;:::i;:::-;24742:25;;24781:20;24799:1;24781:20;:::i;:::-;24776:25;;24820:1;24810:2;;24825:18;;:::i;:::-;24810:2;24867:1;24864;24860:9;24855:14;;24732:143;;;;:::o;24881:191::-;;24941:20;24959:1;24941:20;:::i;:::-;24936:25;;24975:20;24993:1;24975:20;:::i;:::-;24970:25;;25014:1;25011;25008:8;25005:2;;;25019:18;;:::i;:::-;25005:2;25064:1;25061;25057:9;25049:17;;24926:146;;;;:::o;25078:96::-;;25144:24;25162:5;25144:24;:::i;:::-;25133:35;;25123:51;;;:::o;25180:90::-;;25257:5;25250:13;25243:21;25232:32;;25222:48;;;:::o;25276:149::-;;25352:66;25345:5;25341:78;25330:89;;25320:105;;;:::o;25431:126::-;;25508:42;25501:5;25497:54;25486:65;;25476:81;;;:::o;25563:77::-;;25629:5;25618:16;;25608:32;;;:::o;25646:154::-;25730:6;25725:3;25720;25707:30;25792:1;25783:6;25778:3;25774:16;25767:27;25697:103;;;:::o;25806:307::-;25874:1;25884:113;25898:6;25895:1;25892:13;25884:113;;;25983:1;25978:3;25974:11;25968:18;25964:1;25959:3;25955:11;25948:39;25920:2;25917:1;25913:10;25908:15;;25884:113;;;26015:6;26012:1;26009:13;26006:2;;;26095:1;26086:6;26081:3;26077:16;26070:27;26006:2;25855:258;;;;:::o;26119:320::-;;26200:1;26194:4;26190:12;26180:22;;26247:1;26241:4;26237:12;26268:18;26258:2;;26324:4;26316:6;26312:17;26302:27;;26258:2;26386;26378:6;26375:14;26355:18;26352:38;26349:2;;;26405:18;;:::i;:::-;26349:2;26170:269;;;;:::o;26445:233::-;;26507:24;26525:5;26507:24;:::i;:::-;26498:33;;26553:66;26546:5;26543:77;26540:2;;;26623:18;;:::i;:::-;26540:2;26670:1;26663:5;26659:13;26652:20;;26488:190;;;:::o;26684:176::-;;26733:20;26751:1;26733:20;:::i;:::-;26728:25;;26767:20;26785:1;26767:20;:::i;:::-;26762:25;;26806:1;26796:2;;26811:18;;:::i;:::-;26796:2;26852:1;26849;26845:9;26840:14;;26718:142;;;;:::o;26866:180::-;26914:77;26911:1;26904:88;27011:4;27008:1;27001:15;27035:4;27032:1;27025:15;27052:180;27100:77;27097:1;27090:88;27197:4;27194:1;27187:15;27221:4;27218:1;27211:15;27238:180;27286:77;27283:1;27276:88;27383:4;27380:1;27373:15;27407:4;27404:1;27397:15;27424:180;27472:77;27469:1;27462:88;27569:4;27566:1;27559:15;27593:4;27590:1;27583:15;27610:102;;27702:2;27698:7;27693:2;27686:5;27682:14;27678:28;27668:38;;27658:54;;;:::o;27718:122::-;27791:24;27809:5;27791:24;:::i;:::-;27784:5;27781:35;27771:2;;27830:1;27827;27820:12;27771:2;27761:79;:::o;27846:116::-;27916:21;27931:5;27916:21;:::i;:::-;27909:5;27906:32;27896:2;;27952:1;27949;27942:12;27896:2;27886:76;:::o;27968:120::-;28040:23;28057:5;28040:23;:::i;:::-;28033:5;28030:34;28020:2;;28078:1;28075;28068:12;28020:2;28010:78;:::o;28094:122::-;28167:24;28185:5;28167:24;:::i;:::-;28160:5;28157:35;28147:2;;28206:1;28203;28196:12;28147:2;28137:79;:::o

Swarm Source

ipfs://cd4383ee8cb98179413566f2e5d59902586a8ec90203470b035f032b69518d70
Loading...
Loading
Loading...
Loading
[ 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.