ETH Price: $3,163.31 (+4.17%)

Token

Doodle Kongz (DNGZ)
 

Overview

Max Total Supply

1,000 DNGZ

Holders

649

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jameschr.eth
Balance
1 DNGZ
0x0934e8e0310cc440f16b2543b2e22068d849a145
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:
Dongz

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-09
*/

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;


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

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

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

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

// OpenZeppelin Contracts v4.4.0 (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;
        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");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

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

pragma solidity ^0.8.0;


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

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

// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/access/Ownable.sol

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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/Dongz.sol

pragma solidity ^0.8.10;



contract Dongz is ERC721URIStorage, Ownable {
    event MintDongz(
        address indexed minter,
        uint256 startsWith,
        uint256 quantity
    );

    bool public mintStarted;
    uint256 public totalDongz;
    string public baseURI;

    uint256 public totalCount = 1000; // Total supply
    uint256 public batchLimit = 2; // Max 2 at a time
    uint256 public price = 100000000000000000; // 0.1 ETH

    modifier mintEnabled() {
        require(mintStarted, "Mint has not begun");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initialBaseURI
    ) ERC721(_name, _symbol) {
        baseURI = _initialBaseURI;
    }

    function totalSupply() public view virtual returns (uint256) {
        return totalDongz;
    }

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

    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }

    function setTokenURI(uint256 _tokenId, string memory _tokenURI)
        public
        onlyOwner
    {
        _setTokenURI(_tokenId, _tokenURI);
    }

    function toggleMintSale(bool _start) public onlyOwner {
        mintStarted = _start;
    }

    function mintDongz(uint256 _quantity) public payable mintEnabled {
        require(
            _quantity > 0 && _quantity <= batchLimit,
            "Invalid quantity supplied"
        );
        require(
            totalDongz + _quantity <= totalCount,
            "Mint will surpass supply"
        );
        require(msg.value >= _quantity * price, "Not enough ETH to mint");
        payable(owner()).transfer(msg.value);
        emit MintDongz(_msgSender(), totalDongz + 1, _quantity);
        for (uint256 i = 0; i < _quantity; i++) {
            _mint(_msgSender(), 1 + totalDongz++);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initialBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startsWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"MintDongz","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mintDongz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","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":"bool","name":"_start","type":"bool"}],"name":"toggleMintSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDongz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e8600a556002600b5567016345785d8a0000600c553480156200002857600080fd5b5060405162003efb38038062003efb83398181016040528101906200004e9190620003e1565b828281600090805190602001906200006892919062000194565b5080600190805190602001906200008192919062000194565b505050620000a462000098620000c660201b60201c565b620000ce60201b60201c565b8060099080519060200190620000bc92919062000194565b50505050620004ff565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a290620004c9565b90600052602060002090601f016020900481019282620001c6576000855562000212565b82601f10620001e157805160ff191683800117855562000212565b8280016001018555821562000212579182015b8281111562000211578251825591602001919060010190620001f4565b5b50905062000221919062000225565b5090565b5b808211156200024057600081600090555060010162000226565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002ad8262000262565b810181811067ffffffffffffffff82111715620002cf57620002ce62000273565b5b80604052505050565b6000620002e462000244565b9050620002f28282620002a2565b919050565b600067ffffffffffffffff82111562000315576200031462000273565b5b620003208262000262565b9050602081019050919050565b60005b838110156200034d57808201518184015260208101905062000330565b838111156200035d576000848401525b50505050565b60006200037a6200037484620002f7565b620002d8565b9050828152602081018484840111156200039957620003986200025d565b5b620003a68482856200032d565b509392505050565b600082601f830112620003c657620003c562000258565b5b8151620003d884826020860162000363565b91505092915050565b600080600060608486031215620003fd57620003fc6200024e565b5b600084015167ffffffffffffffff8111156200041e576200041d62000253565b5b6200042c86828701620003ae565b935050602084015167ffffffffffffffff81111562000450576200044f62000253565b5b6200045e86828701620003ae565b925050604084015167ffffffffffffffff81111562000482576200048162000253565b5b6200049086828701620003ae565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e257607f821691505b60208210811415620004f957620004f86200049a565b5b50919050565b6139ec806200050f6000396000f3fe60806040526004361061019c5760003560e01c80636c0360eb116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd14610593578063cc2159be146105d0578063e985e9c5146105fb578063f2fde38b146106385761019c565b8063a22cb46514610516578063a9722cf31461053f578063b88d4fde1461056a5761019c565b806385d991da116100c657806385d991da146104795780638da5cb5b1461049557806395d89b41146104c0578063a035b1fe146104eb5761019c565b80636c0360eb146103fa57806370a0823114610425578063715018a6146104625761019c565b806323b872dd11610159578063474740b111610133578063474740b11461034057806349ebc2ef1461036b57806355f804b3146103945780636352211e146103bd5761019c565b806323b872dd146102c357806334eafb11146102ec57806342842e0e146103175761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063162094c41461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906123a7565b610661565b6040516101d591906123ef565b60405180910390f35b3480156101ea57600080fd5b506101f3610743565b60405161020091906124a3565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906124fb565b6107d5565b60405161023d9190612569565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906125b0565b61085a565b005b34801561027b57600080fd5b5061029660048036038101906102919190612725565b610972565b005b3480156102a457600080fd5b506102ad6109fc565b6040516102ba9190612790565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906127ab565b610a06565b005b3480156102f857600080fd5b50610301610a66565b60405161030e9190612790565b60405180910390f35b34801561032357600080fd5b5061033e600480360381019061033991906127ab565b610a6c565b005b34801561034c57600080fd5b50610355610a8c565b6040516103629190612790565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d919061282a565b610a92565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190612857565b610b2b565b005b3480156103c957600080fd5b506103e460048036038101906103df91906124fb565b610bc1565b6040516103f19190612569565b60405180910390f35b34801561040657600080fd5b5061040f610c73565b60405161041c91906124a3565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906128a0565b610d01565b6040516104599190612790565b60405180910390f35b34801561046e57600080fd5b50610477610db9565b005b610493600480360381019061048e91906124fb565b610e41565b005b3480156104a157600080fd5b506104aa61108b565b6040516104b79190612569565b60405180910390f35b3480156104cc57600080fd5b506104d56110b5565b6040516104e291906124a3565b60405180910390f35b3480156104f757600080fd5b50610500611147565b60405161050d9190612790565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906128cd565b61114d565b005b34801561054b57600080fd5b50610554611163565b60405161056191906123ef565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906129ae565b611176565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906124fb565b6111d8565b6040516105c791906124a3565b60405180910390f35b3480156105dc57600080fd5b506105e561132a565b6040516105f29190612790565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612a31565b611330565b60405161062f91906123ef565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906128a0565b6113c4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073c575061073b826114bc565b5b9050919050565b60606000805461075290612aa0565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90612aa0565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e082611526565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612b44565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086582610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612bd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f5611592565b73ffffffffffffffffffffffffffffffffffffffff16148061092457506109238161091e611592565b611330565b5b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612c68565b60405180910390fd5b61096d838361159a565b505050565b61097a611592565b73ffffffffffffffffffffffffffffffffffffffff1661099861108b565b73ffffffffffffffffffffffffffffffffffffffff16146109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590612cd4565b60405180910390fd5b6109f88282611653565b5050565b6000600854905090565b610a17610a11611592565b826116c7565b610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612d66565b60405180910390fd5b610a618383836117a5565b505050565b600a5481565b610a8783838360405180602001604052806000815250611176565b505050565b600b5481565b610a9a611592565b73ffffffffffffffffffffffffffffffffffffffff16610ab861108b565b73ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612cd4565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b610b33611592565b73ffffffffffffffffffffffffffffffffffffffff16610b5161108b565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90612cd4565b60405180910390fd5b8060099080519060200190610bbd929190612298565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612df8565b60405180910390fd5b80915050919050565b60098054610c8090612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cac90612aa0565b8015610cf95780601f10610cce57610100808354040283529160200191610cf9565b820191906000526020600020905b815481529060010190602001808311610cdc57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990612e8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc1611592565b73ffffffffffffffffffffffffffffffffffffffff16610ddf61108b565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90612cd4565b60405180910390fd5b610e3f6000611a01565b565b600760149054906101000a900460ff16610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790612ef6565b60405180910390fd5b600081118015610ea25750600b548111155b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890612f62565b60405180910390fd5b600a5481600854610ef29190612fb1565b1115610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90613053565b60405180910390fd5b600c5481610f419190613073565b341015610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613119565b60405180910390fd5b610f8b61108b565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fd0573d6000803e3d6000fd5b50610fd9611592565b73ffffffffffffffffffffffffffffffffffffffff167f5b9cb0dcbfe1e2f8cd879f8ea75280efafbfb74237dc3b5de583225ba344c5cd600160085461101f9190612fb1565b8360405161102e929190613139565b60405180910390a260005b818110156110875761107461104c611592565b6008600081548092919061105f90613162565b91905055600161106f9190612fb1565b611ac7565b808061107f90613162565b915050611039565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110c490612aa0565b80601f01602080910402602001604051908101604052809291908181526020018280546110f090612aa0565b801561113d5780601f106111125761010080835404028352916020019161113d565b820191906000526020600020905b81548152906001019060200180831161112057829003601f168201915b5050505050905090565b600c5481565b61115f611158611592565b8383611c95565b5050565b600760149054906101000a900460ff1681565b611187611181611592565b836116c7565b6111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90612d66565b60405180910390fd5b6111d284848484611e02565b50505050565b60606111e382611526565b611222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112199061321d565b60405180910390fd5b600060066000848152602001908152602001600020805461124290612aa0565b80601f016020809104026020016040519081016040528092919081815260200182805461126e90612aa0565b80156112bb5780601f10611290576101008083540402835291602001916112bb565b820191906000526020600020905b81548152906001019060200180831161129e57829003601f168201915b5050505050905060006112cc611e5e565b90506000815114156112e2578192505050611325565b6000825111156113175780826040516020016112ff929190613279565b60405160208183030381529060405292505050611325565b61132084611ef0565b925050505b919050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cc611592565b73ffffffffffffffffffffffffffffffffffffffff166113ea61108b565b73ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a79061330f565b60405180910390fd5b6114b981611a01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160d83610bc1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61165c82611526565b61169b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906133a1565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906116c2929190612298565b505050565b60006116d282611526565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613433565b60405180910390fd5b600061171c83610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061178b57508373ffffffffffffffffffffffffffffffffffffffff16611773846107d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061179c575061179b8185611330565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166117c582610bc1565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906134c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613557565b60405180910390fd5b611896838383611f97565b6118a160008261159a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f19190613577565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119489190612fb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906135f7565b60405180910390fd5b611b4081611526565b15611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613663565b60405180910390fd5b611b8c60008383611f97565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc9190612fb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb906136cf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df591906123ef565b60405180910390a3505050565b611e0d8484846117a5565b611e1984848484611f9c565b611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613761565b60405180910390fd5b50505050565b606060098054611e6d90612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9990612aa0565b8015611ee65780601f10611ebb57610100808354040283529160200191611ee6565b820191906000526020600020905b815481529060010190602001808311611ec957829003601f168201915b5050505050905090565b6060611efb82611526565b611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f31906137f3565b60405180910390fd5b6000611f44611e5e565b90506000815111611f645760405180602001604052806000815250611f8f565b80611f6e84612124565b604051602001611f7f929190613279565b6040516020818303038152906040525b915050919050565b505050565b6000611fbd8473ffffffffffffffffffffffffffffffffffffffff16612285565b15612117578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe6611592565b8786866040518563ffffffff1660e01b81526004016120089493929190613868565b6020604051808303816000875af192505050801561204457506040513d601f19601f8201168201806040525081019061204191906138c9565b60015b6120c7573d8060008114612074576040519150601f19603f3d011682016040523d82523d6000602084013e612079565b606091505b506000815114156120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613761565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061211c565b600190505b949350505050565b6060600082141561216c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612280565b600082905060005b6000821461219e57808061218790613162565b915050600a826121979190613925565b9150612174565b60008167ffffffffffffffff8111156121ba576121b96125fa565b5b6040519080825280601f01601f1916602001820160405280156121ec5781602001600182028036833780820191505090505b5090505b60008514612279576001826122059190613577565b9150600a856122149190613956565b60306122209190612fb1565b60f81b81838151811061223657612235613987565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122729190613925565b94506121f0565b8093505050505b919050565b600080823b905060008111915050919050565b8280546122a490612aa0565b90600052602060002090601f0160209004810192826122c6576000855561230d565b82601f106122df57805160ff191683800117855561230d565b8280016001018555821561230d579182015b8281111561230c5782518255916020019190600101906122f1565b5b50905061231a919061231e565b5090565b5b8082111561233757600081600090555060010161231f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123848161234f565b811461238f57600080fd5b50565b6000813590506123a18161237b565b92915050565b6000602082840312156123bd576123bc612345565b5b60006123cb84828501612392565b91505092915050565b60008115159050919050565b6123e9816123d4565b82525050565b600060208201905061240460008301846123e0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612444578082015181840152602081019050612429565b83811115612453576000848401525b50505050565b6000601f19601f8301169050919050565b60006124758261240a565b61247f8185612415565b935061248f818560208601612426565b61249881612459565b840191505092915050565b600060208201905081810360008301526124bd818461246a565b905092915050565b6000819050919050565b6124d8816124c5565b81146124e357600080fd5b50565b6000813590506124f5816124cf565b92915050565b60006020828403121561251157612510612345565b5b600061251f848285016124e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061255382612528565b9050919050565b61256381612548565b82525050565b600060208201905061257e600083018461255a565b92915050565b61258d81612548565b811461259857600080fd5b50565b6000813590506125aa81612584565b92915050565b600080604083850312156125c7576125c6612345565b5b60006125d58582860161259b565b92505060206125e6858286016124e6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61263282612459565b810181811067ffffffffffffffff82111715612651576126506125fa565b5b80604052505050565b600061266461233b565b90506126708282612629565b919050565b600067ffffffffffffffff8211156126905761268f6125fa565b5b61269982612459565b9050602081019050919050565b82818337600083830152505050565b60006126c86126c384612675565b61265a565b9050828152602081018484840111156126e4576126e36125f5565b5b6126ef8482856126a6565b509392505050565b600082601f83011261270c5761270b6125f0565b5b813561271c8482602086016126b5565b91505092915050565b6000806040838503121561273c5761273b612345565b5b600061274a858286016124e6565b925050602083013567ffffffffffffffff81111561276b5761276a61234a565b5b612777858286016126f7565b9150509250929050565b61278a816124c5565b82525050565b60006020820190506127a56000830184612781565b92915050565b6000806000606084860312156127c4576127c3612345565b5b60006127d28682870161259b565b93505060206127e38682870161259b565b92505060406127f4868287016124e6565b9150509250925092565b612807816123d4565b811461281257600080fd5b50565b600081359050612824816127fe565b92915050565b6000602082840312156128405761283f612345565b5b600061284e84828501612815565b91505092915050565b60006020828403121561286d5761286c612345565b5b600082013567ffffffffffffffff81111561288b5761288a61234a565b5b612897848285016126f7565b91505092915050565b6000602082840312156128b6576128b5612345565b5b60006128c48482850161259b565b91505092915050565b600080604083850312156128e4576128e3612345565b5b60006128f28582860161259b565b925050602061290385828601612815565b9150509250929050565b600067ffffffffffffffff821115612928576129276125fa565b5b61293182612459565b9050602081019050919050565b600061295161294c8461290d565b61265a565b90508281526020810184848401111561296d5761296c6125f5565b5b6129788482856126a6565b509392505050565b600082601f830112612995576129946125f0565b5b81356129a584826020860161293e565b91505092915050565b600080600080608085870312156129c8576129c7612345565b5b60006129d68782880161259b565b94505060206129e78782880161259b565b93505060406129f8878288016124e6565b925050606085013567ffffffffffffffff811115612a1957612a1861234a565b5b612a2587828801612980565b91505092959194509250565b60008060408385031215612a4857612a47612345565b5b6000612a568582860161259b565b9250506020612a678582860161259b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ab857607f821691505b60208210811415612acc57612acb612a71565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b2e602c83612415565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bc0602183612415565b9150612bcb82612b64565b604082019050919050565b60006020820190508181036000830152612bef81612bb3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c52603883612415565b9150612c5d82612bf6565b604082019050919050565b60006020820190508181036000830152612c8181612c45565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cbe602083612415565b9150612cc982612c88565b602082019050919050565b60006020820190508181036000830152612ced81612cb1565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612d50603183612415565b9150612d5b82612cf4565b604082019050919050565b60006020820190508181036000830152612d7f81612d43565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612de2602983612415565b9150612ded82612d86565b604082019050919050565b60006020820190508181036000830152612e1181612dd5565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612e74602a83612415565b9150612e7f82612e18565b604082019050919050565b60006020820190508181036000830152612ea381612e67565b9050919050565b7f4d696e7420686173206e6f7420626567756e0000000000000000000000000000600082015250565b6000612ee0601283612415565b9150612eeb82612eaa565b602082019050919050565b60006020820190508181036000830152612f0f81612ed3565b9050919050565b7f496e76616c6964207175616e7469747920737570706c69656400000000000000600082015250565b6000612f4c601983612415565b9150612f5782612f16565b602082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fbc826124c5565b9150612fc7836124c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ffc57612ffb612f82565b5b828201905092915050565b7f4d696e742077696c6c207375727061737320737570706c790000000000000000600082015250565b600061303d601883612415565b915061304882613007565b602082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b600061307e826124c5565b9150613089836124c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130c2576130c1612f82565b5b828202905092915050565b7f4e6f7420656e6f7567682045544820746f206d696e7400000000000000000000600082015250565b6000613103601683612415565b915061310e826130cd565b602082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b600060408201905061314e6000830185612781565b61315b6020830184612781565b9392505050565b600061316d826124c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131a05761319f612f82565b5b600182019050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000613207603183612415565b9150613212826131ab565b604082019050919050565b60006020820190508181036000830152613236816131fa565b9050919050565b600081905092915050565b60006132538261240a565b61325d818561323d565b935061326d818560208601612426565b80840191505092915050565b60006132858285613248565b91506132918284613248565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f9602683612415565b91506133048261329d565b604082019050919050565b60006020820190508181036000830152613328816132ec565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061338b602e83612415565b91506133968261332f565b604082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061341d602c83612415565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006134af602983612415565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613541602483612415565b915061354c826134e5565b604082019050919050565b6000602082019050818103600083015261357081613534565b9050919050565b6000613582826124c5565b915061358d836124c5565b9250828210156135a05761359f612f82565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135e1602083612415565b91506135ec826135ab565b602082019050919050565b60006020820190508181036000830152613610816135d4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061364d601c83612415565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006136b9601983612415565b91506136c482613683565b602082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061374b603283612415565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006137dd602f83612415565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061383a82613813565b613844818561381e565b9350613854818560208601612426565b61385d81612459565b840191505092915050565b600060808201905061387d600083018761255a565b61388a602083018661255a565b6138976040830185612781565b81810360608301526138a9818461382f565b905095945050505050565b6000815190506138c38161237b565b92915050565b6000602082840312156138df576138de612345565b5b60006138ed848285016138b4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613930826124c5565b915061393b836124c5565b92508261394b5761394a6138f6565b5b828204905092915050565b6000613961826124c5565b915061396c836124c5565b92508261397c5761397b6138f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b36251ab03d2c3eb5c974e20e3816f6143bb7c5fa77aea815e3543cde4340dac64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c446f6f646c65204b6f6e677a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444e475a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514c656148634372644635795847565a4152704c705251416b336a6541425965536e4b48534c5336543137762f00000000000000000000

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80636c0360eb116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd14610593578063cc2159be146105d0578063e985e9c5146105fb578063f2fde38b146106385761019c565b8063a22cb46514610516578063a9722cf31461053f578063b88d4fde1461056a5761019c565b806385d991da116100c657806385d991da146104795780638da5cb5b1461049557806395d89b41146104c0578063a035b1fe146104eb5761019c565b80636c0360eb146103fa57806370a0823114610425578063715018a6146104625761019c565b806323b872dd11610159578063474740b111610133578063474740b11461034057806349ebc2ef1461036b57806355f804b3146103945780636352211e146103bd5761019c565b806323b872dd146102c357806334eafb11146102ec57806342842e0e146103175761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063162094c41461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906123a7565b610661565b6040516101d591906123ef565b60405180910390f35b3480156101ea57600080fd5b506101f3610743565b60405161020091906124a3565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906124fb565b6107d5565b60405161023d9190612569565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906125b0565b61085a565b005b34801561027b57600080fd5b5061029660048036038101906102919190612725565b610972565b005b3480156102a457600080fd5b506102ad6109fc565b6040516102ba9190612790565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906127ab565b610a06565b005b3480156102f857600080fd5b50610301610a66565b60405161030e9190612790565b60405180910390f35b34801561032357600080fd5b5061033e600480360381019061033991906127ab565b610a6c565b005b34801561034c57600080fd5b50610355610a8c565b6040516103629190612790565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d919061282a565b610a92565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190612857565b610b2b565b005b3480156103c957600080fd5b506103e460048036038101906103df91906124fb565b610bc1565b6040516103f19190612569565b60405180910390f35b34801561040657600080fd5b5061040f610c73565b60405161041c91906124a3565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906128a0565b610d01565b6040516104599190612790565b60405180910390f35b34801561046e57600080fd5b50610477610db9565b005b610493600480360381019061048e91906124fb565b610e41565b005b3480156104a157600080fd5b506104aa61108b565b6040516104b79190612569565b60405180910390f35b3480156104cc57600080fd5b506104d56110b5565b6040516104e291906124a3565b60405180910390f35b3480156104f757600080fd5b50610500611147565b60405161050d9190612790565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906128cd565b61114d565b005b34801561054b57600080fd5b50610554611163565b60405161056191906123ef565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906129ae565b611176565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906124fb565b6111d8565b6040516105c791906124a3565b60405180910390f35b3480156105dc57600080fd5b506105e561132a565b6040516105f29190612790565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612a31565b611330565b60405161062f91906123ef565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906128a0565b6113c4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073c575061073b826114bc565b5b9050919050565b60606000805461075290612aa0565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90612aa0565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e082611526565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612b44565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086582610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612bd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f5611592565b73ffffffffffffffffffffffffffffffffffffffff16148061092457506109238161091e611592565b611330565b5b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612c68565b60405180910390fd5b61096d838361159a565b505050565b61097a611592565b73ffffffffffffffffffffffffffffffffffffffff1661099861108b565b73ffffffffffffffffffffffffffffffffffffffff16146109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590612cd4565b60405180910390fd5b6109f88282611653565b5050565b6000600854905090565b610a17610a11611592565b826116c7565b610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612d66565b60405180910390fd5b610a618383836117a5565b505050565b600a5481565b610a8783838360405180602001604052806000815250611176565b505050565b600b5481565b610a9a611592565b73ffffffffffffffffffffffffffffffffffffffff16610ab861108b565b73ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612cd4565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b610b33611592565b73ffffffffffffffffffffffffffffffffffffffff16610b5161108b565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90612cd4565b60405180910390fd5b8060099080519060200190610bbd929190612298565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612df8565b60405180910390fd5b80915050919050565b60098054610c8090612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cac90612aa0565b8015610cf95780601f10610cce57610100808354040283529160200191610cf9565b820191906000526020600020905b815481529060010190602001808311610cdc57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990612e8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc1611592565b73ffffffffffffffffffffffffffffffffffffffff16610ddf61108b565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90612cd4565b60405180910390fd5b610e3f6000611a01565b565b600760149054906101000a900460ff16610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790612ef6565b60405180910390fd5b600081118015610ea25750600b548111155b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890612f62565b60405180910390fd5b600a5481600854610ef29190612fb1565b1115610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90613053565b60405180910390fd5b600c5481610f419190613073565b341015610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613119565b60405180910390fd5b610f8b61108b565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fd0573d6000803e3d6000fd5b50610fd9611592565b73ffffffffffffffffffffffffffffffffffffffff167f5b9cb0dcbfe1e2f8cd879f8ea75280efafbfb74237dc3b5de583225ba344c5cd600160085461101f9190612fb1565b8360405161102e929190613139565b60405180910390a260005b818110156110875761107461104c611592565b6008600081548092919061105f90613162565b91905055600161106f9190612fb1565b611ac7565b808061107f90613162565b915050611039565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110c490612aa0565b80601f01602080910402602001604051908101604052809291908181526020018280546110f090612aa0565b801561113d5780601f106111125761010080835404028352916020019161113d565b820191906000526020600020905b81548152906001019060200180831161112057829003601f168201915b5050505050905090565b600c5481565b61115f611158611592565b8383611c95565b5050565b600760149054906101000a900460ff1681565b611187611181611592565b836116c7565b6111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90612d66565b60405180910390fd5b6111d284848484611e02565b50505050565b60606111e382611526565b611222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112199061321d565b60405180910390fd5b600060066000848152602001908152602001600020805461124290612aa0565b80601f016020809104026020016040519081016040528092919081815260200182805461126e90612aa0565b80156112bb5780601f10611290576101008083540402835291602001916112bb565b820191906000526020600020905b81548152906001019060200180831161129e57829003601f168201915b5050505050905060006112cc611e5e565b90506000815114156112e2578192505050611325565b6000825111156113175780826040516020016112ff929190613279565b60405160208183030381529060405292505050611325565b61132084611ef0565b925050505b919050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cc611592565b73ffffffffffffffffffffffffffffffffffffffff166113ea61108b565b73ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a79061330f565b60405180910390fd5b6114b981611a01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160d83610bc1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61165c82611526565b61169b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906133a1565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906116c2929190612298565b505050565b60006116d282611526565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613433565b60405180910390fd5b600061171c83610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061178b57508373ffffffffffffffffffffffffffffffffffffffff16611773846107d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061179c575061179b8185611330565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166117c582610bc1565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906134c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613557565b60405180910390fd5b611896838383611f97565b6118a160008261159a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f19190613577565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119489190612fb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906135f7565b60405180910390fd5b611b4081611526565b15611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613663565b60405180910390fd5b611b8c60008383611f97565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc9190612fb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb906136cf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df591906123ef565b60405180910390a3505050565b611e0d8484846117a5565b611e1984848484611f9c565b611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613761565b60405180910390fd5b50505050565b606060098054611e6d90612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9990612aa0565b8015611ee65780601f10611ebb57610100808354040283529160200191611ee6565b820191906000526020600020905b815481529060010190602001808311611ec957829003601f168201915b5050505050905090565b6060611efb82611526565b611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f31906137f3565b60405180910390fd5b6000611f44611e5e565b90506000815111611f645760405180602001604052806000815250611f8f565b80611f6e84612124565b604051602001611f7f929190613279565b6040516020818303038152906040525b915050919050565b505050565b6000611fbd8473ffffffffffffffffffffffffffffffffffffffff16612285565b15612117578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe6611592565b8786866040518563ffffffff1660e01b81526004016120089493929190613868565b6020604051808303816000875af192505050801561204457506040513d601f19601f8201168201806040525081019061204191906138c9565b60015b6120c7573d8060008114612074576040519150601f19603f3d011682016040523d82523d6000602084013e612079565b606091505b506000815114156120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613761565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061211c565b600190505b949350505050565b6060600082141561216c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612280565b600082905060005b6000821461219e57808061218790613162565b915050600a826121979190613925565b9150612174565b60008167ffffffffffffffff8111156121ba576121b96125fa565b5b6040519080825280601f01601f1916602001820160405280156121ec5781602001600182028036833780820191505090505b5090505b60008514612279576001826122059190613577565b9150600a856122149190613956565b60306122209190612fb1565b60f81b81838151811061223657612235613987565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122729190613925565b94506121f0565b8093505050505b919050565b600080823b905060008111915050919050565b8280546122a490612aa0565b90600052602060002090601f0160209004810192826122c6576000855561230d565b82601f106122df57805160ff191683800117855561230d565b8280016001018555821561230d579182015b8281111561230c5782518255916020019190600101906122f1565b5b50905061231a919061231e565b5090565b5b8082111561233757600081600090555060010161231f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123848161234f565b811461238f57600080fd5b50565b6000813590506123a18161237b565b92915050565b6000602082840312156123bd576123bc612345565b5b60006123cb84828501612392565b91505092915050565b60008115159050919050565b6123e9816123d4565b82525050565b600060208201905061240460008301846123e0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612444578082015181840152602081019050612429565b83811115612453576000848401525b50505050565b6000601f19601f8301169050919050565b60006124758261240a565b61247f8185612415565b935061248f818560208601612426565b61249881612459565b840191505092915050565b600060208201905081810360008301526124bd818461246a565b905092915050565b6000819050919050565b6124d8816124c5565b81146124e357600080fd5b50565b6000813590506124f5816124cf565b92915050565b60006020828403121561251157612510612345565b5b600061251f848285016124e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061255382612528565b9050919050565b61256381612548565b82525050565b600060208201905061257e600083018461255a565b92915050565b61258d81612548565b811461259857600080fd5b50565b6000813590506125aa81612584565b92915050565b600080604083850312156125c7576125c6612345565b5b60006125d58582860161259b565b92505060206125e6858286016124e6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61263282612459565b810181811067ffffffffffffffff82111715612651576126506125fa565b5b80604052505050565b600061266461233b565b90506126708282612629565b919050565b600067ffffffffffffffff8211156126905761268f6125fa565b5b61269982612459565b9050602081019050919050565b82818337600083830152505050565b60006126c86126c384612675565b61265a565b9050828152602081018484840111156126e4576126e36125f5565b5b6126ef8482856126a6565b509392505050565b600082601f83011261270c5761270b6125f0565b5b813561271c8482602086016126b5565b91505092915050565b6000806040838503121561273c5761273b612345565b5b600061274a858286016124e6565b925050602083013567ffffffffffffffff81111561276b5761276a61234a565b5b612777858286016126f7565b9150509250929050565b61278a816124c5565b82525050565b60006020820190506127a56000830184612781565b92915050565b6000806000606084860312156127c4576127c3612345565b5b60006127d28682870161259b565b93505060206127e38682870161259b565b92505060406127f4868287016124e6565b9150509250925092565b612807816123d4565b811461281257600080fd5b50565b600081359050612824816127fe565b92915050565b6000602082840312156128405761283f612345565b5b600061284e84828501612815565b91505092915050565b60006020828403121561286d5761286c612345565b5b600082013567ffffffffffffffff81111561288b5761288a61234a565b5b612897848285016126f7565b91505092915050565b6000602082840312156128b6576128b5612345565b5b60006128c48482850161259b565b91505092915050565b600080604083850312156128e4576128e3612345565b5b60006128f28582860161259b565b925050602061290385828601612815565b9150509250929050565b600067ffffffffffffffff821115612928576129276125fa565b5b61293182612459565b9050602081019050919050565b600061295161294c8461290d565b61265a565b90508281526020810184848401111561296d5761296c6125f5565b5b6129788482856126a6565b509392505050565b600082601f830112612995576129946125f0565b5b81356129a584826020860161293e565b91505092915050565b600080600080608085870312156129c8576129c7612345565b5b60006129d68782880161259b565b94505060206129e78782880161259b565b93505060406129f8878288016124e6565b925050606085013567ffffffffffffffff811115612a1957612a1861234a565b5b612a2587828801612980565b91505092959194509250565b60008060408385031215612a4857612a47612345565b5b6000612a568582860161259b565b9250506020612a678582860161259b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ab857607f821691505b60208210811415612acc57612acb612a71565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b2e602c83612415565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bc0602183612415565b9150612bcb82612b64565b604082019050919050565b60006020820190508181036000830152612bef81612bb3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c52603883612415565b9150612c5d82612bf6565b604082019050919050565b60006020820190508181036000830152612c8181612c45565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cbe602083612415565b9150612cc982612c88565b602082019050919050565b60006020820190508181036000830152612ced81612cb1565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612d50603183612415565b9150612d5b82612cf4565b604082019050919050565b60006020820190508181036000830152612d7f81612d43565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612de2602983612415565b9150612ded82612d86565b604082019050919050565b60006020820190508181036000830152612e1181612dd5565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612e74602a83612415565b9150612e7f82612e18565b604082019050919050565b60006020820190508181036000830152612ea381612e67565b9050919050565b7f4d696e7420686173206e6f7420626567756e0000000000000000000000000000600082015250565b6000612ee0601283612415565b9150612eeb82612eaa565b602082019050919050565b60006020820190508181036000830152612f0f81612ed3565b9050919050565b7f496e76616c6964207175616e7469747920737570706c69656400000000000000600082015250565b6000612f4c601983612415565b9150612f5782612f16565b602082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fbc826124c5565b9150612fc7836124c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ffc57612ffb612f82565b5b828201905092915050565b7f4d696e742077696c6c207375727061737320737570706c790000000000000000600082015250565b600061303d601883612415565b915061304882613007565b602082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b600061307e826124c5565b9150613089836124c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130c2576130c1612f82565b5b828202905092915050565b7f4e6f7420656e6f7567682045544820746f206d696e7400000000000000000000600082015250565b6000613103601683612415565b915061310e826130cd565b602082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b600060408201905061314e6000830185612781565b61315b6020830184612781565b9392505050565b600061316d826124c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131a05761319f612f82565b5b600182019050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000613207603183612415565b9150613212826131ab565b604082019050919050565b60006020820190508181036000830152613236816131fa565b9050919050565b600081905092915050565b60006132538261240a565b61325d818561323d565b935061326d818560208601612426565b80840191505092915050565b60006132858285613248565b91506132918284613248565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f9602683612415565b91506133048261329d565b604082019050919050565b60006020820190508181036000830152613328816132ec565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061338b602e83612415565b91506133968261332f565b604082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061341d602c83612415565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006134af602983612415565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613541602483612415565b915061354c826134e5565b604082019050919050565b6000602082019050818103600083015261357081613534565b9050919050565b6000613582826124c5565b915061358d836124c5565b9250828210156135a05761359f612f82565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135e1602083612415565b91506135ec826135ab565b602082019050919050565b60006020820190508181036000830152613610816135d4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061364d601c83612415565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006136b9601983612415565b91506136c482613683565b602082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061374b603283612415565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006137dd602f83612415565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061383a82613813565b613844818561381e565b9350613854818560208601612426565b61385d81612459565b840191505092915050565b600060808201905061387d600083018761255a565b61388a602083018661255a565b6138976040830185612781565b81810360608301526138a9818461382f565b905095945050505050565b6000815190506138c38161237b565b92915050565b6000602082840312156138df576138de612345565b5b60006138ed848285016138b4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613930826124c5565b915061393b836124c5565b92508261394b5761394a6138f6565b5b828204905092915050565b6000613961826124c5565b915061396c836124c5565b92508261397c5761397b6138f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b36251ab03d2c3eb5c974e20e3816f6143bb7c5fa77aea815e3543cde4340dac64736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c446f6f646c65204b6f6e677a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444e475a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514c656148634372644635795847565a4152704c705251416b336a6541425965536e4b48534c5336543137762f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Doodle Kongz
Arg [1] : _symbol (string): DNGZ
Arg [2] : _initialBaseURI (string): ipfs://QmQLeaHcCrdF5yXGVZARpLpRQAk3jeABYeSnKHSLS6T17v/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 446f6f646c65204b6f6e677a0000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 444e475a00000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d514c656148634372644635795847565a4152704c705251
Arg [9] : 416b336a6541425965536e4b48534c5336543137762f00000000000000000000


