ETH Price: $3,732.92 (+2.91%)
Gas: 29 Gwei
 

Overview

Max Total Supply

3 DEMONZv2

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Crypto Demonz: Deployer
Balance
3 DEMONZv2
0x5cea0036b06904f1e1a8f092ed3983b9fe60af2d
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:
Demonzv2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// File: contracts\interfaces\IERC165.sol
/**
 * @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: contracts\interfaces\IERC721.sol
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
// File: contracts\interfaces\IERC721Receiver.sol
/**
 * @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: contracts\interfaces\IERC721Metadata.sol
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: contracts\libs\Address.sol
/**
 * @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);
    }
    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// File: contracts\utils\Context.sol
/*
 * @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: contracts\libs\Strings.sol
/**
 * @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: contracts\ERC165.sol
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
// File: contracts\ERC721.sol
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;
    // Mapping owner address to token count
    mapping(address => uint256) private _balances;
    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    /**
     * @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 {
        require(operator != _msgSender(), "ERC721: approve to caller");
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
    }
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        // Clear approvals
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
    }
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
    }
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    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: contracts\utils\Ownable.sol
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }
    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// File: contracts\interfaces\IERC721Enumerable.sol
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);
    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: contracts\ERC721Enumerable.sol
/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;
    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;
    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }
    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }
    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);
        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }
    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }
    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }
    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];
        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }
        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }
    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];
        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}
// File: contracts\interfaces\IDemonzv1.sol
interface IDemonzv1 is IERC721 {
    function burnToken(uint256 _token_id) external; 
}
// File: contracts\Demonzv2.sol
contract Demonzv2 is ERC721Enumerable, Ownable {
    using Strings for uint256;
    uint256 public MAX_TOKENS = 2000;
    uint256 public MAX_PER_TX = 3;
    uint256 public MAX_PER_WALLET = 50;
    uint256 public CURRENT_TOKEN_ID = 0; // for testing 
    string public BEGINNING_URI = "https://api.cryptodemonz.com/";
    string public ENDING_URI = ".json";
    bool public ALLOW_MINTING = false;
    bool public ALLOW_SACRIFCE = true;

    IDemonzv1 public demonzv1;
    constructor(address _demonzv1) ERC721 ("DemonzV2", "DEMONZv2") {
        demonzv1 = IDemonzv1(_demonzv1);
    }
    modifier safeMinting {
        require(ALLOW_MINTING, "Minting has not begun yet");
        _;
    }

    modifier safeSacrificing {
        require(ALLOW_SACRIFCE, "Sacrificing has not begun yet");
        _;
    }
    event tokenMinted(address _sender, uint256 _amount);
    event tokenSacrificed(address _sender);    

    /// @notice standard minting function
    /// @param _amount to be minted
    function mintToken(uint256 _amount) public payable safeMinting() {
        require(_amount <= MAX_PER_TX, "Too many tokens queried for minting");
        require(totalSupply() + _amount <= MAX_TOKENS, "Not enough NFTs left to mint");
        require(balanceOf(msg.sender) + _amount <= MAX_PER_WALLET, "Exceeds wallet max allowed balance");
        for (uint256 i=0; i<_amount; ++i) {
            _safeMint(msg.sender, totalSupply());
            _incrementTokenId();
        }
        emit tokenMinted(msg.sender, _amount);
    }
    /// @notice will mint demonzv2 for burning demonzv1
    /// @param _ids array of demonzv1 ids to be burned
    function burnV1(uint256[] memory _ids) external payable safeSacrificing() {
        uint256 i = 0;
        require(_ids.length % 3 == 0 && _ids.length <= 9, "Invalid list");
        require(totalSupply() + _ids.length <= MAX_TOKENS, "Not enough NFTs left to mint");
        require(balanceOf(msg.sender) + _ids.length <= MAX_PER_WALLET, "Exceeds wallet max allowed balance");
        for (i=0; i<_ids.length; ++i) {
            require(demonzv1.ownerOf(_ids[i]) == msg.sender, "Sender is not owner");
            demonzv1.safeTransferFrom(msg.sender, address(this), _ids[i]);
            demonzv1.burnToken(_ids[i]);
           }
        mintToken(_ids.length / 3);
        // no need to increment token id here
        emit tokenSacrificed(msg.sender);
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        return string(abi.encodePacked(BEGINNING_URI, tokenId.toString(), ENDING_URI));
    }
    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
    function toggleMinting() external onlyOwner {
        ALLOW_MINTING = !ALLOW_MINTING;
    }
    function setBeginningURI(string memory _new_uri) external onlyOwner {
        BEGINNING_URI = _new_uri;
    }
    function setEndingURI(string memory _new_uri) external onlyOwner {
        ENDING_URI = _new_uri;
    }
    /// @notice dummy function for unit testing
    function _incrementTokenId() internal {
        ++CURRENT_TOKEN_ID;
    }
    /// @notice dummy function for unit testing
    function getCurrentTokenId() view external returns (uint256) {
        return CURRENT_TOKEN_ID;
    }
    /// @dev DO NOT FORMAT THIS TO PURE, even tho compiler is asking
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external returns (bytes4) {
        return
            bytes4(
                keccak256("onERC721Received(address,address,uint256,bytes)")
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_demonzv1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"}],"name":"tokenSacrificed","type":"event"},{"inputs":[],"name":"ALLOW_MINTING","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ALLOW_SACRIFCE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEGINNING_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURRENT_TOKEN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENDING_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"burnV1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"demonzv1","outputs":[{"internalType":"contract IDemonzv1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"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":"_new_uri","type":"string"}],"name":"setBeginningURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_new_uri","type":"string"}],"name":"setEndingURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6107d0600b556003600c556032600d556000600e5560c0604052601d60808190527f68747470733a2f2f6170692e63727970746f64656d6f6e7a2e636f6d2f00000060a09081526200005591600f9190620001d5565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200008491601091620001d5565b506011805461ffff1916610100179055348015620000a157600080fd5b5060405162002a9538038062002a95833981016040819052620000c4916200027b565b604051806040016040528060088152602001672232b6b7b73d2b1960c11b815250604051806040016040528060088152602001672222a6a7a72d3b1960c11b81525081600090805190602001906200011e929190620001d5565b50805162000134906001906020840190620001d5565b505050620001516200014b6200017f60201b60201c565b62000183565b601180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055620002e8565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001e390620002ab565b90600052602060002090601f01602090048101928262000207576000855562000252565b82601f106200022257805160ff191683800117855562000252565b8280016001018555821562000252579182015b828111156200025257825182559160200191906001019062000235565b506200026092915062000264565b5090565b5b8082111562000260576000815560010162000265565b6000602082840312156200028d578081fd5b81516001600160a01b0381168114620002a4578182fd5b9392505050565b600181811c90821680620002c057607f821691505b60208210811415620002e257634e487b7160e01b600052602260045260246000fd5b50919050565b61279d80620002f86000396000f3fe60806040526004361061020f5760003560e01c80636136f7ff11610118578063addd60a4116100a0578063e0ca32281161006f578063e0ca3228146105f2578063e985e9c514610608578063f2fde38b14610651578063f43a22dc14610671578063f47c84c51461068757600080fd5b8063addd60a414610585578063b88d4fde1461059f578063c634d032146105bf578063c87b56dd146105d257600080fd5b806374e5ec02116100e757806374e5ec021461050a5780637d55094d1461051d5780638da5cb5b1461053257806395d89b4114610550578063a22cb4651461056557600080fd5b80636136f7ff146104965780636352211e146104b557806370a08231146104d5578063715018a6146104f557600080fd5b8063242877c51161019b5780634f6ccce71161016a5780634f6ccce714610417578063544015fe14610437578063561892361461044c5780635701fc0b146104615780635cfdf6431461048157600080fd5b8063242877c5146103a25780632f745c59146103c25780633ccfd60b146103e257806342842e0e146103f757600080fd5b80630e96b097116101e25780630e96b097146102c55780630f2cdd6c146102eb578063150b7a021461030f57806318160ddd1461036d57806323b872dd1461038257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046122f9565b61069d565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106c8565b60405161024091906124c3565b34801561027757600080fd5b5061028b610286366004612377565b61075a565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004612226565b6107f4565b005b3480156102d157600080fd5b5060115461028b906201000090046001600160a01b031681565b3480156102f757600080fd5b50610301600d5481565b604051908152602001610240565b34801561031b57600080fd5b5061035461032a3660046120de565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b03199091168152602001610240565b34801561037957600080fd5b50600854610301565b34801561038e57600080fd5b506102c361039d36600461209e565b61090a565b3480156103ae57600080fd5b506102c36103bd366004612331565b61093b565b3480156103ce57600080fd5b506103016103dd366004612226565b61097c565b3480156103ee57600080fd5b506102c3610a12565b34801561040357600080fd5b506102c361041236600461209e565b610a6b565b34801561042357600080fd5b50610301610432366004612377565b610a86565b34801561044357600080fd5b5061025e610b27565b34801561045857600080fd5b50600e54610301565b34801561046d57600080fd5b506102c361047c366004612331565b610bb5565b34801561048d57600080fd5b5061025e610bf2565b3480156104a257600080fd5b5060115461023490610100900460ff1681565b3480156104c157600080fd5b5061028b6104d0366004612377565b610bff565b3480156104e157600080fd5b506103016104f0366004612027565b610c76565b34801561050157600080fd5b506102c3610cfd565b6102c3610518366004612251565b610d33565b34801561052957600080fd5b506102c3611133565b34801561053e57600080fd5b50600a546001600160a01b031661028b565b34801561055c57600080fd5b5061025e611171565b34801561057157600080fd5b506102c36105803660046121f5565b611180565b34801561059157600080fd5b506011546102349060ff1681565b3480156105ab57600080fd5b506102c36105ba366004612178565b611245565b6102c36105cd366004612377565b61127d565b3480156105de57600080fd5b5061025e6105ed366004612377565b611439565b3480156105fe57600080fd5b50610301600e5481565b34801561061457600080fd5b50610234610623366004612066565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561065d57600080fd5b506102c361066c366004612027565b611470565b34801561067d57600080fd5b50610301600c5481565b34801561069357600080fd5b50610301600b5481565b60006001600160e01b0319821663780e9d6360e01b14806106c257506106c282611508565b92915050565b6060600080546106d790612690565b80601f016020809104026020016040519081016040528092919081815260200182805461070390612690565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107d85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107ff82610bff565b9050806001600160a01b0316836001600160a01b0316141561086d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107cf565b336001600160a01b038216148061088957506108898133610623565b6108fb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107cf565b6109058383611558565b505050565b61091433826115c6565b6109305760405162461bcd60e51b81526004016107cf9061259f565b6109058383836116bd565b600a546001600160a01b031633146109655760405162461bcd60e51b81526004016107cf90612528565b8051610978906010906020840190611f36565b5050565b600061098783610c76565b82106109e95760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107cf565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610a3c5760405162461bcd60e51b81526004016107cf90612528565b60405133904780156108fc02916000818181858888f19350505050158015610a68573d6000803e3d6000fd5b50565b61090583838360405180602001604052806000815250611245565b6000610a9160085490565b8210610af45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107cf565b60088281548110610b1557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60108054610b3490612690565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090612690565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b600a546001600160a01b03163314610bdf5760405162461bcd60e51b81526004016107cf90612528565b805161097890600f906020840190611f36565b600f8054610b3490612690565b6000818152600260205260408120546001600160a01b0316806106c25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107cf565b60006001600160a01b038216610ce15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107cf565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610d275760405162461bcd60e51b81526004016107cf90612528565b610d316000611868565b565b601154610100900460ff16610d8a5760405162461bcd60e51b815260206004820152601d60248201527f5361637269666963696e6720686173206e6f7420626567756e2079657400000060448201526064016107cf565b600060038251610d9a91906126e6565b158015610da957506009825111155b610de45760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081b1a5cdd60a21b60448201526064016107cf565b600b548251600854610df69190612621565b1115610e445760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e740000000060448201526064016107cf565b600d548251610e5233610c76565b610e5c9190612621565b1115610e7a5760405162461bcd60e51b81526004016107cf9061255d565b5060005b81518110156110eb57601154825133916201000090046001600160a01b031690636352211e90859085908110610ec457634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610eea91815260200190565b60206040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a919061204a565b6001600160a01b031614610f865760405162461bcd60e51b815260206004820152601360248201527229b2b73232b91034b9903737ba1037bbb732b960691b60448201526064016107cf565b601160029054906101000a90046001600160a01b03166001600160a01b03166342842e0e3330858581518110610fcc57634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561102657600080fd5b505af115801561103a573d6000803e3d6000fd5b50505050601160029054906101000a90046001600160a01b03166001600160a01b0316637b47ec1a83838151811061108257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016110a891815260200190565b600060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b50505050806110e4906126cb565b9050610e7e565b6110fc600383516105cd9190612639565b6040513381527ff3306520a6340cba86066ec084028581623403776130b6040d3da822951f879b9060200160405180910390a15050565b600a546001600160a01b0316331461115d5760405162461bcd60e51b81526004016107cf90612528565b6011805460ff19811660ff90911615179055565b6060600180546106d790612690565b6001600160a01b0382163314156111d95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107cf565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124f33836115c6565b61126b5760405162461bcd60e51b81526004016107cf9061259f565b611277848484846118ba565b50505050565b60115460ff166112cf5760405162461bcd60e51b815260206004820152601960248201527f4d696e74696e6720686173206e6f7420626567756e207965740000000000000060448201526064016107cf565b600c5481111561132d5760405162461bcd60e51b815260206004820152602360248201527f546f6f206d616e7920746f6b656e73207175657269656420666f72206d696e74604482015262696e6760e81b60648201526084016107cf565b600b548161133a60085490565b6113449190612621565b11156113925760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e740000000060448201526064016107cf565b600d548161139f33610c76565b6113a99190612621565b11156113c75760405162461bcd60e51b81526004016107cf9061255d565b60005b818110156113fc576113e4336113df60085490565b6118ed565b6113ec611907565b6113f5816126cb565b90506113ca565b5060408051338152602081018390527f2d8eb9b9558d4b5ef1d238622692f6156d5822009340e26ab15fac05d64c12f0910160405180910390a150565b6060600f6114468361191c565b601060405160200161145a93929190612453565b6040516020818303038152906040529050919050565b600a546001600160a01b0316331461149a5760405162461bcd60e51b81526004016107cf90612528565b6001600160a01b0381166114ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107cf565b610a6881611868565b60006001600160e01b031982166380ac58cd60e01b148061153957506001600160e01b03198216635b5e139f60e01b145b806106c257506301ffc9a760e01b6001600160e01b03198316146106c2565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061158d82610bff565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661163f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107cf565b600061164a83610bff565b9050806001600160a01b0316846001600160a01b031614806116855750836001600160a01b031661167a8461075a565b6001600160a01b0316145b806116b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116d082610bff565b6001600160a01b0316146117385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107cf565b6001600160a01b03821661179a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107cf565b6117a5838383611a36565b6117b0600082611558565b6001600160a01b03831660009081526003602052604081208054600192906117d990849061264d565b90915550506001600160a01b0382166000908152600360205260408120805460019290611807908490612621565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6118c58484846116bd565b6118d184848484611aee565b6112775760405162461bcd60e51b81526004016107cf906124d6565b610978828260405180602001604052806000815250611bfb565b600e60008154611916906126cb565b90915550565b6060816119405750506040805180820190915260018152600360fc1b602082015290565b8160005b811561196a5780611954816126cb565b91506119639050600a83612639565b9150611944565b60008167ffffffffffffffff81111561199357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119bd576020820181803683370190505b5090505b84156116b5576119d260018361264d565b91506119df600a866126e6565b6119ea906030612621565b60f81b818381518110611a0d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611a2f600a86612639565b94506119c1565b6001600160a01b038316611a9157611a8c81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ab4565b816001600160a01b0316836001600160a01b031614611ab457611ab48382611c2e565b6001600160a01b038216611acb5761090581611ccb565b826001600160a01b0316826001600160a01b031614610905576109058282611da4565b60006001600160a01b0384163b15611bf057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b32903390899088908890600401612486565b602060405180830381600087803b158015611b4c57600080fd5b505af1925050508015611b7c575060408051601f3d908101601f19168201909252611b7991810190612315565b60015b611bd6573d808015611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b508051611bce5760405162461bcd60e51b81526004016107cf906124d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116b5565b506001949350505050565b611c058383611de8565b611c126000848484611aee565b6109055760405162461bcd60e51b81526004016107cf906124d6565b60006001611c3b84610c76565b611c45919061264d565b600083815260076020526040902054909150808214611c98576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611cdd9060019061264d565b60008381526009602052604081205460088054939450909284908110611d1357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611d4257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611d8857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611daf83610c76565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e3e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107cf565b6000818152600260205260409020546001600160a01b031615611ea35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107cf565b611eaf60008383611a36565b6001600160a01b0382166000908152600360205260408120805460019290611ed8908490612621565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f4290612690565b90600052602060002090601f016020900481019282611f645760008555611faa565b82601f10611f7d57805160ff1916838001178555611faa565b82800160010185558215611faa579182015b82811115611faa578251825591602001919060010190611f8f565b50611fb6929150611fba565b5090565b5b80821115611fb65760008155600101611fbb565b600067ffffffffffffffff831115611fe957611fe9612726565b611ffc601f8401601f19166020016125f0565b905082815283838301111561201057600080fd5b828260208301376000602084830101529392505050565b600060208284031215612038578081fd5b81356120438161273c565b9392505050565b60006020828403121561205b578081fd5b81516120438161273c565b60008060408385031215612078578081fd5b82356120838161273c565b915060208301356120938161273c565b809150509250929050565b6000806000606084860312156120b2578081fd5b83356120bd8161273c565b925060208401356120cd8161273c565b929592945050506040919091013590565b6000806000806000608086880312156120f5578081fd5b85356121008161273c565b945060208601356121108161273c565b935060408601359250606086013567ffffffffffffffff80821115612133578283fd5b818801915088601f830112612146578283fd5b813581811115612154578384fd5b896020828501011115612165578384fd5b9699959850939650602001949392505050565b6000806000806080858703121561218d578384fd5b84356121988161273c565b935060208501356121a88161273c565b925060408501359150606085013567ffffffffffffffff8111156121ca578182fd5b8501601f810187136121da578182fd5b6121e987823560208401611fcf565b91505092959194509250565b60008060408385031215612207578182fd5b82356122128161273c565b915060208301358015158114612093578182fd5b60008060408385031215612238578182fd5b82356122438161273c565b946020939093013593505050565b60006020808385031215612263578182fd5b823567ffffffffffffffff8082111561227a578384fd5b818501915085601f83011261228d578384fd5b81358181111561229f5761229f612726565b8060051b91506122b08483016125f0565b8181528481019084860184860187018a10156122ca578788fd5b8795505b838610156122ec5780358352600195909501949186019186016122ce565b5098975050505050505050565b60006020828403121561230a578081fd5b813561204381612751565b600060208284031215612326578081fd5b815161204381612751565b600060208284031215612342578081fd5b813567ffffffffffffffff811115612358578182fd5b8201601f81018413612368578182fd5b6116b584823560208401611fcf565b600060208284031215612388578081fd5b5035919050565b600081518084526123a7816020860160208601612664565b601f01601f19169290920160200192915050565b8054600090600181811c90808316806123d557607f831692505b60208084108214156123f557634e487b7160e01b86526022600452602486fd5b818015612409576001811461241a57612447565b60ff19861689528489019650612447565b60008881526020902060005b8681101561243f5781548b820152908501908301612426565b505084890196505b50505050505092915050565b600061245f82866123bb565b845161246f818360208901612664565b61247b818301866123bb565b979650505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124b99083018461238f565b9695505050505050565b602081526000612043602083018461238f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f457863656564732077616c6c6574206d617820616c6c6f7765642062616c616e604082015261636560f01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561261957612619612726565b604052919050565b60008219821115612634576126346126fa565b500190565b60008261264857612648612710565b500490565b60008282101561265f5761265f6126fa565b500390565b60005b8381101561267f578181015183820152602001612667565b838111156112775750506000910152565b600181811c908216806126a457607f821691505b602082108114156126c557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126df576126df6126fa565b5060010190565b6000826126f5576126f5612710565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a6857600080fd5b6001600160e01b031981168114610a6857600080fdfea2646970667358221220a6d62a2846c614845298b7ea821a0e9568e9292c7b05e5498502c2171612fde264736f6c63430008040033000000000000000000000000ae16529ed90fafc927d774ea7be1b95d826664e3

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636136f7ff11610118578063addd60a4116100a0578063e0ca32281161006f578063e0ca3228146105f2578063e985e9c514610608578063f2fde38b14610651578063f43a22dc14610671578063f47c84c51461068757600080fd5b8063addd60a414610585578063b88d4fde1461059f578063c634d032146105bf578063c87b56dd146105d257600080fd5b806374e5ec02116100e757806374e5ec021461050a5780637d55094d1461051d5780638da5cb5b1461053257806395d89b4114610550578063a22cb4651461056557600080fd5b80636136f7ff146104965780636352211e146104b557806370a08231146104d5578063715018a6146104f557600080fd5b8063242877c51161019b5780634f6ccce71161016a5780634f6ccce714610417578063544015fe14610437578063561892361461044c5780635701fc0b146104615780635cfdf6431461048157600080fd5b8063242877c5146103a25780632f745c59146103c25780633ccfd60b146103e257806342842e0e146103f757600080fd5b80630e96b097116101e25780630e96b097146102c55780630f2cdd6c146102eb578063150b7a021461030f57806318160ddd1461036d57806323b872dd1461038257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046122f9565b61069d565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106c8565b60405161024091906124c3565b34801561027757600080fd5b5061028b610286366004612377565b61075a565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004612226565b6107f4565b005b3480156102d157600080fd5b5060115461028b906201000090046001600160a01b031681565b3480156102f757600080fd5b50610301600d5481565b604051908152602001610240565b34801561031b57600080fd5b5061035461032a3660046120de565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b03199091168152602001610240565b34801561037957600080fd5b50600854610301565b34801561038e57600080fd5b506102c361039d36600461209e565b61090a565b3480156103ae57600080fd5b506102c36103bd366004612331565b61093b565b3480156103ce57600080fd5b506103016103dd366004612226565b61097c565b3480156103ee57600080fd5b506102c3610a12565b34801561040357600080fd5b506102c361041236600461209e565b610a6b565b34801561042357600080fd5b50610301610432366004612377565b610a86565b34801561044357600080fd5b5061025e610b27565b34801561045857600080fd5b50600e54610301565b34801561046d57600080fd5b506102c361047c366004612331565b610bb5565b34801561048d57600080fd5b5061025e610bf2565b3480156104a257600080fd5b5060115461023490610100900460ff1681565b3480156104c157600080fd5b5061028b6104d0366004612377565b610bff565b3480156104e157600080fd5b506103016104f0366004612027565b610c76565b34801561050157600080fd5b506102c3610cfd565b6102c3610518366004612251565b610d33565b34801561052957600080fd5b506102c3611133565b34801561053e57600080fd5b50600a546001600160a01b031661028b565b34801561055c57600080fd5b5061025e611171565b34801561057157600080fd5b506102c36105803660046121f5565b611180565b34801561059157600080fd5b506011546102349060ff1681565b3480156105ab57600080fd5b506102c36105ba366004612178565b611245565b6102c36105cd366004612377565b61127d565b3480156105de57600080fd5b5061025e6105ed366004612377565b611439565b3480156105fe57600080fd5b50610301600e5481565b34801561061457600080fd5b50610234610623366004612066565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561065d57600080fd5b506102c361066c366004612027565b611470565b34801561067d57600080fd5b50610301600c5481565b34801561069357600080fd5b50610301600b5481565b60006001600160e01b0319821663780e9d6360e01b14806106c257506106c282611508565b92915050565b6060600080546106d790612690565b80601f016020809104026020016040519081016040528092919081815260200182805461070390612690565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107d85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107ff82610bff565b9050806001600160a01b0316836001600160a01b0316141561086d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107cf565b336001600160a01b038216148061088957506108898133610623565b6108fb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107cf565b6109058383611558565b505050565b61091433826115c6565b6109305760405162461bcd60e51b81526004016107cf9061259f565b6109058383836116bd565b600a546001600160a01b031633146109655760405162461bcd60e51b81526004016107cf90612528565b8051610978906010906020840190611f36565b5050565b600061098783610c76565b82106109e95760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107cf565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610a3c5760405162461bcd60e51b81526004016107cf90612528565b60405133904780156108fc02916000818181858888f19350505050158015610a68573d6000803e3d6000fd5b50565b61090583838360405180602001604052806000815250611245565b6000610a9160085490565b8210610af45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107cf565b60088281548110610b1557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60108054610b3490612690565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090612690565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b600a546001600160a01b03163314610bdf5760405162461bcd60e51b81526004016107cf90612528565b805161097890600f906020840190611f36565b600f8054610b3490612690565b6000818152600260205260408120546001600160a01b0316806106c25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107cf565b60006001600160a01b038216610ce15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107cf565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610d275760405162461bcd60e51b81526004016107cf90612528565b610d316000611868565b565b601154610100900460ff16610d8a5760405162461bcd60e51b815260206004820152601d60248201527f5361637269666963696e6720686173206e6f7420626567756e2079657400000060448201526064016107cf565b600060038251610d9a91906126e6565b158015610da957506009825111155b610de45760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081b1a5cdd60a21b60448201526064016107cf565b600b548251600854610df69190612621565b1115610e445760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e740000000060448201526064016107cf565b600d548251610e5233610c76565b610e5c9190612621565b1115610e7a5760405162461bcd60e51b81526004016107cf9061255d565b5060005b81518110156110eb57601154825133916201000090046001600160a01b031690636352211e90859085908110610ec457634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610eea91815260200190565b60206040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a919061204a565b6001600160a01b031614610f865760405162461bcd60e51b815260206004820152601360248201527229b2b73232b91034b9903737ba1037bbb732b960691b60448201526064016107cf565b601160029054906101000a90046001600160a01b03166001600160a01b03166342842e0e3330858581518110610fcc57634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561102657600080fd5b505af115801561103a573d6000803e3d6000fd5b50505050601160029054906101000a90046001600160a01b03166001600160a01b0316637b47ec1a83838151811061108257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016110a891815260200190565b600060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b50505050806110e4906126cb565b9050610e7e565b6110fc600383516105cd9190612639565b6040513381527ff3306520a6340cba86066ec084028581623403776130b6040d3da822951f879b9060200160405180910390a15050565b600a546001600160a01b0316331461115d5760405162461bcd60e51b81526004016107cf90612528565b6011805460ff19811660ff90911615179055565b6060600180546106d790612690565b6001600160a01b0382163314156111d95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107cf565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124f33836115c6565b61126b5760405162461bcd60e51b81526004016107cf9061259f565b611277848484846118ba565b50505050565b60115460ff166112cf5760405162461bcd60e51b815260206004820152601960248201527f4d696e74696e6720686173206e6f7420626567756e207965740000000000000060448201526064016107cf565b600c5481111561132d5760405162461bcd60e51b815260206004820152602360248201527f546f6f206d616e7920746f6b656e73207175657269656420666f72206d696e74604482015262696e6760e81b60648201526084016107cf565b600b548161133a60085490565b6113449190612621565b11156113925760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e740000000060448201526064016107cf565b600d548161139f33610c76565b6113a99190612621565b11156113c75760405162461bcd60e51b81526004016107cf9061255d565b60005b818110156113fc576113e4336113df60085490565b6118ed565b6113ec611907565b6113f5816126cb565b90506113ca565b5060408051338152602081018390527f2d8eb9b9558d4b5ef1d238622692f6156d5822009340e26ab15fac05d64c12f0910160405180910390a150565b6060600f6114468361191c565b601060405160200161145a93929190612453565b6040516020818303038152906040529050919050565b600a546001600160a01b0316331461149a5760405162461bcd60e51b81526004016107cf90612528565b6001600160a01b0381166114ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107cf565b610a6881611868565b60006001600160e01b031982166380ac58cd60e01b148061153957506001600160e01b03198216635b5e139f60e01b145b806106c257506301ffc9a760e01b6001600160e01b03198316146106c2565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061158d82610bff565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661163f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107cf565b600061164a83610bff565b9050806001600160a01b0316846001600160a01b031614806116855750836001600160a01b031661167a8461075a565b6001600160a01b0316145b806116b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116d082610bff565b6001600160a01b0316146117385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107cf565b6001600160a01b03821661179a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107cf565b6117a5838383611a36565b6117b0600082611558565b6001600160a01b03831660009081526003602052604081208054600192906117d990849061264d565b90915550506001600160a01b0382166000908152600360205260408120805460019290611807908490612621565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6118c58484846116bd565b6118d184848484611aee565b6112775760405162461bcd60e51b81526004016107cf906124d6565b610978828260405180602001604052806000815250611bfb565b600e60008154611916906126cb565b90915550565b6060816119405750506040805180820190915260018152600360fc1b602082015290565b8160005b811561196a5780611954816126cb565b91506119639050600a83612639565b9150611944565b60008167ffffffffffffffff81111561199357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119bd576020820181803683370190505b5090505b84156116b5576119d260018361264d565b91506119df600a866126e6565b6119ea906030612621565b60f81b818381518110611a0d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611a2f600a86612639565b94506119c1565b6001600160a01b038316611a9157611a8c81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ab4565b816001600160a01b0316836001600160a01b031614611ab457611ab48382611c2e565b6001600160a01b038216611acb5761090581611ccb565b826001600160a01b0316826001600160a01b031614610905576109058282611da4565b60006001600160a01b0384163b15611bf057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b32903390899088908890600401612486565b602060405180830381600087803b158015611b4c57600080fd5b505af1925050508015611b7c575060408051601f3d908101601f19168201909252611b7991810190612315565b60015b611bd6573d808015611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b508051611bce5760405162461bcd60e51b81526004016107cf906124d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116b5565b506001949350505050565b611c058383611de8565b611c126000848484611aee565b6109055760405162461bcd60e51b81526004016107cf906124d6565b60006001611c3b84610c76565b611c45919061264d565b600083815260076020526040902054909150808214611c98576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611cdd9060019061264d565b60008381526009602052604081205460088054939450909284908110611d1357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611d4257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611d8857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611daf83610c76565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e3e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107cf565b6000818152600260205260409020546001600160a01b031615611ea35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107cf565b611eaf60008383611a36565b6001600160a01b0382166000908152600360205260408120805460019290611ed8908490612621565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f4290612690565b90600052602060002090601f016020900481019282611f645760008555611faa565b82601f10611f7d57805160ff1916838001178555611faa565b82800160010185558215611faa579182015b82811115611faa578251825591602001919060010190611f8f565b50611fb6929150611fba565b5090565b5b80821115611fb65760008155600101611fbb565b600067ffffffffffffffff831115611fe957611fe9612726565b611ffc601f8401601f19166020016125f0565b905082815283838301111561201057600080fd5b828260208301376000602084830101529392505050565b600060208284031215612038578081fd5b81356120438161273c565b9392505050565b60006020828403121561205b578081fd5b81516120438161273c565b60008060408385031215612078578081fd5b82356120838161273c565b915060208301356120938161273c565b809150509250929050565b6000806000606084860312156120b2578081fd5b83356120bd8161273c565b925060208401356120cd8161273c565b929592945050506040919091013590565b6000806000806000608086880312156120f5578081fd5b85356121008161273c565b945060208601356121108161273c565b935060408601359250606086013567ffffffffffffffff80821115612133578283fd5b818801915088601f830112612146578283fd5b813581811115612154578384fd5b896020828501011115612165578384fd5b9699959850939650602001949392505050565b6000806000806080858703121561218d578384fd5b84356121988161273c565b935060208501356121a88161273c565b925060408501359150606085013567ffffffffffffffff8111156121ca578182fd5b8501601f810187136121da578182fd5b6121e987823560208401611fcf565b91505092959194509250565b60008060408385031215612207578182fd5b82356122128161273c565b915060208301358015158114612093578182fd5b60008060408385031215612238578182fd5b82356122438161273c565b946020939093013593505050565b60006020808385031215612263578182fd5b823567ffffffffffffffff8082111561227a578384fd5b818501915085601f83011261228d578384fd5b81358181111561229f5761229f612726565b8060051b91506122b08483016125f0565b8181528481019084860184860187018a10156122ca578788fd5b8795505b838610156122ec5780358352600195909501949186019186016122ce565b5098975050505050505050565b60006020828403121561230a578081fd5b813561204381612751565b600060208284031215612326578081fd5b815161204381612751565b600060208284031215612342578081fd5b813567ffffffffffffffff811115612358578182fd5b8201601f81018413612368578182fd5b6116b584823560208401611fcf565b600060208284031215612388578081fd5b5035919050565b600081518084526123a7816020860160208601612664565b601f01601f19169290920160200192915050565b8054600090600181811c90808316806123d557607f831692505b60208084108214156123f557634e487b7160e01b86526022600452602486fd5b818015612409576001811461241a57612447565b60ff19861689528489019650612447565b60008881526020902060005b8681101561243f5781548b820152908501908301612426565b505084890196505b50505050505092915050565b600061245f82866123bb565b845161246f818360208901612664565b61247b818301866123bb565b979650505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124b99083018461238f565b9695505050505050565b602081526000612043602083018461238f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f457863656564732077616c6c6574206d617820616c6c6f7765642062616c616e604082015261636560f01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561261957612619612726565b604052919050565b60008219821115612634576126346126fa565b500190565b60008261264857612648612710565b500490565b60008282101561265f5761265f6126fa565b500390565b60005b8381101561267f578181015183820152602001612667565b838111156112775750506000910152565b600181811c908216806126a457607f821691505b602082108114156126c557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126df576126df6126fa565b5060010190565b6000826126f5576126f5612710565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a6857600080fd5b6001600160e01b031981168114610a6857600080fdfea2646970667358221220a6d62a2846c614845298b7ea821a0e9568e9292c7b05e5498502c2171612fde264736f6c63430008040033

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

000000000000000000000000ae16529ed90fafc927d774ea7be1b95d826664e3

-----Decoded View---------------
Arg [0] : _demonzv1 (address): 0xAE16529eD90FAfc927D774Ea7bE1b95D826664E3

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae16529ed90fafc927d774ea7be1b95d826664e3


Deployed Bytecode Sourcemap

42129:3726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35848:224;;;;;;;;;;-1:-1:-1;35848:224:0;;;;;:::i;:::-;;:::i;:::-;;;9861:14:1;;9854:22;9836:41;;9824:2;9809:18;35848:224:0;;;;;;;;20762:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22305:219::-;;;;;;;;;;-1:-1:-1;22305:219:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8500:32:1;;;8482:51;;8470:2;8455:18;22305:219:0;8437:102:1;21834:407:0;;;;;;;;;;-1:-1:-1;21834:407:0;;;;;:::i;:::-;;:::i;:::-;;42580:25;;;;;;;;;;-1:-1:-1;42580:25:0;;;;;;;-1:-1:-1;;;;;42580:25:0;;;42290:34;;;;;;;;;;;;;;;;;;;20047:25:1;;;20035:2;20020:18;42290:34:0;20002:76:1;45575:277:0;;;;;;;;;;-1:-1:-1;45575:277:0;;;;;:::i;:::-;45769:60;45575:277;;;;;;;;;;;-1:-1:-1;;;;;;10050:33:1;;;10032:52;;10020:2;10005:18;45575:277:0;9987:103:1;36484:113:0;;;;;;;;;;-1:-1:-1;36572:10:0;:17;36484:113;;23185:337;;;;;;;;;;-1:-1:-1;23185:337:0;;;;;:::i;:::-;;:::i;45106:105::-;;;;;;;;;;-1:-1:-1;45106:105:0;;;;;:::i;:::-;;:::i;36154:256::-;;;;;;;;;;-1:-1:-1;36154:256:0;;;;;:::i;:::-;;:::i;44775:109::-;;;;;;;;;;;;;:::i;23591:185::-;;;;;;;;;;-1:-1:-1;23591:185:0;;;;;:::i;:::-;;:::i;36672:233::-;;;;;;;;;;-1:-1:-1;36672:233:0;;;;;:::i;:::-;;:::i;42457:34::-;;;;;;;;;;;;;:::i;45396:103::-;;;;;;;;;;-1:-1:-1;45475:16:0;;45396:103;;44989:111;;;;;;;;;;-1:-1:-1;44989:111:0;;;;;:::i;:::-;;:::i;42389:61::-;;;;;;;;;;;;;:::i;42538:33::-;;;;;;;;;;-1:-1:-1;42538:33:0;;;;;;;;;;;20458:239;;;;;;;;;;-1:-1:-1;20458:239:0;;;;;:::i;:::-;;:::i;20190:208::-;;;;;;;;;;-1:-1:-1;20190:208:0;;;;;:::i;:::-;;:::i;33455:94::-;;;;;;;;;;;;;:::i;43806:772::-;;;;;;:::i;:::-;;:::i;44890:93::-;;;;;;;;;;;;;:::i;32808:87::-;;;;;;;;;;-1:-1:-1;32881:6:0;;-1:-1:-1;;;;;32881:6:0;32808:87;;20929:104;;;;;;;;;;;;;:::i;22594:293::-;;;;;;;;;;-1:-1:-1;22594:293:0;;;;;:::i;:::-;;:::i;42498:33::-;;;;;;;;;;-1:-1:-1;42498:33:0;;;;;;;;23845:328;;;;;;;;;;-1:-1:-1;23845:328:0;;;;;:::i;:::-;;:::i;43149:538::-;;;;;;:::i;:::-;;:::i;44584:185::-;;;;;;;;;;-1:-1:-1;44584:185:0;;;;;:::i;:::-;;:::i;42331:35::-;;;;;;;;;;;;;;;;22956:164;;;;;;;;;;-1:-1:-1;22956:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23077:25:0;;;23053:4;23077:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22956:164;33702:192;;;;;;;;;;-1:-1:-1;33702:192:0;;;;;:::i;:::-;;:::i;42254:29::-;;;;;;;;;;;;;;;;42215:32;;;;;;;;;;;;;;;;35848:224;35950:4;-1:-1:-1;;;;;;35974:50:0;;-1:-1:-1;;;35974:50:0;;:90;;;36028:36;36052:11;36028:23;:36::i;:::-;35967:97;35848:224;-1:-1:-1;;35848:224:0:o;20762:100::-;20816:13;20849:5;20842:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20762:100;:::o;22305:219::-;22381:7;25768:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25768:16:0;22401:73;;;;-1:-1:-1;;;22401:73:0;;16577:2:1;22401:73:0;;;16559:21:1;16616:2;16596:18;;;16589:30;16655:34;16635:18;;;16628:62;-1:-1:-1;;;16706:18:1;;;16699:42;16758:19;;22401:73:0;;;;;;;;;-1:-1:-1;22492:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22492:24:0;;22305:219::o;21834:407::-;21915:13;21931:23;21946:7;21931:14;:23::i;:::-;21915:39;;21979:5;-1:-1:-1;;;;;21973:11:0;:2;-1:-1:-1;;;;;21973:11:0;;;21965:57;;;;-1:-1:-1;;;21965:57:0;;17761:2:1;21965:57:0;;;17743:21:1;17800:2;17780:18;;;17773:30;17839:34;17819:18;;;17812:62;-1:-1:-1;;;17890:18:1;;;17883:31;17931:19;;21965:57:0;17733:223:1;21965:57:0;15548:10;-1:-1:-1;;;;;22055:21:0;;;;:62;;-1:-1:-1;22080:37:0;22097:5;15548:10;22956:164;:::i;22080:37::-;22033:168;;;;-1:-1:-1;;;22033:168:0;;14970:2:1;22033:168:0;;;14952:21:1;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;15119:26;15099:18;;;15092:54;15163:19;;22033:168:0;14942:246:1;22033:168:0;22212:21;22221:2;22225:7;22212:8;:21::i;:::-;21834:407;;;:::o;23185:337::-;23380:41;15548:10;23413:7;23380:18;:41::i;:::-;23372:103;;;;-1:-1:-1;;;23372:103:0;;;;;;;:::i;:::-;23486:28;23496:4;23502:2;23506:7;23486:9;:28::i;45106:105::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;45182:21;;::::1;::::0;:10:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45106:105:::0;:::o;36154:256::-;36251:7;36287:23;36304:5;36287:16;:23::i;:::-;36279:5;:31;36271:87;;;;-1:-1:-1;;;36271:87:0;;11151:2:1;36271:87:0;;;11133:21:1;11190:2;11170:18;;;11163:30;11229:34;11209:18;;;11202:62;-1:-1:-1;;;11280:18:1;;;11273:41;11331:19;;36271:87:0;11123:233:1;36271:87:0;-1:-1:-1;;;;;;36376:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36154:256::o;44775:109::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;44825:51:::1;::::0;44833:10:::1;::::0;44854:21:::1;44825:51:::0;::::1;;;::::0;::::1;::::0;;;44854:21;44833:10;44825:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44775:109::o:0;23591:185::-;23729:39;23746:4;23752:2;23756:7;23729:39;;;;;;;;;;;;:16;:39::i;36672:233::-;36747:7;36783:30;36572:10;:17;;36484:113;36783:30;36775:5;:38;36767:95;;;;-1:-1:-1;;;36767:95:0;;19690:2:1;36767:95:0;;;19672:21:1;19729:2;19709:18;;;19702:30;19768:34;19748:18;;;19741:62;-1:-1:-1;;;19819:18:1;;;19812:42;19871:19;;36767:95:0;19662:234:1;36767:95:0;36880:10;36891:5;36880:17;;;;;;-1:-1:-1;;;36880:17:0;;;;;;;;;;;;;;;;;36873:24;;36672:233;;;:::o;42457:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44989:111::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;45068:24;;::::1;::::0;:13:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;42389:61::-:0;;;;;;;:::i;20458:239::-;20530:7;20566:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20566:16:0;20601:19;20593:73;;;;-1:-1:-1;;;20593:73:0;;15806:2:1;20593:73:0;;;15788:21:1;15845:2;15825:18;;;15818:30;15884:34;15864:18;;;15857:62;-1:-1:-1;;;15935:18:1;;;15928:39;15984:19;;20593:73:0;15778:231:1;20190:208:0;20262:7;-1:-1:-1;;;;;20290:19:0;;20282:74;;;;-1:-1:-1;;;20282:74:0;;15395:2:1;20282:74:0;;;15377:21:1;15434:2;15414:18;;;15407:30;15473:34;15453:18;;;15446:62;-1:-1:-1;;;15524:18:1;;;15517:40;15574:19;;20282:74:0;15367:232:1;20282:74:0;-1:-1:-1;;;;;;20374:16:0;;;;;:9;:16;;;;;;;20190:208::o;33455:94::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;33520:21:::1;33538:1;33520:9;:21::i;:::-;33455:94::o:0;43806:772::-;42886:14;;;;;;;42878:56;;;;-1:-1:-1;;;42878:56:0;;18566:2:1;42878:56:0;;;18548:21:1;18605:2;18585:18;;;18578:30;18644:31;18624:18;;;18617:59;18693:18;;42878:56:0;18538:179:1;42878:56:0;43891:9:::1;43937:1;43923:4;:11;:15;;;;:::i;:::-;:20:::0;:40;::::1;;;;43962:1;43947:4;:11;:16;;43923:40;43915:65;;;::::0;-1:-1:-1;;;43915:65:0;;14629:2:1;43915:65:0::1;::::0;::::1;14611:21:1::0;14668:2;14648:18;;;14641:30;-1:-1:-1;;;14687:18:1;;;14680:42;14739:18;;43915:65:0::1;14601:162:1::0;43915:65:0::1;44030:10;::::0;44015:11;;36572:10;:17;43999:27:::1;;;;:::i;:::-;:41;;43991:82;;;::::0;-1:-1:-1;;;43991:82:0;;12389:2:1;43991:82:0::1;::::0;::::1;12371:21:1::0;12428:2;12408:18;;;12401:30;12467;12447:18;;;12440:58;12515:18;;43991:82:0::1;12361:178:1::0;43991:82:0::1;44131:14;;44116:4;:11;44092:21;44102:10;44092:9;:21::i;:::-;:35;;;;:::i;:::-;:53;;44084:100;;;;-1:-1:-1::0;;;44084:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;44202:1:0::1;44195:249;44207:4;:11;44205:1;:13;44195:249;;;44248:8;::::0;44265:7;;44277:10:::1;::::0;44248:8;;::::1;-1:-1:-1::0;;;;;44248:8:0::1;::::0;:16:::1;::::0;44265:4;;44270:1;;44265:7;::::1;;;-1:-1:-1::0;;;44265:7:0::1;;;;;;;;;;;;;;;44248:25;;;;;;;;;;;;;20047::1::0;;20035:2;20020:18;;20002:76;44248:25:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44248:39:0::1;;44240:71;;;::::0;-1:-1:-1;;;44240:71:0;;18924:2:1;44240:71:0::1;::::0;::::1;18906:21:1::0;18963:2;18943:18;;;18936:30;-1:-1:-1;;;18982:18:1;;;18975:49;19041:18;;44240:71:0::1;18896:169:1::0;44240:71:0::1;44326:8;;;;;;;;;-1:-1:-1::0;;;;;44326:8:0::1;-1:-1:-1::0;;;;;44326:25:0::1;;44352:10;44372:4;44379;44384:1;44379:7;;;;;;-1:-1:-1::0;;;44379:7:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;44326:61:::1;::::0;-1:-1:-1;;;;;;44326:61:0::1;::::0;;;;;;-1:-1:-1;;;;;8802:15:1;;;44326:61:0::1;::::0;::::1;8784:34:1::0;8854:15;;;;8834:18;;;8827:43;8886:18;;;8879:34;8719:18;;44326:61:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44402:8;;;;;;;;;-1:-1:-1::0;;;;;44402:8:0::1;-1:-1:-1::0;;;;;44402:18:0::1;;44421:4;44426:1;44421:7;;;;;;-1:-1:-1::0;;;44421:7:0::1;;;;;;;;;;;;;;;44402:27;;;;;;;;;;;;;20047:25:1::0;;20035:2;20020:18;;20002:76;44402:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44220:3;;;;:::i;:::-;;;44195:249;;;44454:26;44478:1;44464:4;:11;:15;;;;:::i;44454:26::-;44543:27;::::0;44559:10:::1;8482:51:1::0;;44543:27:0::1;::::0;8470:2:1;8455:18;44543:27:0::1;;;;;;;42945:1;43806:772:::0;:::o;44890:93::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;44962:13:::1;::::0;;-1:-1:-1;;44945:30:0;::::1;44962:13;::::0;;::::1;44961:14;44945:30;::::0;;44890:93::o;20929:104::-;20985:13;21018:7;21011:14;;;;;:::i;22594:293::-;-1:-1:-1;;;;;22697:24:0;;15548:10;22697:24;;22689:62;;;;-1:-1:-1;;;22689:62:0;;13862:2:1;22689:62:0;;;13844:21:1;13901:2;13881:18;;;13874:30;13940:27;13920:18;;;13913:55;13985:18;;22689:62:0;13834:175:1;22689:62:0;15548:10;22762:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22762:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22762:53:0;;;;;;;;;;22831:48;;9836:41:1;;;22762:42:0;;15548:10;22831:48;;9809:18:1;22831:48:0;;;;;;;22594:293;;:::o;23845:328::-;24020:41;15548:10;24053:7;24020:18;:41::i;:::-;24012:103;;;;-1:-1:-1;;;24012:103:0;;;;;;;:::i;:::-;24126:39;24140:4;24146:2;24150:7;24159:5;24126:13;:39::i;:::-;23845:328;;;;:::o;43149:538::-;42771:13;;;;42763:51;;;;-1:-1:-1;;;42763:51:0;;13103:2:1;42763:51:0;;;13085:21:1;13142:2;13122:18;;;13115:30;13181:27;13161:18;;;13154:55;13226:18;;42763:51:0;13075:175:1;42763:51:0;43244:10:::1;;43233:7;:21;;43225:69;;;::::0;-1:-1:-1;;;43225:69:0;;10747:2:1;43225:69:0::1;::::0;::::1;10729:21:1::0;10786:2;10766:18;;;10759:30;10825:34;10805:18;;;10798:62;-1:-1:-1;;;10876:18:1;;;10869:33;10919:19;;43225:69:0::1;10719:225:1::0;43225:69:0::1;43340:10;;43329:7;43313:13;36572:10:::0;:17;;36484:113;43313:13:::1;:23;;;;:::i;:::-;:37;;43305:78;;;::::0;-1:-1:-1;;;43305:78:0;;12389:2:1;43305:78:0::1;::::0;::::1;12371:21:1::0;12428:2;12408:18;;;12401:30;12467;12447:18;;;12440:58;12515:18;;43305:78:0::1;12361:178:1::0;43305:78:0::1;43437:14;;43426:7;43402:21;43412:10;43402:9;:21::i;:::-;:31;;;;:::i;:::-;:49;;43394:96;;;;-1:-1:-1::0;;;43394:96:0::1;;;;;;;:::i;:::-;43506:9;43501:131;43521:7;43519:1;:9;43501:131;;;43550:36;43560:10;43572:13;36572:10:::0;:17;;36484:113;43572:13:::1;43550:9;:36::i;:::-;43601:19;:17;:19::i;:::-;43530:3;::::0;::::1;:::i;:::-;;;43501:131;;;-1:-1:-1::0;43647:32:0::1;::::0;;43659:10:::1;9591:51:1::0;;9673:2;9658:18;;9651:34;;;43647:32:0::1;::::0;9564:18:1;43647:32:0::1;;;;;;;43149:538:::0;:::o;44584:185::-;44657:13;44714;44729:18;:7;:16;:18::i;:::-;44749:10;44697:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44683:78;;44584:185;;;:::o;33702:192::-;32881:6;;-1:-1:-1;;;;;32881:6:0;15548:10;33026:23;33018:68;;;;-1:-1:-1;;;33018:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33791:22:0;::::1;33783:73;;;::::0;-1:-1:-1;;;33783:73:0;;11982:2:1;33783:73:0::1;::::0;::::1;11964:21:1::0;12021:2;12001:18;;;11994:30;12060:34;12040:18;;;12033:62;-1:-1:-1;;;12111:18:1;;;12104:36;12157:19;;33783:73:0::1;11954:228:1::0;33783:73:0::1;33867:19;33877:8;33867:9;:19::i;19823:305::-:0;19925:4;-1:-1:-1;;;;;;19962:40:0;;-1:-1:-1;;;19962:40:0;;:105;;-1:-1:-1;;;;;;;20019:48:0;;-1:-1:-1;;;20019:48:0;19962:105;:158;;;-1:-1:-1;;;;;;;;;;18528:40:0;;;20084:36;18419:157;29625:174;29700:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29700:29:0;-1:-1:-1;;;;;29700:29:0;;;;;;;;:24;;29754:23;29700:24;29754:14;:23::i;:::-;-1:-1:-1;;;;;29745:46:0;;;;;;;;;;;29625:174;;:::o;25971:348::-;26064:4;25768:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25768:16:0;26081:73;;;;-1:-1:-1;;;26081:73:0;;14216:2:1;26081:73:0;;;14198:21:1;14255:2;14235:18;;;14228:30;14294:34;14274:18;;;14267:62;-1:-1:-1;;;14345:18:1;;;14338:42;14397:19;;26081:73:0;14188:234:1;26081:73:0;26165:13;26181:23;26196:7;26181:14;:23::i;:::-;26165:39;;26234:5;-1:-1:-1;;;;;26223:16:0;:7;-1:-1:-1;;;;;26223:16:0;;:51;;;;26267:7;-1:-1:-1;;;;;26243:31:0;:20;26255:7;26243:11;:20::i;:::-;-1:-1:-1;;;;;26243:31:0;;26223:51;:87;;;-1:-1:-1;;;;;;23077:25:0;;;23053:4;23077:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26278:32;26215:96;25971:348;-1:-1:-1;;;;25971:348:0:o;28939:570::-;29098:4;-1:-1:-1;;;;;29071:31:0;:23;29086:7;29071:14;:23::i;:::-;-1:-1:-1;;;;;29071:31:0;;29063:85;;;;-1:-1:-1;;;29063:85:0;;17351:2:1;29063:85:0;;;17333:21:1;17390:2;17370:18;;;17363:30;17429:34;17409:18;;;17402:62;-1:-1:-1;;;17480:18:1;;;17473:39;17529:19;;29063:85:0;17323:231:1;29063:85:0;-1:-1:-1;;;;;29167:16:0;;29159:65;;;;-1:-1:-1;;;29159:65:0;;13457:2:1;29159:65:0;;;13439:21:1;13496:2;13476:18;;;13469:30;13535:34;13515:18;;;13508:62;-1:-1:-1;;;13586:18:1;;;13579:34;13630:19;;29159:65:0;13429:226:1;29159:65:0;29235:39;29256:4;29262:2;29266:7;29235:20;:39::i;:::-;29337:29;29354:1;29358:7;29337:8;:29::i;:::-;-1:-1:-1;;;;;29377:15:0;;;;;;:9;:15;;;;;:20;;29396:1;;29377:15;:20;;29396:1;;29377:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29408:13:0;;;;;;:9;:13;;;;;:18;;29425:1;;29408:13;:18;;29425:1;;29408:18;:::i;:::-;;;;-1:-1:-1;;29437:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29437:21:0;-1:-1:-1;;;;;29437:21:0;;;;;;;;;29474:27;;29437:16;;29474:27;;;;;;;28939:570;;;:::o;33900:173::-;33975:6;;;-1:-1:-1;;;;;33992:17:0;;;-1:-1:-1;;;;;;33992:17:0;;;;;;;34025:40;;33975:6;;;33992:17;33975:6;;34025:40;;33956:16;;34025:40;33900:173;;:::o;25053:315::-;25210:28;25220:4;25226:2;25230:7;25210:9;:28::i;:::-;25257:48;25280:4;25286:2;25290:7;25299:5;25257:22;:48::i;:::-;25249:111;;;;-1:-1:-1;;;25249:111:0;;;;;;;:::i;26659:110::-;26735:26;26745:2;26749:7;26735:26;;;;;;;;;;;;:9;:26::i;45266:75::-;45317:16;;45315:18;;;;;:::i;:::-;;;;-1:-1:-1;45266:75:0:o;15939:721::-;15995:13;16214:10;16210:53;;-1:-1:-1;;16241:10:0;;;;;;;;;;;;-1:-1:-1;;;16241:10:0;;;;;15939:721::o;16210:53::-;16288:5;16273:12;16329:78;16336:9;;16329:78;;16362:8;;;;:::i;:::-;;-1:-1:-1;16385:10:0;;-1:-1:-1;16393:2:0;16385:10;;:::i;:::-;;;16329:78;;;16417:19;16449:6;16439:17;;;;;;-1:-1:-1;;;16439:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16439:17:0;;16417:39;;16467:154;16474:10;;16467:154;;16501:11;16511:1;16501:11;;:::i;:::-;;-1:-1:-1;16570:10:0;16578:2;16570:5;:10;:::i;:::-;16557:24;;:2;:24;:::i;:::-;16544:39;;16527:6;16534;16527:14;;;;;;-1:-1:-1;;;16527:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;16527:56:0;;;;;;;;-1:-1:-1;16598:11:0;16607:2;16598:11;;:::i;:::-;;;16467:154;;37516:587;-1:-1:-1;;;;;37720:18:0;;37716:187;;37755:40;37787:7;38926:10;:17;;38899:24;;;;:15;:24;;;;;:44;;;38954:24;;;;;;;;;;;;38822:164;37755:40;37716:187;;;37825:2;-1:-1:-1;;;;;37817:10:0;:4;-1:-1:-1;;;;;37817:10:0;;37813:90;;37844:47;37877:4;37883:7;37844:32;:47::i;:::-;-1:-1:-1;;;;;37917:16:0;;37913:183;;37950:45;37987:7;37950:36;:45::i;37913:183::-;38023:4;-1:-1:-1;;;;;38017:10:0;:2;-1:-1:-1;;;;;38017:10:0;;38013:83;;38044:40;38072:2;38076:7;38044:27;:40::i;30362:803::-;30517:4;-1:-1:-1;;;;;30538:13:0;;8132:20;8180:8;30534:624;;30574:72;;-1:-1:-1;;;30574:72:0;;-1:-1:-1;;;;;30574:36:0;;;;;:72;;15548:10;;30625:4;;30631:7;;30640:5;;30574:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30574:72:0;;;;;;;;-1:-1:-1;;30574:72:0;;;;;;;;;;;;:::i;:::-;;;30570:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30820:13:0;;30816:272;;30863:60;;-1:-1:-1;;;30863:60:0;;;;;;;:::i;30816:272::-;31038:6;31032:13;31023:6;31019:2;31015:15;31008:38;30570:533;-1:-1:-1;;;;;;30697:55:0;-1:-1:-1;;;30697:55:0;;-1:-1:-1;30690:62:0;;30534:624;-1:-1:-1;31142:4:0;30362:803;;;;;;:::o;26994:321::-;27124:18;27130:2;27134:7;27124:5;:18::i;:::-;27175:54;27206:1;27210:2;27214:7;27223:5;27175:22;:54::i;:::-;27153:154;;;;-1:-1:-1;;;27153:154:0;;;;;;;:::i;39611:980::-;39875:22;39925:1;39900:22;39917:4;39900:16;:22::i;:::-;:26;;;;:::i;:::-;39937:18;39958:26;;;:17;:26;;;;;;39875:51;;-1:-1:-1;40089:28:0;;;40085:326;;-1:-1:-1;;;;;40156:18:0;;40134:19;40156:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40205:30;;;;;;:44;;;40322:30;;:17;:30;;;;;:43;;;40085:326;-1:-1:-1;40505:26:0;;;;:17;:26;;;;;;;;40498:33;;;-1:-1:-1;;;;;40549:18:0;;;;;:12;:18;;;;;:34;;;;;;;40542:41;39611:980::o;40884:1071::-;41160:10;:17;41135:22;;41160:21;;41180:1;;41160:21;:::i;:::-;41192:18;41213:24;;;:15;:24;;;;;;41584:10;:26;;41135:46;;-1:-1:-1;41213:24:0;;41135:46;;41584:26;;;;-1:-1:-1;;;41584:26:0;;;;;;;;;;;;;;;;;41562:48;;41646:11;41621:10;41632;41621:22;;;;;;-1:-1:-1;;;41621:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;41726:28;;;:15;:28;;;;;;;:41;;;41896:24;;;;;41889:31;41931:10;:16;;;;;-1:-1:-1;;;41931:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;40884:1071;;;;:::o;38402:221::-;38487:14;38504:20;38521:2;38504:16;:20::i;:::-;-1:-1:-1;;;;;38535:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;38580:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38402:221:0:o;27649:376::-;-1:-1:-1;;;;;27729:16:0;;27721:61;;;;-1:-1:-1;;;27721:61:0;;16216:2:1;27721:61:0;;;16198:21:1;;;16235:18;;;16228:30;16294:34;16274:18;;;16267:62;16346:18;;27721:61:0;16188:182:1;27721:61:0;25744:4;25768:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25768:16:0;:30;27793:58;;;;-1:-1:-1;;;27793:58:0;;12746:2:1;27793:58:0;;;12728:21:1;12785:2;12765:18;;;12758:30;12824;12804:18;;;12797:58;12872:18;;27793:58:0;12718:178:1;27793:58:0;27862:45;27891:1;27895:2;27899:7;27862:20;:45::i;:::-;-1:-1:-1;;;;;27918:13:0;;;;;;:9;:13;;;;;:18;;27935:1;;27918:13;:18;;27935:1;;27918:18;:::i;:::-;;;;-1:-1:-1;;27947:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;27947:21:0;-1:-1:-1;;;;;27947:21:0;;;;;;;;27984:33;;27947:16;;;27984:33;;27947:16;;27984:33;27649:376;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:257::-;484:6;537:2;525:9;516:7;512:23;508:32;505:2;;;558:6;550;543:22;505:2;602:9;589:23;621:31;646:5;621:31;:::i;:::-;671:5;495:187;-1:-1:-1;;;495:187:1:o;687:261::-;757:6;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;868:9;862:16;887:31;912:5;887:31;:::i;953:398::-;1021:6;1029;1082:2;1070:9;1061:7;1057:23;1053:32;1050:2;;;1103:6;1095;1088:22;1050:2;1147:9;1134:23;1166:31;1191:5;1166:31;:::i;:::-;1216:5;-1:-1:-1;1273:2:1;1258:18;;1245:32;1286:33;1245:32;1286:33;:::i;:::-;1338:7;1328:17;;;1040:311;;;;;:::o;1356:466::-;1433:6;1441;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:2;;;1523:6;1515;1508:22;1470:2;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;:::-;1636:5;-1:-1:-1;1693:2:1;1678:18;;1665:32;1706:33;1665:32;1706:33;:::i;:::-;1460:362;;1758:7;;-1:-1:-1;;;1812:2:1;1797:18;;;;1784:32;;1460:362::o;1827:986::-;1924:6;1932;1940;1948;1956;2009:3;1997:9;1988:7;1984:23;1980:33;1977:2;;;2031:6;2023;2016:22;1977:2;2075:9;2062:23;2094:31;2119:5;2094:31;:::i;:::-;2144:5;-1:-1:-1;2201:2:1;2186:18;;2173:32;2214:33;2173:32;2214:33;:::i;:::-;2266:7;-1:-1:-1;2320:2:1;2305:18;;2292:32;;-1:-1:-1;2375:2:1;2360:18;;2347:32;2398:18;2428:14;;;2425:2;;;2460:6;2452;2445:22;2425:2;2503:6;2492:9;2488:22;2478:32;;2548:7;2541:4;2537:2;2533:13;2529:27;2519:2;;2575:6;2567;2560:22;2519:2;2620;2607:16;2646:2;2638:6;2635:14;2632:2;;;2667:6;2659;2652:22;2632:2;2717:7;2712:2;2703:6;2699:2;2695:15;2691:24;2688:37;2685:2;;;2743:6;2735;2728:22;2685:2;1967:846;;;;-1:-1:-1;1967:846:1;;-1:-1:-1;2779:2:1;2771:11;;2801:6;1967:846;-1:-1:-1;;;1967:846:1:o;2818:824::-;2913:6;2921;2929;2937;2990:3;2978:9;2969:7;2965:23;2961:33;2958:2;;;3012:6;3004;2997:22;2958:2;3056:9;3043:23;3075:31;3100:5;3075:31;:::i;:::-;3125:5;-1:-1:-1;3182:2:1;3167:18;;3154:32;3195:33;3154:32;3195:33;:::i;:::-;3247:7;-1:-1:-1;3301:2:1;3286:18;;3273:32;;-1:-1:-1;3356:2:1;3341:18;;3328:32;3383:18;3372:30;;3369:2;;;3420:6;3412;3405:22;3369:2;3448:22;;3501:4;3493:13;;3489:27;-1:-1:-1;3479:2:1;;3535:6;3527;3520:22;3479:2;3563:73;3628:7;3623:2;3610:16;3605:2;3601;3597:11;3563:73;:::i;:::-;3553:83;;;2948:694;;;;;;;:::o;3647:436::-;3712:6;3720;3773:2;3761:9;3752:7;3748:23;3744:32;3741:2;;;3794:6;3786;3779:22;3741:2;3838:9;3825:23;3857:31;3882:5;3857:31;:::i;:::-;3907:5;-1:-1:-1;3964:2:1;3949:18;;3936:32;4006:15;;3999:23;3987:36;;3977:2;;4042:6;4034;4027:22;4088:325;4156:6;4164;4217:2;4205:9;4196:7;4192:23;4188:32;4185:2;;;4238:6;4230;4223:22;4185:2;4282:9;4269:23;4301:31;4326:5;4301:31;:::i;:::-;4351:5;4403:2;4388:18;;;;4375:32;;-1:-1:-1;;;4175:238:1:o;4418:1002::-;4502:6;4533:2;4576;4564:9;4555:7;4551:23;4547:32;4544:2;;;4597:6;4589;4582:22;4544:2;4642:9;4629:23;4671:18;4712:2;4704:6;4701:14;4698:2;;;4733:6;4725;4718:22;4698:2;4776:6;4765:9;4761:22;4751:32;;4821:7;4814:4;4810:2;4806:13;4802:27;4792:2;;4848:6;4840;4833:22;4792:2;4889;4876:16;4911:2;4907;4904:10;4901:2;;;4917:18;;:::i;:::-;4963:2;4960:1;4956:10;4946:20;;4986:28;5010:2;5006;5002:11;4986:28;:::i;:::-;5048:15;;;5079:12;;;;5111:11;;;5141;;;5137:20;;5134:33;-1:-1:-1;5131:2:1;;;5185:6;5177;5170:22;5131:2;5212:6;5203:15;;5227:163;5241:2;5238:1;5235:9;5227:163;;;5298:17;;5286:30;;5259:1;5252:9;;;;;5336:12;;;;5368;;5227:163;;;-1:-1:-1;5409:5:1;4513:907;-1:-1:-1;;;;;;;;4513:907:1:o;5425:255::-;5483:6;5536:2;5524:9;5515:7;5511:23;5507:32;5504:2;;;5557:6;5549;5542:22;5504:2;5601:9;5588:23;5620:30;5644:5;5620:30;:::i;5685:259::-;5754:6;5807:2;5795:9;5786:7;5782:23;5778:32;5775:2;;;5828:6;5820;5813:22;5775:2;5865:9;5859:16;5884:30;5908:5;5884:30;:::i;5949:480::-;6018:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6092:6;6084;6077:22;6039:2;6137:9;6124:23;6170:18;6162:6;6159:30;6156:2;;;6207:6;6199;6192:22;6156:2;6235:22;;6288:4;6280:13;;6276:27;-1:-1:-1;6266:2:1;;6322:6;6314;6307:22;6266:2;6350:73;6415:7;6410:2;6397:16;6392:2;6388;6384:11;6350:73;:::i;6434:190::-;6493:6;6546:2;6534:9;6525:7;6521:23;6517:32;6514:2;;;6567:6;6559;6552:22;6514:2;-1:-1:-1;6595:23:1;;6504:120;-1:-1:-1;6504:120:1:o;6629:257::-;6670:3;6708:5;6702:12;6735:6;6730:3;6723:19;6751:63;6807:6;6800:4;6795:3;6791:14;6784:4;6777:5;6773:16;6751:63;:::i;:::-;6868:2;6847:15;-1:-1:-1;;6843:29:1;6834:39;;;;6875:4;6830:50;;6678:208;-1:-1:-1;;6678:208:1:o;6891:979::-;6976:12;;6941:3;;7033:1;7053:18;;;;7106;;;;7133:2;;7187:4;7179:6;7175:17;7165:27;;7133:2;7213;7261;7253:6;7250:14;7230:18;7227:38;7224:2;;;-1:-1:-1;;;7288:33:1;;7344:4;7341:1;7334:15;7374:4;7295:3;7362:17;7224:2;7405:18;7432:104;;;;7550:1;7545:319;;;;7398:466;;7432:104;-1:-1:-1;;7465:24:1;;7453:37;;7510:16;;;;-1:-1:-1;7432:104:1;;7545:319;20410:4;20429:17;;;20479:4;20463:21;;7639:1;7653:165;7667:6;7664:1;7661:13;7653:165;;;7745:14;;7732:11;;;7725:35;7788:16;;;;7682:10;;7653:165;;;7657:3;;7847:6;7842:3;7838:16;7831:23;;7398:466;;;;;;;6949:921;;;;:::o;7875:456::-;8096:3;8124:38;8158:3;8150:6;8124:38;:::i;:::-;8191:6;8185:13;8207:52;8252:6;8248:2;8241:4;8233:6;8229:17;8207:52;:::i;:::-;8275:50;8317:6;8313:2;8309:15;8301:6;8275:50;:::i;:::-;8268:57;8104:227;-1:-1:-1;;;;;;;8104:227:1:o;8924:488::-;-1:-1:-1;;;;;9193:15:1;;;9175:34;;9245:15;;9240:2;9225:18;;9218:43;9292:2;9277:18;;9270:34;;;9340:3;9335:2;9320:18;;9313:31;;;9118:4;;9361:45;;9386:19;;9378:6;9361:45;:::i;:::-;9353:53;9127:285;-1:-1:-1;;;;;;9127:285:1:o;10321:219::-;10470:2;10459:9;10452:21;10433:4;10490:44;10530:2;10519:9;10515:18;10507:6;10490:44;:::i;11361:414::-;11563:2;11545:21;;;11602:2;11582:18;;;11575:30;11641:34;11636:2;11621:18;;11614:62;-1:-1:-1;;;11707:2:1;11692:18;;11685:48;11765:3;11750:19;;11535:240::o;16788:356::-;16990:2;16972:21;;;17009:18;;;17002:30;17068:34;17063:2;17048:18;;17041:62;17135:2;17120:18;;16962:182::o;17961:398::-;18163:2;18145:21;;;18202:2;18182:18;;;18175:30;18241:34;18236:2;18221:18;;18214:62;-1:-1:-1;;;18307:2:1;18292:18;;18285:32;18349:3;18334:19;;18135:224::o;19070:413::-;19272:2;19254:21;;;19311:2;19291:18;;;19284:30;19350:34;19345:2;19330:18;;19323:62;-1:-1:-1;;;19416:2:1;19401:18;;19394:47;19473:3;19458:19;;19244:239::o;20083:275::-;20154:2;20148:9;20219:2;20200:13;;-1:-1:-1;;20196:27:1;20184:40;;20254:18;20239:34;;20275:22;;;20236:62;20233:2;;;20301:18;;:::i;:::-;20337:2;20330:22;20128:230;;-1:-1:-1;20128:230:1:o;20495:128::-;20535:3;20566:1;20562:6;20559:1;20556:13;20553:2;;;20572:18;;:::i;:::-;-1:-1:-1;20608:9:1;;20543:80::o;20628:120::-;20668:1;20694;20684:2;;20699:18;;:::i;:::-;-1:-1:-1;20733:9:1;;20674:74::o;20753:125::-;20793:4;20821:1;20818;20815:8;20812:2;;;20826:18;;:::i;:::-;-1:-1:-1;20863:9:1;;20802:76::o;20883:258::-;20955:1;20965:113;20979:6;20976:1;20973:13;20965:113;;;21055:11;;;21049:18;21036:11;;;21029:39;21001:2;20994:10;20965:113;;;21096:6;21093:1;21090:13;21087:2;;;-1:-1:-1;;21131:1:1;21113:16;;21106:27;20936:205::o;21146:380::-;21225:1;21221:12;;;;21268;;;21289:2;;21343:4;21335:6;21331:17;21321:27;;21289:2;21396;21388:6;21385:14;21365:18;21362:38;21359:2;;;21442:10;21437:3;21433:20;21430:1;21423:31;21477:4;21474:1;21467:15;21505:4;21502:1;21495:15;21359:2;;21201:325;;;:::o;21531:135::-;21570:3;-1:-1:-1;;21591:17:1;;21588:2;;;21611:18;;:::i;:::-;-1:-1:-1;21658:1:1;21647:13;;21578:88::o;21671:112::-;21703:1;21729;21719:2;;21734:18;;:::i;:::-;-1:-1:-1;21768:9:1;;21709:74::o;21788:127::-;21849:10;21844:3;21840:20;21837:1;21830:31;21880:4;21877:1;21870:15;21904:4;21901:1;21894:15;21920:127;21981:10;21976:3;21972:20;21969:1;21962:31;22012:4;22009:1;22002:15;22036:4;22033:1;22026:15;22052:127;22113:10;22108:3;22104:20;22101:1;22094:31;22144:4;22141:1;22134:15;22168:4;22165:1;22158:15;22184:131;-1:-1:-1;;;;;22259:31:1;;22249:42;;22239:2;;22305:1;22302;22295:12;22320:131;-1:-1:-1;;;;;;22394:32:1;;22384:43;;22374:2;;22441:1;22438;22431:12

Swarm Source

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