Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 288 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint With Token ... | 16639775 | 770 days ago | IN | 0 ETH | 0.00775116 | ||||
Safe Transfer | 16547231 | 783 days ago | IN | 0 ETH | 0.00199956 | ||||
Mint With Token ... | 16540126 | 784 days ago | IN | 0 ETH | 0.0040958 | ||||
Mint With Token ... | 16534526 | 784 days ago | IN | 0 ETH | 0.00522783 | ||||
Safe Transfer | 16533317 | 784 days ago | IN | 0 ETH | 0.00135636 | ||||
Safe Transfer | 16527389 | 785 days ago | IN | 0 ETH | 0.00341571 | ||||
Safe Transfer | 16491174 | 790 days ago | IN | 0 ETH | 0.00155123 | ||||
Mint With Token ... | 16482198 | 792 days ago | IN | 0 ETH | 0.00318912 | ||||
Mint With Token ... | 16470049 | 793 days ago | IN | 0 ETH | 0.00369337 | ||||
Safe Transfer | 16414826 | 801 days ago | IN | 0 ETH | 0.00205695 | ||||
Safe Transfer | 16414820 | 801 days ago | IN | 0 ETH | 0.00204264 | ||||
Mint With Token ... | 16392923 | 804 days ago | IN | 0 ETH | 0.00563784 | ||||
Mint With Token ... | 16392912 | 804 days ago | IN | 0 ETH | 0.00554104 | ||||
Mint With Token ... | 16392908 | 804 days ago | IN | 0 ETH | 0.00539531 | ||||
Mint With Token ... | 16392903 | 804 days ago | IN | 0 ETH | 0.00528187 | ||||
Mint With Token ... | 16391536 | 804 days ago | IN | 0 ETH | 0.00457541 | ||||
Mint With Token ... | 16384528 | 805 days ago | IN | 0 ETH | 0.00510931 | ||||
Mint With Token ... | 16378583 | 806 days ago | IN | 0 ETH | 0.00575578 | ||||
Mint With Token ... | 16378569 | 806 days ago | IN | 0 ETH | 0.00594713 | ||||
Mint With Token ... | 16225671 | 827 days ago | IN | 0 ETH | 0.00268247 | ||||
Mint With Token ... | 16218314 | 828 days ago | IN | 0 ETH | 0.00278848 | ||||
Mint With Token ... | 16183345 | 833 days ago | IN | 0 ETH | 0.00299814 | ||||
Mint With Token ... | 16183318 | 833 days ago | IN | 0 ETH | 0.00291833 | ||||
Mint With Token ... | 16183292 | 833 days ago | IN | 0 ETH | 0.00307289 | ||||
Mint With Token ... | 16183266 | 833 days ago | IN | 0 ETH | 0.00307289 |
Loading...
Loading
Contract Name:
Tatum721General
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-08 */ pragma solidity ^0.8.7; pragma experimental ABIEncoderV2; // SPDX-License-Identifier: MIT /** * @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); } /** * @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 payable; /** * @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 payable; } /** * @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); } /** * @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); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly {size := extcodesize(account)} return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success,) = recipient.call{value : amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value : value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } /** * @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 Ownable, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.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 payable override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual payable 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 || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: d* * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {} } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } function tokensOfOwner(address owner) public view returns (uint256[] memory) { uint256[] memory memoryArray = new uint256[](ERC721.balanceOf(owner)); for (uint i = 0; i < ERC721.balanceOf(owner); i++) { memoryArray[i] = _ownedTokens[owner][i]; } return memoryArray; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @dev ERC721 token with storage based token uri management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override { require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant"); _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override { require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke"); _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } contract Tatum721General is ERC721, ERC721Enumerable, ERC721URIStorage, Pausable, AccessControl, ERC721Burnable { bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bool _publicMint; constructor(string memory name_, string memory symbol_, bool publicMint) ERC721(name_, symbol_) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(PAUSER_ROLE, _msgSender()); _publicMint = publicMint; } function pause() public { require( hasRole(PAUSER_ROLE, _msgSender()), "TatumGeneral721: must have pauser role to pause" ); _pause(); } function unpause() public { require( hasRole(PAUSER_ROLE, _msgSender()), "TatumGeneral721: must have pauser role to pause" ); _unpause(); } /** * @dev Function to mint tokens. * @param to The address that will receive the minted tokens. * @param tokenId The token id to mint. * @param uri The token URI of the minted token. * @return A boolean that indicates if the operation was successful. */ function mintWithTokenURI( address to, uint256 tokenId, string memory uri ) public returns (bool) { if (!_publicMint) { require( hasRole(MINTER_ROLE, _msgSender()), "TatumGeneral721: must have minter role to mint" ); } _safeMint(to, tokenId); _setTokenURI(tokenId, uri); return true; } /** * @dev Function to mint tokens. This helper function allows to mint multiple NFTs in 1 transaction. * @param to The address that will receive the minted tokens. * @param tokenId The token id to mint. * @param uri The token URI of the minted token. * @return A boolean that indicates if the operation was successful. */ function mintMultiple( address[] memory to, uint256[] memory tokenId, string[] memory uri ) public returns (bool) { if (!_publicMint) { require( hasRole(MINTER_ROLE, _msgSender()), "TatumGeneral721: must have minter role to mint" ); } for (uint256 i = 0; i < to.length; i++) { _safeMint(to[i], tokenId[i]); _setTokenURI(tokenId[i], uri[i]); } return true; } function safeTransfer(address to, uint256 tokenId, bytes calldata data) public virtual { super._safeTransfer(_msgSender(), to, tokenId, data); } function safeTransfer(address to, uint256 tokenId) public virtual { super._safeTransfer(_msgSender(), to, tokenId, ""); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } // The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable, AccessControl) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"bool","name":"publicMint","type":"bool"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"to","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"string[]","name":"uri","type":"string[]"}],"name":"mintMultiple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintWithTokenURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620031a0380380620031a0833981016040819052620000349162000359565b82826200004133620000f8565b815162000056906001906020850190620001fc565b5080516200006c906002906020840190620001fc565b5050600c805460ff19169055506200008660003362000148565b620000b27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000148565b620000de7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000148565b600e805460ff191691151591909117905550620004309050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000154828262000158565b5050565b6000828152600d602090815260408083206001600160a01b038516845290915290205460ff1662000154576000828152600d602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001b83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200020a90620003dd565b90600052602060002090601f0160209004810192826200022e576000855562000279565b82601f106200024957805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002795782518255916020019190600101906200025c565b50620002879291506200028b565b5090565b5b808211156200028757600081556001016200028c565b600082601f830112620002b457600080fd5b81516001600160401b0380821115620002d157620002d16200041a565b604051601f8301601f19908116603f01168101908282118183101715620002fc57620002fc6200041a565b816040528381526020925086838588010111156200031957600080fd5b600091505b838210156200033d57858201830151818301840152908201906200031e565b838211156200034f5760008385830101525b9695505050505050565b6000806000606084860312156200036f57600080fd5b83516001600160401b03808211156200038757600080fd5b6200039587838801620002a2565b94506020860151915080821115620003ac57600080fd5b50620003bb86828701620002a2565b92505060408401518015158114620003d257600080fd5b809150509250925092565b600181811c90821680620003f257607f821691505b602082108114156200041457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612d6080620004406000396000f3fe60806040526004361061020f5760003560e01c80636352211e11610118578063a22cb465116100a0578063d547741f1161006f578063d547741f146105fa578063e63ab1e91461061a578063e985e9c51461064e578063eb79554914610697578063f2fde38b146106b757600080fd5b8063a22cb46514610573578063b88d4fde14610593578063c87b56dd146105a6578063d5391393146105c657600080fd5b80638462151c116100e75780638462151c146104de5780638da5cb5b1461050b57806391d148541461052957806395d89b4114610549578063a217fddf1461055e57600080fd5b80636352211e1461047457806370a0823114610494578063715018a6146104b45780638456cb59146104c957600080fd5b806336568abe1161019b57806342966c681161016a57806342966c68146103dc5780634f6ccce7146103fc57806350bb4e7f1461041c5780635a9c9eb81461043c5780635c975abb1461045c57600080fd5b806336568abe146103745780633f4ba83a14610394578063423f6cef146103a957806342842e0e146103c957600080fd5b806318160ddd116101e257806318160ddd146102c557806323b872dd146102e4578063248a9ca3146103045780632f2ff15d146103345780632f745c591461035457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f36600461290f565b6106d7565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106e8565b6040516102409190612a25565b34801561027757600080fd5b5061028b6102863660046128d3565b61077a565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be3660046126ea565b610807565b005b3480156102d157600080fd5b506009545b604051908152602001610240565b3480156102f057600080fd5b506102c36102ff3660046125f6565b61091d565b34801561031057600080fd5b506102d661031f3660046128d3565b6000908152600d602052604090206001015490565b34801561034057600080fd5b506102c361034f3660046128ec565b61094f565b34801561036057600080fd5b506102d661036f3660046126ea565b6109de565b34801561038057600080fd5b506102c361038f3660046128ec565b610a74565b3480156103a057600080fd5b506102c3610aee565b3480156103b557600080fd5b506102c36103c43660046126ea565b610b3e565b6102c36103d73660046125f6565b610b59565b3480156103e857600080fd5b506102c36103f73660046128d3565b610b74565b34801561040857600080fd5b506102d66104173660046128d3565b610bee565b34801561042857600080fd5b5061023461043736600461279b565b610c81565b34801561044857600080fd5b506102346104573660046127f2565b610cf2565b34801561046857600080fd5b50600c5460ff16610234565b34801561048057600080fd5b5061028b61048f3660046128d3565b610de6565b3480156104a057600080fd5b506102d66104af3660046125a8565b610e5d565b3480156104c057600080fd5b506102c3610ee4565b3480156104d557600080fd5b506102c3610f48565b3480156104ea57600080fd5b506104fe6104f93660046125a8565b610f96565b60405161024091906129e1565b34801561051757600080fd5b506000546001600160a01b031661028b565b34801561053557600080fd5b506102346105443660046128ec565b611056565b34801561055557600080fd5b5061025e611081565b34801561056a57600080fd5b506102d6600081565b34801561057f57600080fd5b506102c361058e3660046126ae565b611090565b6102c36105a1366004612632565b611155565b3480156105b257600080fd5b5061025e6105c13660046128d3565b61118d565b3480156105d257600080fd5b506102d67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b34801561060657600080fd5b506102c36106153660046128ec565b611198565b34801561062657600080fd5b506102d67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561065a57600080fd5b506102346106693660046125c3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156106a357600080fd5b506102c36106b2366004612714565b611218565b3480156106c357600080fd5b506102c36106d23660046125a8565b61125a565b60006106e282611322565b92915050565b6060600180546106f790612c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461072390612c3c565b80156107705780601f1061074557610100808354040283529160200191610770565b820191906000526020600020905b81548152906001019060200180831161075357829003601f168201915b5050505050905090565b600061078582611347565b6107eb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061081282610de6565b9050806001600160a01b0316836001600160a01b031614156108805760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107e2565b336001600160a01b038216148061089c575061089c8133610669565b61090e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107e2565b6109188383611364565b505050565b610928335b826113d2565b6109445760405162461bcd60e51b81526004016107e290612b27565b6109188383836114bc565b6000828152600d602052604090206001015461096c905b33611056565b6109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016107e2565b6109da8282611667565b5050565b60006109e983610e5d565b8210610a4b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107e2565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6001600160a01b0381163314610ae45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b6109da82826116ed565b610b187f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611056565b610b345760405162461bcd60e51b81526004016107e290612ad8565b610b3c611754565b565b6109da338383604051806020016040528060008152506117e7565b61091883838360405180602001604052806000815250611155565b610b7d33610922565b610be25760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016107e2565b610beb8161181a565b50565b6000610bf960095490565b8210610c5c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107e2565b60098281548110610c6f57610c6f612ce8565b90600052602060002001549050919050565b600e5460009060ff16610cd457610cb87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611056565b610cd45760405162461bcd60e51b81526004016107e290612a8a565b610cde8484611823565b610ce8838361183d565b5060019392505050565b600e5460009060ff16610d4557610d297f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611056565b610d455760405162461bcd60e51b81526004016107e290612a8a565b60005b8451811015610ddb57610d8d858281518110610d6657610d66612ce8565b6020026020010151858381518110610d8057610d80612ce8565b6020026020010151611823565b610dc9848281518110610da257610da2612ce8565b6020026020010151848381518110610dbc57610dbc612ce8565b602002602001015161183d565b80610dd381612c77565b915050610d48565b506001949350505050565b6000818152600360205260408120546001600160a01b0316806106e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107e2565b60006001600160a01b038216610ec85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107e2565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e2565b610b3c60006118c8565b610f727f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611056565b610f8e5760405162461bcd60e51b81526004016107e290612ad8565b610b3c611918565b60606000610fa383610e5d565b67ffffffffffffffff811115610fbb57610fbb612cfe565b604051908082528060200260200182016040528015610fe4578160200160208202803683370190505b50905060005b610ff384610e5d565b81101561104f576001600160a01b0384166000908152600760209081526040808320848452909152902054825183908390811061103257611032612ce8565b60209081029190910101528061104781612c77565b915050610fea565b5092915050565b6000918252600d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600280546106f790612c3c565b6001600160a01b0382163314156110e95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107e2565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61115f33836113d2565b61117b5760405162461bcd60e51b81526004016107e290612b27565b611187848484846117e7565b50505050565b60606106e282611993565b6000828152600d60205260409020600101546111b390610966565b610ae45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016107e2565b61118733858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e792505050565b6000546001600160a01b031633146112b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e2565b6001600160a01b0381166113195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e2565b610beb816118c8565b60006001600160e01b03198216637965db0b60e01b14806106e257506106e282611b02565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061139982610de6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113dd82611347565b61143e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107e2565b600061144983610de6565b9050806001600160a01b0316846001600160a01b031614806114845750836001600160a01b03166114798461077a565b6001600160a01b0316145b806114b457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166114cf82610de6565b6001600160a01b0316146115375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107e2565b6001600160a01b0382166115995760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107e2565b6115a4838383611b27565b6115af600082611364565b6001600160a01b03831660009081526004602052604081208054600192906115d8908490612bf9565b90915550506001600160a01b0382166000908152600460205260408120805460019290611606908490612bcd565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6116718282611056565b6109da576000828152600d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116a93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6116f78282611056565b156109da576000828152600d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600c5460ff1661179d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e2565b600c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6117f28484846114bc565b6117fe84848484611b78565b6111875760405162461bcd60e51b81526004016107e290612a38565b610beb81611c7a565b6109da828260405180602001604052806000815250611cba565b61184682611347565b6118a95760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016107e2565b6000828152600b60209081526040909120825161091892840190612341565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600c5460ff161561195e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e2565b600c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117ca3390565b606061199e82611347565b611a045760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016107e2565b6000828152600b602052604081208054611a1d90612c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4990612c3c565b8015611a965780601f10611a6b57610100808354040283529160200191611a96565b820191906000526020600020905b815481529060010190602001808311611a7957829003601f168201915b505050505090506000611ab460408051602081019091526000815290565b9050805160001415611ac7575092915050565b815115611af9578082604051602001611ae1929190612975565b60405160208183030381529060405292505050919050565b6114b484611ced565b60006001600160e01b0319821663780e9d6360e01b14806106e257506106e282611dc5565b600c5460ff1615611b6d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e2565b610918838383611e15565b60006001600160a01b0384163b15610ddb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bbc9033908990889088906004016129a4565b602060405180830381600087803b158015611bd657600080fd5b505af1925050508015611c06575060408051601f3d908101601f19168201909252611c039181019061292c565b60015b611c60573d808015611c34576040519150601f19603f3d011682016040523d82523d6000602084013e611c39565b606091505b508051611c585760405162461bcd60e51b81526004016107e290612a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114b4565b611c8381611ecd565b6000818152600b602052604090208054611c9c90612c3c565b159050610beb576000818152600b60205260408120610beb916123c5565b611cc48383611f74565b611cd16000848484611b78565b6109185760405162461bcd60e51b81526004016107e290612a38565b6060611cf882611347565b611d5c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107e2565b6000611d7360408051602081019091526000815290565b90506000815111611d935760405180602001604052806000815250611dbe565b80611d9d846120b3565b604051602001611dae929190612975565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982166380ac58cd60e01b1480611df657506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b6001600160a01b038316611e7057611e6b81600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611e93565b816001600160a01b0316836001600160a01b031614611e9357611e9383826121b1565b6001600160a01b038216611eaa576109188161224e565b826001600160a01b0316826001600160a01b0316146109185761091882826122fd565b6000611ed882610de6565b9050611ee681600084611b27565b611ef1600083611364565b6001600160a01b0381166000908152600460205260408120805460019290611f1a908490612bf9565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038216611fca5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107e2565b611fd381611347565b156120205760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107e2565b61202c60008383611b27565b6001600160a01b0382166000908152600460205260408120805460019290612055908490612bcd565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816120d75750506040805180820190915260018152600360fc1b602082015290565b8160005b811561210157806120eb81612c77565b91506120fa9050600a83612be5565b91506120db565b60008167ffffffffffffffff81111561211c5761211c612cfe565b6040519080825280601f01601f191660200182016040528015612146576020820181803683370190505b5090505b84156114b45761215b600183612bf9565b9150612168600a86612c92565b612173906030612bcd565b60f81b81838151811061218857612188612ce8565b60200101906001600160f81b031916908160001a9053506121aa600a86612be5565b945061214a565b600060016121be84610e5d565b6121c89190612bf9565b60008381526008602052604090205490915080821461221b576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061226090600190612bf9565b6000838152600a60205260408120546009805493945090928490811061228857612288612ce8565b9060005260206000200154905080600983815481106122a9576122a9612ce8565b6000918252602080832090910192909255828152600a909152604080822084905585825281205560098054806122e1576122e1612cd2565b6001900381819060005260206000200160009055905550505050565b600061230883610e5d565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b82805461234d90612c3c565b90600052602060002090601f01602090048101928261236f57600085556123b5565b82601f1061238857805160ff19168380011785556123b5565b828001600101855582156123b5579182015b828111156123b557825182559160200191906001019061239a565b506123c19291506123fb565b5090565b5080546123d190612c3c565b6000825580601f106123e1575050565b601f016020900490600052602060002090810190610beb91905b5b808211156123c157600081556001016123fc565b600067ffffffffffffffff83111561242a5761242a612cfe565b61243d601f8401601f1916602001612b78565b905082815283838301111561245157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461247f57600080fd5b919050565b600082601f83011261249557600080fd5b813560206124aa6124a583612ba9565b612b78565b80838252828201915082860187848660051b89010111156124ca57600080fd5b6000805b8681101561250d57823567ffffffffffffffff8111156124ec578283fd5b6124fa8b88838d0101612588565b86525093850193918501916001016124ce565b509198975050505050505050565b600082601f83011261252c57600080fd5b8135602061253c6124a583612ba9565b80838252828201915082860187848660051b890101111561255c57600080fd5b60005b8581101561257b5781358452928401929084019060010161255f565b5090979650505050505050565b600082601f83011261259957600080fd5b611dbe83833560208501612410565b6000602082840312156125ba57600080fd5b611dbe82612468565b600080604083850312156125d657600080fd5b6125df83612468565b91506125ed60208401612468565b90509250929050565b60008060006060848603121561260b57600080fd5b61261484612468565b925061262260208501612468565b9150604084013590509250925092565b6000806000806080858703121561264857600080fd5b61265185612468565b935061265f60208601612468565b925060408501359150606085013567ffffffffffffffff81111561268257600080fd5b8501601f8101871361269357600080fd5b6126a287823560208401612410565b91505092959194509250565b600080604083850312156126c157600080fd5b6126ca83612468565b9150602083013580151581146126df57600080fd5b809150509250929050565b600080604083850312156126fd57600080fd5b61270683612468565b946020939093013593505050565b6000806000806060858703121561272a57600080fd5b61273385612468565b935060208501359250604085013567ffffffffffffffff8082111561275757600080fd5b818701915087601f83011261276b57600080fd5b81358181111561277a57600080fd5b88602082850101111561278c57600080fd5b95989497505060200194505050565b6000806000606084860312156127b057600080fd5b6127b984612468565b925060208401359150604084013567ffffffffffffffff8111156127dc57600080fd5b6127e886828701612588565b9150509250925092565b60008060006060848603121561280757600080fd5b833567ffffffffffffffff8082111561281f57600080fd5b818601915086601f83011261283357600080fd5b813560206128436124a583612ba9565b8083825282820191508286018b848660051b890101111561286357600080fd5b600096505b8487101561288d5761287981612468565b835260019690960195918301918301612868565b50975050870135925050808211156128a457600080fd5b6128b08783880161251b565b935060408601359150808211156128c657600080fd5b506127e886828701612484565b6000602082840312156128e557600080fd5b5035919050565b600080604083850312156128ff57600080fd5b823591506125ed60208401612468565b60006020828403121561292157600080fd5b8135611dbe81612d14565b60006020828403121561293e57600080fd5b8151611dbe81612d14565b60008151808452612961816020860160208601612c10565b601f01601f19169290920160200192915050565b60008351612987818460208801612c10565b83519083019061299b818360208801612c10565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129d790830184612949565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a19578351835292840192918401916001016129fd565b50909695505050505050565b602081526000611dbe6020830184612949565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f546174756d47656e6572616c3732313a206d7573742068617665206d696e746560408201526d1c881c9bdb19481d1bc81b5a5b9d60921b606082015260800190565b6020808252602f908201527f546174756d47656e6572616c3732313a206d757374206861766520706175736560408201526e7220726f6c6520746f20706175736560881b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba157612ba1612cfe565b604052919050565b600067ffffffffffffffff821115612bc357612bc3612cfe565b5060051b60200190565b60008219821115612be057612be0612ca6565b500190565b600082612bf457612bf4612cbc565b500490565b600082821015612c0b57612c0b612ca6565b500390565b60005b83811015612c2b578181015183820152602001612c13565b838111156111875750506000910152565b600181811c90821680612c5057607f821691505b60208210811415612c7157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c8b57612c8b612ca6565b5060010190565b600082612ca157612ca1612cbc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610beb57600080fdfea264697066735822122017fef8eede37ce96f2a081fe821d2df22f3e5e50438c6bea88d46fc30874de1e64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a4544504159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a45445041590000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636352211e11610118578063a22cb465116100a0578063d547741f1161006f578063d547741f146105fa578063e63ab1e91461061a578063e985e9c51461064e578063eb79554914610697578063f2fde38b146106b757600080fd5b8063a22cb46514610573578063b88d4fde14610593578063c87b56dd146105a6578063d5391393146105c657600080fd5b80638462151c116100e75780638462151c146104de5780638da5cb5b1461050b57806391d148541461052957806395d89b4114610549578063a217fddf1461055e57600080fd5b80636352211e1461047457806370a0823114610494578063715018a6146104b45780638456cb59146104c957600080fd5b806336568abe1161019b57806342966c681161016a57806342966c68146103dc5780634f6ccce7146103fc57806350bb4e7f1461041c5780635a9c9eb81461043c5780635c975abb1461045c57600080fd5b806336568abe146103745780633f4ba83a14610394578063423f6cef146103a957806342842e0e146103c957600080fd5b806318160ddd116101e257806318160ddd146102c557806323b872dd146102e4578063248a9ca3146103045780632f2ff15d146103345780632f745c591461035457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f36600461290f565b6106d7565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106e8565b6040516102409190612a25565b34801561027757600080fd5b5061028b6102863660046128d3565b61077a565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be3660046126ea565b610807565b005b3480156102d157600080fd5b506009545b604051908152602001610240565b3480156102f057600080fd5b506102c36102ff3660046125f6565b61091d565b34801561031057600080fd5b506102d661031f3660046128d3565b6000908152600d602052604090206001015490565b34801561034057600080fd5b506102c361034f3660046128ec565b61094f565b34801561036057600080fd5b506102d661036f3660046126ea565b6109de565b34801561038057600080fd5b506102c361038f3660046128ec565b610a74565b3480156103a057600080fd5b506102c3610aee565b3480156103b557600080fd5b506102c36103c43660046126ea565b610b3e565b6102c36103d73660046125f6565b610b59565b3480156103e857600080fd5b506102c36103f73660046128d3565b610b74565b34801561040857600080fd5b506102d66104173660046128d3565b610bee565b34801561042857600080fd5b5061023461043736600461279b565b610c81565b34801561044857600080fd5b506102346104573660046127f2565b610cf2565b34801561046857600080fd5b50600c5460ff16610234565b34801561048057600080fd5b5061028b61048f3660046128d3565b610de6565b3480156104a057600080fd5b506102d66104af3660046125a8565b610e5d565b3480156104c057600080fd5b506102c3610ee4565b3480156104d557600080fd5b506102c3610f48565b3480156104ea57600080fd5b506104fe6104f93660046125a8565b610f96565b60405161024091906129e1565b34801561051757600080fd5b506000546001600160a01b031661028b565b34801561053557600080fd5b506102346105443660046128ec565b611056565b34801561055557600080fd5b5061025e611081565b34801561056a57600080fd5b506102d6600081565b34801561057f57600080fd5b506102c361058e3660046126ae565b611090565b6102c36105a1366004612632565b611155565b3480156105b257600080fd5b5061025e6105c13660046128d3565b61118d565b3480156105d257600080fd5b506102d67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b34801561060657600080fd5b506102c36106153660046128ec565b611198565b34801561062657600080fd5b506102d67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561065a57600080fd5b506102346106693660046125c3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156106a357600080fd5b506102c36106b2366004612714565b611218565b3480156106c357600080fd5b506102c36106d23660046125a8565b61125a565b60006106e282611322565b92915050565b6060600180546106f790612c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461072390612c3c565b80156107705780601f1061074557610100808354040283529160200191610770565b820191906000526020600020905b81548152906001019060200180831161075357829003601f168201915b5050505050905090565b600061078582611347565b6107eb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061081282610de6565b9050806001600160a01b0316836001600160a01b031614156108805760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107e2565b336001600160a01b038216148061089c575061089c8133610669565b61090e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107e2565b6109188383611364565b505050565b610928335b826113d2565b6109445760405162461bcd60e51b81526004016107e290612b27565b6109188383836114bc565b6000828152600d602052604090206001015461096c905b33611056565b6109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016107e2565b6109da8282611667565b5050565b60006109e983610e5d565b8210610a4b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107e2565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6001600160a01b0381163314610ae45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b6109da82826116ed565b610b187f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611056565b610b345760405162461bcd60e51b81526004016107e290612ad8565b610b3c611754565b565b6109da338383604051806020016040528060008152506117e7565b61091883838360405180602001604052806000815250611155565b610b7d33610922565b610be25760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016107e2565b610beb8161181a565b50565b6000610bf960095490565b8210610c5c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107e2565b60098281548110610c6f57610c6f612ce8565b90600052602060002001549050919050565b600e5460009060ff16610cd457610cb87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611056565b610cd45760405162461bcd60e51b81526004016107e290612a8a565b610cde8484611823565b610ce8838361183d565b5060019392505050565b600e5460009060ff16610d4557610d297f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611056565b610d455760405162461bcd60e51b81526004016107e290612a8a565b60005b8451811015610ddb57610d8d858281518110610d6657610d66612ce8565b6020026020010151858381518110610d8057610d80612ce8565b6020026020010151611823565b610dc9848281518110610da257610da2612ce8565b6020026020010151848381518110610dbc57610dbc612ce8565b602002602001015161183d565b80610dd381612c77565b915050610d48565b506001949350505050565b6000818152600360205260408120546001600160a01b0316806106e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107e2565b60006001600160a01b038216610ec85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107e2565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e2565b610b3c60006118c8565b610f727f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611056565b610f8e5760405162461bcd60e51b81526004016107e290612ad8565b610b3c611918565b60606000610fa383610e5d565b67ffffffffffffffff811115610fbb57610fbb612cfe565b604051908082528060200260200182016040528015610fe4578160200160208202803683370190505b50905060005b610ff384610e5d565b81101561104f576001600160a01b0384166000908152600760209081526040808320848452909152902054825183908390811061103257611032612ce8565b60209081029190910101528061104781612c77565b915050610fea565b5092915050565b6000918252600d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600280546106f790612c3c565b6001600160a01b0382163314156110e95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107e2565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61115f33836113d2565b61117b5760405162461bcd60e51b81526004016107e290612b27565b611187848484846117e7565b50505050565b60606106e282611993565b6000828152600d60205260409020600101546111b390610966565b610ae45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016107e2565b61118733858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e792505050565b6000546001600160a01b031633146112b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e2565b6001600160a01b0381166113195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e2565b610beb816118c8565b60006001600160e01b03198216637965db0b60e01b14806106e257506106e282611b02565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061139982610de6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113dd82611347565b61143e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107e2565b600061144983610de6565b9050806001600160a01b0316846001600160a01b031614806114845750836001600160a01b03166114798461077a565b6001600160a01b0316145b806114b457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166114cf82610de6565b6001600160a01b0316146115375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107e2565b6001600160a01b0382166115995760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107e2565b6115a4838383611b27565b6115af600082611364565b6001600160a01b03831660009081526004602052604081208054600192906115d8908490612bf9565b90915550506001600160a01b0382166000908152600460205260408120805460019290611606908490612bcd565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6116718282611056565b6109da576000828152600d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116a93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6116f78282611056565b156109da576000828152600d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600c5460ff1661179d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e2565b600c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6117f28484846114bc565b6117fe84848484611b78565b6111875760405162461bcd60e51b81526004016107e290612a38565b610beb81611c7a565b6109da828260405180602001604052806000815250611cba565b61184682611347565b6118a95760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016107e2565b6000828152600b60209081526040909120825161091892840190612341565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600c5460ff161561195e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e2565b600c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117ca3390565b606061199e82611347565b611a045760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016107e2565b6000828152600b602052604081208054611a1d90612c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4990612c3c565b8015611a965780601f10611a6b57610100808354040283529160200191611a96565b820191906000526020600020905b815481529060010190602001808311611a7957829003601f168201915b505050505090506000611ab460408051602081019091526000815290565b9050805160001415611ac7575092915050565b815115611af9578082604051602001611ae1929190612975565b60405160208183030381529060405292505050919050565b6114b484611ced565b60006001600160e01b0319821663780e9d6360e01b14806106e257506106e282611dc5565b600c5460ff1615611b6d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e2565b610918838383611e15565b60006001600160a01b0384163b15610ddb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bbc9033908990889088906004016129a4565b602060405180830381600087803b158015611bd657600080fd5b505af1925050508015611c06575060408051601f3d908101601f19168201909252611c039181019061292c565b60015b611c60573d808015611c34576040519150601f19603f3d011682016040523d82523d6000602084013e611c39565b606091505b508051611c585760405162461bcd60e51b81526004016107e290612a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114b4565b611c8381611ecd565b6000818152600b602052604090208054611c9c90612c3c565b159050610beb576000818152600b60205260408120610beb916123c5565b611cc48383611f74565b611cd16000848484611b78565b6109185760405162461bcd60e51b81526004016107e290612a38565b6060611cf882611347565b611d5c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107e2565b6000611d7360408051602081019091526000815290565b90506000815111611d935760405180602001604052806000815250611dbe565b80611d9d846120b3565b604051602001611dae929190612975565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982166380ac58cd60e01b1480611df657506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b6001600160a01b038316611e7057611e6b81600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611e93565b816001600160a01b0316836001600160a01b031614611e9357611e9383826121b1565b6001600160a01b038216611eaa576109188161224e565b826001600160a01b0316826001600160a01b0316146109185761091882826122fd565b6000611ed882610de6565b9050611ee681600084611b27565b611ef1600083611364565b6001600160a01b0381166000908152600460205260408120805460019290611f1a908490612bf9565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038216611fca5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107e2565b611fd381611347565b156120205760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107e2565b61202c60008383611b27565b6001600160a01b0382166000908152600460205260408120805460019290612055908490612bcd565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816120d75750506040805180820190915260018152600360fc1b602082015290565b8160005b811561210157806120eb81612c77565b91506120fa9050600a83612be5565b91506120db565b60008167ffffffffffffffff81111561211c5761211c612cfe565b6040519080825280601f01601f191660200182016040528015612146576020820181803683370190505b5090505b84156114b45761215b600183612bf9565b9150612168600a86612c92565b612173906030612bcd565b60f81b81838151811061218857612188612ce8565b60200101906001600160f81b031916908160001a9053506121aa600a86612be5565b945061214a565b600060016121be84610e5d565b6121c89190612bf9565b60008381526008602052604090205490915080821461221b576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061226090600190612bf9565b6000838152600a60205260408120546009805493945090928490811061228857612288612ce8565b9060005260206000200154905080600983815481106122a9576122a9612ce8565b6000918252602080832090910192909255828152600a909152604080822084905585825281205560098054806122e1576122e1612cd2565b6001900381819060005260206000200160009055905550505050565b600061230883610e5d565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b82805461234d90612c3c565b90600052602060002090601f01602090048101928261236f57600085556123b5565b82601f1061238857805160ff19168380011785556123b5565b828001600101855582156123b5579182015b828111156123b557825182559160200191906001019061239a565b506123c19291506123fb565b5090565b5080546123d190612c3c565b6000825580601f106123e1575050565b601f016020900490600052602060002090810190610beb91905b5b808211156123c157600081556001016123fc565b600067ffffffffffffffff83111561242a5761242a612cfe565b61243d601f8401601f1916602001612b78565b905082815283838301111561245157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461247f57600080fd5b919050565b600082601f83011261249557600080fd5b813560206124aa6124a583612ba9565b612b78565b80838252828201915082860187848660051b89010111156124ca57600080fd5b6000805b8681101561250d57823567ffffffffffffffff8111156124ec578283fd5b6124fa8b88838d0101612588565b86525093850193918501916001016124ce565b509198975050505050505050565b600082601f83011261252c57600080fd5b8135602061253c6124a583612ba9565b80838252828201915082860187848660051b890101111561255c57600080fd5b60005b8581101561257b5781358452928401929084019060010161255f565b5090979650505050505050565b600082601f83011261259957600080fd5b611dbe83833560208501612410565b6000602082840312156125ba57600080fd5b611dbe82612468565b600080604083850312156125d657600080fd5b6125df83612468565b91506125ed60208401612468565b90509250929050565b60008060006060848603121561260b57600080fd5b61261484612468565b925061262260208501612468565b9150604084013590509250925092565b6000806000806080858703121561264857600080fd5b61265185612468565b935061265f60208601612468565b925060408501359150606085013567ffffffffffffffff81111561268257600080fd5b8501601f8101871361269357600080fd5b6126a287823560208401612410565b91505092959194509250565b600080604083850312156126c157600080fd5b6126ca83612468565b9150602083013580151581146126df57600080fd5b809150509250929050565b600080604083850312156126fd57600080fd5b61270683612468565b946020939093013593505050565b6000806000806060858703121561272a57600080fd5b61273385612468565b935060208501359250604085013567ffffffffffffffff8082111561275757600080fd5b818701915087601f83011261276b57600080fd5b81358181111561277a57600080fd5b88602082850101111561278c57600080fd5b95989497505060200194505050565b6000806000606084860312156127b057600080fd5b6127b984612468565b925060208401359150604084013567ffffffffffffffff8111156127dc57600080fd5b6127e886828701612588565b9150509250925092565b60008060006060848603121561280757600080fd5b833567ffffffffffffffff8082111561281f57600080fd5b818601915086601f83011261283357600080fd5b813560206128436124a583612ba9565b8083825282820191508286018b848660051b890101111561286357600080fd5b600096505b8487101561288d5761287981612468565b835260019690960195918301918301612868565b50975050870135925050808211156128a457600080fd5b6128b08783880161251b565b935060408601359150808211156128c657600080fd5b506127e886828701612484565b6000602082840312156128e557600080fd5b5035919050565b600080604083850312156128ff57600080fd5b823591506125ed60208401612468565b60006020828403121561292157600080fd5b8135611dbe81612d14565b60006020828403121561293e57600080fd5b8151611dbe81612d14565b60008151808452612961816020860160208601612c10565b601f01601f19169290920160200192915050565b60008351612987818460208801612c10565b83519083019061299b818360208801612c10565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129d790830184612949565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a19578351835292840192918401916001016129fd565b50909695505050505050565b602081526000611dbe6020830184612949565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f546174756d47656e6572616c3732313a206d7573742068617665206d696e746560408201526d1c881c9bdb19481d1bc81b5a5b9d60921b606082015260800190565b6020808252602f908201527f546174756d47656e6572616c3732313a206d757374206861766520706175736560408201526e7220726f6c6520746f20706175736560881b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba157612ba1612cfe565b604052919050565b600067ffffffffffffffff821115612bc357612bc3612cfe565b5060051b60200190565b60008219821115612be057612be0612ca6565b500190565b600082612bf457612bf4612cbc565b500490565b600082821015612c0b57612c0b612ca6565b500390565b60005b83811015612c2b578181015183820152602001612c13565b838111156111875750506000910152565b600181811c90821680612c5057607f821691505b60208210811415612c7157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c8b57612c8b612ca6565b5060010190565b600082612ca157612ca1612cbc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610beb57600080fdfea264697066735822122017fef8eede37ce96f2a081fe821d2df22f3e5e50438c6bea88d46fc30874de1e64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a4544504159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a45445041590000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): ZEDPAY
Arg [1] : symbol_ (string): ZEDPAY
Arg [2] : publicMint (bool): False
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 5a45445041590000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5a45445041590000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
54352:3751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57889:211;;;;;;;;;;-1:-1:-1;57889:211:0;;;;;:::i;:::-;;:::i;:::-;;;10416:14:1;;10409:22;10391:41;;10379:2;10364:18;57889:211:0;;;;;;;;24079:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25538:221::-;;;;;;;;;;-1:-1:-1;25538:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9077:32:1;;;9059:51;;9047:2;9032:18;25538:221:0;8913:203:1;25068:404:0;;;;;;;;;;-1:-1:-1;25068:404:0;;;;;:::i;:::-;;:::i;:::-;;36763:113;;;;;;;;;;-1:-1:-1;36851:10:0;:17;36763:113;;;10589:25:1;;;10577:2;10562:18;36763:113:0;10443:177:1;26428:305:0;;;;;;;;;;-1:-1:-1;26428:305:0;;;;;:::i;:::-;;:::i;50427:123::-;;;;;;;;;;-1:-1:-1;50427:123:0;;;;;:::i;:::-;50493:7;50520:12;;;:6;:12;;;;;:22;;;;50427:123;50812:232;;;;;;;;;;-1:-1:-1;50812:232:0;;;;;:::i;:::-;;:::i;36102:256::-;;;;;;;;;;-1:-1:-1;36102:256:0;;;;;:::i;:::-;;:::i;52031:218::-;;;;;;;;;;-1:-1:-1;52031:218:0;;;;;:::i;:::-;;:::i;55143:197::-;;;;;;;;;;;;;:::i;57142:135::-;;;;;;;;;;-1:-1:-1;57142:135:0;;;;;:::i;:::-;;:::i;26804:159::-;;;;;;:::i;:::-;;:::i;54098:245::-;;;;;;;;;;-1:-1:-1;54098:245:0;;;;;:::i;:::-;;:::i;36953:233::-;;;;;;;;;;-1:-1:-1;36953:233:0;;;;;:::i;:::-;;:::i;55645:427::-;;;;;;;;;;-1:-1:-1;55645:427:0;;;;;:::i;:::-;;:::i;56443:525::-;;;;;;;;;;-1:-1:-1;56443:525:0;;;;;:::i;:::-;;:::i;45079:86::-;;;;;;;;;;-1:-1:-1;45150:7:0;;;;45079:86;;23773:239;;;;;;;;;;-1:-1:-1;23773:239:0;;;;;:::i;:::-;;:::i;23503:208::-;;;;;;;;;;-1:-1:-1;23503:208:0;;;;;:::i;:::-;;:::i;18263:103::-;;;;;;;;;;;;;:::i;54942:193::-;;;;;;;;;;;;;:::i;36366:321::-;;;;;;;;;;-1:-1:-1;36366:321:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17612:87::-;;;;;;;;;;-1:-1:-1;17658:7:0;17685:6;-1:-1:-1;;;;;17685:6:0;17612:87;;50099:139;;;;;;;;;;-1:-1:-1;50099:139:0;;;;;:::i;:::-;;:::i;24248:104::-;;;;;;;;;;;;;:::i;48559:49::-;;;;;;;;;;-1:-1:-1;48559:49:0;48604:4;48559:49;;25831:295;;;;;;;;;;-1:-1:-1;25831:295:0;;;;;:::i;:::-;;:::i;27034:293::-;;;;;;:::i;:::-;;:::i;57701:180::-;;;;;;;;;;-1:-1:-1;57701:180:0;;;;;:::i;:::-;;:::i;54540:62::-;;;;;;;;;;;;54578:24;54540:62;;51289:235;;;;;;;;;;-1:-1:-1;51289:235:0;;;;;:::i;:::-;;:::i;54471:62::-;;;;;;;;;;;;54509:24;54471:62;;26197:164;;;;;;;;;;-1:-1:-1;26197:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26318:25:0;;;26294:4;26318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26197:164;56976:158;;;;;;;;;;-1:-1:-1;56976:158:0;;;;;:::i;:::-;;:::i;18521:201::-;;;;;;;;;;-1:-1:-1;18521:201:0;;;;;:::i;:::-;;:::i;57889:211::-;58027:4;58056:36;58080:11;58056:23;:36::i;:::-;58049:43;57889:211;-1:-1:-1;;57889:211:0:o;24079:100::-;24133:13;24166:5;24159:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24079:100;:::o;25538:221::-;25614:7;25642:16;25650:7;25642;:16::i;:::-;25634:73;;;;-1:-1:-1;;;25634:73:0;;18200:2:1;25634:73:0;;;18182:21:1;18239:2;18219:18;;;18212:30;18278:34;18258:18;;;18251:62;-1:-1:-1;;;18329:18:1;;;18322:42;18381:19;;25634:73:0;;;;;;;;;-1:-1:-1;25727:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25727:24:0;;25538:221::o;25068:404::-;25149:13;25165:23;25180:7;25165:14;:23::i;:::-;25149:39;;25213:5;-1:-1:-1;;;;;25207:11:0;:2;-1:-1:-1;;;;;25207:11:0;;;25199:57;;;;-1:-1:-1;;;25199:57:0;;20216:2:1;25199:57:0;;;20198:21:1;20255:2;20235:18;;;20228:30;20294:34;20274:18;;;20267:62;-1:-1:-1;;;20345:18:1;;;20338:31;20386:19;;25199:57:0;20014:397:1;25199:57:0;16359:10;-1:-1:-1;;;;;25277:21:0;;;;:69;;-1:-1:-1;25302:44:0;25326:5;16359:10;26197:164;:::i;25302:44::-;25269:161;;;;-1:-1:-1;;;25269:161:0;;15345:2:1;25269:161:0;;;15327:21:1;15384:2;15364:18;;;15357:30;15423:34;15403:18;;;15396:62;15494:26;15474:18;;;15467:54;15538:19;;25269:161:0;15143:420:1;25269:161:0;25443:21;25452:2;25456:7;25443:8;:21::i;:::-;25138:334;25068:404;;:::o;26428:305::-;26589:41;16359:10;26608:12;26622:7;26589:18;:41::i;:::-;26581:103;;;;-1:-1:-1;;;26581:103:0;;;;;;;:::i;:::-;26697:28;26707:4;26713:2;26717:7;26697:9;:28::i;50812:232::-;50493:7;50520:12;;;:6;:12;;;;;:22;;;50905:41;;50913:18;16359:10;50099:139;:::i;50905:41::-;50897:101;;;;-1:-1:-1;;;50897:101:0;;11051:2:1;50897:101:0;;;11033:21:1;11090:2;11070:18;;;11063:30;11129:34;11109:18;;;11102:62;-1:-1:-1;;;11180:18:1;;;11173:45;11235:19;;50897:101:0;10849:411:1;50897:101:0;51011:25;51022:4;51028:7;51011:10;:25::i;:::-;50812:232;;:::o;36102:256::-;36199:7;36235:23;36252:5;36235:16;:23::i;:::-;36227:5;:31;36219:87;;;;-1:-1:-1;;;36219:87:0;;11816:2:1;36219:87:0;;;11798:21:1;11855:2;11835:18;;;11828:30;11894:34;11874:18;;;11867:62;-1:-1:-1;;;11945:18:1;;;11938:41;11996:19;;36219:87:0;11614:407:1;36219:87:0;-1:-1:-1;;;;;;36324:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36102:256::o;52031:218::-;-1:-1:-1;;;;;52127:23:0;;16359:10;52127:23;52119:83;;;;-1:-1:-1;;;52119:83:0;;21866:2:1;52119:83:0;;;21848:21:1;21905:2;21885:18;;;21878:30;21944:34;21924:18;;;21917:62;-1:-1:-1;;;21995:18:1;;;21988:45;22050:19;;52119:83:0;21664:411:1;52119:83:0;52215:26;52227:4;52233:7;52215:11;:26::i;55143:197::-;55202:34;54509:24;16359:10;50099:139;:::i;55202:34::-;55180:131;;;;-1:-1:-1;;;55180:131:0;;;;;;;:::i;:::-;55322:10;:8;:10::i;:::-;55143:197::o;57142:135::-;57219:50;16359:10;57253:2;57257:7;57219:50;;;;;;;;;;;;:19;:50::i;26804:159::-;26916:39;26933:4;26939:2;26943:7;26916:39;;;;;;;;;;;;:16;:39::i;54098:245::-;54216:41;16359:10;54235:12;16279:98;54216:41;54208:102;;;;-1:-1:-1;;;54208:102:0;;21449:2:1;54208:102:0;;;21431:21:1;21488:2;21468:18;;;21461:30;21527:34;21507:18;;;21500:62;-1:-1:-1;;;21578:18:1;;;21571:46;21634:19;;54208:102:0;21247:412:1;54208:102:0;54321:14;54327:7;54321:5;:14::i;:::-;54098:245;:::o;36953:233::-;37028:7;37064:30;36851:10;:17;;36763:113;37064:30;37056:5;:38;37048:95;;;;-1:-1:-1;;;37048:95:0;;21036:2:1;37048:95:0;;;21018:21:1;21075:2;21055:18;;;21048:30;21114:34;21094:18;;;21087:62;-1:-1:-1;;;21165:18:1;;;21158:42;21217:19;;37048:95:0;20834:408:1;37048:95:0;37161:10;37172:5;37161:17;;;;;;;;:::i;:::-;;;;;;;;;37154:24;;36953:233;;;:::o;55645:427::-;55791:11;;55769:4;;55791:11;;55786:187;;55845:34;54578:24;16359:10;50099:139;:::i;55845:34::-;55819:142;;;;-1:-1:-1;;;55819:142:0;;;;;;;:::i;:::-;55983:22;55993:2;55997:7;55983:9;:22::i;:::-;56016:26;56029:7;56038:3;56016:12;:26::i;:::-;-1:-1:-1;56060:4:0;55645:427;;;;;:::o;56443:525::-;56605:11;;56583:4;;56605:11;;56600:187;;56659:34;54578:24;16359:10;50099:139;:::i;56659:34::-;56633:142;;;;-1:-1:-1;;;56633:142:0;;;;;;;:::i;:::-;56802:9;56797:142;56821:2;:9;56817:1;:13;56797:142;;;56852:28;56862:2;56865:1;56862:5;;;;;;;;:::i;:::-;;;;;;;56869:7;56877:1;56869:10;;;;;;;;:::i;:::-;;;;;;;56852:9;:28::i;:::-;56895:32;56908:7;56916:1;56908:10;;;;;;;;:::i;:::-;;;;;;;56920:3;56924:1;56920:6;;;;;;;;:::i;:::-;;;;;;;56895:12;:32::i;:::-;56832:3;;;;:::i;:::-;;;;56797:142;;;-1:-1:-1;56956:4:0;;56443:525;-1:-1:-1;;;;56443:525:0:o;23773:239::-;23845:7;23881:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23881:16:0;23916:19;23908:73;;;;-1:-1:-1;;;23908:73:0;;16181:2:1;23908:73:0;;;16163:21:1;16220:2;16200:18;;;16193:30;16259:34;16239:18;;;16232:62;-1:-1:-1;;;16310:18:1;;;16303:39;16359:19;;23908:73:0;15979:405:1;23503:208:0;23575:7;-1:-1:-1;;;;;23603:19:0;;23595:74;;;;-1:-1:-1;;;23595:74:0;;15770:2:1;23595:74:0;;;15752:21:1;15809:2;15789:18;;;15782:30;15848:34;15828:18;;;15821:62;-1:-1:-1;;;15899:18:1;;;15892:40;15949:19;;23595:74:0;15568:406:1;23595:74:0;-1:-1:-1;;;;;;23687:16:0;;;;;:9;:16;;;;;;;23503:208::o;18263:103::-;17658:7;17685:6;-1:-1:-1;;;;;17685:6:0;16359:10;17832:23;17824:68;;;;-1:-1:-1;;;17824:68:0;;18613:2:1;17824:68:0;;;18595:21:1;;;18632:18;;;18625:30;18691:34;18671:18;;;18664:62;18743:18;;17824:68:0;18411:356:1;17824:68:0;18328:30:::1;18355:1;18328:18;:30::i;54942:193::-:0;54999:34;54509:24;16359:10;50099:139;:::i;54999:34::-;54977:131;;;;-1:-1:-1;;;54977:131:0;;;;;;;:::i;:::-;55119:8;:6;:8::i;36366:321::-;36425:16;36454:28;36499:23;36516:5;36499:16;:23::i;:::-;36485:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36485:38:0;;36454:69;;36539:6;36534:117;36555:23;36572:5;36555:16;:23::i;:::-;36551:1;:27;36534:117;;;-1:-1:-1;;;;;36617:19:0;;;;;;:12;:19;;;;;;;;:22;;;;;;;;;36600:14;;:11;;36637:1;;36600:14;;;;;;:::i;:::-;;;;;;;;;;:39;36580:3;;;;:::i;:::-;;;;36534:117;;;-1:-1:-1;36668:11:0;36366:321;-1:-1:-1;;36366:321:0:o;50099:139::-;50177:4;50201:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;50201:29:0;;;;;;;;;;;;;;;50099:139::o;24248:104::-;24304:13;24337:7;24330:14;;;;;:::i;25831:295::-;-1:-1:-1;;;;;25934:24:0;;16359:10;25934:24;;25926:62;;;;-1:-1:-1;;;25926:62:0;;13816:2:1;25926:62:0;;;13798:21:1;13855:2;13835:18;;;13828:30;13894:27;13874:18;;;13867:55;13939:18;;25926:62:0;13614:349:1;25926:62:0;16359:10;26001:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26001:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26001:53:0;;;;;;;;;;26070:48;;10391:41:1;;;26001:42:0;;16359:10;26070:48;;10364:18:1;26070:48:0;;;;;;;25831:295;;:::o;27034:293::-;27174:41;16359:10;27207:7;27174:18;:41::i;:::-;27166:103;;;;-1:-1:-1;;;27166:103:0;;;;;;;:::i;:::-;27280:39;27294:4;27300:2;27304:7;27313:5;27280:13;:39::i;:::-;27034:293;;;;:::o;57701:180::-;57812:13;57850:23;57865:7;57850:14;:23::i;51289:235::-;50493:7;50520:12;;;:6;:12;;;;;:22;;;51383:41;;51391:18;50427:123;51383:41;51375:102;;;;-1:-1:-1;;;51375:102:0;;14583:2:1;51375:102:0;;;14565:21:1;14622:2;14602:18;;;14595:30;14661:34;14641:18;;;14634:62;-1:-1:-1;;;14712:18:1;;;14705:46;14768:19;;51375:102:0;14381:412:1;56976:158:0;57074:52;16359:10;57108:2;57112:7;57121:4;;57074:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57074:19:0;;-1:-1:-1;;;57074:52:0:i;18521:201::-;17658:7;17685:6;-1:-1:-1;;;;;17685:6:0;16359:10;17832:23;17824:68;;;;-1:-1:-1;;;17824:68:0;;18613:2:1;17824:68:0;;;18595:21:1;;;18632:18;;;18625:30;18691:34;18671:18;;;18664:62;18743:18;;17824:68:0;18411:356:1;17824:68:0;-1:-1:-1;;;;;18610:22:0;::::1;18602:73;;;::::0;-1:-1:-1;;;18602:73:0;;12647:2:1;18602:73:0::1;::::0;::::1;12629:21:1::0;12686:2;12666:18;;;12659:30;12725:34;12705:18;;;12698:62;-1:-1:-1;;;12776:18:1;;;12769:36;12822:19;;18602:73:0::1;12445:402:1::0;18602:73:0::1;18686:28;18705:8;18686:18;:28::i;49794:213::-:0;49879:4;-1:-1:-1;;;;;;49903:47:0;;-1:-1:-1;;;49903:47:0;;:96;;;49963:36;49987:11;49963:23;:36::i;28794:127::-;28859:4;28883:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28883:16:0;:30;;;28794:127::o;32679:174::-;32754:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32754:29:0;-1:-1:-1;;;;;32754:29:0;;;;;;;;:24;;32808:23;32754:24;32808:14;:23::i;:::-;-1:-1:-1;;;;;32799:46:0;;;;;;;;;;;32679:174;;:::o;29088:355::-;29181:4;29206:16;29214:7;29206;:16::i;:::-;29198:73;;;;-1:-1:-1;;;29198:73:0;;14170:2:1;29198:73:0;;;14152:21:1;14209:2;14189:18;;;14182:30;14248:34;14228:18;;;14221:62;-1:-1:-1;;;14299:18:1;;;14292:42;14351:19;;29198:73:0;13968:408:1;29198:73:0;29282:13;29298:23;29313:7;29298:14;:23::i;:::-;29282:39;;29351:5;-1:-1:-1;;;;;29340:16:0;:7;-1:-1:-1;;;;;29340:16:0;;:51;;;;29384:7;-1:-1:-1;;;;;29360:31:0;:20;29372:7;29360:11;:20::i;:::-;-1:-1:-1;;;;;29360:31:0;;29340:51;:94;;;-1:-1:-1;;;;;;26318:25:0;;;26294:4;26318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29395:39;29332:103;29088:355;-1:-1:-1;;;;29088:355:0:o;32017:544::-;32142:4;-1:-1:-1;;;;;32115:31:0;:23;32130:7;32115:14;:23::i;:::-;-1:-1:-1;;;;;32115:31:0;;32107:85;;;;-1:-1:-1;;;32107:85:0;;19390:2:1;32107:85:0;;;19372:21:1;19429:2;19409:18;;;19402:30;19468:34;19448:18;;;19441:62;-1:-1:-1;;;19519:18:1;;;19512:39;19568:19;;32107:85:0;19188:405:1;32107:85:0;-1:-1:-1;;;;;32211:16:0;;32203:65;;;;-1:-1:-1;;;32203:65:0;;13411:2:1;32203:65:0;;;13393:21:1;13450:2;13430:18;;;13423:30;13489:34;13469:18;;;13462:62;-1:-1:-1;;;13540:18:1;;;13533:34;13584:19;;32203:65:0;13209:400:1;32203:65:0;32281:39;32302:4;32308:2;32312:7;32281:20;:39::i;:::-;32385:29;32402:1;32406:7;32385:8;:29::i;:::-;-1:-1:-1;;;;;32427:15:0;;;;;;:9;:15;;;;;:20;;32446:1;;32427:15;:20;;32446:1;;32427:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32458:13:0;;;;;;:9;:13;;;;;:18;;32475:1;;32458:13;:18;;32475:1;;32458:18;:::i;:::-;;;;-1:-1:-1;;32487:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32487:21:0;-1:-1:-1;;;;;32487:21:0;;;;;;;;;32526:27;;32487:16;;32526:27;;;;;;;32017:544;;;:::o;53279:229::-;53354:22;53362:4;53368:7;53354;:22::i;:::-;53349:152;;53393:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;53393:29:0;;;;;;;;;:36;;-1:-1:-1;;53393:36:0;53425:4;53393:36;;;53476:12;16359:10;;16279:98;53476:12;-1:-1:-1;;;;;53449:40:0;53467:7;-1:-1:-1;;;;;53449:40:0;53461:4;53449:40;;;;;;;;;;53279:229;;:::o;53516:230::-;53591:22;53599:4;53605:7;53591;:22::i;:::-;53587:152;;;53662:5;53630:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;53630:29:0;;;;;;;;;;:37;;-1:-1:-1;;53630:37:0;;;53687:40;16359:10;;53630:12;;53687:40;;53662:5;53687:40;53516:230;;:::o;46138:120::-;45150:7;;;;45674:41;;;;-1:-1:-1;;;45674:41:0;;11467:2:1;45674:41:0;;;11449:21:1;11506:2;11486:18;;;11479:30;-1:-1:-1;;;11525:18:1;;;11518:50;11585:18;;45674:41:0;11265:344:1;45674:41:0;46197:7:::1;:15:::0;;-1:-1:-1;;46197:15:0::1;::::0;;46228:22:::1;16359:10:::0;46237:12:::1;46228:22;::::0;-1:-1:-1;;;;;9077:32:1;;;9059:51;;9047:2;9032:18;46228:22:0::1;;;;;;;46138:120::o:0;28209:272::-;28323:28;28333:4;28339:2;28343:7;28323:9;:28::i;:::-;28370:48;28393:4;28399:2;28403:7;28412:5;28370:22;:48::i;:::-;28362:111;;;;-1:-1:-1;;;28362:111:0;;;;;;;:::i;57578:115::-;57665:20;57677:7;57665:11;:20::i;29786:110::-;29862:26;29872:2;29876:7;29862:26;;;;;;;;;;;;:9;:26::i;43434:217::-;43534:16;43542:7;43534;:16::i;:::-;43526:75;;;;-1:-1:-1;;;43526:75:0;;16591:2:1;43526:75:0;;;16573:21:1;16630:2;16610:18;;;16603:30;16669:34;16649:18;;;16642:62;-1:-1:-1;;;16720:18:1;;;16713:44;16774:19;;43526:75:0;16389:410:1;43526:75:0;43612:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;18882:191::-;18956:16;18975:6;;-1:-1:-1;;;;;18992:17:0;;;-1:-1:-1;;;;;;18992:17:0;;;;;;19025:40;;18975:6;;;;;;;19025:40;;18956:16;19025:40;18945:128;18882:191;:::o;45879:118::-;45150:7;;;;45404:9;45396:38;;;;-1:-1:-1;;;45396:38:0;;15000:2:1;45396:38:0;;;14982:21:1;15039:2;15019:18;;;15012:30;-1:-1:-1;;;15058:18:1;;;15051:46;15114:18;;45396:38:0;14798:340:1;45396:38:0;45939:7:::1;:14:::0;;-1:-1:-1;;45939:14:0::1;45949:4;45939:14;::::0;;45969:20:::1;45976:12;16359:10:::0;;16279:98;42599:679;42672:13;42706:16;42714:7;42706;:16::i;:::-;42698:78;;;;-1:-1:-1;;;42698:78:0;;17782:2:1;42698:78:0;;;17764:21:1;17821:2;17801:18;;;17794:30;17860:34;17840:18;;;17833:62;-1:-1:-1;;;17911:18:1;;;17904:47;17968:19;;42698:78:0;17580:413:1;42698:78:0;42789:23;42815:19;;;:10;:19;;;;;42789:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42845:18;42866:10;24989:9;;;;;;;;;-1:-1:-1;24989:9:0;;;24912:94;42866:10;42845:31;;42958:4;42952:18;42974:1;42952:23;42948:72;;;-1:-1:-1;42999:9:0;42599:679;-1:-1:-1;;42599:679:0:o;42948:72::-;43124:23;;:27;43120:108;;43199:4;43205:9;43182:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43168:48;;;;42599:679;;;:::o;43120:108::-;43247:23;43262:7;43247:14;:23::i;35785:233::-;35887:4;-1:-1:-1;;;;;;35911:50:0;;-1:-1:-1;;;35911:50:0;;:99;;;35974:36;35998:11;35974:23;:36::i;57285:215::-;45150:7;;;;45404:9;45396:38;;;;-1:-1:-1;;;45396:38:0;;15000:2:1;45396:38:0;;;14982:21:1;15039:2;15019:18;;;15012:30;-1:-1:-1;;;15058:18:1;;;15051:46;15114:18;;45396:38:0;14798:340:1;45396:38:0;57447:45:::1;57474:4;57480:2;57484:7;57447:26;:45::i;33418:839::-:0;33535:4;-1:-1:-1;;;;;33561:13:0;;8847:20;8885:8;33557:693;;33597:72;;-1:-1:-1;;;33597:72:0;;-1:-1:-1;;;;;33597:36:0;;;;;:72;;16359:10;;33648:4;;33654:7;;33663:5;;33597:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33597:72:0;;;;;;;;-1:-1:-1;;33597:72:0;;;;;;;;;;;;:::i;:::-;;;33593:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33843:13:0;;33839:341;;33886:60;;-1:-1:-1;;;33886:60:0;;;;;;;:::i;33839:341::-;34130:6;34124:13;34115:6;34111:2;34107:15;34100:38;33593:602;-1:-1:-1;;;;;;33720:55:0;-1:-1:-1;;;33720:55:0;;-1:-1:-1;33713:62:0;;43880:206;43949:20;43961:7;43949:11;:20::i;:::-;43992:19;;;;:10;:19;;;;;43986:33;;;;;:::i;:::-;:38;;-1:-1:-1;43982:97:0;;44048:19;;;;:10;:19;;;;;44041:26;;;:::i;30123:250::-;30219:18;30225:2;30229:7;30219:5;:18::i;:::-;30256:54;30287:1;30291:2;30295:7;30304:5;30256:22;:54::i;:::-;30248:117;;;;-1:-1:-1;;;30248:117:0;;;;;;;:::i;24423:352::-;24496:13;24530:16;24538:7;24530;:16::i;:::-;24522:76;;;;-1:-1:-1;;;24522:76:0;;19800:2:1;24522:76:0;;;19782:21:1;19839:2;19819:18;;;19812:30;19878:34;19858:18;;;19851:62;-1:-1:-1;;;19929:18:1;;;19922:45;19984:19;;24522:76:0;19598:411:1;24522:76:0;24611:21;24635:10;24989:9;;;;;;;;;-1:-1:-1;24989:9:0;;;24912:94;24635:10;24611:34;;24687:1;24669:7;24663:21;:25;:104;;;;;;;;;;;;;;;;;24724:7;24733:18;:7;:16;:18::i;:::-;24707:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24663:104;24656:111;24423:352;-1:-1:-1;;;24423:352:0:o;23155:284::-;23257:4;-1:-1:-1;;;;;;23281:40:0;;-1:-1:-1;;;23281:40:0;;:101;;-1:-1:-1;;;;;;;23334:48:0;;-1:-1:-1;;;23334:48:0;23281:101;:150;;;-1:-1:-1;;;;;;;;;;21870:40:0;;;23395:36;21761:157;37799:555;-1:-1:-1;;;;;37971:18:0;;37967:187;;38006:40;38038:7;39181:10;:17;;39154:24;;;;:15;:24;;;;;:44;;;39209:24;;;;;;;;;;;;39077:164;38006:40;37967:187;;;38076:2;-1:-1:-1;;;;;38068:10:0;:4;-1:-1:-1;;;;;38068:10:0;;38064:90;;38095:47;38128:4;38134:7;38095:32;:47::i;:::-;-1:-1:-1;;;;;38168:16:0;;38164:183;;38201:45;38238:7;38201:36;:45::i;38164:183::-;38274:4;-1:-1:-1;;;;;38268:10:0;:2;-1:-1:-1;;;;;38268:10:0;;38264:83;;38295:40;38323:2;38327:7;38295:27;:40::i;31320:360::-;31380:13;31396:23;31411:7;31396:14;:23::i;:::-;31380:39;;31432:48;31453:5;31468:1;31472:7;31432:20;:48::i;:::-;31521:29;31538:1;31542:7;31521:8;:29::i;:::-;-1:-1:-1;;;;;31563:16:0;;;;;;:9;:16;;;;;:21;;31583:1;;31563:16;:21;;31583:1;;31563:21;:::i;:::-;;;;-1:-1:-1;;31602:16:0;;;;:7;:16;;;;;;31595:23;;-1:-1:-1;;;;;;31595:23:0;;;31636:36;31610:7;;31602:16;-1:-1:-1;;;;;31636:36:0;;;;;31602:16;;31636:36;31369:311;31320:360;:::o;30709:382::-;-1:-1:-1;;;;;30789:16:0;;30781:61;;;;-1:-1:-1;;;30781:61:0;;17006:2:1;30781:61:0;;;16988:21:1;;;17025:18;;;17018:30;17084:34;17064:18;;;17057:62;17136:18;;30781:61:0;16804:356:1;30781:61:0;30862:16;30870:7;30862;:16::i;:::-;30861:17;30853:58;;;;-1:-1:-1;;;30853:58:0;;13054:2:1;30853:58:0;;;13036:21:1;13093:2;13073:18;;;13066:30;13132;13112:18;;;13105:58;13180:18;;30853:58:0;12852:352:1;30853:58:0;30924:45;30953:1;30957:2;30961:7;30924:20;:45::i;:::-;-1:-1:-1;;;;;30982:13:0;;;;;;:9;:13;;;;;:18;;30999:1;;30982:13;:18;;30999:1;;30982:18;:::i;:::-;;;;-1:-1:-1;;31011:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31011:21:0;-1:-1:-1;;;;;31011:21:0;;;;;;;;31050:33;;31011:16;;;31050:33;;31011:16;;31050:33;30709:382;;:::o;19304:723::-;19360:13;19581:10;19577:53;;-1:-1:-1;;19608:10:0;;;;;;;;;;;;-1:-1:-1;;;19608:10:0;;;;;19304:723::o;19577:53::-;19655:5;19640:12;19696:78;19703:9;;19696:78;;19729:8;;;;:::i;:::-;;-1:-1:-1;19752:10:0;;-1:-1:-1;19760:2:0;19752:10;;:::i;:::-;;;19696:78;;;19784:19;19816:6;19806:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19806:17:0;;19784:39;;19834:154;19841:10;;19834:154;;19868:11;19878:1;19868:11;;:::i;:::-;;-1:-1:-1;19937:10:0;19945:2;19937:5;:10;:::i;:::-;19924:24;;:2;:24;:::i;:::-;19911:39;;19894:6;19901;19894:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19894:56:0;;;;;;;;-1:-1:-1;19965:11:0;19974:2;19965:11;;:::i;:::-;;;19834:154;;39868:1014;40134:22;40184:1;40159:22;40176:4;40159:16;:22::i;:::-;:26;;;;:::i;:::-;40196:18;40217:26;;;:17;:26;;;;;;40134:51;;-1:-1:-1;40350:28:0;;;40346:354;;-1:-1:-1;;;;;40417:18:0;;40395:19;40417:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40468:30;;;;;;:44;;;40598:30;;:17;:30;;;;;:43;;;40346:354;-1:-1:-1;40796:26:0;;;;:17;:26;;;;;;;;40789:33;;;-1:-1:-1;;;;;40840:18:0;;;;;:12;:18;;;;;:34;;;;;;;40833:41;39868:1014::o;41177:1097::-;41455:10;:17;41430:22;;41455:21;;41475:1;;41455:21;:::i;:::-;41487:18;41508:24;;;:15;:24;;;;;;41881:10;:26;;41430:46;;-1:-1:-1;41508:24:0;;41430:46;;41881:26;;;;;;:::i;:::-;;;;;;;;;41859:48;;41945:11;41920:10;41931;41920:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;42034:28;;;:15;:28;;;;;;;:41;;;42215:24;;;;;42208:31;42250:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41248:1026;;;41177:1097;:::o;38655:221::-;38740:14;38757:20;38774:2;38757:16;:20::i;:::-;-1:-1:-1;;;;;38788:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;38833:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38655:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:856::-;656:5;709:3;702:4;694:6;690:17;686:27;676:55;;727:1;724;717:12;676:55;763:6;750:20;789:4;813:60;829:43;869:2;829:43;:::i;:::-;813:60;:::i;:::-;895:3;919:2;914:3;907:15;947:2;942:3;938:12;931:19;;982:2;974:6;970:15;1034:3;1029:2;1023;1020:1;1016:10;1008:6;1004:23;1000:32;997:41;994:61;;;1051:1;1048;1041:12;994:61;1073:1;1094;1104:326;1120:2;1115:3;1112:11;1104:326;;;1201:3;1188:17;1237:18;1224:11;1221:35;1218:55;;;1269:1;1266;1259:12;1218:55;1298:57;1351:3;1346:2;1332:11;1324:6;1320:24;1316:33;1298:57;:::i;:::-;1286:70;;-1:-1:-1;1376:12:1;;;;1408;;;;1142:1;1133:11;1104:326;;;-1:-1:-1;1448:5:1;;603:856;-1:-1:-1;;;;;;;;603:856:1:o;1464:673::-;1518:5;1571:3;1564:4;1556:6;1552:17;1548:27;1538:55;;1589:1;1586;1579:12;1538:55;1625:6;1612:20;1651:4;1675:60;1691:43;1731:2;1691:43;:::i;1675:60::-;1757:3;1781:2;1776:3;1769:15;1809:2;1804:3;1800:12;1793:19;;1844:2;1836:6;1832:15;1896:3;1891:2;1885;1882:1;1878:10;1870:6;1866:23;1862:32;1859:41;1856:61;;;1913:1;1910;1903:12;1856:61;1935:1;1945:163;1959:2;1956:1;1953:9;1945:163;;;2016:17;;2004:30;;2054:12;;;;2086;;;;1977:1;1970:9;1945:163;;;-1:-1:-1;2126:5:1;;1464:673;-1:-1:-1;;;;;;;1464:673:1:o;2142:221::-;2185:5;2238:3;2231:4;2223:6;2219:17;2215:27;2205:55;;2256:1;2253;2246:12;2205:55;2278:79;2353:3;2344:6;2331:20;2324:4;2316:6;2312:17;2278:79;:::i;2368:186::-;2427:6;2480:2;2468:9;2459:7;2455:23;2451:32;2448:52;;;2496:1;2493;2486:12;2448:52;2519:29;2538:9;2519:29;:::i;2559:260::-;2627:6;2635;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;2727:29;2746:9;2727:29;:::i;:::-;2717:39;;2775:38;2809:2;2798:9;2794:18;2775:38;:::i;:::-;2765:48;;2559:260;;;;;:::o;2824:328::-;2901:6;2909;2917;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;3009:29;3028:9;3009:29;:::i;:::-;2999:39;;3057:38;3091:2;3080:9;3076:18;3057:38;:::i;:::-;3047:48;;3142:2;3131:9;3127:18;3114:32;3104:42;;2824:328;;;;;:::o;3157:666::-;3252:6;3260;3268;3276;3329:3;3317:9;3308:7;3304:23;3300:33;3297:53;;;3346:1;3343;3336:12;3297:53;3369:29;3388:9;3369:29;:::i;:::-;3359:39;;3417:38;3451:2;3440:9;3436:18;3417:38;:::i;:::-;3407:48;;3502:2;3491:9;3487:18;3474:32;3464:42;;3557:2;3546:9;3542:18;3529:32;3584:18;3576:6;3573:30;3570:50;;;3616:1;3613;3606:12;3570:50;3639:22;;3692:4;3684:13;;3680:27;-1:-1:-1;3670:55:1;;3721:1;3718;3711:12;3670:55;3744:73;3809:7;3804:2;3791:16;3786:2;3782;3778:11;3744:73;:::i;:::-;3734:83;;;3157:666;;;;;;;:::o;3828:347::-;3893:6;3901;3954:2;3942:9;3933:7;3929:23;3925:32;3922:52;;;3970:1;3967;3960:12;3922:52;3993:29;4012:9;3993:29;:::i;:::-;3983:39;;4072:2;4061:9;4057:18;4044:32;4119:5;4112:13;4105:21;4098:5;4095:32;4085:60;;4141:1;4138;4131:12;4085:60;4164:5;4154:15;;;3828:347;;;;;:::o;4180:254::-;4248:6;4256;4309:2;4297:9;4288:7;4284:23;4280:32;4277:52;;;4325:1;4322;4315:12;4277:52;4348:29;4367:9;4348:29;:::i;:::-;4338:39;4424:2;4409:18;;;;4396:32;;-1:-1:-1;;;4180:254:1:o;4439:733::-;4527:6;4535;4543;4551;4604:2;4592:9;4583:7;4579:23;4575:32;4572:52;;;4620:1;4617;4610:12;4572:52;4643:29;4662:9;4643:29;:::i;:::-;4633:39;;4719:2;4708:9;4704:18;4691:32;4681:42;;4774:2;4763:9;4759:18;4746:32;4797:18;4838:2;4830:6;4827:14;4824:34;;;4854:1;4851;4844:12;4824:34;4892:6;4881:9;4877:22;4867:32;;4937:7;4930:4;4926:2;4922:13;4918:27;4908:55;;4959:1;4956;4949:12;4908:55;4999:2;4986:16;5025:2;5017:6;5014:14;5011:34;;;5041:1;5038;5031:12;5011:34;5086:7;5081:2;5072:6;5068:2;5064:15;5060:24;5057:37;5054:57;;;5107:1;5104;5097:12;5054:57;4439:733;;;;-1:-1:-1;;5138:2:1;5130:11;;-1:-1:-1;;;4439:733:1:o;5177:464::-;5264:6;5272;5280;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5372:29;5391:9;5372:29;:::i;:::-;5362:39;;5448:2;5437:9;5433:18;5420:32;5410:42;;5503:2;5492:9;5488:18;5475:32;5530:18;5522:6;5519:30;5516:50;;;5562:1;5559;5552:12;5516:50;5585;5627:7;5618:6;5607:9;5603:22;5585:50;:::i;:::-;5575:60;;;5177:464;;;;;:::o;5646:1392::-;5808:6;5816;5824;5877:2;5865:9;5856:7;5852:23;5848:32;5845:52;;;5893:1;5890;5883:12;5845:52;5933:9;5920:23;5962:18;6003:2;5995:6;5992:14;5989:34;;;6019:1;6016;6009:12;5989:34;6057:6;6046:9;6042:22;6032:32;;6102:7;6095:4;6091:2;6087:13;6083:27;6073:55;;6124:1;6121;6114:12;6073:55;6160:2;6147:16;6182:4;6206:60;6222:43;6262:2;6222:43;:::i;6206:60::-;6288:3;6312:2;6307:3;6300:15;6340:2;6335:3;6331:12;6324:19;;6371:2;6367;6363:11;6419:7;6414:2;6408;6405:1;6401:10;6397:2;6393:19;6389:28;6386:41;6383:61;;;6440:1;6437;6430:12;6383:61;6462:1;6453:10;;6472:169;6486:2;6483:1;6480:9;6472:169;;;6543:23;6562:3;6543:23;:::i;:::-;6531:36;;6504:1;6497:9;;;;;6587:12;;;;6619;;6472:169;;;-1:-1:-1;6660:5:1;-1:-1:-1;;6703:18:1;;6690:32;;-1:-1:-1;;6734:16:1;;;6731:36;;;6763:1;6760;6753:12;6731:36;6786:63;6841:7;6830:8;6819:9;6815:24;6786:63;:::i;:::-;6776:73;;6902:2;6891:9;6887:18;6874:32;6858:48;;6931:2;6921:8;6918:16;6915:36;;;6947:1;6944;6937:12;6915:36;;6970:62;7024:7;7013:8;7002:9;6998:24;6970:62;:::i;7043:180::-;7102:6;7155:2;7143:9;7134:7;7130:23;7126:32;7123:52;;;7171:1;7168;7161:12;7123:52;-1:-1:-1;7194:23:1;;7043:180;-1:-1:-1;7043:180:1:o;7228:254::-;7296:6;7304;7357:2;7345:9;7336:7;7332:23;7328:32;7325:52;;;7373:1;7370;7363:12;7325:52;7409:9;7396:23;7386:33;;7438:38;7472:2;7461:9;7457:18;7438:38;:::i;7487:245::-;7545:6;7598:2;7586:9;7577:7;7573:23;7569:32;7566:52;;;7614:1;7611;7604:12;7566:52;7653:9;7640:23;7672:30;7696:5;7672:30;:::i;7737:249::-;7806:6;7859:2;7847:9;7838:7;7834:23;7830:32;7827:52;;;7875:1;7872;7865:12;7827:52;7907:9;7901:16;7926:30;7950:5;7926:30;:::i;8176:257::-;8217:3;8255:5;8249:12;8282:6;8277:3;8270:19;8298:63;8354:6;8347:4;8342:3;8338:14;8331:4;8324:5;8320:16;8298:63;:::i;:::-;8415:2;8394:15;-1:-1:-1;;8390:29:1;8381:39;;;;8422:4;8377:50;;8176:257;-1:-1:-1;;8176:257:1:o;8438:470::-;8617:3;8655:6;8649:13;8671:53;8717:6;8712:3;8705:4;8697:6;8693:17;8671:53;:::i;:::-;8787:13;;8746:16;;;;8809:57;8787:13;8746:16;8843:4;8831:17;;8809:57;:::i;:::-;8882:20;;8438:470;-1:-1:-1;;;;8438:470:1:o;9121:488::-;-1:-1:-1;;;;;9390:15:1;;;9372:34;;9442:15;;9437:2;9422:18;;9415:43;9489:2;9474:18;;9467:34;;;9537:3;9532:2;9517:18;;9510:31;;;9315:4;;9558:45;;9583:19;;9575:6;9558:45;:::i;:::-;9550:53;9121:488;-1:-1:-1;;;;;;9121:488:1:o;9614:632::-;9785:2;9837:21;;;9907:13;;9810:18;;;9929:22;;;9756:4;;9785:2;10008:15;;;;9982:2;9967:18;;;9756:4;10051:169;10065:6;10062:1;10059:13;10051:169;;;10126:13;;10114:26;;10195:15;;;;10160:12;;;;10087:1;10080:9;10051:169;;;-1:-1:-1;10237:3:1;;9614:632;-1:-1:-1;;;;;;9614:632:1:o;10625:219::-;10774:2;10763:9;10756:21;10737:4;10794:44;10834:2;10823:9;10819:18;10811:6;10794:44;:::i;12026:414::-;12228:2;12210:21;;;12267:2;12247:18;;;12240:30;12306:34;12301:2;12286:18;;12279:62;-1:-1:-1;;;12372:2:1;12357:18;;12350:48;12430:3;12415:19;;12026:414::o;17165:410::-;17367:2;17349:21;;;17406:2;17386:18;;;17379:30;17445:34;17440:2;17425:18;;17418:62;-1:-1:-1;;;17511:2:1;17496:18;;17489:44;17565:3;17550:19;;17165:410::o;18772:411::-;18974:2;18956:21;;;19013:2;18993:18;;;18986:30;19052:34;19047:2;19032:18;;19025:62;-1:-1:-1;;;19118:2:1;19103:18;;19096:45;19173:3;19158:19;;18772:411::o;20416:413::-;20618:2;20600:21;;;20657:2;20637:18;;;20630:30;20696:34;20691:2;20676:18;;20669:62;-1:-1:-1;;;20762:2:1;20747:18;;20740:47;20819:3;20804:19;;20416:413::o;22262:275::-;22333:2;22327:9;22398:2;22379:13;;-1:-1:-1;;22375:27:1;22363:40;;22433:18;22418:34;;22454:22;;;22415:62;22412:88;;;22480:18;;:::i;:::-;22516:2;22509:22;22262:275;;-1:-1:-1;22262:275:1:o;22542:183::-;22602:4;22635:18;22627:6;22624:30;22621:56;;;22657:18;;:::i;:::-;-1:-1:-1;22702:1:1;22698:14;22714:4;22694:25;;22542:183::o;22730:128::-;22770:3;22801:1;22797:6;22794:1;22791:13;22788:39;;;22807:18;;:::i;:::-;-1:-1:-1;22843:9:1;;22730:128::o;22863:120::-;22903:1;22929;22919:35;;22934:18;;:::i;:::-;-1:-1:-1;22968:9:1;;22863:120::o;22988:125::-;23028:4;23056:1;23053;23050:8;23047:34;;;23061:18;;:::i;:::-;-1:-1:-1;23098:9:1;;22988:125::o;23118:258::-;23190:1;23200:113;23214:6;23211:1;23208:13;23200:113;;;23290:11;;;23284:18;23271:11;;;23264:39;23236:2;23229:10;23200:113;;;23331:6;23328:1;23325:13;23322:48;;;-1:-1:-1;;23366:1:1;23348:16;;23341:27;23118:258::o;23381:380::-;23460:1;23456:12;;;;23503;;;23524:61;;23578:4;23570:6;23566:17;23556:27;;23524:61;23631:2;23623:6;23620:14;23600:18;23597:38;23594:161;;;23677:10;23672:3;23668:20;23665:1;23658:31;23712:4;23709:1;23702:15;23740:4;23737:1;23730:15;23594:161;;23381:380;;;:::o;23766:135::-;23805:3;-1:-1:-1;;23826:17:1;;23823:43;;;23846:18;;:::i;:::-;-1:-1:-1;23893:1:1;23882:13;;23766:135::o;23906:112::-;23938:1;23964;23954:35;;23969:18;;:::i;:::-;-1:-1:-1;24003:9:1;;23906:112::o;24023:127::-;24084:10;24079:3;24075:20;24072:1;24065:31;24115:4;24112:1;24105:15;24139:4;24136:1;24129:15;24155:127;24216:10;24211:3;24207:20;24204:1;24197:31;24247:4;24244:1;24237:15;24271:4;24268:1;24261:15;24287:127;24348:10;24343:3;24339:20;24336:1;24329:31;24379:4;24376:1;24369:15;24403:4;24400:1;24393:15;24419:127;24480:10;24475:3;24471:20;24468:1;24461:31;24511:4;24508:1;24501:15;24535:4;24532:1;24525:15;24551:127;24612:10;24607:3;24603:20;24600:1;24593:31;24643:4;24640:1;24633:15;24667:4;24664:1;24657:15;24683:131;-1:-1:-1;;;;;;24757:32:1;;24747:43;;24737:71;;24804:1;24801;24794:12
Swarm Source
ipfs://17fef8eede37ce96f2a081fe821d2df22f3e5e50438c6bea88d46fc30874de1e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.