Deployed Bytecode Sourcemap

38229:1950:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21194:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22139:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23698:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23221:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39288:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38963:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24448:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38492:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24858:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38547:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39452:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39184:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21833:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38462:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21563:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37348:103;;;;;;;;;;;;;:::i;:::-;;39553:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36697:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22308:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38602:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23991:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38400:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25114:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34143:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38430:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24217:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37606:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21194:305;21296:4;21348:25;21333:40;;;:11;:40;;;;:105;;;;21405:33;21390:48;;;:11;:48;;;;21333:105;:158;;;;21455:36;21479:11;21455:23;:36::i;:::-;21333:158;21313:178;;21194:305;;;:::o;22139:100::-;22193:13;22226:5;22219:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22139:100;:::o;23698:221::-;23774:7;23802:16;23810:7;23802;:16::i;:::-;23794:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23887:15;:24;23903:7;23887:24;;;;;;;;;;;;;;;;;;;;;23880:31;;23698:221;;;:::o;23221:411::-;23302:13;23318:23;23333:7;23318:14;:23::i;:::-;23302:39;;23366:5;23360:11;;:2;:11;;;;23352:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23460:5;23444:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23469:37;23486:5;23493:12;:10;:12::i;:::-;23469:16;:37::i;:::-;23444:62;23422:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23603:21;23612:2;23616:7;23603:8;:21::i;:::-;23291:341;23221:411;;:::o;39288:156::-;36928:12;:10;:12::i;:::-;36917:23;;:7;:5;:7::i;:::-;:23;;;36909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39403:33:::1;39416:8;39426:9;39403:12;:33::i;:::-;39288:156:::0;;:::o;38963:97::-;39015:7;39042:10;;39035:17;;38963:97;:::o;24448:339::-;24643:41;24662:12;:10;:12::i;:::-;24676:7;24643:18;:41::i;:::-;24635:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24751:28;24761:4;24767:2;24771:7;24751:9;:28::i;:::-;24448:339;;;:::o;38492:32::-;;;;:::o;24858:185::-;24996:39;25013:4;25019:2;25023:7;24996:39;;;;;;;;;;;;:16;:39::i;:::-;24858:185;;;:::o;38547:29::-;;;;:::o;39452:93::-;36928:12;:10;:12::i;:::-;36917:23;;:7;:5;:7::i;:::-;:23;;;36909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39531:6:::1;39517:11;;:20;;;;;;;;;;;;;;;;;;39452:93:::0;:::o;39184:96::-;36928:12;:10;:12::i;:::-;36917:23;;:7;:5;:7::i;:::-;:23;;;36909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39265:7:::1;39255;:17;;;;;;;;;;;;:::i;:::-;;39184:96:::0;:::o;21833:239::-;21905:7;21925:13;21941:7;:16;21949:7;21941:16;;;;;;;;;;;;;;;;;;;;;21925:32;;21993:1;21976:19;;:5;:19;;;;21968:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22059:5;22052:12;;;21833:239;;;:::o;38462:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21563:208::-;21635:7;21680:1;21663:19;;:5;:19;;;;21655:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21747:9;:16;21757:5;21747:16;;;;;;;;;;;;;;;;21740:23;;21563:208;;;:::o;37348:103::-;36928:12;:10;:12::i;:::-;36917:23;;:7;:5;:7::i;:::-;:23;;;36909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37413:30:::1;37440:1;37413:18;:30::i;:::-;37348:103::o:0;39553:623::-;38705:11;;;;;;;;;;;38697:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;39663:1:::1;39651:9;:13;:40;;;;;39681:10;;39668:9;:23;;39651:40;39629:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;39803:10;;39790:9;39777:10;;:22;;;;:::i;:::-;:36;;39755:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39909:5;;39897:9;:17;;;;:::i;:::-;39884:9;:30;;39876:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39960:7;:5;:7::i;:::-;39952:25;;:36;39978:9;39952:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40014:12;:10;:12::i;:::-;40004:50;;;40041:1;40028:10;;:14;;;;:::i;:::-;40044:9;40004:50;;;;;;;:::i;:::-;;;;;;;;40070:9;40065:104;40089:9;40085:1;:13;40065:104;;;40120:37;40126:12;:10;:12::i;:::-;40144:10;;:12;;;;;;;;;:::i;:::-;;;;;40140:1;:16;;;;:::i;:::-;40120:5;:37::i;:::-;40100:3;;;;;:::i;:::-;;;;40065:104;;;;39553:623:::0;:::o;36697:87::-;36743:7;36770:6;;;;;;;;;;;36763:13;;36697:87;:::o;22308:104::-;22364:13;22397:7;22390:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22308:104;:::o;38602:41::-;;;;:::o;23991:155::-;24086:52;24105:12;:10;:12::i;:::-;24119:8;24129;24086:18;:52::i;:::-;23991:155;;:::o;38400:23::-;;;;;;;;;;;;;:::o;25114:328::-;25289:41;25308:12;:10;:12::i;:::-;25322:7;25289:18;:41::i;:::-;25281:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25395:39;25409:4;25415:2;25419:7;25428:5;25395:13;:39::i;:::-;25114:328;;;;:::o;34143:679::-;34216:13;34250:16;34258:7;34250;:16::i;:::-;34242:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34333:23;34359:10;:19;34370:7;34359:19;;;;;;;;;;;34333:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34389:18;34410:10;:8;:10::i;:::-;34389:31;;34518:1;34502:4;34496:18;:23;34492:72;;;34543:9;34536:16;;;;;;34492:72;34694:1;34674:9;34668:23;:27;34664:108;;;34743:4;34749:9;34726:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34712:48;;;;;;34664:108;34791:23;34806:7;34791:14;:23::i;:::-;34784:30;;;;34143:679;;;;:::o;38430:25::-;;;;:::o;24217:164::-;24314:4;24338:18;:25;24357:5;24338:25;;;;;;;;;;;;;;;:35;24364:8;24338:35;;;;;;;;;;;;;;;;;;;;;;;;;24331:42;;24217:164;;;;:::o;37606:201::-;36928:12;:10;:12::i;:::-;36917:23;;:7;:5;:7::i;:::-;:23;;;36909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37715:1:::1;37695:22;;:8;:22;;;;37687:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37771:28;37790:8;37771:18;:28::i;:::-;37606:201:::0;:::o;19640:157::-;19725:4;19764:25;19749:40;;;:11;:40;;;;19742:47;;19640:157;;;:::o;26952:127::-;27017:4;27069:1;27041:30;;:7;:16;27049:7;27041:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27034:37;;26952:127;;;:::o;16441:98::-;16494:7;16521:10;16514:17;;16441:98;:::o;30934:174::-;31036:2;31009:15;:24;31025:7;31009:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31092:7;31088:2;31054:46;;31063:23;31078:7;31063:14;:23::i;:::-;31054:46;;;;;;;;;;;;30934:174;;:::o;34978:217::-;35078:16;35086:7;35078;:16::i;:::-;35070:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35178:9;35156:10;:19;35167:7;35156:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;34978:217;;:::o;27246:348::-;27339:4;27364:16;27372:7;27364;:16::i;:::-;27356:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27440:13;27456:23;27471:7;27456:14;:23::i;:::-;27440:39;;27509:5;27498:16;;:7;:16;;;:51;;;;27542:7;27518:31;;:20;27530:7;27518:11;:20::i;:::-;:31;;;27498:51;:87;;;;27553:32;27570:5;27577:7;27553:16;:32::i;:::-;27498:87;27490:96;;;27246:348;;;;:::o;30238:578::-;30397:4;30370:31;;:23;30385:7;30370:14;:23::i;:::-;:31;;;30362:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30480:1;30466:16;;:2;:16;;;;30458:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30536:39;30557:4;30563:2;30567:7;30536:20;:39::i;:::-;30640:29;30657:1;30661:7;30640:8;:29::i;:::-;30701:1;30682:9;:15;30692:4;30682:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30730:1;30713:9;:13;30723:2;30713:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30761:2;30742:7;:16;30750:7;30742:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30800:7;30796:2;30781:27;;30790:4;30781:27;;;;;;;;;;;;30238:578;;;:::o;37967:191::-;38041:16;38060:6;;;;;;;;;;;38041:25;;38086:8;38077:6;;:17;;;;;;;;;;;;;;;;;;38141:8;38110:40;;38131:8;38110:40;;;;;;;;;;;;38030:128;37967:191;:::o;28930:382::-;29024:1;29010:16;;:2;:16;;;;29002:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29083:16;29091:7;29083;:16::i;:::-;29082:17;29074:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29145:45;29174:1;29178:2;29182:7;29145:20;:45::i;:::-;29220:1;29203:9;:13;29213:2;29203:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29251:2;29232:7;:16;29240:7;29232:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29296:7;29292:2;29271:33;;29288:1;29271:33;;;;;;;;;;;;28930:382;;:::o;31250:315::-;31405:8;31396:17;;:5;:17;;;;31388:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31492:8;31454:18;:25;31473:5;31454:25;;;;;;;;;;;;;;;:35;31480:8;31454:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31538:8;31516:41;;31531:5;31516:41;;;31548:8;31516:41;;;;;;:::i;:::-;;;;;;;;31250:315;;;:::o;26324:::-;26481:28;26491:4;26497:2;26501:7;26481:9;:28::i;:::-;26528:48;26551:4;26557:2;26561:7;26570:5;26528:22;:48::i;:::-;26520:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:315;;;;:::o;39068:108::-;39128:13;39161:7;39154:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39068:108;:::o;22483:334::-;22556:13;22590:16;22598:7;22590;:16::i;:::-;22582:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22671:21;22695:10;:8;:10::i;:::-;22671:34;;22747:1;22729:7;22723:21;:25;:86;;;;;;;;;;;;;;;;;22775:7;22784:18;:7;:16;:18::i;:::-;22758:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22723:86;22716:93;;;22483:334;;;:::o;33501:126::-;;;;:::o;32130:799::-;32285:4;32306:15;:2;:13;;;:15::i;:::-;32302:620;;;32358:2;32342:36;;;32379:12;:10;:12::i;:::-;32393:4;32399:7;32408:5;32342:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32338:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32601:1;32584:6;:13;:18;32580:272;;;32627:60;;;;;;;;;;:::i;:::-;;;;;;;;32580:272;32802:6;32796:13;32787:6;32783:2;32779:15;32772:38;32338:529;32475:41;;;32465:51;;;:6;:51;;;;32458:58;;;;;32302:620;32906:4;32899:11;;32130:799;;;;;;;:::o;17018:723::-;17074:13;17304:1;17295:5;:10;17291:53;;;17322:10;;;;;;;;;;;;;;;;;;;;;17291:53;17354:12;17369:5;17354:20;;17385:14;17410:78;17425:1;17417:4;:9;17410:78;;17443:8;;;;;:::i;:::-;;;;17474:2;17466:10;;;;;:::i;:::-;;;17410:78;;;17498:19;17530:6;17520:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17498:39;;17548:154;17564:1;17555:5;:10;17548:154;;17592:1;17582:11;;;;;:::i;:::-;;;17659:2;17651:5;:10;;;;:::i;:::-;17638:2;:24;;;;:::i;:::-;17625:39;;17608:6;17615;17608:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17688:2;17679:11;;;;;:::i;:::-;;;17548:154;;;17726:6;17712:21;;;;;17018:723;;;;:::o;8433:387::-;8493:4;8701:12;8768:7;8756:20;8748:28;;8811:1;8804:4;:8;8797:15;;;8433:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:654::-;7122:6;7130;7179:2;7167:9;7158:7;7154:23;7150:32;7147:119;;;7185:79;;:::i;:::-;7147:119;7305:1;7330:53;7375:7;7366:6;7355:9;7351:22;7330:53;:::i;:::-;7320:63;;7276:117;7460:2;7449:9;7445:18;7432:32;7491:18;7483:6;7480:30;7477:117;;;7513:79;;:::i;:::-;7477:117;7618:63;7673:7;7664:6;7653:9;7649:22;7618:63;:::i;:::-;7608:73;;7403:288;7044:654;;;;;:::o;7704:118::-;7791:24;7809:5;7791:24;:::i;:::-;7786:3;7779:37;7704:118;;:::o;7828:222::-;7921:4;7959:2;7948:9;7944:18;7936:26;;7972:71;8040:1;8029:9;8025:17;8016:6;7972:71;:::i;:::-;7828:222;;;;:::o;8056:619::-;8133:6;8141;8149;8198:2;8186:9;8177:7;8173:23;8169:32;8166:119;;;8204:79;;:::i;:::-;8166:119;8324:1;8349:53;8394:7;8385:6;8374:9;8370:22;8349:53;:::i;:::-;8339:63;;8295:117;8451:2;8477:53;8522:7;8513:6;8502:9;8498:22;8477:53;:::i;:::-;8467:63;;8422:118;8579:2;8605:53;8650:7;8641:6;8630:9;8626:22;8605:53;:::i;:::-;8595:63;;8550:118;8056:619;;;;;:::o;8681:116::-;8751:21;8766:5;8751:21;:::i;:::-;8744:5;8741:32;8731:60;;8787:1;8784;8777:12;8731:60;8681:116;:::o;8803:133::-;8846:5;8884:6;8871:20;8862:29;;8900:30;8924:5;8900:30;:::i;:::-;8803:133;;;;:::o;8942:323::-;8998:6;9047:2;9035:9;9026:7;9022:23;9018:32;9015:119;;;9053:79;;:::i;:::-;9015:119;9173:1;9198:50;9240:7;9231:6;9220:9;9216:22;9198:50;:::i;:::-;9188:60;;9144:114;8942:323;;;;:::o;9271:509::-;9340:6;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9543:1;9532:9;9528:17;9515:31;9573:18;9565:6;9562:30;9559:117;;;9595:79;;:::i;:::-;9559:117;9700:63;9755:7;9746:6;9735:9;9731:22;9700:63;:::i;:::-;9690:73;;9486:287;9271:509;;;;:::o;9786:329::-;9845:6;9894:2;9882:9;9873:7;9869:23;9865:32;9862:119;;;9900:79;;:::i;:::-;9862:119;10020:1;10045:53;10090:7;10081:6;10070:9;10066:22;10045:53;:::i;:::-;10035:63;;9991:117;9786:329;;;;:::o;10121:468::-;10186:6;10194;10243:2;10231:9;10222:7;10218:23;10214:32;10211:119;;;10249:79;;:::i;:::-;10211:119;10369:1;10394:53;10439:7;10430:6;10419:9;10415:22;10394:53;:::i;:::-;10384:63;;10340:117;10496:2;10522:50;10564:7;10555:6;10544:9;10540:22;10522:50;:::i;:::-;10512:60;;10467:115;10121:468;;;;;:::o;10595:307::-;10656:4;10746:18;10738:6;10735:30;10732:56;;;10768:18;;:::i;:::-;10732:56;10806:29;10828:6;10806:29;:::i;:::-;10798:37;;10890:4;10884;10880:15;10872:23;;10595:307;;;:::o;10908:410::-;10985:5;11010:65;11026:48;11067:6;11026:48;:::i;:::-;11010:65;:::i;:::-;11001:74;;11098:6;11091:5;11084:21;11136:4;11129:5;11125:16;11174:3;11165:6;11160:3;11156:16;11153:25;11150:112;;;11181:79;;:::i;:::-;11150:112;11271:41;11305:6;11300:3;11295;11271:41;:::i;:::-;10991:327;10908:410;;;;;:::o;11337:338::-;11392:5;11441:3;11434:4;11426:6;11422:17;11418:27;11408:122;;11449:79;;:::i;:::-;11408:122;11566:6;11553:20;11591:78;11665:3;11657:6;11650:4;11642:6;11638:17;11591:78;:::i;:::-;11582:87;;11398:277;11337:338;;;;:::o;11681:943::-;11776:6;11784;11792;11800;11849:3;11837:9;11828:7;11824:23;11820:33;11817:120;;;11856:79;;:::i;:::-;11817:120;11976:1;12001:53;12046:7;12037:6;12026:9;12022:22;12001:53;:::i;:::-;11991:63;;11947:117;12103:2;12129:53;12174:7;12165:6;12154:9;12150:22;12129:53;:::i;:::-;12119:63;;12074:118;12231:2;12257:53;12302:7;12293:6;12282:9;12278:22;12257:53;:::i;:::-;12247:63;;12202:118;12387:2;12376:9;12372:18;12359:32;12418:18;12410:6;12407:30;12404:117;;;12440:79;;:::i;:::-;12404:117;12545:62;12599:7;12590:6;12579:9;12575:22;12545:62;:::i;:::-;12535:72;;12330:287;11681:943;;;;;;;:::o;12630:474::-;12698:6;12706;12755:2;12743:9;12734:7;12730:23;12726:32;12723:119;;;12761:79;;:::i;:::-;12723:119;12881:1;12906:53;12951:7;12942:6;12931:9;12927:22;12906:53;:::i;:::-;12896:63;;12852:117;13008:2;13034:53;13079:7;13070:6;13059:9;13055:22;13034:53;:::i;:::-;13024:63;;12979:118;12630:474;;;;;:::o;13110:180::-;13158:77;13155:1;13148:88;13255:4;13252:1;13245:15;13279:4;13276:1;13269:15;13296:320;13340:6;13377:1;13371:4;13367:12;13357:22;;13424:1;13418:4;13414:12;13445:18;13435:81;;13501:4;13493:6;13489:17;13479:27;;13435:81;13563:2;13555:6;13552:14;13532:18;13529:38;13526:84;;;13582:18;;:::i;:::-;13526:84;13347:269;13296:320;;;:::o;13622:231::-;13762:34;13758:1;13750:6;13746:14;13739:58;13831:14;13826:2;13818:6;13814:15;13807:39;13622:231;:::o;13859:366::-;14001:3;14022:67;14086:2;14081:3;14022:67;:::i;:::-;14015:74;;14098:93;14187:3;14098:93;:::i;:::-;14216:2;14211:3;14207:12;14200:19;;13859:366;;;:::o;14231:419::-;14397:4;14435:2;14424:9;14420:18;14412:26;;14484:9;14478:4;14474:20;14470:1;14459:9;14455:17;14448:47;14512:131;14638:4;14512:131;:::i;:::-;14504:139;;14231:419;;;:::o;14656:220::-;14796:34;14792:1;14784:6;14780:14;14773:58;14865:3;14860:2;14852:6;14848:15;14841:28;14656:220;:::o;14882:366::-;15024:3;15045:67;15109:2;15104:3;15045:67;:::i;:::-;15038:74;;15121:93;15210:3;15121:93;:::i;:::-;15239:2;15234:3;15230:12;15223:19;;14882:366;;;:::o;15254:419::-;15420:4;15458:2;15447:9;15443:18;15435:26;;15507:9;15501:4;15497:20;15493:1;15482:9;15478:17;15471:47;15535:131;15661:4;15535:131;:::i;:::-;15527:139;;15254:419;;;:::o;15679:243::-;15819:34;15815:1;15807:6;15803:14;15796:58;15888:26;15883:2;15875:6;15871:15;15864:51;15679:243;:::o;15928:366::-;16070:3;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16167:93;16256:3;16167:93;:::i;:::-;16285:2;16280:3;16276:12;16269:19;;15928:366;;;:::o;16300:419::-;16466:4;16504:2;16493:9;16489:18;16481:26;;16553:9;16547:4;16543:20;16539:1;16528:9;16524:17;16517:47;16581:131;16707:4;16581:131;:::i;:::-;16573:139;;16300:419;;;:::o;16725:182::-;16865:34;16861:1;16853:6;16849:14;16842:58;16725:182;:::o;16913:366::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:419::-;17451:4;17489:2;17478:9;17474:18;17466:26;;17538:9;17532:4;17528:20;17524:1;17513:9;17509:17;17502:47;17566:131;17692:4;17566:131;:::i;:::-;17558:139;;17285:419;;;:::o;17710:236::-;17850:34;17846:1;17838:6;17834:14;17827:58;17919:19;17914:2;17906:6;17902:15;17895:44;17710:236;:::o;17952:366::-;18094:3;18115:67;18179:2;18174:3;18115:67;:::i;:::-;18108:74;;18191:93;18280:3;18191:93;:::i;:::-;18309:2;18304:3;18300:12;18293:19;;17952:366;;;:::o;18324:419::-;18490:4;18528:2;18517:9;18513:18;18505:26;;18577:9;18571:4;18567:20;18563:1;18552:9;18548:17;18541:47;18605:131;18731:4;18605:131;:::i;:::-;18597:139;;18324:419;;;:::o;18749:228::-;18889:34;18885:1;18877:6;18873:14;18866:58;18958:11;18953:2;18945:6;18941:15;18934:36;18749:228;:::o;18983:366::-;19125:3;19146:67;19210:2;19205:3;19146:67;:::i;:::-;19139:74;;19222:93;19311:3;19222:93;:::i;:::-;19340:2;19335:3;19331:12;19324:19;;18983:366;;;:::o;19355:419::-;19521:4;19559:2;19548:9;19544:18;19536:26;;19608:9;19602:4;19598:20;19594:1;19583:9;19579:17;19572:47;19636:131;19762:4;19636:131;:::i;:::-;19628:139;;19355:419;;;:::o;19780:229::-;19920:34;19916:1;19908:6;19904:14;19897:58;19989:12;19984:2;19976:6;19972:15;19965:37;19780:229;:::o;20015:366::-;20157:3;20178:67;20242:2;20237:3;20178:67;:::i;:::-;20171:74;;20254:93;20343:3;20254:93;:::i;:::-;20372:2;20367:3;20363:12;20356:19;;20015:366;;;:::o;20387:419::-;20553:4;20591:2;20580:9;20576:18;20568:26;;20640:9;20634:4;20630:20;20626:1;20615:9;20611:17;20604:47;20668:131;20794:4;20668:131;:::i;:::-;20660:139;;20387:419;;;:::o;20812:168::-;20952:20;20948:1;20940:6;20936:14;20929:44;20812:168;:::o;20986:366::-;21128:3;21149:67;21213:2;21208:3;21149:67;:::i;:::-;21142:74;;21225:93;21314:3;21225:93;:::i;:::-;21343:2;21338:3;21334:12;21327:19;;20986:366;;;:::o;21358:419::-;21524:4;21562:2;21551:9;21547:18;21539:26;;21611:9;21605:4;21601:20;21597:1;21586:9;21582:17;21575:47;21639:131;21765:4;21639:131;:::i;:::-;21631:139;;21358:419;;;:::o;21783:175::-;21923:27;21919:1;21911:6;21907:14;21900:51;21783:175;:::o;21964:366::-;22106:3;22127:67;22191:2;22186:3;22127:67;:::i;:::-;22120:74;;22203:93;22292:3;22203:93;:::i;:::-;22321:2;22316:3;22312:12;22305:19;;21964:366;;;:::o;22336:419::-;22502:4;22540:2;22529:9;22525:18;22517:26;;22589:9;22583:4;22579:20;22575:1;22564:9;22560:17;22553:47;22617:131;22743:4;22617:131;:::i;:::-;22609:139;;22336:419;;;:::o;22761:180::-;22809:77;22806:1;22799:88;22906:4;22903:1;22896:15;22930:4;22927:1;22920:15;22947:305;22987:3;23006:20;23024:1;23006:20;:::i;:::-;23001:25;;23040:20;23058:1;23040:20;:::i;:::-;23035:25;;23194:1;23126:66;23122:74;23119:1;23116:81;23113:107;;;23200:18;;:::i;:::-;23113:107;23244:1;23241;23237:9;23230:16;;22947:305;;;;:::o;23258:174::-;23398:26;23394:1;23386:6;23382:14;23375:50;23258:174;:::o;23438:366::-;23580:3;23601:67;23665:2;23660:3;23601:67;:::i;:::-;23594:74;;23677:93;23766:3;23677:93;:::i;:::-;23795:2;23790:3;23786:12;23779:19;;23438:366;;;:::o;23810:419::-;23976:4;24014:2;24003:9;23999:18;23991:26;;24063:9;24057:4;24053:20;24049:1;24038:9;24034:17;24027:47;24091:131;24217:4;24091:131;:::i;:::-;24083:139;;23810:419;;;:::o;24235:348::-;24275:7;24298:20;24316:1;24298:20;:::i;:::-;24293:25;;24332:20;24350:1;24332:20;:::i;:::-;24327:25;;24520:1;24452:66;24448:74;24445:1;24442:81;24437:1;24430:9;24423:17;24419:105;24416:131;;;24527:18;;:::i;:::-;24416:131;24575:1;24572;24568:9;24557:20;;24235:348;;;;:::o;24589:172::-;24729:24;24725:1;24717:6;24713:14;24706:48;24589:172;:::o;24767:366::-;24909:3;24930:67;24994:2;24989:3;24930:67;:::i;:::-;24923:74;;25006:93;25095:3;25006:93;:::i;:::-;25124:2;25119:3;25115:12;25108:19;;24767:366;;;:::o;25139:419::-;25305:4;25343:2;25332:9;25328:18;25320:26;;25392:9;25386:4;25382:20;25378:1;25367:9;25363:17;25356:47;25420:131;25546:4;25420:131;:::i;:::-;25412:139;;25139:419;;;:::o;25564:332::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25736:71;25804:1;25793:9;25789:17;25780:6;25736:71;:::i;:::-;25817:72;25885:2;25874:9;25870:18;25861:6;25817:72;:::i;:::-;25564:332;;;;;:::o;25902:233::-;25941:3;25964:24;25982:5;25964:24;:::i;:::-;25955:33;;26010:66;26003:5;26000:77;25997:103;;;26080:18;;:::i;:::-;25997:103;26127:1;26120:5;26116:13;26109:20;;25902:233;;;:::o;26141:236::-;26281:34;26277:1;26269:6;26265:14;26258:58;26350:19;26345:2;26337:6;26333:15;26326:44;26141:236;:::o;26383:366::-;26525:3;26546:67;26610:2;26605:3;26546:67;:::i;:::-;26539:74;;26622:93;26711:3;26622:93;:::i;:::-;26740:2;26735:3;26731:12;26724:19;;26383:366;;;:::o;26755:419::-;26921:4;26959:2;26948:9;26944:18;26936:26;;27008:9;27002:4;26998:20;26994:1;26983:9;26979:17;26972:47;27036:131;27162:4;27036:131;:::i;:::-;27028:139;;26755:419;;;:::o;27180:148::-;27282:11;27319:3;27304:18;;27180:148;;;;:::o;27334:377::-;27440:3;27468:39;27501:5;27468:39;:::i;:::-;27523:89;27605:6;27600:3;27523:89;:::i;:::-;27516:96;;27621:52;27666:6;27661:3;27654:4;27647:5;27643:16;27621:52;:::i;:::-;27698:6;27693:3;27689:16;27682:23;;27444:267;27334:377;;;;:::o;27717:435::-;27897:3;27919:95;28010:3;28001:6;27919:95;:::i;:::-;27912:102;;28031:95;28122:3;28113:6;28031:95;:::i;:::-;28024:102;;28143:3;28136:10;;27717:435;;;;;:::o;28158:225::-;28298:34;28294:1;28286:6;28282:14;28275:58;28367:8;28362:2;28354:6;28350:15;28343:33;28158:225;:::o;28389:366::-;28531:3;28552:67;28616:2;28611:3;28552:67;:::i;:::-;28545:74;;28628:93;28717:3;28628:93;:::i;:::-;28746:2;28741:3;28737:12;28730:19;;28389:366;;;:::o;28761:419::-;28927:4;28965:2;28954:9;28950:18;28942:26;;29014:9;29008:4;29004:20;29000:1;28989:9;28985:17;28978:47;29042:131;29168:4;29042:131;:::i;:::-;29034:139;;28761:419;;;:::o;29186:233::-;29326:34;29322:1;29314:6;29310:14;29303:58;29395:16;29390:2;29382:6;29378:15;29371:41;29186:233;:::o;29425:366::-;29567:3;29588:67;29652:2;29647:3;29588:67;:::i;:::-;29581:74;;29664:93;29753:3;29664:93;:::i;:::-;29782:2;29777:3;29773:12;29766:19;;29425:366;;;:::o;29797:419::-;29963:4;30001:2;29990:9;29986:18;29978:26;;30050:9;30044:4;30040:20;30036:1;30025:9;30021:17;30014:47;30078:131;30204:4;30078:131;:::i;:::-;30070:139;;29797:419;;;:::o;30222:231::-;30362:34;30358:1;30350:6;30346:14;30339:58;30431:14;30426:2;30418:6;30414:15;30407:39;30222:231;:::o;30459:366::-;30601:3;30622:67;30686:2;30681:3;30622:67;:::i;:::-;30615:74;;30698:93;30787:3;30698:93;:::i;:::-;30816:2;30811:3;30807:12;30800:19;;30459:366;;;:::o;30831:419::-;30997:4;31035:2;31024:9;31020:18;31012:26;;31084:9;31078:4;31074:20;31070:1;31059:9;31055:17;31048:47;31112:131;31238:4;31112:131;:::i;:::-;31104:139;;30831:419;;;:::o;31256:228::-;31396:34;31392:1;31384:6;31380:14;31373:58;31465:11;31460:2;31452:6;31448:15;31441:36;31256:228;:::o;31490:366::-;31632:3;31653:67;31717:2;31712:3;31653:67;:::i;:::-;31646:74;;31729:93;31818:3;31729:93;:::i;:::-;31847:2;31842:3;31838:12;31831:19;;31490:366;;;:::o;31862:419::-;32028:4;32066:2;32055:9;32051:18;32043:26;;32115:9;32109:4;32105:20;32101:1;32090:9;32086:17;32079:47;32143:131;32269:4;32143:131;:::i;:::-;32135:139;;31862:419;;;:::o;32287:223::-;32427:34;32423:1;32415:6;32411:14;32404:58;32496:6;32491:2;32483:6;32479:15;32472:31;32287:223;:::o;32516:366::-;32658:3;32679:67;32743:2;32738:3;32679:67;:::i;:::-;32672:74;;32755:93;32844:3;32755:93;:::i;:::-;32873:2;32868:3;32864:12;32857:19;;32516:366;;;:::o;32888:419::-;33054:4;33092:2;33081:9;33077:18;33069:26;;33141:9;33135:4;33131:20;33127:1;33116:9;33112:17;33105:47;33169:131;33295:4;33169:131;:::i;:::-;33161:139;;32888:419;;;:::o;33313:191::-;33353:4;33373:20;33391:1;33373:20;:::i;:::-;33368:25;;33407:20;33425:1;33407:20;:::i;:::-;33402:25;;33446:1;33443;33440:8;33437:34;;;33451:18;;:::i;:::-;33437:34;33496:1;33493;33489:9;33481:17;;33313:191;;;;:::o;33510:182::-;33650:34;33646:1;33638:6;33634:14;33627:58;33510:182;:::o;33698:366::-;33840:3;33861:67;33925:2;33920:3;33861:67;:::i;:::-;33854:74;;33937:93;34026:3;33937:93;:::i;:::-;34055:2;34050:3;34046:12;34039:19;;33698:366;;;:::o;34070:419::-;34236:4;34274:2;34263:9;34259:18;34251:26;;34323:9;34317:4;34313:20;34309:1;34298:9;34294:17;34287:47;34351:131;34477:4;34351:131;:::i;:::-;34343:139;;34070:419;;;:::o;34495:178::-;34635:30;34631:1;34623:6;34619:14;34612:54;34495:178;:::o;34679:366::-;34821:3;34842:67;34906:2;34901:3;34842:67;:::i;:::-;34835:74;;34918:93;35007:3;34918:93;:::i;:::-;35036:2;35031:3;35027:12;35020:19;;34679:366;;;:::o;35051:419::-;35217:4;35255:2;35244:9;35240:18;35232:26;;35304:9;35298:4;35294:20;35290:1;35279:9;35275:17;35268:47;35332:131;35458:4;35332:131;:::i;:::-;35324:139;;35051:419;;;:::o;35476:175::-;35616:27;35612:1;35604:6;35600:14;35593:51;35476:175;:::o;35657:366::-;35799:3;35820:67;35884:2;35879:3;35820:67;:::i;:::-;35813:74;;35896:93;35985:3;35896:93;:::i;:::-;36014:2;36009:3;36005:12;35998:19;;35657:366;;;:::o;36029:419::-;36195:4;36233:2;36222:9;36218:18;36210:26;;36282:9;36276:4;36272:20;36268:1;36257:9;36253:17;36246:47;36310:131;36436:4;36310:131;:::i;:::-;36302:139;;36029:419;;;:::o;36454:237::-;36594:34;36590:1;36582:6;36578:14;36571:58;36663:20;36658:2;36650:6;36646:15;36639:45;36454:237;:::o;36697:366::-;36839:3;36860:67;36924:2;36919:3;36860:67;:::i;:::-;36853:74;;36936:93;37025:3;36936:93;:::i;:::-;37054:2;37049:3;37045:12;37038:19;;36697:366;;;:::o;37069:419::-;37235:4;37273:2;37262:9;37258:18;37250:26;;37322:9;37316:4;37312:20;37308:1;37297:9;37293:17;37286:47;37350:131;37476:4;37350:131;:::i;:::-;37342:139;;37069:419;;;:::o;37494:234::-;37634:34;37630:1;37622:6;37618:14;37611:58;37703:17;37698:2;37690:6;37686:15;37679:42;37494:234;:::o;37734:366::-;37876:3;37897:67;37961:2;37956:3;37897:67;:::i;:::-;37890:74;;37973:93;38062:3;37973:93;:::i;:::-;38091:2;38086:3;38082:12;38075:19;;37734:366;;;:::o;38106:419::-;38272:4;38310:2;38299:9;38295:18;38287:26;;38359:9;38353:4;38349:20;38345:1;38334:9;38330:17;38323:47;38387:131;38513:4;38387:131;:::i;:::-;38379:139;;38106:419;;;:::o;38531:98::-;38582:6;38616:5;38610:12;38600:22;;38531:98;;;:::o;38635:168::-;38718:11;38752:6;38747:3;38740:19;38792:4;38787:3;38783:14;38768:29;;38635:168;;;;:::o;38809:360::-;38895:3;38923:38;38955:5;38923:38;:::i;:::-;38977:70;39040:6;39035:3;38977:70;:::i;:::-;38970:77;;39056:52;39101:6;39096:3;39089:4;39082:5;39078:16;39056:52;:::i;:::-;39133:29;39155:6;39133:29;:::i;:::-;39128:3;39124:39;39117:46;;38899:270;38809:360;;;;:::o;39175:640::-;39370:4;39408:3;39397:9;39393:19;39385:27;;39422:71;39490:1;39479:9;39475:17;39466:6;39422:71;:::i;:::-;39503:72;39571:2;39560:9;39556:18;39547:6;39503:72;:::i;:::-;39585;39653:2;39642:9;39638:18;39629:6;39585:72;:::i;:::-;39704:9;39698:4;39694:20;39689:2;39678:9;39674:18;39667:48;39732:76;39803:4;39794:6;39732:76;:::i;:::-;39724:84;;39175:640;;;;;;;:::o;39821:141::-;39877:5;39908:6;39902:13;39893:22;;39924:32;39950:5;39924:32;:::i;:::-;39821:141;;;;:::o;39968:349::-;40037:6;40086:2;40074:9;40065:7;40061:23;40057:32;40054:119;;;40092:79;;:::i;:::-;40054:119;40212:1;40237:63;40292:7;40283:6;40272:9;40268:22;40237:63;:::i;:::-;40227:73;;40183:127;39968:349;;;;:::o;40323:180::-;40371:77;40368:1;40361:88;40468:4;40465:1;40458:15;40492:4;40489:1;40482:15;40509:185;40549:1;40566:20;40584:1;40566:20;:::i;:::-;40561:25;;40600:20;40618:1;40600:20;:::i;:::-;40595:25;;40639:1;40629:35;;40644:18;;:::i;:::-;40629:35;40686:1;40683;40679:9;40674:14;;40509:185;;;;:::o;40700:176::-;40732:1;40749:20;40767:1;40749:20;:::i;:::-;40744:25;;40783:20;40801:1;40783:20;:::i;:::-;40778:25;;40822:1;40812:35;;40827:18;;:::i;:::-;40812:35;40868:1;40865;40861:9;40856:14;;40700:176;;;;:::o;40882:180::-;40930:77;40927:1;40920:88;41027:4;41024:1;41017:15;41051:4;41048:1;41041:15

Swarm Source

ipfs://b36251ab03d2c3eb5c974e20e3816f6143bb7c5fa77aea815e3543cde4340dac
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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