ERC-721
NFT
Overview
Max Total Supply
10,100 MTG
Holders
3,154
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MTGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTMTG
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-23 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/token/ERC721/extensions/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: @openzeppelin/contracts/utils/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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/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: @openzeppelin/contracts/utils/cryptography/ECDSA.sol /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: contracts/NFTMTG.sol contract NFTMTG is ERC721, Ownable { using Strings for uint256; using ECDSA for bytes32; //NFT params string public baseURI; string public defaultURI; string public mycontractURI; bool public finalizeBaseUri = false; //sale stages: //stage 0: init(no minting) //stage 1: pre-sale //stage 2: pre-sale clearance //stage 3: public sale uint8 public stage = 0; event stageChanged(uint8 stage); //pre-sale (stage=1) address private _signer; uint256 public presalePrice = 0.2 ether; uint256 public presaleSupply; uint256 public presaleMintMax = 1; mapping(address => uint8) public presaleMintCount; //pre-sale-clearance (stage=2) uint256 public clearanceMintMax = 2; //one more than presaleMintMax //public sale (stage=3) uint256 public salePrice = 0.2 ether; uint256 public saleMintMax = 3; uint256 public totalSaleSupply; mapping(address => uint8) public saleMintCount; //others bool public paused = false; uint256 public currentSupply; //sale holders address[6] public fundRecipients = [ 0xA1ae8f9ed498c7EF353DD275b6F581fC76E72b8B, 0x491252D2D7FbF62fE8360F80eAFccdF6edfa9090, 0x20c606439a3ee9988453C192f825893FF5CB40A1, 0xafBD28f83c21674796Cb6eDE9aBed53de4aFbcC4, 0xEf0ec25bF8931EcA46D2fF785d1A7f3d7Db6F7ab, 0x98Eb7D8e1bfFd0B9368726fdf4555C45fDBB2Bd6 ]; uint256[] public receivePercentagePt = [2375, 750, 3250, 750, 2375, 500]; //distribution in basis points //royalty address public royaltyAddr; uint256 public royaltyBasis; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _defaultURI, uint256 _presaleSupply, uint256 _totalSaleSupply, address _whitelistSigner ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); defaultURI = _defaultURI; presaleSupply = _presaleSupply; totalSaleSupply = _totalSaleSupply; _signer = _whitelistSigner; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function supportsInterface(bytes4 interfaceId) public view override(ERC721) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == 0xe8a3d485 /* contractURI() */ || interfaceId == 0x2a55205a /* ERC-2981 royaltyInfo() */ || super.supportsInterface(interfaceId); } // public function mint_whitelist(uint8 _mintAmount, bytes memory signature) public payable { uint256 supply = totalSupply(); require(!paused); require(stage > 0, "Sale not started"); require(isWhitelisted(msg.sender, signature), "Must be whitelisted"); require(stage == 1 || stage == 2, "invalid stage"); require(_mintAmount > 0, "Must mint at least 1"); require(supply + _mintAmount <= presaleSupply, "Mint exceed presale supply"); require(msg.value >= presalePrice * _mintAmount, "Insufficient amount sent"); require(_mintAmount + presaleMintCount[msg.sender] <= (stage == 1 ? presaleMintMax : clearanceMintMax), "Cannot mint more than 2"); presaleMintCount[msg.sender] += _mintAmount; currentSupply += _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function mint_public(uint8 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(stage == 3, "Not public sale"); require(_mintAmount > 0, "Must mint at least 1"); require(supply + _mintAmount <= totalSaleSupply, "Mint exceed total supply"); require(_mintAmount + saleMintCount[tx.origin] <= saleMintMax, "Cannot mint more than 3"); require(msg.value >= salePrice * _mintAmount, "Insufficient amount sent"); saleMintCount[tx.origin] += _mintAmount; currentSupply += _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _addr, bytes memory signature) public view returns(bool){ return _signer == ECDSA.recover(keccak256(abi.encodePacked("WL", _addr)), signature); } function totalSupply() public view returns (uint) { return currentSupply; } function tokensOfOwner(address _owner, uint startId, uint endId) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index = 0; for (uint256 tokenId = startId; tokenId < endId; tokenId++) { if (index == tokenCount) break; if (ownerOf(tokenId) == _owner) { result[index] = tokenId; index++; } } return result; } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : defaultURI; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(mycontractURI)); } //ERC-2981 function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount){ return (royaltyAddr, _salePrice * royaltyBasis / 10000); } //only owner functions --- function nextStage() public onlyOwner() { require(stage < 3, "Stage cannot be more than 3"); stage++; emit stageChanged(stage); } function setwhitelistSigner(address _whitelistSigner) public onlyOwner { _signer = _whitelistSigner; } function setBaseURI(string memory _newBaseURI) public onlyOwner { require(!finalizeBaseUri); baseURI = _newBaseURI; } function finalizeBaseURI() public onlyOwner { finalizeBaseUri = true; } function setContractURI(string memory _contractURI) public onlyOwner { mycontractURI = _contractURI; } function setRoyalty(address _royaltyAddr, uint256 _royaltyBasis) public onlyOwner { royaltyAddr = _royaltyAddr; royaltyBasis = _royaltyBasis; } function pause(bool _state) public onlyOwner { paused = _state; } function reserveMint(uint256 _mintAmount, address _to) public onlyOwner { uint256 supply = totalSupply(); require(supply + _mintAmount <= totalSaleSupply, "Mint exceed total supply"); currentSupply += _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } //fund withdraw functions --- function withdrawFund() public onlyOwner { uint256 currentBal = address(this).balance; require(currentBal > 0); for (uint256 i = 0; i < fundRecipients.length-1; i++) { _withdraw(fundRecipients[i], currentBal * receivePercentagePt[i] / 10000); } //final address receives remainder to prevent ether dust _withdraw(fundRecipients[fundRecipients.length-1], address(this).balance); } function _withdraw(address _addr, uint256 _amt) private { (bool success,) = _addr.call{value: _amt}(""); require(success, "Transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_defaultURI","type":"string"},{"internalType":"uint256","name":"_presaleSupply","type":"uint256"},{"internalType":"uint256","name":"_totalSaleSupply","type":"uint256"},{"internalType":"address","name":"_whitelistSigner","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":"uint8","name":"stage","type":"uint8"}],"name":"stageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearanceMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeBaseUri","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundRecipients","outputs":[{"internalType":"address","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint_public","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint_whitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mycontractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextStage","outputs":[],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleMintCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"receivePercentagePt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"","type":"address"}],"name":"saleMintCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddr","type":"address"},{"internalType":"uint256","name":"_royaltyBasis","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistSigner","type":"address"}],"name":"setwhitelistSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFund","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600a805461ffff191690556702c68af0bb140000600b8190556001600d556002600f5560105560036011556014805460ff1916905561014060405273a1ae8f9ed498c7ef353dd275b6f581fc76e72b8b608090815273491252d2d7fbf62fe8360f80eafccdf6edfa909060a0527320c606439a3ee9988453c192f825893ff5cb40a160c05273afbd28f83c21674796cb6ede9abed53de4afbcc460e05273ef0ec25bf8931eca46d2ff785d1a7f3d7db6f7ab610100527398eb7d8e1bffd0b9368726fdf4555c45fdbb2bd661012052620000de906016906006620002e4565b506040805160c0810182526109478082526102ee60208301819052610cb293830193909352606082019290925260808101919091526101f460a08201526200012b90601c90600662000341565b503480156200013957600080fd5b5060405162003780380380620037808339810160408190526200015c91620004ed565b8651879087906200017590600090602085019062000385565b5080516200018b90600190602084019062000385565b505050620001a8620001a26200020560201b60201c565b62000209565b620001b3856200025b565b8351620001c890600890602087019062000385565b50600c92909255601255600a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055506200061f92505050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002ba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b600a5460ff1615620002cb57600080fd5b8051620002e090600790602084019062000385565b5050565b82600681019282156200032f579160200282015b828111156200032f57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002f8565b506200033d92915062000402565b5090565b8280548282559060005260206000209081019282156200032f579160200282015b828111156200032f578251829061ffff1690559160200191906001019062000362565b8280546200039390620005cc565b90600052602060002090601f016020900481019282620003b757600085556200032f565b82601f10620003d257805160ff19168380011785556200032f565b828001600101855582156200032f579182015b828111156200032f578251825591602001919060010190620003e5565b5b808211156200033d576000815560010162000403565b80516001600160a01b03811681146200043157600080fd5b919050565b600082601f8301126200044857600080fd5b81516001600160401b038082111562000465576200046562000609565b604051601f8301601f19908116603f0116810190828211818310171562000490576200049062000609565b81604052838152602092508683858801011115620004ad57600080fd5b600091505b83821015620004d15785820183015181830184015290820190620004b2565b83821115620004e35760008385830101525b9695505050505050565b600080600080600080600060e0888a0312156200050957600080fd5b87516001600160401b03808211156200052157600080fd5b6200052f8b838c0162000436565b985060208a01519150808211156200054657600080fd5b620005548b838c0162000436565b975060408a01519150808211156200056b57600080fd5b620005798b838c0162000436565b965060608a01519150808211156200059057600080fd5b506200059f8a828b0162000436565b9450506080880151925060a08801519150620005be60c0890162000419565b905092959891949750929550565b600181811c90821680620005e157607f821691505b602082108114156200060357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b613151806200062f6000396000f3fe6080604052600436106102fe5760003560e01c806370a0823111610190578063c6ec6909116100dc578063e8a3d48511610095578063f053d3701161006f578063f053d370146108f2578063f2fde38b1461090c578063f51f96dd1461092c578063f75f03021461094257600080fd5b8063e8a3d4851461087f578063e985e9c514610894578063ee3743ab146108dd57600080fd5b8063c6ec6909146107d1578063c839fe94146107e7578063c87b56dd14610814578063e07fa3c114610834578063e6cbb6b114610849578063e7e989c01461085f57600080fd5b806395d89b4111610149578063b7aa670a11610123578063b7aa670a14610742578063b88d4fde14610762578063c040e6b814610782578063c0f6baa4146107a157600080fd5b806395d89b41146106f7578063a22cb4651461070c578063b3a196e91461072c57600080fd5b806370a0823114610658578063715018a614610678578063771282f61461068d57806378231978146106a35780638da5cb5b146106b9578063938e3d7b146106d757600080fd5b80633009c0831161024f57806355f804b3116102085780636352211e116101e25780636352211e146105f8578063639d7e111461061857806366d6ae1a1461062d5780636c0360eb1461064357600080fd5b806355f804b31461059e5780635c975abb146105be57806360b02f70146105d857600080fd5b80633009c0831461050e57806337c3fdbc1461052e57806337dfbbd714610543578063388f5c7f146105565780633a367a671461056957806342842e0e1461057e57600080fd5b8063095ea7b3116102bc57806318160ddd1161029657806318160ddd1461047a5780631f0a8fa71461048f57806323b872dd146104af5780632a55205a146104cf57600080fd5b8063095ea7b31461041a5780630f945a291461043a57806310fd332b1461045a57600080fd5b80620e7fa81461030357806301ffc9a71461032c57806302329a291461035c57806306fdde031461037e578063081812fc146103a0578063094e4072146103d8575b600080fd5b34801561030f57600080fd5b50610319600b5481565b6040519081526020015b60405180910390f35b34801561033857600080fd5b5061034c610347366004612bdf565b610958565b6040519015158152602001610323565b34801561036857600080fd5b5061037c610377366004612bc4565b6109b9565b005b34801561038a57600080fd5b506103936109ff565b6040516103239190612e6f565b3480156103ac57600080fd5b506103c06103bb366004612c62565b610a91565b6040516001600160a01b039091168152602001610323565b3480156103e457600080fd5b506104086103f33660046129fd565b600e6020526000908152604090205460ff1681565b60405160ff9091168152602001610323565b34801561042657600080fd5b5061037c610435366004612b67565b610b26565b34801561044657600080fd5b5061037c6104553660046129fd565b610c3c565b34801561046657600080fd5b5061037c610475366004612b67565b610c90565b34801561048657600080fd5b50601554610319565b34801561049b57600080fd5b5061034c6104aa366004612b19565b610ce0565b3480156104bb57600080fd5b5061037c6104ca366004612a4b565b610d4c565b3480156104db57600080fd5b506104ef6104ea366004612c9e565b610d7d565b604080516001600160a01b039093168352602083019190915201610323565b34801561051a57600080fd5b50601d546103c0906001600160a01b031681565b34801561053a57600080fd5b5061037c610db8565b61037c610551366004612cc0565b610df1565b61037c610564366004612cdb565b611051565b34801561057557600080fd5b5061039361137d565b34801561058a57600080fd5b5061037c610599366004612a4b565b61140b565b3480156105aa57600080fd5b5061037c6105b9366004612c19565b611426565b3480156105ca57600080fd5b5060145461034c9060ff1681565b3480156105e457600080fd5b5061037c6105f3366004612c7b565b611477565b34801561060457600080fd5b506103c0610613366004612c62565b611547565b34801561062457600080fd5b506103936115be565b34801561063957600080fd5b5061031960115481565b34801561064f57600080fd5b506103936115cb565b34801561066457600080fd5b506103196106733660046129fd565b6115d8565b34801561068457600080fd5b5061037c61165f565b34801561069957600080fd5b5061031960155481565b3480156106af57600080fd5b5061031960125481565b3480156106c557600080fd5b506006546001600160a01b03166103c0565b3480156106e357600080fd5b5061037c6106f2366004612c19565b611695565b34801561070357600080fd5b506103936116d2565b34801561071857600080fd5b5061037c610727366004612aef565b6116e1565b34801561073857600080fd5b50610319600c5481565b34801561074e57600080fd5b506103c061075d366004612c62565b6117a6565b34801561076e57600080fd5b5061037c61077d366004612a87565b6117c6565b34801561078e57600080fd5b50600a5461040890610100900460ff1681565b3480156107ad57600080fd5b506104086107bc3660046129fd565b60136020526000908152604090205460ff1681565b3480156107dd57600080fd5b50610319601e5481565b3480156107f357600080fd5b50610807610802366004612b91565b6117f8565b6040516103239190612e2b565b34801561082057600080fd5b5061039361082f366004612c62565b6118f0565b34801561084057600080fd5b5061037c611a45565b34801561085557600080fd5b50610319600d5481565b34801561086b57600080fd5b5061031961087a366004612c62565b611b3a565b34801561088b57600080fd5b50610393611b5b565b3480156108a057600080fd5b5061034c6108af366004612a18565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108e957600080fd5b5061037c611b83565b3480156108fe57600080fd5b50600a5461034c9060ff1681565b34801561091857600080fd5b5061037c6109273660046129fd565b611c79565b34801561093857600080fd5b5061031960105481565b34801561094e57600080fd5b50610319600f5481565b60006001600160e01b031982166380ac58cd60e01b1480610989575063e8a3d48560e01b6001600160e01b03198316145b806109a4575063152a902d60e11b6001600160e01b03198316145b806109b357506109b382611d11565b92915050565b6006546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109e390612ed4565b60405180910390fd5b6014805460ff1916911515919091179055565b606060008054610a0e9061300d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a9061300d565b8015610a875780601f10610a5c57610100808354040283529160200191610a87565b820191906000526020600020905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b0a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109e3565b506000908152600460205260409020546001600160a01b031690565b6000610b3182611547565b9050806001600160a01b0316836001600160a01b03161415610b9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109e3565b336001600160a01b0382161480610bbb5750610bbb81336108af565b610c2d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109e3565b610c378383611d61565b505050565b6006546001600160a01b03163314610c665760405162461bcd60e51b81526004016109e390612ed4565b600a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6006546001600160a01b03163314610cba5760405162461bcd60e51b81526004016109e390612ed4565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b6040516115d360f21b60208201526bffffffffffffffffffffffff19606084901b166022820152600090610d2d906036016040516020818303038152906040528051906020012083611dcf565b600a546201000090046001600160a01b03908116911614905092915050565b610d563382611df3565b610d725760405162461bcd60e51b81526004016109e390612f09565b610c37838383611eea565b601d54601e5460009182916001600160a01b039091169061271090610da29086612fab565b610dac9190612f97565b915091505b9250929050565b6006546001600160a01b03163314610de25760405162461bcd60e51b81526004016109e390612ed4565b600a805460ff19166001179055565b6000610dfc60155490565b60145490915060ff1615610e0f57600080fd5b600a54610100900460ff16600314610e5b5760405162461bcd60e51b815260206004820152600f60248201526e4e6f74207075626c69632073616c6560881b60448201526064016109e3565b60008260ff1611610ea55760405162461bcd60e51b81526020600482015260146024820152734d757374206d696e74206174206c65617374203160601b60448201526064016109e3565b601254610eb560ff841683612f5a565b1115610efe5760405162461bcd60e51b81526020600482015260186024820152774d696e742065786365656420746f74616c20737570706c7960401b60448201526064016109e3565b60115432600090815260136020526040902054610f1e9060ff1684612f72565b60ff161115610f6f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e74206d6f7265207468616e203300000000000000000060448201526064016109e3565b8160ff16601054610f809190612fab565b341015610fca5760405162461bcd60e51b8152602060048201526018602482015277125b9cdd59999a58da595b9d08185b5bdd5b9d081cd95b9d60421b60448201526064016109e3565b3260009081526013602052604081208054849290610fec90849060ff16612f72565b92506101000a81548160ff021916908360ff1602179055508160ff16601560008282546110199190612f5a565b90915550600190505b8260ff168111610c375761103f3361103a8385612f5a565b61208a565b8061104981613048565b915050611022565b600061105c60155490565b60145490915060ff161561106f57600080fd5b600a54610100900460ff166110b95760405162461bcd60e51b815260206004820152601060248201526f14d85b19481b9bdd081cdd185c9d195960821b60448201526064016109e3565b6110c33383610ce0565b6111055760405162461bcd60e51b8152602060048201526013602482015272135d5cdd081899481dda1a5d195b1a5cdd1959606a1b60448201526064016109e3565b600a5460ff61010090910416600114806111295750600a54610100900460ff166002145b6111655760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461676560981b60448201526064016109e3565b60008360ff16116111af5760405162461bcd60e51b81526020600482015260146024820152734d757374206d696e74206174206c65617374203160601b60448201526064016109e3565b600c546111bf60ff851683612f5a565b111561120d5760405162461bcd60e51b815260206004820152601a60248201527f4d696e74206578636565642070726573616c6520737570706c7900000000000060448201526064016109e3565b8260ff16600b5461121e9190612fab565b3410156112685760405162461bcd60e51b8152602060048201526018602482015277125b9cdd59999a58da595b9d08185b5bdd5b9d081cd95b9d60421b60448201526064016109e3565b600a5460ff6101009091041660011461128357600f54611287565b600d545b336000908152600e60205260409020546112a49060ff1685612f72565b60ff1611156112f55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e74206d6f7265207468616e203200000000000000000060448201526064016109e3565b336000908152600e60205260408120805485929061131790849060ff16612f72565b92506101000a81548160ff021916908360ff1602179055508260ff16601560008282546113449190612f5a565b90915550600190505b8360ff168111611377576113653361103a8385612f5a565b8061136f81613048565b91505061134d565b50505050565b6008805461138a9061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546113b69061300d565b80156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b505050505081565b610c37838383604051806020016040528060008152506117c6565b6006546001600160a01b031633146114505760405162461bcd60e51b81526004016109e390612ed4565b600a5460ff161561146057600080fd5b8051611473906007906020840190612891565b5050565b6006546001600160a01b031633146114a15760405162461bcd60e51b81526004016109e390612ed4565b60006114ac60155490565b6012549091506114bc8483612f5a565b11156115055760405162461bcd60e51b81526020600482015260186024820152774d696e742065786365656420746f74616c20737570706c7960401b60448201526064016109e3565b82601560008282546115179190612f5a565b90915550600190505b838111611377576115358361103a8385612f5a565b8061153f81613048565b915050611520565b6000818152600260205260408120546001600160a01b0316806109b35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109e3565b6009805461138a9061300d565b6007805461138a9061300d565b60006001600160a01b0382166116435760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109e3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146116895760405162461bcd60e51b81526004016109e390612ed4565b61169360006120a4565b565b6006546001600160a01b031633146116bf5760405162461bcd60e51b81526004016109e390612ed4565b8051611473906009906020840190612891565b606060018054610a0e9061300d565b6001600160a01b03821633141561173a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109e3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b601681600681106117b657600080fd5b01546001600160a01b0316905081565b6117d03383611df3565b6117ec5760405162461bcd60e51b81526004016109e390612f09565b611377848484846120f6565b60606000611805856115d8565b9050806118225750506040805160008152602081019091526118e9565b60008167ffffffffffffffff81111561183d5761183d6130ef565b604051908082528060200260200182016040528015611866578160200160208202803683370190505b5090506000855b858110156118e25783821415611882576118e2565b876001600160a01b031661189582611547565b6001600160a01b031614156118d057808383815181106118b7576118b76130d9565b6020908102919091010152816118cc81613048565b9250505b806118da81613048565b91505061186d565b5090925050505b9392505050565b6000818152600260205260409020546060906001600160a01b031661196f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109e3565b6000611979612129565b90506000815111611a1457600880546119919061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546119bd9061300d565b8015611a0a5780601f106119df57610100808354040283529160200191611a0a565b820191906000526020600020905b8154815290600101906020018083116119ed57829003601f168201915b50505050506118e9565b80611a1e84612138565b604051602001611a2f929190612d23565b6040516020818303038152906040529392505050565b6006546001600160a01b03163314611a6f5760405162461bcd60e51b81526004016109e390612ed4565b4780611a7a57600080fd5b60005b611a8960016006612fca565b811015611b0457611af260168260068110611aa657611aa66130d9565b0154601c80546001600160a01b0390921691612710919085908110611acd57611acd6130d9565b906000526020600020015485611ae39190612fab565b611aed9190612f97565b612236565b80611afc81613048565b915050611a7d565b50611b376016611b1660016006612fca565b60068110611b2657611b266130d9565b01546001600160a01b031647612236565b50565b601c8181548110611b4a57600080fd5b600091825260209091200154905081565b60606009604051602001611b6f9190612d52565b604051602081830303815290604052905090565b6006546001600160a01b03163314611bad5760405162461bcd60e51b81526004016109e390612ed4565b600a54600361010090910460ff1610611c085760405162461bcd60e51b815260206004820152601b60248201527f53746167652063616e6e6f74206265206d6f7265207468616e2033000000000060448201526064016109e3565b600a8054610100900460ff16906001611c2083613063565b825460ff91821661010093840a9081029083021990911617909255600a5460405191900490911681527f36e08625927f4c20a74363a4c118d06899c5dbd5a27024d11ca0075e206a7ded915060200160405180910390a1565b6006546001600160a01b03163314611ca35760405162461bcd60e51b81526004016109e390612ed4565b6001600160a01b038116611d085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e3565b611b37816120a4565b60006001600160e01b031982166380ac58cd60e01b1480611d4257506001600160e01b03198216635b5e139f60e01b145b806109b357506301ffc9a760e01b6001600160e01b03198316146109b3565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d9682611547565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806000611dde85856122cb565b91509150611deb81612338565b509392505050565b6000818152600260205260408120546001600160a01b0316611e6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109e3565b6000611e7783611547565b9050806001600160a01b0316846001600160a01b03161480611eb25750836001600160a01b0316611ea784610a91565b6001600160a01b0316145b80611ee257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611efd82611547565b6001600160a01b031614611f655760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109e3565b6001600160a01b038216611fc75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109e3565b611fd2600082611d61565b6001600160a01b0383166000908152600360205260408120805460019290611ffb908490612fca565b90915550506001600160a01b0382166000908152600360205260408120805460019290612029908490612f5a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6114738282604051806020016040528060008152506124f3565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612101848484611eea565b61210d84848484612526565b6113775760405162461bcd60e51b81526004016109e390612e82565b606060078054610a0e9061300d565b60608161215c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612186578061217081613048565b915061217f9050600a83612f97565b9150612160565b60008167ffffffffffffffff8111156121a1576121a16130ef565b6040519080825280601f01601f1916602001820160405280156121cb576020820181803683370190505b5090505b8415611ee2576121e0600183612fca565b91506121ed600a86613083565b6121f8906030612f5a565b60f81b81838151811061220d5761220d6130d9565b60200101906001600160f81b031916908160001a90535061222f600a86612f97565b94506121cf565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612283576040519150601f19603f3d011682016040523d82523d6000602084013e612288565b606091505b5050905080610c375760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016109e3565b6000808251604114156123025760208301516040840151606085015160001a6122f687828585612633565b94509450505050610db1565b82516040141561232c5760208301516040840151612321868383612720565b935093505050610db1565b50600090506002610db1565b600081600481111561234c5761234c6130c3565b14156123555750565b6001816004811115612369576123696130c3565b14156123b75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109e3565b60028160048111156123cb576123cb6130c3565b14156124195760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109e3565b600381600481111561242d5761242d6130c3565b14156124865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109e3565b600481600481111561249a5761249a6130c3565b1415611b375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109e3565b6124fd838361274f565b61250a6000848484612526565b610c375760405162461bcd60e51b81526004016109e390612e82565b60006001600160a01b0384163b1561262857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061256a903390899088908890600401612dee565b602060405180830381600087803b15801561258457600080fd5b505af19250505080156125b4575060408051601f3d908101601f191682019092526125b191810190612bfc565b60015b61260e573d8080156125e2576040519150601f19603f3d011682016040523d82523d6000602084013e6125e7565b606091505b5080516126065760405162461bcd60e51b81526004016109e390612e82565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ee2565b506001949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561266a5750600090506003612717565b8460ff16601b1415801561268257508460ff16601c14155b156126935750600090506004612717565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126e7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661271057600060019250925050612717565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b0161274187828885612633565b935093505050935093915050565b6001600160a01b0382166127a55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109e3565b6000818152600260205260409020546001600160a01b03161561280a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109e3565b6001600160a01b0382166000908152600360205260408120805460019290612833908490612f5a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461289d9061300d565b90600052602060002090601f0160209004810192826128bf5760008555612905565b82601f106128d857805160ff1916838001178555612905565b82800160010185558215612905579182015b828111156129055782518255916020019190600101906128ea565b50612911929150612915565b5090565b5b808211156129115760008155600101612916565b600067ffffffffffffffff80841115612945576129456130ef565b604051601f8501601f19908116603f0116810190828211818310171561296d5761296d6130ef565b8160405280935085815286868601111561298657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146129b757600080fd5b919050565b803580151581146129b757600080fd5b600082601f8301126129dd57600080fd5b6118e98383356020850161292a565b803560ff811681146129b757600080fd5b600060208284031215612a0f57600080fd5b6118e9826129a0565b60008060408385031215612a2b57600080fd5b612a34836129a0565b9150612a42602084016129a0565b90509250929050565b600080600060608486031215612a6057600080fd5b612a69846129a0565b9250612a77602085016129a0565b9150604084013590509250925092565b60008060008060808587031215612a9d57600080fd5b612aa6856129a0565b9350612ab4602086016129a0565b925060408501359150606085013567ffffffffffffffff811115612ad757600080fd5b612ae3878288016129cc565b91505092959194509250565b60008060408385031215612b0257600080fd5b612b0b836129a0565b9150612a42602084016129bc565b60008060408385031215612b2c57600080fd5b612b35836129a0565b9150602083013567ffffffffffffffff811115612b5157600080fd5b612b5d858286016129cc565b9150509250929050565b60008060408385031215612b7a57600080fd5b612b83836129a0565b946020939093013593505050565b600080600060608486031215612ba657600080fd5b612baf846129a0565b95602085013595506040909401359392505050565b600060208284031215612bd657600080fd5b6118e9826129bc565b600060208284031215612bf157600080fd5b81356118e981613105565b600060208284031215612c0e57600080fd5b81516118e981613105565b600060208284031215612c2b57600080fd5b813567ffffffffffffffff811115612c4257600080fd5b8201601f81018413612c5357600080fd5b611ee28482356020840161292a565b600060208284031215612c7457600080fd5b5035919050565b60008060408385031215612c8e57600080fd5b82359150612a42602084016129a0565b60008060408385031215612cb157600080fd5b50508035926020909101359150565b600060208284031215612cd257600080fd5b6118e9826129ec565b60008060408385031215612cee57600080fd5b612b35836129ec565b60008151808452612d0f816020860160208601612fe1565b601f01601f19169290920160200192915050565b60008351612d35818460208801612fe1565b835190830190612d49818360208801612fe1565b01949350505050565b600080835481600182811c915080831680612d6e57607f831692505b6020808410821415612d8e57634e487b7160e01b86526022600452602486fd5b818015612da25760018114612db357612de0565b60ff19861689528489019650612de0565b60008a81526020902060005b86811015612dd85781548b820152908501908301612dbf565b505084890196505b509498975050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e2190830184612cf7565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e6357835183529284019291840191600101612e47565b50909695505050505050565b6020815260006118e96020830184612cf7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612f6d57612f6d613097565b500190565b600060ff821660ff84168060ff03821115612f8f57612f8f613097565b019392505050565b600082612fa657612fa66130ad565b500490565b6000816000190483118215151615612fc557612fc5613097565b500290565b600082821015612fdc57612fdc613097565b500390565b60005b83811015612ffc578181015183820152602001612fe4565b838111156113775750506000910152565b600181811c9082168061302157607f821691505b6020821081141561304257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561305c5761305c613097565b5060010190565b600060ff821660ff81141561307a5761307a613097565b60010192915050565b600082613092576130926130ad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b3757600080fdfea26469706673582212207d7afe47a39d6e13d83e0c4bedc2d76e6edd478de5b2cb1f668966ff2ca0110464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000001bbc0000000000000000000000000000000000000000000000000000000000002774000000000000000000000000fa63b1f3caa7ba5d61305952a5b8f696064fd44200000000000000000000000000000000000000000000000000000000000000104d6f7265205468616e2047616d6572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d54470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6d74672d6170692d6769742d6465762d6d74672e76657263656c2e6170702f6170692f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102fe5760003560e01c806370a0823111610190578063c6ec6909116100dc578063e8a3d48511610095578063f053d3701161006f578063f053d370146108f2578063f2fde38b1461090c578063f51f96dd1461092c578063f75f03021461094257600080fd5b8063e8a3d4851461087f578063e985e9c514610894578063ee3743ab146108dd57600080fd5b8063c6ec6909146107d1578063c839fe94146107e7578063c87b56dd14610814578063e07fa3c114610834578063e6cbb6b114610849578063e7e989c01461085f57600080fd5b806395d89b4111610149578063b7aa670a11610123578063b7aa670a14610742578063b88d4fde14610762578063c040e6b814610782578063c0f6baa4146107a157600080fd5b806395d89b41146106f7578063a22cb4651461070c578063b3a196e91461072c57600080fd5b806370a0823114610658578063715018a614610678578063771282f61461068d57806378231978146106a35780638da5cb5b146106b9578063938e3d7b146106d757600080fd5b80633009c0831161024f57806355f804b3116102085780636352211e116101e25780636352211e146105f8578063639d7e111461061857806366d6ae1a1461062d5780636c0360eb1461064357600080fd5b806355f804b31461059e5780635c975abb146105be57806360b02f70146105d857600080fd5b80633009c0831461050e57806337c3fdbc1461052e57806337dfbbd714610543578063388f5c7f146105565780633a367a671461056957806342842e0e1461057e57600080fd5b8063095ea7b3116102bc57806318160ddd1161029657806318160ddd1461047a5780631f0a8fa71461048f57806323b872dd146104af5780632a55205a146104cf57600080fd5b8063095ea7b31461041a5780630f945a291461043a57806310fd332b1461045a57600080fd5b80620e7fa81461030357806301ffc9a71461032c57806302329a291461035c57806306fdde031461037e578063081812fc146103a0578063094e4072146103d8575b600080fd5b34801561030f57600080fd5b50610319600b5481565b6040519081526020015b60405180910390f35b34801561033857600080fd5b5061034c610347366004612bdf565b610958565b6040519015158152602001610323565b34801561036857600080fd5b5061037c610377366004612bc4565b6109b9565b005b34801561038a57600080fd5b506103936109ff565b6040516103239190612e6f565b3480156103ac57600080fd5b506103c06103bb366004612c62565b610a91565b6040516001600160a01b039091168152602001610323565b3480156103e457600080fd5b506104086103f33660046129fd565b600e6020526000908152604090205460ff1681565b60405160ff9091168152602001610323565b34801561042657600080fd5b5061037c610435366004612b67565b610b26565b34801561044657600080fd5b5061037c6104553660046129fd565b610c3c565b34801561046657600080fd5b5061037c610475366004612b67565b610c90565b34801561048657600080fd5b50601554610319565b34801561049b57600080fd5b5061034c6104aa366004612b19565b610ce0565b3480156104bb57600080fd5b5061037c6104ca366004612a4b565b610d4c565b3480156104db57600080fd5b506104ef6104ea366004612c9e565b610d7d565b604080516001600160a01b039093168352602083019190915201610323565b34801561051a57600080fd5b50601d546103c0906001600160a01b031681565b34801561053a57600080fd5b5061037c610db8565b61037c610551366004612cc0565b610df1565b61037c610564366004612cdb565b611051565b34801561057557600080fd5b5061039361137d565b34801561058a57600080fd5b5061037c610599366004612a4b565b61140b565b3480156105aa57600080fd5b5061037c6105b9366004612c19565b611426565b3480156105ca57600080fd5b5060145461034c9060ff1681565b3480156105e457600080fd5b5061037c6105f3366004612c7b565b611477565b34801561060457600080fd5b506103c0610613366004612c62565b611547565b34801561062457600080fd5b506103936115be565b34801561063957600080fd5b5061031960115481565b34801561064f57600080fd5b506103936115cb565b34801561066457600080fd5b506103196106733660046129fd565b6115d8565b34801561068457600080fd5b5061037c61165f565b34801561069957600080fd5b5061031960155481565b3480156106af57600080fd5b5061031960125481565b3480156106c557600080fd5b506006546001600160a01b03166103c0565b3480156106e357600080fd5b5061037c6106f2366004612c19565b611695565b34801561070357600080fd5b506103936116d2565b34801561071857600080fd5b5061037c610727366004612aef565b6116e1565b34801561073857600080fd5b50610319600c5481565b34801561074e57600080fd5b506103c061075d366004612c62565b6117a6565b34801561076e57600080fd5b5061037c61077d366004612a87565b6117c6565b34801561078e57600080fd5b50600a5461040890610100900460ff1681565b3480156107ad57600080fd5b506104086107bc3660046129fd565b60136020526000908152604090205460ff1681565b3480156107dd57600080fd5b50610319601e5481565b3480156107f357600080fd5b50610807610802366004612b91565b6117f8565b6040516103239190612e2b565b34801561082057600080fd5b5061039361082f366004612c62565b6118f0565b34801561084057600080fd5b5061037c611a45565b34801561085557600080fd5b50610319600d5481565b34801561086b57600080fd5b5061031961087a366004612c62565b611b3a565b34801561088b57600080fd5b50610393611b5b565b3480156108a057600080fd5b5061034c6108af366004612a18565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108e957600080fd5b5061037c611b83565b3480156108fe57600080fd5b50600a5461034c9060ff1681565b34801561091857600080fd5b5061037c6109273660046129fd565b611c79565b34801561093857600080fd5b5061031960105481565b34801561094e57600080fd5b50610319600f5481565b60006001600160e01b031982166380ac58cd60e01b1480610989575063e8a3d48560e01b6001600160e01b03198316145b806109a4575063152a902d60e11b6001600160e01b03198316145b806109b357506109b382611d11565b92915050565b6006546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109e390612ed4565b60405180910390fd5b6014805460ff1916911515919091179055565b606060008054610a0e9061300d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a9061300d565b8015610a875780601f10610a5c57610100808354040283529160200191610a87565b820191906000526020600020905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b0a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109e3565b506000908152600460205260409020546001600160a01b031690565b6000610b3182611547565b9050806001600160a01b0316836001600160a01b03161415610b9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109e3565b336001600160a01b0382161480610bbb5750610bbb81336108af565b610c2d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109e3565b610c378383611d61565b505050565b6006546001600160a01b03163314610c665760405162461bcd60e51b81526004016109e390612ed4565b600a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6006546001600160a01b03163314610cba5760405162461bcd60e51b81526004016109e390612ed4565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b6040516115d360f21b60208201526bffffffffffffffffffffffff19606084901b166022820152600090610d2d906036016040516020818303038152906040528051906020012083611dcf565b600a546201000090046001600160a01b03908116911614905092915050565b610d563382611df3565b610d725760405162461bcd60e51b81526004016109e390612f09565b610c37838383611eea565b601d54601e5460009182916001600160a01b039091169061271090610da29086612fab565b610dac9190612f97565b915091505b9250929050565b6006546001600160a01b03163314610de25760405162461bcd60e51b81526004016109e390612ed4565b600a805460ff19166001179055565b6000610dfc60155490565b60145490915060ff1615610e0f57600080fd5b600a54610100900460ff16600314610e5b5760405162461bcd60e51b815260206004820152600f60248201526e4e6f74207075626c69632073616c6560881b60448201526064016109e3565b60008260ff1611610ea55760405162461bcd60e51b81526020600482015260146024820152734d757374206d696e74206174206c65617374203160601b60448201526064016109e3565b601254610eb560ff841683612f5a565b1115610efe5760405162461bcd60e51b81526020600482015260186024820152774d696e742065786365656420746f74616c20737570706c7960401b60448201526064016109e3565b60115432600090815260136020526040902054610f1e9060ff1684612f72565b60ff161115610f6f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e74206d6f7265207468616e203300000000000000000060448201526064016109e3565b8160ff16601054610f809190612fab565b341015610fca5760405162461bcd60e51b8152602060048201526018602482015277125b9cdd59999a58da595b9d08185b5bdd5b9d081cd95b9d60421b60448201526064016109e3565b3260009081526013602052604081208054849290610fec90849060ff16612f72565b92506101000a81548160ff021916908360ff1602179055508160ff16601560008282546110199190612f5a565b90915550600190505b8260ff168111610c375761103f3361103a8385612f5a565b61208a565b8061104981613048565b915050611022565b600061105c60155490565b60145490915060ff161561106f57600080fd5b600a54610100900460ff166110b95760405162461bcd60e51b815260206004820152601060248201526f14d85b19481b9bdd081cdd185c9d195960821b60448201526064016109e3565b6110c33383610ce0565b6111055760405162461bcd60e51b8152602060048201526013602482015272135d5cdd081899481dda1a5d195b1a5cdd1959606a1b60448201526064016109e3565b600a5460ff61010090910416600114806111295750600a54610100900460ff166002145b6111655760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461676560981b60448201526064016109e3565b60008360ff16116111af5760405162461bcd60e51b81526020600482015260146024820152734d757374206d696e74206174206c65617374203160601b60448201526064016109e3565b600c546111bf60ff851683612f5a565b111561120d5760405162461bcd60e51b815260206004820152601a60248201527f4d696e74206578636565642070726573616c6520737570706c7900000000000060448201526064016109e3565b8260ff16600b5461121e9190612fab565b3410156112685760405162461bcd60e51b8152602060048201526018602482015277125b9cdd59999a58da595b9d08185b5bdd5b9d081cd95b9d60421b60448201526064016109e3565b600a5460ff6101009091041660011461128357600f54611287565b600d545b336000908152600e60205260409020546112a49060ff1685612f72565b60ff1611156112f55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e74206d6f7265207468616e203200000000000000000060448201526064016109e3565b336000908152600e60205260408120805485929061131790849060ff16612f72565b92506101000a81548160ff021916908360ff1602179055508260ff16601560008282546113449190612f5a565b90915550600190505b8360ff168111611377576113653361103a8385612f5a565b8061136f81613048565b91505061134d565b50505050565b6008805461138a9061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546113b69061300d565b80156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b505050505081565b610c37838383604051806020016040528060008152506117c6565b6006546001600160a01b031633146114505760405162461bcd60e51b81526004016109e390612ed4565b600a5460ff161561146057600080fd5b8051611473906007906020840190612891565b5050565b6006546001600160a01b031633146114a15760405162461bcd60e51b81526004016109e390612ed4565b60006114ac60155490565b6012549091506114bc8483612f5a565b11156115055760405162461bcd60e51b81526020600482015260186024820152774d696e742065786365656420746f74616c20737570706c7960401b60448201526064016109e3565b82601560008282546115179190612f5a565b90915550600190505b838111611377576115358361103a8385612f5a565b8061153f81613048565b915050611520565b6000818152600260205260408120546001600160a01b0316806109b35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109e3565b6009805461138a9061300d565b6007805461138a9061300d565b60006001600160a01b0382166116435760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109e3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146116895760405162461bcd60e51b81526004016109e390612ed4565b61169360006120a4565b565b6006546001600160a01b031633146116bf5760405162461bcd60e51b81526004016109e390612ed4565b8051611473906009906020840190612891565b606060018054610a0e9061300d565b6001600160a01b03821633141561173a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109e3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b601681600681106117b657600080fd5b01546001600160a01b0316905081565b6117d03383611df3565b6117ec5760405162461bcd60e51b81526004016109e390612f09565b611377848484846120f6565b60606000611805856115d8565b9050806118225750506040805160008152602081019091526118e9565b60008167ffffffffffffffff81111561183d5761183d6130ef565b604051908082528060200260200182016040528015611866578160200160208202803683370190505b5090506000855b858110156118e25783821415611882576118e2565b876001600160a01b031661189582611547565b6001600160a01b031614156118d057808383815181106118b7576118b76130d9565b6020908102919091010152816118cc81613048565b9250505b806118da81613048565b91505061186d565b5090925050505b9392505050565b6000818152600260205260409020546060906001600160a01b031661196f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109e3565b6000611979612129565b90506000815111611a1457600880546119919061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546119bd9061300d565b8015611a0a5780601f106119df57610100808354040283529160200191611a0a565b820191906000526020600020905b8154815290600101906020018083116119ed57829003601f168201915b50505050506118e9565b80611a1e84612138565b604051602001611a2f929190612d23565b6040516020818303038152906040529392505050565b6006546001600160a01b03163314611a6f5760405162461bcd60e51b81526004016109e390612ed4565b4780611a7a57600080fd5b60005b611a8960016006612fca565b811015611b0457611af260168260068110611aa657611aa66130d9565b0154601c80546001600160a01b0390921691612710919085908110611acd57611acd6130d9565b906000526020600020015485611ae39190612fab565b611aed9190612f97565b612236565b80611afc81613048565b915050611a7d565b50611b376016611b1660016006612fca565b60068110611b2657611b266130d9565b01546001600160a01b031647612236565b50565b601c8181548110611b4a57600080fd5b600091825260209091200154905081565b60606009604051602001611b6f9190612d52565b604051602081830303815290604052905090565b6006546001600160a01b03163314611bad5760405162461bcd60e51b81526004016109e390612ed4565b600a54600361010090910460ff1610611c085760405162461bcd60e51b815260206004820152601b60248201527f53746167652063616e6e6f74206265206d6f7265207468616e2033000000000060448201526064016109e3565b600a8054610100900460ff16906001611c2083613063565b825460ff91821661010093840a9081029083021990911617909255600a5460405191900490911681527f36e08625927f4c20a74363a4c118d06899c5dbd5a27024d11ca0075e206a7ded915060200160405180910390a1565b6006546001600160a01b03163314611ca35760405162461bcd60e51b81526004016109e390612ed4565b6001600160a01b038116611d085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e3565b611b37816120a4565b60006001600160e01b031982166380ac58cd60e01b1480611d4257506001600160e01b03198216635b5e139f60e01b145b806109b357506301ffc9a760e01b6001600160e01b03198316146109b3565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d9682611547565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806000611dde85856122cb565b91509150611deb81612338565b509392505050565b6000818152600260205260408120546001600160a01b0316611e6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109e3565b6000611e7783611547565b9050806001600160a01b0316846001600160a01b03161480611eb25750836001600160a01b0316611ea784610a91565b6001600160a01b0316145b80611ee257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611efd82611547565b6001600160a01b031614611f655760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109e3565b6001600160a01b038216611fc75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109e3565b611fd2600082611d61565b6001600160a01b0383166000908152600360205260408120805460019290611ffb908490612fca565b90915550506001600160a01b0382166000908152600360205260408120805460019290612029908490612f5a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6114738282604051806020016040528060008152506124f3565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612101848484611eea565b61210d84848484612526565b6113775760405162461bcd60e51b81526004016109e390612e82565b606060078054610a0e9061300d565b60608161215c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612186578061217081613048565b915061217f9050600a83612f97565b9150612160565b60008167ffffffffffffffff8111156121a1576121a16130ef565b6040519080825280601f01601f1916602001820160405280156121cb576020820181803683370190505b5090505b8415611ee2576121e0600183612fca565b91506121ed600a86613083565b6121f8906030612f5a565b60f81b81838151811061220d5761220d6130d9565b60200101906001600160f81b031916908160001a90535061222f600a86612f97565b94506121cf565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612283576040519150601f19603f3d011682016040523d82523d6000602084013e612288565b606091505b5050905080610c375760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016109e3565b6000808251604114156123025760208301516040840151606085015160001a6122f687828585612633565b94509450505050610db1565b82516040141561232c5760208301516040840151612321868383612720565b935093505050610db1565b50600090506002610db1565b600081600481111561234c5761234c6130c3565b14156123555750565b6001816004811115612369576123696130c3565b14156123b75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109e3565b60028160048111156123cb576123cb6130c3565b14156124195760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109e3565b600381600481111561242d5761242d6130c3565b14156124865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109e3565b600481600481111561249a5761249a6130c3565b1415611b375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109e3565b6124fd838361274f565b61250a6000848484612526565b610c375760405162461bcd60e51b81526004016109e390612e82565b60006001600160a01b0384163b1561262857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061256a903390899088908890600401612dee565b602060405180830381600087803b15801561258457600080fd5b505af19250505080156125b4575060408051601f3d908101601f191682019092526125b191810190612bfc565b60015b61260e573d8080156125e2576040519150601f19603f3d011682016040523d82523d6000602084013e6125e7565b606091505b5080516126065760405162461bcd60e51b81526004016109e390612e82565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ee2565b506001949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561266a5750600090506003612717565b8460ff16601b1415801561268257508460ff16601c14155b156126935750600090506004612717565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126e7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661271057600060019250925050612717565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b0161274187828885612633565b935093505050935093915050565b6001600160a01b0382166127a55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109e3565b6000818152600260205260409020546001600160a01b03161561280a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109e3565b6001600160a01b0382166000908152600360205260408120805460019290612833908490612f5a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461289d9061300d565b90600052602060002090601f0160209004810192826128bf5760008555612905565b82601f106128d857805160ff1916838001178555612905565b82800160010185558215612905579182015b828111156129055782518255916020019190600101906128ea565b50612911929150612915565b5090565b5b808211156129115760008155600101612916565b600067ffffffffffffffff80841115612945576129456130ef565b604051601f8501601f19908116603f0116810190828211818310171561296d5761296d6130ef565b8160405280935085815286868601111561298657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146129b757600080fd5b919050565b803580151581146129b757600080fd5b600082601f8301126129dd57600080fd5b6118e98383356020850161292a565b803560ff811681146129b757600080fd5b600060208284031215612a0f57600080fd5b6118e9826129a0565b60008060408385031215612a2b57600080fd5b612a34836129a0565b9150612a42602084016129a0565b90509250929050565b600080600060608486031215612a6057600080fd5b612a69846129a0565b9250612a77602085016129a0565b9150604084013590509250925092565b60008060008060808587031215612a9d57600080fd5b612aa6856129a0565b9350612ab4602086016129a0565b925060408501359150606085013567ffffffffffffffff811115612ad757600080fd5b612ae3878288016129cc565b91505092959194509250565b60008060408385031215612b0257600080fd5b612b0b836129a0565b9150612a42602084016129bc565b60008060408385031215612b2c57600080fd5b612b35836129a0565b9150602083013567ffffffffffffffff811115612b5157600080fd5b612b5d858286016129cc565b9150509250929050565b60008060408385031215612b7a57600080fd5b612b83836129a0565b946020939093013593505050565b600080600060608486031215612ba657600080fd5b612baf846129a0565b95602085013595506040909401359392505050565b600060208284031215612bd657600080fd5b6118e9826129bc565b600060208284031215612bf157600080fd5b81356118e981613105565b600060208284031215612c0e57600080fd5b81516118e981613105565b600060208284031215612c2b57600080fd5b813567ffffffffffffffff811115612c4257600080fd5b8201601f81018413612c5357600080fd5b611ee28482356020840161292a565b600060208284031215612c7457600080fd5b5035919050565b60008060408385031215612c8e57600080fd5b82359150612a42602084016129a0565b60008060408385031215612cb157600080fd5b50508035926020909101359150565b600060208284031215612cd257600080fd5b6118e9826129ec565b60008060408385031215612cee57600080fd5b612b35836129ec565b60008151808452612d0f816020860160208601612fe1565b601f01601f19169290920160200192915050565b60008351612d35818460208801612fe1565b835190830190612d49818360208801612fe1565b01949350505050565b600080835481600182811c915080831680612d6e57607f831692505b6020808410821415612d8e57634e487b7160e01b86526022600452602486fd5b818015612da25760018114612db357612de0565b60ff19861689528489019650612de0565b60008a81526020902060005b86811015612dd85781548b820152908501908301612dbf565b505084890196505b509498975050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e2190830184612cf7565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e6357835183529284019291840191600101612e47565b50909695505050505050565b6020815260006118e96020830184612cf7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612f6d57612f6d613097565b500190565b600060ff821660ff84168060ff03821115612f8f57612f8f613097565b019392505050565b600082612fa657612fa66130ad565b500490565b6000816000190483118215151615612fc557612fc5613097565b500290565b600082821015612fdc57612fdc613097565b500390565b60005b83811015612ffc578181015183820152602001612fe4565b838111156113775750506000910152565b600181811c9082168061302157607f821691505b6020821081141561304257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561305c5761305c613097565b5060010190565b600060ff821660ff81141561307a5761307a613097565b60010192915050565b600082613092576130926130ad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b3757600080fdfea26469706673582212207d7afe47a39d6e13d83e0c4bedc2d76e6edd478de5b2cb1f668966ff2ca0110464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000001bbc0000000000000000000000000000000000000000000000000000000000002774000000000000000000000000fa63b1f3caa7ba5d61305952a5b8f696064fd44200000000000000000000000000000000000000000000000000000000000000104d6f7265205468616e2047616d6572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d54470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6d74672d6170692d6769742d6465762d6d74672e76657263656c2e6170702f6170692f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): More Than Gamers
Arg [1] : _symbol (string): MTG
Arg [2] : _initBaseURI (string): https://mtg-api-git-dev-mtg.vercel.app/api/
Arg [3] : _defaultURI (string):
Arg [4] : _presaleSupply (uint256): 7100
Arg [5] : _totalSaleSupply (uint256): 10100
Arg [6] : _whitelistSigner (address): 0xFA63B1F3caa7bA5d61305952a5b8f696064fD442
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001bbc
Arg [5] : 0000000000000000000000000000000000000000000000000000000000002774
Arg [6] : 000000000000000000000000fa63b1f3caa7ba5d61305952a5b8f696064fd442
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [8] : 4d6f7265205468616e2047616d65727300000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 4d54470000000000000000000000000000000000000000000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [12] : 68747470733a2f2f6d74672d6170692d6769742d6465762d6d74672e76657263
Arg [13] : 656c2e6170702f6170692f000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43558:7469:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44045:39;;;;;;;;;;;;;;;;;;;23473:25:1;;;23461:2;23446:18;44045:39:0;;;;;;;;45681:322;;;;;;;;;;-1:-1:-1;45681:322:0;;;;;:::i;:::-;;:::i;:::-;;;10579:14:1;;10572:22;10554:41;;10542:2;10527:18;45681:322:0;10414:187:1;50007:73:0;;;;;;;;;;-1:-1:-1;50007:73:0;;;;;:::i;:::-;;:::i;:::-;;21245:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22788:219::-;;;;;;;;;;-1:-1:-1;22788:219:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8961:32:1;;;8943:51;;8931:2;8916:18;22788:219:0;8797:203:1;44160:49:0;;;;;;;;;;-1:-1:-1;44160:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23681:4:1;23669:17;;;23651:36;;23639:2;23624:18;44160:49:0;23509:184:1;22317:407:0;;;;;;;;;;-1:-1:-1;22317:407:0;;;;;:::i;:::-;;:::i;49402:110::-;;;;;;;;;;-1:-1:-1;49402:110:0;;;;;:::i;:::-;;:::i;49847:156::-;;;;;;;;;;-1:-1:-1;49847:156:0;;;;;:::i;:::-;;:::i;47745:89::-;;;;;;;;;;-1:-1:-1;47813:13:0;;47745:89;;47555:186;;;;;;;;;;-1:-1:-1;47555:186:0;;;;;:::i;:::-;;:::i;23668:337::-;;;;;;;;;;-1:-1:-1;23668:337:0;;;;;:::i;:::-;;:::i;49027:190::-;;;;;;;;;;-1:-1:-1;49027:190:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;9690:32:1;;;9672:51;;9754:2;9739:18;;9732:34;;;;9645:18;49027:190:0;9498:274:1;45064:26:0;;;;;;;;;;-1:-1:-1;45064:26:0;;;;-1:-1:-1;;;;;45064:26:0;;;49650:79;;;;;;;;;;;;;:::i;46891:660::-;;;;;;:::i;:::-;;:::i;46020:867::-;;;;;;:::i;:::-;;:::i;43698:24::-;;;;;;;;;;;;;:::i;24074:185::-;;;;;;;;;;-1:-1:-1;24074:185:0;;;;;:::i;:::-;;:::i;49516:130::-;;;;;;;;;;-1:-1:-1;49516:130:0;;;;;:::i;:::-;;:::i;44520:26::-;;;;;;;;;;-1:-1:-1;44520:26:0;;;;;;;;50084:325;;;;;;;;;;-1:-1:-1;50084:325:0;;;;;:::i;:::-;;:::i;20941:239::-;;;;;;;;;;-1:-1:-1;20941:239:0;;;;;:::i;:::-;;:::i;43727:27::-;;;;;;;;;;;;;:::i;44387:30::-;;;;;;;;;;;;;;;;43672:21;;;;;;;;;;;;;:::i;20673:208::-;;;;;;;;;;-1:-1:-1;20673:208:0;;;;;:::i;:::-;;:::i;33951:94::-;;;;;;;;;;;;;:::i;44551:28::-;;;;;;;;;;;;;;;;44422:30;;;;;;;;;;;;;;;;33304:87;;;;;;;;;;-1:-1:-1;33377:6:0;;-1:-1:-1;;;;;33377:6:0;33304:87;;49733:110;;;;;;;;;;-1:-1:-1;49733:110:0;;;;;:::i;:::-;;:::i;21412:104::-;;;;;;;;;;;;;:::i;23077:293::-;;;;;;;;;;-1:-1:-1;23077:293:0;;;;;:::i;:::-;;:::i;44089:28::-;;;;;;;;;;;;;;;;44602:334;;;;;;;;;;-1:-1:-1;44602:334:0;;;;;:::i;:::-;;:::i;24328:328::-;;;;;;;;;;-1:-1:-1;24328:328:0;;;;;:::i;:::-;;:::i;43930:22::-;;;;;;;;;;-1:-1:-1;43930:22:0;;;;;;;;;;;44457:46;;;;;;;;;;-1:-1:-1;44457:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45095:27;;;;;;;;;;;;;;;;47840:673;;;;;;;;;;-1:-1:-1;47840:673:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48517:368::-;;;;;;;;;;-1:-1:-1;48517:368:0;;;;;:::i;:::-;;:::i;50446:418::-;;;;;;;;;;;;;:::i;44122:33::-;;;;;;;;;;;;;;;;44941:72;;;;;;;;;;-1:-1:-1;44941:72:0;;;;;:::i;:::-;;:::i;48889:120::-;;;;;;;;;;;;;:::i;23439:164::-;;;;;;;;;;-1:-1:-1;23439:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23560:25:0;;;23536:4;23560:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23439:164;49251:147;;;;;;;;;;;;;:::i;43759:35::-;;;;;;;;;;-1:-1:-1;43759:35:0;;;;;;;;34198:192;;;;;;;;;;-1:-1:-1;34198:192:0;;;;;:::i;:::-;;:::i;44346:36::-;;;;;;;;;;;;;;;;44248:35;;;;;;;;;;;;;;;;45681:322;45766:4;-1:-1:-1;;;;;;45788:40:0;;-1:-1:-1;;;45788:40:0;;:77;;-1:-1:-1;;;;;;;;;;45840:25:0;;;45788:77;:133;;;-1:-1:-1;;;;;;;;;;45896:25:0;;;45788:133;:209;;;;45961:36;45985:11;45961:23;:36::i;:::-;45781:216;45681:322;-1:-1:-1;;45681:322:0:o;50007:73::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;;;;;;;;;50059:6:::1;:15:::0;;-1:-1:-1;;50059:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50007:73::o;21245:100::-;21299:13;21332:5;21325:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21245:100;:::o;22788:219::-;22864:7;26251:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26251:16:0;22884:73;;;;-1:-1:-1;;;22884:73:0;;19359:2:1;22884:73:0;;;19341:21:1;19398:2;19378:18;;;19371:30;19437:34;19417:18;;;19410:62;-1:-1:-1;;;19488:18:1;;;19481:42;19540:19;;22884:73:0;19157:408:1;22884:73:0;-1:-1:-1;22975:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22975:24:0;;22788:219::o;22317:407::-;22398:13;22414:23;22429:7;22414:14;:23::i;:::-;22398:39;;22462:5;-1:-1:-1;;;;;22456:11:0;:2;-1:-1:-1;;;;;22456:11:0;;;22448:57;;;;-1:-1:-1;;;22448:57:0;;21664:2:1;22448:57:0;;;21646:21:1;21703:2;21683:18;;;21676:30;21742:34;21722:18;;;21715:62;-1:-1:-1;;;21793:18:1;;;21786:31;21834:19;;22448:57:0;21462:397:1;22448:57:0;15949:10;-1:-1:-1;;;;;22538:21:0;;;;:62;;-1:-1:-1;22563:37:0;22580:5;15949:10;23439:164;:::i;22563:37::-;22516:168;;;;-1:-1:-1;;;22516:168:0;;17349:2:1;22516:168:0;;;17331:21:1;17388:2;17368:18;;;17361:30;17427:34;17407:18;;;17400:62;17498:26;17478:18;;;17471:54;17542:19;;22516:168:0;17147:420:1;22516:168:0;22695:21;22704:2;22708:7;22695:8;:21::i;:::-;22387:337;22317:407;;:::o;49402:110::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49480:7:::1;:26:::0;;-1:-1:-1;;;;;49480:26:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;49480:26:0;;::::1;::::0;;;::::1;::::0;;49402:110::o;49847:156::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49936:11:::1;:26:::0;;-1:-1:-1;;;;;;49936:26:0::1;-1:-1:-1::0;;;;;49936:26:0;;;::::1;::::0;;;::::1;::::0;;;49969:12:::1;:28:::0;49847:156::o;47555:186::-;47693:29;;-1:-1:-1;;;47693:29:0;;;8448:17:1;-1:-1:-1;;8502:2:1;8498:15;;;8494:53;8481:11;;;8474:74;47637:4:0;;47669:66;;8564:12:1;;47693:29:0;;;;;;;;;;;;47683:40;;;;;;47725:9;47669:13;:66::i;:::-;47658:7;;;;;-1:-1:-1;;;;;47658:7:0;;;:77;;;;-1:-1:-1;47555:186:0;;;;:::o;23668:337::-;23863:41;15949:10;23896:7;23863:18;:41::i;:::-;23855:103;;;;-1:-1:-1;;;23855:103:0;;;;;;;:::i;:::-;23969:28;23979:4;23985:2;23989:7;23969:9;:28::i;49027:190::-;49164:11;;49190:12;;49109:16;;;;-1:-1:-1;;;;;49164:11:0;;;;49205:5;;49177:25;;:10;:25;:::i;:::-;:33;;;;:::i;:::-;49156:55;;;;49027:190;;;;;;:::o;49650:79::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49701:15:::1;:22:::0;;-1:-1:-1;;49701:22:0::1;49719:4;49701:22;::::0;;49650:79::o;46891:660::-;46953:14;46970:13;47813;;;47745:89;46970:13;46999:6;;46953:30;;-1:-1:-1;46999:6:0;;46998:7;46990:16;;;;;;47021:5;;;;;;;47030:1;47021:10;47013:38;;;;-1:-1:-1;;;47013:38:0;;22415:2:1;47013:38:0;;;22397:21:1;22454:2;22434:18;;;22427:30;-1:-1:-1;;;22473:18:1;;;22466:45;22528:18;;47013:38:0;22213:339:1;47013:38:0;47080:1;47066:11;:15;;;47058:48;;;;-1:-1:-1;;;47058:48:0;;22066:2:1;47058:48:0;;;22048:21:1;22105:2;22085:18;;;22078:30;-1:-1:-1;;;22124:18:1;;;22117:50;22184:18;;47058:48:0;21864:344:1;47058:48:0;47145:15;;47121:20;;;;:6;:20;:::i;:::-;:39;;47113:76;;;;-1:-1:-1;;;47113:76:0;;11788:2:1;47113:76:0;;;11770:21:1;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:54;11910:18;;47113:76:0;11586:348:1;47113:76:0;47246:11;;47232:9;47218:24;;;;:13;:24;;;;;;47204:38;;47218:24;;47204:11;:38;:::i;:::-;:53;;;;47196:89;;;;-1:-1:-1;;;47196:89:0;;20133:2:1;47196:89:0;;;20115:21:1;20172:2;20152:18;;;20145:30;20211:25;20191:18;;;20184:53;20254:18;;47196:89:0;19931:347:1;47196:89:0;47325:11;47313:23;;:9;;:23;;;;:::i;:::-;47300:9;:36;;47292:73;;;;-1:-1:-1;;;47292:73:0;;21311:2:1;47292:73:0;;;21293:21:1;21350:2;21330:18;;;21323:30;-1:-1:-1;;;21369:18:1;;;21362:54;21433:18;;47292:73:0;21109:348:1;47292:73:0;47386:9;47372:24;;;;:13;:24;;;;;:39;;47400:11;;47372:24;:39;;47400:11;;47372:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47435:11;47418:28;;:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;47470:1:0;;-1:-1:-1;47453:93:0;47478:11;47473:16;;:1;:16;47453:93;;47505:33;47515:10;47527;47536:1;47527:6;:10;:::i;:::-;47505:9;:33::i;:::-;47491:3;;;;:::i;:::-;;;;47453:93;;46020:867;46109:14;46126:13;47813;;;47745:89;46126:13;46155:6;;46109:30;;-1:-1:-1;46155:6:0;;46154:7;46146:16;;;;;;46177:5;;;;;;;46169:38;;;;-1:-1:-1;;;46169:38:0;;17004:2:1;46169:38:0;;;16986:21:1;17043:2;17023:18;;;17016:30;-1:-1:-1;;;17062:18:1;;;17055:46;17118:18;;46169:38:0;16802:340:1;46169:38:0;46222:36;46236:10;46248:9;46222:13;:36::i;:::-;46214:68;;;;-1:-1:-1;;;46214:68:0;;12856:2:1;46214:68:0;;;12838:21:1;12895:2;12875:18;;;12868:30;-1:-1:-1;;;12914:18:1;;;12907:49;12973:18;;46214:68:0;12654:343:1;46214:68:0;46297:5;;;;;;;;;:10;;:24;;-1:-1:-1;46311:5:0;;;;;;;46320:1;46311:10;46297:24;46289:50;;;;-1:-1:-1;;;46289:50:0;;16249:2:1;46289:50:0;;;16231:21:1;16288:2;16268:18;;;16261:30;-1:-1:-1;;;16307:18:1;;;16300:43;16360:18;;46289:50:0;16047:337:1;46289:50:0;46368:1;46354:11;:15;;;46346:48;;;;-1:-1:-1;;;46346:48:0;;22066:2:1;46346:48:0;;;22048:21:1;22105:2;22085:18;;;22078:30;-1:-1:-1;;;22124:18:1;;;22117:50;22184:18;;46346:48:0;21864:344:1;46346:48:0;46433:13;;46409:20;;;;:6;:20;:::i;:::-;:37;;46401:76;;;;-1:-1:-1;;;46401:76:0;;12141:2:1;46401:76:0;;;12123:21:1;12180:2;12160:18;;;12153:30;12219:28;12199:18;;;12192:56;12265:18;;46401:76:0;11939:350:1;46401:76:0;46520:11;46505:26;;:12;;:26;;;;:::i;:::-;46492:9;:39;;46484:76;;;;-1:-1:-1;;;46484:76:0;;21311:2:1;46484:76:0;;;21293:21:1;21350:2;21330:18;;;21323:30;-1:-1:-1;;;21369:18:1;;;21362:54;21433:18;;46484:76:0;21109:348:1;46484:76:0;46622:5;;;;;;;;;:10;:46;;46652:16;;46622:46;;;46635:14;;46622:46;46606:10;46589:28;;;;:16;:28;;;;;;46575:42;;46589:28;;46575:11;:42;:::i;:::-;:94;;;;46567:130;;;;-1:-1:-1;;;46567:130:0;;23177:2:1;46567:130:0;;;23159:21:1;23216:2;23196:18;;;23189:30;23255:25;23235:18;;;23228:53;23298:18;;46567:130:0;22975:347:1;46567:130:0;46721:10;46704:28;;;;:16;:28;;;;;:43;;46736:11;;46704:28;:43;;46736:11;;46704:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46771:11;46754:28;;:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;46806:1:0;;-1:-1:-1;46789:93:0;46814:11;46809:16;;:1;:16;46789:93;;46841:33;46851:10;46863;46872:1;46863:6;:10;:::i;46841:33::-;46827:3;;;;:::i;:::-;;;;46789:93;;;;46102:785;46020:867;;:::o;43698:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24074:185::-;24212:39;24229:4;24235:2;24239:7;24212:39;;;;;;;;;;;;:16;:39::i;49516:130::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49596:15:::1;::::0;::::1;;49595:16;49587:25;;;::::0;::::1;;49619:21:::0;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49516:130:::0;:::o;50084:325::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;50163:14:::1;50180:13;47813::::0;;;47745:89;50180:13:::1;50232:15;::::0;50163:30;;-1:-1:-1;50208:20:0::1;50217:11:::0;50163:30;50208:20:::1;:::i;:::-;:39;;50200:76;;;::::0;-1:-1:-1;;;50200:76:0;;11788:2:1;50200:76:0::1;::::0;::::1;11770:21:1::0;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:54;11910:18;;50200:76:0::1;11586:348:1::0;50200:76:0::1;50300:11;50283:13;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;50335:1:0::1;::::0;-1:-1:-1;50318:86:0::1;50343:11;50338:1;:16;50318:86;;50370:26;50380:3:::0;50385:10:::1;50394:1:::0;50385:6;:10:::1;:::i;50370:26::-;50356:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50318:86;;20941:239:::0;21013:7;21049:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21049:16:0;21084:19;21076:73;;;;-1:-1:-1;;;21076:73:0;;18185:2:1;21076:73:0;;;18167:21:1;18224:2;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;-1:-1:-1;;;18314:18:1;;;18307:39;18363:19;;21076:73:0;17983:405:1;43727:27:0;;;;;;;:::i;43672:21::-;;;;;;;:::i;20673:208::-;20745:7;-1:-1:-1;;;;;20773:19:0;;20765:74;;;;-1:-1:-1;;;20765:74:0;;17774:2:1;20765:74:0;;;17756:21:1;17813:2;17793:18;;;17786:30;17852:34;17832:18;;;17825:62;-1:-1:-1;;;17903:18:1;;;17896:40;17953:19;;20765:74:0;17572:406:1;20765:74:0;-1:-1:-1;;;;;;20857:16:0;;;;;:9;:16;;;;;;;20673:208::o;33951:94::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;34016:21:::1;34034:1;34016:9;:21::i;:::-;33951:94::o:0;49733:110::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49809:28;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;21412:104::-:0;21468:13;21501:7;21494:14;;;;;:::i;23077:293::-;-1:-1:-1;;;;;23180:24:0;;15949:10;23180:24;;23172:62;;;;-1:-1:-1;;;23172:62:0;;15136:2:1;23172:62:0;;;15118:21:1;15175:2;15155:18;;;15148:30;15214:27;15194:18;;;15187:55;15259:18;;23172:62:0;14934:349:1;23172:62:0;15949:10;23245:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23245:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23245:53:0;;;;;;;;;;23314:48;;10554:41:1;;;23245:42:0;;15949:10;23314:48;;10527:18:1;23314:48:0;;;;;;;23077:293;;:::o;44602:334::-;;;;;;;;;;;;;;-1:-1:-1;;;;;44602:334:0;;-1:-1:-1;44602:334:0;:::o;24328:328::-;24503:41;15949:10;24536:7;24503:18;:41::i;:::-;24495:103;;;;-1:-1:-1;;;24495:103:0;;;;;;;:::i;:::-;24609:39;24623:4;24629:2;24633:7;24642:5;24609:13;:39::i;47840:673::-;47927:16;47957:18;47978:17;47988:6;47978:9;:17::i;:::-;47957:38;-1:-1:-1;48010:15:0;48006:500;;-1:-1:-1;;48049:16:0;;;48063:1;48049:16;;;;;;;;48042:23;;48006:500;48098:23;48138:10;48124:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48124:25:0;-1:-1:-1;48098:51:0;-1:-1:-1;48164:13:0;48219:7;48196:271;48238:5;48228:7;:15;48196:271;;;48288:10;48279:5;:19;48275:30;;;48300:5;;48275:30;48348:6;-1:-1:-1;;;;;48328:26:0;:16;48336:7;48328;:16::i;:::-;-1:-1:-1;;;;;48328:26:0;;48324:128;;;48395:7;48379:6;48386:5;48379:13;;;;;;;;:::i;:::-;;;;;;;;;;:23;48425:7;;;;:::i;:::-;;;;48324:128;48245:9;;;;:::i;:::-;;;;48196:271;;;-1:-1:-1;48488:6:0;;-1:-1:-1;;;47840:673:0;;;;;;:::o;48517:368::-;26227:4;26251:16;;;:7;:16;;;;;;48590:13;;-1:-1:-1;;;;;26251:16:0;48615:76;;;;-1:-1:-1;;;48615:76:0;;20895:2:1;48615:76:0;;;20877:21:1;20934:2;20914:18;;;20907:30;20973:34;20953:18;;;20946:62;-1:-1:-1;;;21024:18:1;;;21017:45;21079:19;;48615:76:0;20693:411:1;48615:76:0;48698:28;48729:10;:8;:10::i;:::-;48698:41;;48784:1;48759:14;48753:28;:32;:126;;48869:10;48753:126;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48821:14;48837:18;:7;:16;:18::i;:::-;48804:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48746:133;48517:368;-1:-1:-1;;;48517:368:0:o;50446:418::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;50515:21:::1;50551:14:::0;50543:23:::1;;;::::0;::::1;;50578:9;50573:144;50597:23;50619:1;50597:21;:23;:::i;:::-;50593:1;:27;50573:144;;;50636:73;50646:14;50661:1;50646:17;;;;;;;:::i;:::-;;::::0;50678:19:::1;:22:::0;;-1:-1:-1;;;;;50646:17:0;;::::1;::::0;50703:5:::1;::::0;50678:19;50698:1;;50678:22;::::1;;;;;:::i;:::-;;;;;;;;;50665:10;:35;;;;:::i;:::-;:43;;;;:::i;:::-;50636:9;:73::i;:::-;50622:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50573:144;;;-1:-1:-1::0;50785:73:0::1;50795:14;50810:23;50832:1;50810:21;:23;:::i;:::-;50795:39;;;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;50795:39:0::1;50836:21;50785:9;:73::i;:::-;50487:377;50446:418::o:0;44941:72::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44941:72:0;:::o;48889:120::-;48933:13;48988;48971:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;48957:46;;48889:120;:::o;49251:147::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;49306:5:::1;::::0;49314:1:::1;49306:5;::::0;;::::1;;;:9;49298:49;;;::::0;-1:-1:-1;;;49298:49:0;;15893:2:1;49298:49:0::1;::::0;::::1;15875:21:1::0;15932:2;15912:18;;;15905:30;15971:29;15951:18;;;15944:57;16018:18;;49298:49:0::1;15691:351:1::0;49298:49:0::1;49354:5;:7:::0;;::::1;::::0;::::1;;;::::0;:5:::1;:7;::::0;::::1;:::i;:::-;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;;::::0;;;49386:5:::1;::::0;49373:19:::1;::::0;49386:5;;::::1;::::0;;::::1;23651:36:1::0;;49373:19:0::1;::::0;-1:-1:-1;23639:2:1;23624:18;49373:19:0::1;;;;;;;49251:147::o:0;34198:192::-;33377:6;;-1:-1:-1;;;;;33377:6:0;15949:10;33522:23;33514:68;;;;-1:-1:-1;;;33514:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34287:22:0;::::1;34279:73;;;::::0;-1:-1:-1;;;34279:73:0;;13623:2:1;34279:73:0::1;::::0;::::1;13605:21:1::0;13662:2;13642:18;;;13635:30;13701:34;13681:18;;;13674:62;-1:-1:-1;;;13752:18:1;;;13745:36;13798:19;;34279:73:0::1;13421:402:1::0;34279:73:0::1;34363:19;34373:8;34363:9;:19::i;20306:305::-:0;20408:4;-1:-1:-1;;;;;;20445:40:0;;-1:-1:-1;;;20445:40:0;;:105;;-1:-1:-1;;;;;;;20502:48:0;;-1:-1:-1;;;20502:48:0;20445:105;:158;;;-1:-1:-1;;;;;;;;;;18982:40:0;;;20567:36;18873:157;30108:174;30183:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30183:29:0;-1:-1:-1;;;;;30183:29:0;;;;;;;;:24;;30237:23;30183:24;30237:14;:23::i;:::-;-1:-1:-1;;;;;30228:46:0;;;;;;;;;;;30108:174;;:::o;38872:231::-;38950:7;38971:17;38990:18;39012:27;39023:4;39029:9;39012:10;:27::i;:::-;38970:69;;;;39050:18;39062:5;39050:11;:18::i;:::-;-1:-1:-1;39086:9:0;38872:231;-1:-1:-1;;;38872:231:0:o;26454:348::-;26547:4;26251:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26251:16:0;26564:73;;;;-1:-1:-1;;;26564:73:0;;16591:2:1;26564:73:0;;;16573:21:1;16630:2;16610:18;;;16603:30;16669:34;16649:18;;;16642:62;-1:-1:-1;;;16720:18:1;;;16713:42;16772:19;;26564:73:0;16389:408:1;26564:73:0;26648:13;26664:23;26679:7;26664:14;:23::i;:::-;26648:39;;26717:5;-1:-1:-1;;;;;26706:16:0;:7;-1:-1:-1;;;;;26706:16:0;;:51;;;;26750:7;-1:-1:-1;;;;;26726:31:0;:20;26738:7;26726:11;:20::i;:::-;-1:-1:-1;;;;;26726:31:0;;26706:51;:87;;;-1:-1:-1;;;;;;23560:25:0;;;23536:4;23560:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26761:32;26698:96;26454:348;-1:-1:-1;;;;26454:348:0:o;29422:570::-;29581:4;-1:-1:-1;;;;;29554:31:0;:23;29569:7;29554:14;:23::i;:::-;-1:-1:-1;;;;;29554:31:0;;29546:85;;;;-1:-1:-1;;;29546:85:0;;20485:2:1;29546:85:0;;;20467:21:1;20524:2;20504:18;;;20497:30;20563:34;20543:18;;;20536:62;-1:-1:-1;;;20614:18:1;;;20607:39;20663:19;;29546:85:0;20283:405:1;29546:85:0;-1:-1:-1;;;;;29650:16:0;;29642:65;;;;-1:-1:-1;;;29642:65:0;;14731:2:1;29642:65:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;-1:-1:-1;;;14860:18:1;;;14853:34;14904:19;;29642:65:0;14529:400:1;29642:65:0;29820:29;29837:1;29841:7;29820:8;:29::i;:::-;-1:-1:-1;;;;;29860:15:0;;;;;;:9;:15;;;;;:20;;29879:1;;29860:15;:20;;29879:1;;29860:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29891:13:0;;;;;;:9;:13;;;;;:18;;29908:1;;29891:13;:18;;29908:1;;29891:18;:::i;:::-;;;;-1:-1:-1;;29920:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29920:21:0;-1:-1:-1;;;;;29920:21:0;;;;;;;;;29957:27;;29920:16;;29957:27;;;;;;;29422:570;;;:::o;27142:110::-;27218:26;27228:2;27232:7;27218:26;;;;;;;;;;;;:9;:26::i;34396:173::-;34471:6;;;-1:-1:-1;;;;;34488:17:0;;;-1:-1:-1;;;;;;34488:17:0;;;;;;;34521:40;;34471:6;;;34488:17;34471:6;;34521:40;;34452:16;;34521:40;34441:128;34396:173;:::o;25536:315::-;25693:28;25703:4;25709:2;25713:7;25693:9;:28::i;:::-;25740:48;25763:4;25769:2;25773:7;25782:5;25740:22;:48::i;:::-;25732:111;;;;-1:-1:-1;;;25732:111:0;;;;;;;:::i;45575:102::-;45635:13;45664:7;45657:14;;;;;:::i;16357:721::-;16413:13;16632:10;16628:53;;-1:-1:-1;;16659:10:0;;;;;;;;;;;;-1:-1:-1;;;16659:10:0;;;;;16357:721::o;16628:53::-;16706:5;16691:12;16747:78;16754:9;;16747:78;;16780:8;;;;:::i;:::-;;-1:-1:-1;16803:10:0;;-1:-1:-1;16811:2:0;16803:10;;:::i;:::-;;;16747:78;;;16835:19;16867:6;16857:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16857:17:0;;16835:39;;16885:154;16892:10;;16885:154;;16919:11;16929:1;16919:11;;:::i;:::-;;-1:-1:-1;16988:10:0;16996:2;16988:5;:10;:::i;:::-;16975:24;;:2;:24;:::i;:::-;16962:39;;16945:6;16952;16945:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16945:56:0;;;;;;;;-1:-1:-1;17016:11:0;17025:2;17016:11;;:::i;:::-;;;16885:154;;50868:156;50932:12;50949:5;-1:-1:-1;;;;;50949:10:0;50967:4;50949:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50931:45;;;50991:7;50983:35;;;;-1:-1:-1;;;50983:35:0;;14030:2:1;50983:35:0;;;14012:21:1;14069:2;14049:18;;;14042:30;-1:-1:-1;;;14088:18:1;;;14081:45;14143:18;;50983:35:0;13828:339:1;36764:1308:0;36845:7;36854:12;37079:9;:16;37099:2;37079:22;37075:990;;;37375:4;37360:20;;37354:27;37425:4;37410:20;;37404:27;37483:4;37468:20;;37462:27;37118:9;37454:36;37526:25;37537:4;37454:36;37354:27;37404;37526:10;:25::i;:::-;37519:32;;;;;;;;;37075:990;37573:9;:16;37593:2;37573:22;37569:496;;;37848:4;37833:20;;37827:27;37899:4;37884:20;;37878:27;37941:23;37952:4;37827:27;37878;37941:10;:23::i;:::-;37934:30;;;;;;;;37569:496;-1:-1:-1;38013:1:0;;-1:-1:-1;38017:35:0;37997:56;;35037:643;35115:20;35106:5;:29;;;;;;;;:::i;:::-;;35102:571;;;35037:643;:::o;35102:571::-;35213:29;35204:5;:38;;;;;;;;:::i;:::-;;35200:473;;;35259:34;;-1:-1:-1;;;35259:34:0;;11435:2:1;35259:34:0;;;11417:21:1;11474:2;11454:18;;;11447:30;11513:26;11493:18;;;11486:54;11557:18;;35259:34:0;11233:348:1;35200:473:0;35324:35;35315:5;:44;;;;;;;;:::i;:::-;;35311:362;;;35376:41;;-1:-1:-1;;;35376:41:0;;12496:2:1;35376:41:0;;;12478:21:1;12535:2;12515:18;;;12508:30;12574:33;12554:18;;;12547:61;12625:18;;35376:41:0;12294:355:1;35311:362:0;35448:30;35439:5;:39;;;;;;;;:::i;:::-;;35435:238;;;35495:44;;-1:-1:-1;;;35495:44:0;;15490:2:1;35495:44:0;;;15472:21:1;15529:2;15509:18;;;15502:30;15568:34;15548:18;;;15541:62;-1:-1:-1;;;15619:18:1;;;15612:32;15661:19;;35495:44:0;15288:398:1;35435:238:0;35570:30;35561:5;:39;;;;;;;;:::i;:::-;;35557:116;;;35617:44;;-1:-1:-1;;;35617:44:0;;18595:2:1;35617:44:0;;;18577:21:1;18634:2;18614:18;;;18607:30;18673:34;18653:18;;;18646:62;-1:-1:-1;;;18724:18:1;;;18717:32;18766:19;;35617:44:0;18393:398:1;27477:321:0;27607:18;27613:2;27617:7;27607:5;:18::i;:::-;27658:54;27689:1;27693:2;27697:7;27706:5;27658:22;:54::i;:::-;27636:154;;;;-1:-1:-1;;;27636:154:0;;;;;;;:::i;30845:799::-;31000:4;-1:-1:-1;;;;;31021:13:0;;8299:20;8347:8;31017:620;;31057:72;;-1:-1:-1;;;31057:72:0;;-1:-1:-1;;;;;31057:36:0;;;;;:72;;15949:10;;31108:4;;31114:7;;31123:5;;31057:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31057:72:0;;;;;;;;-1:-1:-1;;31057:72:0;;;;;;;;;;;;:::i;:::-;;;31053:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31299:13:0;;31295:272;;31342:60;;-1:-1:-1;;;31342:60:0;;;;;;;:::i;31295:272::-;31517:6;31511:13;31502:6;31498:2;31494:15;31487:38;31053:529;-1:-1:-1;;;;;;31180:51:0;-1:-1:-1;;;31180:51:0;;-1:-1:-1;31173:58:0;;31017:620;-1:-1:-1;31621:4:0;30845:799;;;;;;:::o;40365:1628::-;40496:7;;41430:66;41417:79;;41413:163;;;-1:-1:-1;41529:1:0;;-1:-1:-1;41533:30:0;41513:51;;41413:163;41590:1;:7;;41595:2;41590:7;;:18;;;;;41601:1;:7;;41606:2;41601:7;;41590:18;41586:102;;;-1:-1:-1;41641:1:0;;-1:-1:-1;41645:30:0;41625:51;;41586:102;41800:24;;;41783:14;41800:24;;;;;;;;;10833:25:1;;;10906:4;10894:17;;10874:18;;;10867:45;;;;10928:18;;;10921:34;;;10971:18;;;10964:34;;;41800:24:0;;10805:19:1;;41800:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41800:24:0;;-1:-1:-1;;41800:24:0;;;-1:-1:-1;;;;;;;41839:20:0;;41835:103;;41892:1;41896:29;41876:50;;;;;;;41835:103;41956:6;-1:-1:-1;41964:20:0;;-1:-1:-1;40365:1628:0;;;;;;;;:::o;39364:391::-;39478:7;;-1:-1:-1;;;;;39579:75:0;;39681:3;39677:12;;;39691:2;39673:21;39722:25;39733:4;39673:21;39742:1;39579:75;39722:10;:25::i;:::-;39715:32;;;;;;39364:391;;;;;;:::o;28132:376::-;-1:-1:-1;;;;;28212:16:0;;28204:61;;;;-1:-1:-1;;;28204:61:0;;18998:2:1;28204:61:0;;;18980:21:1;;;19017:18;;;19010:30;19076:34;19056:18;;;19049:62;19128:18;;28204:61:0;18796:356:1;28204:61:0;26227:4;26251:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26251:16:0;:30;28276:58;;;;-1:-1:-1;;;28276:58:0;;14374:2:1;28276:58:0;;;14356:21:1;14413:2;14393:18;;;14386:30;14452;14432:18;;;14425:58;14500:18;;28276:58:0;14172:352:1;28276:58:0;-1:-1:-1;;;;;28401:13:0;;;;;;:9;:13;;;;;:18;;28418:1;;28401:13;:18;;28418:1;;28401:18;:::i;:::-;;;;-1:-1:-1;;28430:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28430:21:0;-1:-1:-1;;;;;28430:21:0;;;;;;;;28467:33;;28430:16;;;28467:33;;28430:16;;28467:33;28132:376;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:220;1035:5;1088:3;1081:4;1073:6;1069:17;1065:27;1055:55;;1106:1;1103;1096:12;1055:55;1128:79;1203:3;1194:6;1181:20;1174:4;1166:6;1162:17;1128:79;:::i;1218:156::-;1284:20;;1344:4;1333:16;;1323:27;;1313:55;;1364:1;1361;1354:12;1379:186;1438:6;1491:2;1479:9;1470:7;1466:23;1462:32;1459:52;;;1507:1;1504;1497:12;1459:52;1530:29;1549:9;1530:29;:::i;1570:260::-;1638:6;1646;1699:2;1687:9;1678:7;1674:23;1670:32;1667:52;;;1715:1;1712;1705:12;1667:52;1738:29;1757:9;1738:29;:::i;:::-;1728:39;;1786:38;1820:2;1809:9;1805:18;1786:38;:::i;:::-;1776:48;;1570:260;;;;;:::o;1835:328::-;1912:6;1920;1928;1981:2;1969:9;1960:7;1956:23;1952:32;1949:52;;;1997:1;1994;1987:12;1949:52;2020:29;2039:9;2020:29;:::i;:::-;2010:39;;2068:38;2102:2;2091:9;2087:18;2068:38;:::i;:::-;2058:48;;2153:2;2142:9;2138:18;2125:32;2115:42;;1835:328;;;;;:::o;2168:537::-;2263:6;2271;2279;2287;2340:3;2328:9;2319:7;2315:23;2311:33;2308:53;;;2357:1;2354;2347:12;2308:53;2380:29;2399:9;2380:29;:::i;:::-;2370:39;;2428:38;2462:2;2451:9;2447:18;2428:38;:::i;:::-;2418:48;;2513:2;2502:9;2498:18;2485:32;2475:42;;2568:2;2557:9;2553:18;2540:32;2595:18;2587:6;2584:30;2581:50;;;2627:1;2624;2617:12;2581:50;2650:49;2691:7;2682:6;2671:9;2667:22;2650:49;:::i;:::-;2640:59;;;2168:537;;;;;;;:::o;2710:254::-;2775:6;2783;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;2875:29;2894:9;2875:29;:::i;:::-;2865:39;;2923:35;2954:2;2943:9;2939:18;2923:35;:::i;2969:394::-;3046:6;3054;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3146:29;3165:9;3146:29;:::i;:::-;3136:39;;3226:2;3215:9;3211:18;3198:32;3253:18;3245:6;3242:30;3239:50;;;3285:1;3282;3275:12;3239:50;3308:49;3349:7;3340:6;3329:9;3325:22;3308:49;:::i;:::-;3298:59;;;2969:394;;;;;:::o;3368:254::-;3436:6;3444;3497:2;3485:9;3476:7;3472:23;3468:32;3465:52;;;3513:1;3510;3503:12;3465:52;3536:29;3555:9;3536:29;:::i;:::-;3526:39;3612:2;3597:18;;;;3584:32;;-1:-1:-1;;;3368:254:1:o;3627:322::-;3704:6;3712;3720;3773:2;3761:9;3752:7;3748:23;3744:32;3741:52;;;3789:1;3786;3779:12;3741:52;3812:29;3831:9;3812:29;:::i;:::-;3802:39;3888:2;3873:18;;3860:32;;-1:-1:-1;3939:2:1;3924:18;;;3911:32;;3627:322;-1:-1:-1;;;3627:322:1:o;3954:180::-;4010:6;4063:2;4051:9;4042:7;4038:23;4034:32;4031:52;;;4079:1;4076;4069:12;4031:52;4102:26;4118:9;4102:26;:::i;4139:245::-;4197:6;4250:2;4238:9;4229:7;4225:23;4221:32;4218:52;;;4266:1;4263;4256:12;4218:52;4305:9;4292:23;4324:30;4348:5;4324:30;:::i;4389:249::-;4458:6;4511:2;4499:9;4490:7;4486:23;4482:32;4479:52;;;4527:1;4524;4517:12;4479:52;4559:9;4553:16;4578:30;4602:5;4578:30;:::i;4643:450::-;4712:6;4765:2;4753:9;4744:7;4740:23;4736:32;4733:52;;;4781:1;4778;4771:12;4733:52;4821:9;4808:23;4854:18;4846:6;4843:30;4840:50;;;4886:1;4883;4876:12;4840:50;4909:22;;4962:4;4954:13;;4950:27;-1:-1:-1;4940:55:1;;4991:1;4988;4981:12;4940:55;5014:73;5079:7;5074:2;5061:16;5056:2;5052;5048:11;5014:73;:::i;5098:180::-;5157:6;5210:2;5198:9;5189:7;5185:23;5181:32;5178:52;;;5226:1;5223;5216:12;5178:52;-1:-1:-1;5249:23:1;;5098:180;-1:-1:-1;5098:180:1:o;5283:254::-;5351:6;5359;5412:2;5400:9;5391:7;5387:23;5383:32;5380:52;;;5428:1;5425;5418:12;5380:52;5464:9;5451:23;5441:33;;5493:38;5527:2;5516:9;5512:18;5493:38;:::i;5542:248::-;5610:6;5618;5671:2;5659:9;5650:7;5646:23;5642:32;5639:52;;;5687:1;5684;5677:12;5639:52;-1:-1:-1;;5710:23:1;;;5780:2;5765:18;;;5752:32;;-1:-1:-1;5542:248:1:o;5795:182::-;5852:6;5905:2;5893:9;5884:7;5880:23;5876:32;5873:52;;;5921:1;5918;5911:12;5873:52;5944:27;5961:9;5944:27;:::i;5982:390::-;6057:6;6065;6118:2;6106:9;6097:7;6093:23;6089:32;6086:52;;;6134:1;6131;6124:12;6086:52;6157:27;6174:9;6157:27;:::i;6377:257::-;6418:3;6456:5;6450:12;6483:6;6478:3;6471:19;6499:63;6555:6;6548:4;6543:3;6539:14;6532:4;6525:5;6521:16;6499:63;:::i;:::-;6616:2;6595:15;-1:-1:-1;;6591:29:1;6582:39;;;;6623:4;6578:50;;6377:257;-1:-1:-1;;6377:257:1:o;6639:470::-;6818:3;6856:6;6850:13;6872:53;6918:6;6913:3;6906:4;6898:6;6894:17;6872:53;:::i;:::-;6988:13;;6947:16;;;;7010:57;6988:13;6947:16;7044:4;7032:17;;7010:57;:::i;:::-;7083:20;;6639:470;-1:-1:-1;;;;6639:470:1:o;7114:1099::-;7242:3;7271:1;7304:6;7298:13;7334:3;7356:1;7384:9;7380:2;7376:18;7366:28;;7444:2;7433:9;7429:18;7466;7456:61;;7510:4;7502:6;7498:17;7488:27;;7456:61;7536:2;7584;7576:6;7573:14;7553:18;7550:38;7547:165;;;-1:-1:-1;;;7611:33:1;;7667:4;7664:1;7657:15;7697:4;7618:3;7685:17;7547:165;7728:18;7755:104;;;;7873:1;7868:320;;;;7721:467;;7755:104;-1:-1:-1;;7788:24:1;;7776:37;;7833:16;;;;-1:-1:-1;7755:104:1;;7868:320;23771:1;23764:14;;;23808:4;23795:18;;7963:1;7977:165;7991:6;7988:1;7985:13;7977:165;;;8069:14;;8056:11;;;8049:35;8112:16;;;;8006:10;;7977:165;;;7981:3;;8171:6;8166:3;8162:16;8155:23;;7721:467;-1:-1:-1;8204:3:1;;7114:1099;-1:-1:-1;;;;;;;;7114:1099:1:o;9005:488::-;-1:-1:-1;;;;;9274:15:1;;;9256:34;;9326:15;;9321:2;9306:18;;9299:43;9373:2;9358:18;;9351:34;;;9421:3;9416:2;9401:18;;9394:31;;;9199:4;;9442:45;;9467:19;;9459:6;9442:45;:::i;:::-;9434:53;9005:488;-1:-1:-1;;;;;;9005:488:1:o;9777:632::-;9948:2;10000:21;;;10070:13;;9973:18;;;10092:22;;;9919:4;;9948:2;10171:15;;;;10145:2;10130:18;;;9919:4;10214:169;10228:6;10225:1;10222:13;10214:169;;;10289:13;;10277:26;;10358:15;;;;10323:12;;;;10250:1;10243:9;10214:169;;;-1:-1:-1;10400:3:1;;9777:632;-1:-1:-1;;;;;;9777:632:1:o;11009:219::-;11158:2;11147:9;11140:21;11121:4;11178:44;11218:2;11207:9;11203:18;11195:6;11178:44;:::i;13002:414::-;13204:2;13186:21;;;13243:2;13223:18;;;13216:30;13282:34;13277:2;13262:18;;13255:62;-1:-1:-1;;;13348:2:1;13333:18;;13326:48;13406:3;13391:19;;13002:414::o;19570:356::-;19772:2;19754:21;;;19791:18;;;19784:30;19850:34;19845:2;19830:18;;19823:62;19917:2;19902:18;;19570:356::o;22557:413::-;22759:2;22741:21;;;22798:2;22778:18;;;22771:30;22837:34;22832:2;22817:18;;22810:62;-1:-1:-1;;;22903:2:1;22888:18;;22881:47;22960:3;22945:19;;22557:413::o;23824:128::-;23864:3;23895:1;23891:6;23888:1;23885:13;23882:39;;;23901:18;;:::i;:::-;-1:-1:-1;23937:9:1;;23824:128::o;23957:204::-;23995:3;24031:4;24028:1;24024:12;24063:4;24060:1;24056:12;24098:3;24092:4;24088:14;24083:3;24080:23;24077:49;;;24106:18;;:::i;:::-;24142:13;;23957:204;-1:-1:-1;;;23957:204:1:o;24166:120::-;24206:1;24232;24222:35;;24237:18;;:::i;:::-;-1:-1:-1;24271:9:1;;24166:120::o;24291:168::-;24331:7;24397:1;24393;24389:6;24385:14;24382:1;24379:21;24374:1;24367:9;24360:17;24356:45;24353:71;;;24404:18;;:::i;:::-;-1:-1:-1;24444:9:1;;24291:168::o;24464:125::-;24504:4;24532:1;24529;24526:8;24523:34;;;24537:18;;:::i;:::-;-1:-1:-1;24574:9:1;;24464:125::o;24594:258::-;24666:1;24676:113;24690:6;24687:1;24684:13;24676:113;;;24766:11;;;24760:18;24747:11;;;24740:39;24712:2;24705:10;24676:113;;;24807:6;24804:1;24801:13;24798:48;;;-1:-1:-1;;24842:1:1;24824:16;;24817:27;24594:258::o;24857:380::-;24936:1;24932:12;;;;24979;;;25000:61;;25054:4;25046:6;25042:17;25032:27;;25000:61;25107:2;25099:6;25096:14;25076:18;25073:38;25070:161;;;25153:10;25148:3;25144:20;25141:1;25134:31;25188:4;25185:1;25178:15;25216:4;25213:1;25206:15;25070:161;;24857:380;;;:::o;25242:135::-;25281:3;-1:-1:-1;;25302:17:1;;25299:43;;;25322:18;;:::i;:::-;-1:-1:-1;25369:1:1;25358:13;;25242:135::o;25382:175::-;25419:3;25463:4;25456:5;25452:16;25492:4;25483:7;25480:17;25477:43;;;25500:18;;:::i;:::-;25549:1;25536:15;;25382:175;-1:-1:-1;;25382:175:1:o;25562:112::-;25594:1;25620;25610:35;;25625:18;;:::i;:::-;-1:-1:-1;25659:9:1;;25562:112::o;25679:127::-;25740:10;25735:3;25731:20;25728:1;25721:31;25771:4;25768:1;25761:15;25795:4;25792:1;25785:15;25811:127;25872:10;25867:3;25863:20;25860:1;25853:31;25903:4;25900:1;25893:15;25927:4;25924:1;25917:15;25943:127;26004:10;25999:3;25995:20;25992:1;25985:31;26035:4;26032:1;26025:15;26059:4;26056:1;26049:15;26075:127;26136:10;26131:3;26127:20;26124:1;26117:31;26167:4;26164:1;26157:15;26191:4;26188:1;26181:15;26207:127;26268:10;26263:3;26259:20;26256:1;26249:31;26299:4;26296:1;26289:15;26323:4;26320:1;26313:15;26339:131;-1:-1:-1;;;;;;26413:32:1;;26403:43;;26393:71;;26460:1;26457;26450:12
Swarm Source
ipfs://7d7afe47a39d6e13d83e0c4bedc2d76e6edd478de5b2cb1f668966ff2ca01104
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.