ERC-721
Overview
Max Total Supply
52 $NFS
Holders
23
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 $NFSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
NonFungibleSmilebyTrippie2022
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-27 */ // SPDX-License-Identifier: MIT //Developer Info: //Written by Ghazanfar Perdakh //Email: [email protected] //Whatsapp NO.: +923331578650 //fiverr: fiverr.com/ghazanfarperdakh pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC2000000.sol pragma solidity ^0.8.7; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; 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 (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; uint length= _owners.length; for( uint i; i < length; ++i ){ if( owner == _owners[i] ) ++count; } delete length; return count; } /** * @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 {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(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); _owners[tokenId] = address(0); 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); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.7; /** * @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @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-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } } pragma solidity ^0.8.7; contract NonFungibleSmilebyTrippie2022 is ERC721Enumerable, Ownable { using Strings for uint256; string private uriPrefix; string private uriSuffix = ".json"; string public hiddenURL = "ipfs://QmdYSVBSQeBBGzr6aYktdKWhhGqkSiBEn56K6aKcjSniLq"; uint256 public cost = 0.08 ether; uint256 public whiteListCost = 0.065 ether; uint8 public maxWLMintAmountPerWallet = 2; uint8 public maxMintAmountPerWallet = 8; mapping (address => uint8) public nftPerWLAddress; mapping (address => uint8) public nftPerAddress; uint8 public reserved = 22; uint16 public constant maxSupply = 2022; bool public WLpaused = false; bool public paused = true; bool public reveal = false; bytes32 public whitelistMerkleRoot = 0x937455db6a0e344f787a4a95ab2a3b7ea0df96a20ce40bbb0246bfcbe40eb83f; constructor() ERC721("Non Fungible Smile by Trippie2022 ", "$NFS") { } function mint(uint8 _mintAmount) external payable { uint16 totalSupply = uint16(_owners.length); require(_mintAmount > 0 , "Mint Amount cannot be zero"); require(totalSupply + _mintAmount <= maxSupply, "Sold out!!!"); require(nftPerAddress[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds max Nfts per wallet."); require(!paused, "The contract is paused!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); for(uint8 i; i < _mintAmount; i++) { _mint(msg.sender, totalSupply + i); } nftPerAddress[msg.sender]= nftPerAddress[msg.sender] + _mintAmount ; delete totalSupply; delete _mintAmount; } function Reserve(address _receiver) external onlyOwner { uint16 totalSupply = uint16(_owners.length); for(uint8 i; i < reserved ; i++) { _mint(_receiver , totalSupply + i); } delete _receiver; delete totalSupply; } function Airdrop(address _receiver , uint16 _mintAmount) external onlyOwner { uint16 totalSupply = uint16(_owners.length); for(uint8 i; i < _mintAmount ; i++) { _mint(_receiver , totalSupply + i); } delete _receiver; delete totalSupply; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (reveal == false) { return hiddenURL; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed() external onlyOwner { reveal = !reveal; } function setWLPaused() external onlyOwner { WLpaused = !WLpaused; } function setPaused() external onlyOwner { paused = !paused; } function setWLCost(uint256 _cost) external onlyOwner { whiteListCost = _cost; delete _cost; } function setMaxTxPerWlAddress(uint8 _limit) external onlyOwner{ maxWLMintAmountPerWallet = _limit; delete _limit; } function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner { whitelistMerkleRoot = _whitelistMerkleRoot; } function getLeafNode(address _leaf) internal pure returns (bytes32 temp) { return keccak256(abi.encodePacked(_leaf)); } function _verify(bytes32 leaf, bytes32[] memory proof , bytes32 merkleRoot) internal pure returns (bool) { return MerkleProof.verify(proof, merkleRoot, leaf); } function whitelistMint(uint8 _mintAmount, bytes32[] calldata merkleProof) external payable { bytes32 leafnode = getLeafNode(msg.sender); require(_verify(leafnode , merkleProof , whitelistMerkleRoot), "You are not whitelisted"); require (nftPerWLAddress[msg.sender] + _mintAmount <= maxWLMintAmountPerWallet, "Exceeds max NFT per wallet"); require(!WLpaused, "Whitelist minting is Paused!"); require(msg.value >= whiteListCost * _mintAmount, "Insufficient funds!"); uint16 totalSupply = uint16(_owners.length); require(totalSupply + _mintAmount< 1023 , "Only 1022 NFTs are available for Presale"); for(uint8 i; i < _mintAmount; i++) { _mint(msg.sender , totalSupply + i); } nftPerWLAddress[msg.sender] += _mintAmount; if (totalSupply + _mintAmount >= 1022) { WLpaused = true; paused = false; } delete totalSupply; delete _mintAmount; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) external onlyOwner { hiddenURL = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) external onlyOwner { uriPrefix = _uriPrefix; } function setCost(uint _cost) external onlyOwner{ cost = _cost; } function setMaxMintAmountPerWallet(uint8 _maxtx) external onlyOwner{ maxMintAmountPerWallet = _maxtx; } function withdraw() external onlyOwner { uint _balance = address(this).balance; payable(msg.sender).transfer(_balance * 75 / 100 ); payable(0xF92fAbDCeaa37529158D580055c72F9d58259d40).transfer(_balance * 23 / 100 ); payable(0x38015Cf8d6Dd125d9423df516147f719B778c03a).transfer(_balance * 2 / 100); } function _mint(address to, uint256 tokenId) internal virtual override { _owners.push(to); emit Transfer(address(0), to, tokenId); } function _baseURI() internal view returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint16","name":"_mintAmount","type":"uint16"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"Reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWLMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nftPerAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nftPerWLAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxtx","type":"uint8"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setMaxTxPerWlAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a0908152620000289160079190620001a4565b5060405180606001604052806035815260200162002d1e6035913980516200005991600891602090910190620001a4565b5067011c37937e08000060095566e6ed27d6668000600a55600b805461080261ffff19909116179055600e805463ffffffff1916620100161790557f937455db6a0e344f787a4a95ab2a3b7ea0df96a20ce40bbb0246bfcbe40eb83f600f55348015620000c557600080fd5b5060405180606001604052806022815260200162002d536022913960405180604001604052806004815260200163244e465360e01b815250816000908051906020019062000115929190620001a4565b5080516200012b906001906020840190620001a4565b50505062000148620001426200014e60201b60201c565b62000152565b62000287565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001b2906200024a565b90600052602060002090601f016020900481019282620001d6576000855562000221565b82601f10620001f157805160ff191683800117855562000221565b8280016001018555821562000221579182015b828111156200022157825182559160200191906001019062000204565b506200022f92915062000233565b5090565b5b808211156200022f576000815560010162000234565b600181811c908216806200025f57607f821691505b602082108114156200028157634e487b7160e01b600052602260045260246000fd5b50919050565b612a8780620002976000396000f3fe6080604052600436106102885760003560e01c806363937fe01161015a578063aa98e0c6116100c1578063d5abeb011161007a578063d5abeb0114610790578063d5e57e0b146107b9578063e985e9c5146107d9578063eef440af14610822578063f2fde38b14610837578063fe60d12c1461085757600080fd5b8063aa98e0c6146106db578063b88d4fde146106f1578063bc951b9114610711578063bd32fb6614610730578063c87b56dd14610750578063d1d192131461077057600080fd5b80637f6e9093116101135780637f6e9093146106325780638da5cb5b146106515780639257e0441461066f57806395d89b4114610685578063a22cb4651461069a578063a475b5dd146106ba57600080fd5b806363937fe01461058a578063688a8060146105aa5780636ecd2306146105ca57806370a08231146105dd578063715018a6146105fd5780637ec4a6591461061257600080fd5b80633bd64968116101fe5780634fdd43cb116101b75780634fdd43cb146104cd578063506c2030146104ed57806358381669146105075780635afcf9001461051a5780635c975abb1461054a5780636352211e1461056a57600080fd5b80633bd64968146104015780633ccfd60b1461041657806342842e0e1461042b57806344a0d68a1461044b578063492b12e81461046b5780634f6ccce7146104ad57600080fd5b806313faede61161025057806313faede61461035357806318160ddd1461037757806323b872dd1461038c57806328b60d15146103ac5780632f745c59146103cc57806337a66d85146103ec57600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063093cfa631461031c578063095ea7b314610333575b600080fd5b34801561029957600080fd5b506102ad6102a83660046124f9565b610871565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761089c565b6040516102b9919061274a565b3480156102f057600080fd5b506103046102ff3660046124e0565b61092e565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b506103316109bb565b005b34801561033f57600080fd5b5061033161034e3660046124b6565b610a02565b34801561035f57600080fd5b5061036960095481565b6040519081526020016102b9565b34801561038357600080fd5b50600254610369565b34801561039857600080fd5b506103316103a736600461238f565b610b18565b3480156103b857600080fd5b506103316103c736600461257c565b610b49565b3480156103d857600080fd5b506103696103e73660046124b6565b610b8f565b3480156103f857600080fd5b50610331610c42565b34801561040d57600080fd5b50610331610c8b565b34801561042257600080fd5b50610331610cd6565b34801561043757600080fd5b5061033161044636600461238f565b610df8565b34801561045757600080fd5b506103316104663660046124e0565b610e13565b34801561047757600080fd5b5061049b610486366004612341565b600c6020526000908152604090205460ff1681565b60405160ff90911681526020016102b9565b3480156104b957600080fd5b506103696104c83660046124e0565b610e42565b3480156104d957600080fd5b506103316104e8366004612533565b610eaf565b3480156104f957600080fd5b50600b5461049b9060ff1681565b610331610515366004612597565b610eec565b34801561052657600080fd5b5061049b610535366004612341565b600d6020526000908152604090205460ff1681565b34801561055657600080fd5b50600e546102ad9062010000900460ff1681565b34801561057657600080fd5b506103046105853660046124e0565b6111f4565b34801561059657600080fd5b506103316105a536600461257c565b611280565b3480156105b657600080fd5b506103316105c5366004612483565b6112c0565b6103316105d836600461257c565b611328565b3480156105e957600080fd5b506103696105f8366004612341565b61156d565b34801561060957600080fd5b5061033161163f565b34801561061e57600080fd5b5061033161062d366004612533565b611675565b34801561063e57600080fd5b50600e546102ad90610100900460ff1681565b34801561065d57600080fd5b506005546001600160a01b0316610304565b34801561067b57600080fd5b50610369600a5481565b34801561069157600080fd5b506102d76116b2565b3480156106a657600080fd5b506103316106b5366004612447565b6116c1565b3480156106c657600080fd5b50600e546102ad906301000000900460ff1681565b3480156106e757600080fd5b50610369600f5481565b3480156106fd57600080fd5b5061033161070c3660046123cb565b611786565b34801561071d57600080fd5b50600b5461049b90610100900460ff1681565b34801561073c57600080fd5b5061033161074b3660046124e0565b6117b8565b34801561075c57600080fd5b506102d761076b3660046124e0565b6117e7565b34801561077c57600080fd5b5061033161078b3660046124e0565b611958565b34801561079c57600080fd5b506107a66107e681565b60405161ffff90911681526020016102b9565b3480156107c557600080fd5b506103316107d4366004612341565b611987565b3480156107e557600080fd5b506102ad6107f436600461235c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561082e57600080fd5b506102d76119eb565b34801561084357600080fd5b50610331610852366004612341565b611a79565b34801561086357600080fd5b50600e5461049b9060ff1681565b60006001600160e01b0319821663780e9d6360e01b1480610896575061089682611b14565b92915050565b6060600080546108ab90612959565b80601f01602080910402602001604051908101604052809291908181526020018280546108d790612959565b80156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b5050505050905090565b600061093982611b64565b61099f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6005546001600160a01b031633146109e55760405162461bcd60e51b8152600401610996906127fa565b600e805461ff001981166101009182900460ff1615909102179055565b6000610a0d826111f4565b9050806001600160a01b0316836001600160a01b03161415610a7b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610996565b336001600160a01b0382161480610a975750610a9781336107f4565b610b095760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610996565b610b138383611bae565b505050565b610b223382611c1c565b610b3e5760405162461bcd60e51b81526004016109969061282f565b610b13838383611d06565b6005546001600160a01b03163314610b735760405162461bcd60e51b8152600401610996906127fa565b600b805460ff9092166101000261ff0019909216919091179055565b6000610b9a8361156d565b8210610bb85760405162461bcd60e51b81526004016109969061275d565b6000805b600254811015610c295760028181548110610bd957610bd9612a0f565b6000918252602090912001546001600160a01b0386811691161415610c175783821415610c095791506108969050565b81610c1381612994565b9250505b80610c2181612994565b915050610bbc565b5060405162461bcd60e51b81526004016109969061275d565b6005546001600160a01b03163314610c6c5760405162461bcd60e51b8152600401610996906127fa565b600e805462ff0000198116620100009182900460ff1615909102179055565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610996906127fa565b600e805463ff00000019811663010000009182900460ff1615909102179055565b6005546001600160a01b03163314610d005760405162461bcd60e51b8152600401610996906127fa565b47336108fc6064610d1284604b6128f7565b610d1c91906128e3565b6040518115909202916000818181858888f19350505050158015610d44573d6000803e3d6000fd5b5073f92fabdceaa37529158d580055c72f9d58259d406108fc6064610d6a8460176128f7565b610d7491906128e3565b6040518115909202916000818181858888f19350505050158015610d9c573d6000803e3d6000fd5b507338015cf8d6dd125d9423df516147f719b778c03a6108fc6064610dc28460026128f7565b610dcc91906128e3565b6040518115909202916000818181858888f19350505050158015610df4573d6000803e3d6000fd5b5050565b610b1383838360405180602001604052806000815250611786565b6005546001600160a01b03163314610e3d5760405162461bcd60e51b8152600401610996906127fa565b600955565b6002546000908210610eab5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610996565b5090565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610996906127fa565b8051610df490600890602084019061220e565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120610f648184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150611e5c9050565b610fb05760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610996565b600b54336000908152600c602052604090205460ff91821691610fd5918791166128be565b60ff1611156110265760405162461bcd60e51b815260206004820152601a60248201527f45786365656473206d6178204e4654207065722077616c6c65740000000000006044820152606401610996565b600e54610100900460ff161561107e5760405162461bcd60e51b815260206004820152601c60248201527f57686974656c697374206d696e74696e672069732050617573656421000000006044820152606401610996565b8360ff16600a5461108f91906128f7565b3410156110d45760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610996565b6002546103ff6110e760ff871683612880565b61ffff16106111495760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792031303232204e4654732061726520617661696c61626c6520666f726044820152672050726573616c6560c01b6064820152608401610996565b60005b8560ff168160ff161015611186576111743361116b60ff841685612880565b61ffff16611e69565b8061117e816129af565b91505061114c565b50336000908152600c6020526040812080548792906111a990849060ff166128be565b92506101000a81548160ff021916908360ff1602179055506103fe8560ff16826111d39190612880565b61ffff16106111ed57600e805462ffff0019166101001790555b5050505050565b6000806002838154811061120a5761120a612a0f565b6000918252602090912001546001600160a01b03169050806108965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610996565b6005546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610996906127fa565b600b805460ff191660ff92909216919091179055565b6005546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610996906127fa565b60025460005b8261ffff168160ff161015611322576113108461116b60ff841685612880565b8061131a816129af565b9150506112f0565b50505050565b60025460ff821661137b5760405162461bcd60e51b815260206004820152601a60248201527f4d696e7420416d6f756e742063616e6e6f74206265207a65726f0000000000006044820152606401610996565b6107e661138b60ff841683612880565b61ffff1611156113cb5760405162461bcd60e51b815260206004820152600b60248201526a536f6c64206f757421212160a81b6044820152606401610996565b600b54336000908152600d602052604090205460ff6101009092048216916113f5918591166128be565b60ff1611156114465760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178204e667473207065722077616c6c65742e000000006044820152606401610996565b600e5462010000900460ff161561149f5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610996565b8160ff166009546114b091906128f7565b3410156114f55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610996565b60005b8260ff168160ff161015611529576115173361116b60ff841685612880565b80611521816129af565b9150506114f8565b50336000908152600d602052604090205461154890839060ff166128be565b336000908152600d60205260409020805460ff191660ff929092169190911790555050565b60006001600160a01b0382166115d85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610996565b600254600090815b8181101561163657600281815481106115fb576115fb612a0f565b6000918252602090912001546001600160a01b03868116911614156116265761162383612994565b92505b61162f81612994565b90506115e0565b50909392505050565b6005546001600160a01b031633146116695760405162461bcd60e51b8152600401610996906127fa565b6116736000611ee5565b565b6005546001600160a01b0316331461169f5760405162461bcd60e51b8152600401610996906127fa565b8051610df490600690602084019061220e565b6060600180546108ab90612959565b6001600160a01b03821633141561171a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610996565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117903383611c1c565b6117ac5760405162461bcd60e51b81526004016109969061282f565b61132284848484611f37565b6005546001600160a01b031633146117e25760405162461bcd60e51b8152600401610996906127fa565b600f55565b60606117f282611b64565b6118565760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610996565b600e546301000000900460ff166118f9576008805461187490612959565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090612959565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b50505050509050919050565b6000611903611f6a565b905060008151116119235760405180602001604052806000815250611951565b8061192d84611f79565b600760405160200161194193929190612649565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146119825760405162461bcd60e51b8152600401610996906127fa565b600a55565b6005546001600160a01b031633146119b15760405162461bcd60e51b8152600401610996906127fa565b60025460005b600e5460ff9081169082161015610b13576119d98361116b60ff841685612880565b806119e3816129af565b9150506119b7565b600880546119f890612959565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2490612959565b8015611a715780601f10611a4657610100808354040283529160200191611a71565b820191906000526020600020905b815481529060010190602001808311611a5457829003601f168201915b505050505081565b6005546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610996906127fa565b6001600160a01b038116611b085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610996565b611b1181611ee5565b50565b60006001600160e01b031982166380ac58cd60e01b1480611b4557506001600160e01b03198216635b5e139f60e01b145b8061089657506301ffc9a760e01b6001600160e01b0319831614610896565b60025460009082108015610896575060006001600160a01b031660028381548110611b9157611b91612a0f565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611be3826111f4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c2782611b64565b611c885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610996565b6000611c93836111f4565b9050806001600160a01b0316846001600160a01b03161480611cce5750836001600160a01b0316611cc38461092e565b6001600160a01b0316145b80611cfe57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611d19826111f4565b6001600160a01b031614611d815760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610996565b6001600160a01b038216611de35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610996565b611dee600082611bae565b8160028281548110611e0257611e02612a0f565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611cfe838386612077565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f42848484611d06565b611f4e8484848461208d565b6113225760405162461bcd60e51b8152600401610996906127a8565b6060600680546108ab90612959565b606081611f9d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611fc75780611fb181612994565b9150611fc09050600a836128e3565b9150611fa1565b60008167ffffffffffffffff811115611fe257611fe2612a25565b6040519080825280601f01601f19166020018201604052801561200c576020820181803683370190505b5090505b8415611cfe57612021600183612916565b915061202e600a866129cf565b6120399060306128a6565b60f81b81838151811061204e5761204e612a0f565b60200101906001600160f81b031916908160001a905350612070600a866128e3565b9450612010565b600082612084858461219a565b14949350505050565b60006001600160a01b0384163b1561218f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120d190339089908890889060040161270d565b602060405180830381600087803b1580156120eb57600080fd5b505af192505050801561211b575060408051601f3d908101601f1916820190925261211891810190612516565b60015b612175573d808015612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b50805161216d5760405162461bcd60e51b8152600401610996906127a8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cfe565b506001949350505050565b600081815b84518110156122065760008582815181106121bc576121bc612a0f565b602002602001015190508083116121e257600083815260208290526040902092506121f3565b600081815260208490526040902092505b50806121fe81612994565b91505061219f565b509392505050565b82805461221a90612959565b90600052602060002090601f01602090048101928261223c5760008555612282565b82601f1061225557805160ff1916838001178555612282565b82800160010185558215612282579182015b82811115612282578251825591602001919060010190612267565b50610eab9291505b80821115610eab576000815560010161228a565b600067ffffffffffffffff808411156122b9576122b9612a25565b604051601f8501601f19908116603f011681019082821181831017156122e1576122e1612a25565b816040528093508581528686860111156122fa57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461232b57600080fd5b919050565b803560ff8116811461232b57600080fd5b60006020828403121561235357600080fd5b61195182612314565b6000806040838503121561236f57600080fd5b61237883612314565b915061238660208401612314565b90509250929050565b6000806000606084860312156123a457600080fd5b6123ad84612314565b92506123bb60208501612314565b9150604084013590509250925092565b600080600080608085870312156123e157600080fd5b6123ea85612314565b93506123f860208601612314565b925060408501359150606085013567ffffffffffffffff81111561241b57600080fd5b8501601f8101871361242c57600080fd5b61243b8782356020840161229e565b91505092959194509250565b6000806040838503121561245a57600080fd5b61246383612314565b91506020830135801515811461247857600080fd5b809150509250929050565b6000806040838503121561249657600080fd5b61249f83612314565b9150602083013561ffff8116811461247857600080fd5b600080604083850312156124c957600080fd5b6124d283612314565b946020939093013593505050565b6000602082840312156124f257600080fd5b5035919050565b60006020828403121561250b57600080fd5b813561195181612a3b565b60006020828403121561252857600080fd5b815161195181612a3b565b60006020828403121561254557600080fd5b813567ffffffffffffffff81111561255c57600080fd5b8201601f8101841361256d57600080fd5b611cfe8482356020840161229e565b60006020828403121561258e57600080fd5b61195182612330565b6000806000604084860312156125ac57600080fd5b6125b584612330565b9250602084013567ffffffffffffffff808211156125d257600080fd5b818601915086601f8301126125e657600080fd5b8135818111156125f557600080fd5b8760208260051b850101111561260a57600080fd5b6020830194508093505050509250925092565b6000815180845261263581602086016020860161292d565b601f01601f19169290920160200192915050565b60008451602061265c8285838a0161292d565b85519184019161266f8184848a0161292d565b8554920191600090600181811c908083168061268c57607f831692505b8583108114156126aa57634e487b7160e01b85526022600452602485fd5b8080156126be57600181146126cf576126fc565b60ff198516885283880195506126fc565b60008b81526020902060005b858110156126f45781548a8201529084019088016126db565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906127409083018461261d565b9695505050505050565b602081526000611951602083018461261d565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600061ffff80831681851680830382111561289d5761289d6129e3565b01949350505050565b600082198211156128b9576128b96129e3565b500190565b600060ff821660ff84168060ff038211156128db576128db6129e3565b019392505050565b6000826128f2576128f26129f9565b500490565b6000816000190483118215151615612911576129116129e3565b500290565b600082821015612928576129286129e3565b500390565b60005b83811015612948578181015183820152602001612930565b838111156113225750506000910152565b600181811c9082168061296d57607f821691505b6020821081141561298e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129a8576129a86129e3565b5060010190565b600060ff821660ff8114156129c6576129c66129e3565b60010192915050565b6000826129de576129de6129f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b1157600080fdfea264697066735822122029dedbf78761364959ffa20dea64484f6930b1cedaa8c5190c7dc1b4ae95ce5a64736f6c63430008070033697066733a2f2f516d64595356425351654242477a723661596b74644b57686847716b536942456e35364b36614b636a536e694c714e6f6e2046756e6769626c6520536d696c6520627920547269707069653230323220
Deployed Bytecode
0x6080604052600436106102885760003560e01c806363937fe01161015a578063aa98e0c6116100c1578063d5abeb011161007a578063d5abeb0114610790578063d5e57e0b146107b9578063e985e9c5146107d9578063eef440af14610822578063f2fde38b14610837578063fe60d12c1461085757600080fd5b8063aa98e0c6146106db578063b88d4fde146106f1578063bc951b9114610711578063bd32fb6614610730578063c87b56dd14610750578063d1d192131461077057600080fd5b80637f6e9093116101135780637f6e9093146106325780638da5cb5b146106515780639257e0441461066f57806395d89b4114610685578063a22cb4651461069a578063a475b5dd146106ba57600080fd5b806363937fe01461058a578063688a8060146105aa5780636ecd2306146105ca57806370a08231146105dd578063715018a6146105fd5780637ec4a6591461061257600080fd5b80633bd64968116101fe5780634fdd43cb116101b75780634fdd43cb146104cd578063506c2030146104ed57806358381669146105075780635afcf9001461051a5780635c975abb1461054a5780636352211e1461056a57600080fd5b80633bd64968146104015780633ccfd60b1461041657806342842e0e1461042b57806344a0d68a1461044b578063492b12e81461046b5780634f6ccce7146104ad57600080fd5b806313faede61161025057806313faede61461035357806318160ddd1461037757806323b872dd1461038c57806328b60d15146103ac5780632f745c59146103cc57806337a66d85146103ec57600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063093cfa631461031c578063095ea7b314610333575b600080fd5b34801561029957600080fd5b506102ad6102a83660046124f9565b610871565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761089c565b6040516102b9919061274a565b3480156102f057600080fd5b506103046102ff3660046124e0565b61092e565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b506103316109bb565b005b34801561033f57600080fd5b5061033161034e3660046124b6565b610a02565b34801561035f57600080fd5b5061036960095481565b6040519081526020016102b9565b34801561038357600080fd5b50600254610369565b34801561039857600080fd5b506103316103a736600461238f565b610b18565b3480156103b857600080fd5b506103316103c736600461257c565b610b49565b3480156103d857600080fd5b506103696103e73660046124b6565b610b8f565b3480156103f857600080fd5b50610331610c42565b34801561040d57600080fd5b50610331610c8b565b34801561042257600080fd5b50610331610cd6565b34801561043757600080fd5b5061033161044636600461238f565b610df8565b34801561045757600080fd5b506103316104663660046124e0565b610e13565b34801561047757600080fd5b5061049b610486366004612341565b600c6020526000908152604090205460ff1681565b60405160ff90911681526020016102b9565b3480156104b957600080fd5b506103696104c83660046124e0565b610e42565b3480156104d957600080fd5b506103316104e8366004612533565b610eaf565b3480156104f957600080fd5b50600b5461049b9060ff1681565b610331610515366004612597565b610eec565b34801561052657600080fd5b5061049b610535366004612341565b600d6020526000908152604090205460ff1681565b34801561055657600080fd5b50600e546102ad9062010000900460ff1681565b34801561057657600080fd5b506103046105853660046124e0565b6111f4565b34801561059657600080fd5b506103316105a536600461257c565b611280565b3480156105b657600080fd5b506103316105c5366004612483565b6112c0565b6103316105d836600461257c565b611328565b3480156105e957600080fd5b506103696105f8366004612341565b61156d565b34801561060957600080fd5b5061033161163f565b34801561061e57600080fd5b5061033161062d366004612533565b611675565b34801561063e57600080fd5b50600e546102ad90610100900460ff1681565b34801561065d57600080fd5b506005546001600160a01b0316610304565b34801561067b57600080fd5b50610369600a5481565b34801561069157600080fd5b506102d76116b2565b3480156106a657600080fd5b506103316106b5366004612447565b6116c1565b3480156106c657600080fd5b50600e546102ad906301000000900460ff1681565b3480156106e757600080fd5b50610369600f5481565b3480156106fd57600080fd5b5061033161070c3660046123cb565b611786565b34801561071d57600080fd5b50600b5461049b90610100900460ff1681565b34801561073c57600080fd5b5061033161074b3660046124e0565b6117b8565b34801561075c57600080fd5b506102d761076b3660046124e0565b6117e7565b34801561077c57600080fd5b5061033161078b3660046124e0565b611958565b34801561079c57600080fd5b506107a66107e681565b60405161ffff90911681526020016102b9565b3480156107c557600080fd5b506103316107d4366004612341565b611987565b3480156107e557600080fd5b506102ad6107f436600461235c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561082e57600080fd5b506102d76119eb565b34801561084357600080fd5b50610331610852366004612341565b611a79565b34801561086357600080fd5b50600e5461049b9060ff1681565b60006001600160e01b0319821663780e9d6360e01b1480610896575061089682611b14565b92915050565b6060600080546108ab90612959565b80601f01602080910402602001604051908101604052809291908181526020018280546108d790612959565b80156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b5050505050905090565b600061093982611b64565b61099f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6005546001600160a01b031633146109e55760405162461bcd60e51b8152600401610996906127fa565b600e805461ff001981166101009182900460ff1615909102179055565b6000610a0d826111f4565b9050806001600160a01b0316836001600160a01b03161415610a7b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610996565b336001600160a01b0382161480610a975750610a9781336107f4565b610b095760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610996565b610b138383611bae565b505050565b610b223382611c1c565b610b3e5760405162461bcd60e51b81526004016109969061282f565b610b13838383611d06565b6005546001600160a01b03163314610b735760405162461bcd60e51b8152600401610996906127fa565b600b805460ff9092166101000261ff0019909216919091179055565b6000610b9a8361156d565b8210610bb85760405162461bcd60e51b81526004016109969061275d565b6000805b600254811015610c295760028181548110610bd957610bd9612a0f565b6000918252602090912001546001600160a01b0386811691161415610c175783821415610c095791506108969050565b81610c1381612994565b9250505b80610c2181612994565b915050610bbc565b5060405162461bcd60e51b81526004016109969061275d565b6005546001600160a01b03163314610c6c5760405162461bcd60e51b8152600401610996906127fa565b600e805462ff0000198116620100009182900460ff1615909102179055565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610996906127fa565b600e805463ff00000019811663010000009182900460ff1615909102179055565b6005546001600160a01b03163314610d005760405162461bcd60e51b8152600401610996906127fa565b47336108fc6064610d1284604b6128f7565b610d1c91906128e3565b6040518115909202916000818181858888f19350505050158015610d44573d6000803e3d6000fd5b5073f92fabdceaa37529158d580055c72f9d58259d406108fc6064610d6a8460176128f7565b610d7491906128e3565b6040518115909202916000818181858888f19350505050158015610d9c573d6000803e3d6000fd5b507338015cf8d6dd125d9423df516147f719b778c03a6108fc6064610dc28460026128f7565b610dcc91906128e3565b6040518115909202916000818181858888f19350505050158015610df4573d6000803e3d6000fd5b5050565b610b1383838360405180602001604052806000815250611786565b6005546001600160a01b03163314610e3d5760405162461bcd60e51b8152600401610996906127fa565b600955565b6002546000908210610eab5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610996565b5090565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610996906127fa565b8051610df490600890602084019061220e565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120610f648184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150611e5c9050565b610fb05760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610996565b600b54336000908152600c602052604090205460ff91821691610fd5918791166128be565b60ff1611156110265760405162461bcd60e51b815260206004820152601a60248201527f45786365656473206d6178204e4654207065722077616c6c65740000000000006044820152606401610996565b600e54610100900460ff161561107e5760405162461bcd60e51b815260206004820152601c60248201527f57686974656c697374206d696e74696e672069732050617573656421000000006044820152606401610996565b8360ff16600a5461108f91906128f7565b3410156110d45760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610996565b6002546103ff6110e760ff871683612880565b61ffff16106111495760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792031303232204e4654732061726520617661696c61626c6520666f726044820152672050726573616c6560c01b6064820152608401610996565b60005b8560ff168160ff161015611186576111743361116b60ff841685612880565b61ffff16611e69565b8061117e816129af565b91505061114c565b50336000908152600c6020526040812080548792906111a990849060ff166128be565b92506101000a81548160ff021916908360ff1602179055506103fe8560ff16826111d39190612880565b61ffff16106111ed57600e805462ffff0019166101001790555b5050505050565b6000806002838154811061120a5761120a612a0f565b6000918252602090912001546001600160a01b03169050806108965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610996565b6005546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610996906127fa565b600b805460ff191660ff92909216919091179055565b6005546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610996906127fa565b60025460005b8261ffff168160ff161015611322576113108461116b60ff841685612880565b8061131a816129af565b9150506112f0565b50505050565b60025460ff821661137b5760405162461bcd60e51b815260206004820152601a60248201527f4d696e7420416d6f756e742063616e6e6f74206265207a65726f0000000000006044820152606401610996565b6107e661138b60ff841683612880565b61ffff1611156113cb5760405162461bcd60e51b815260206004820152600b60248201526a536f6c64206f757421212160a81b6044820152606401610996565b600b54336000908152600d602052604090205460ff6101009092048216916113f5918591166128be565b60ff1611156114465760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178204e667473207065722077616c6c65742e000000006044820152606401610996565b600e5462010000900460ff161561149f5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610996565b8160ff166009546114b091906128f7565b3410156114f55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610996565b60005b8260ff168160ff161015611529576115173361116b60ff841685612880565b80611521816129af565b9150506114f8565b50336000908152600d602052604090205461154890839060ff166128be565b336000908152600d60205260409020805460ff191660ff929092169190911790555050565b60006001600160a01b0382166115d85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610996565b600254600090815b8181101561163657600281815481106115fb576115fb612a0f565b6000918252602090912001546001600160a01b03868116911614156116265761162383612994565b92505b61162f81612994565b90506115e0565b50909392505050565b6005546001600160a01b031633146116695760405162461bcd60e51b8152600401610996906127fa565b6116736000611ee5565b565b6005546001600160a01b0316331461169f5760405162461bcd60e51b8152600401610996906127fa565b8051610df490600690602084019061220e565b6060600180546108ab90612959565b6001600160a01b03821633141561171a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610996565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117903383611c1c565b6117ac5760405162461bcd60e51b81526004016109969061282f565b61132284848484611f37565b6005546001600160a01b031633146117e25760405162461bcd60e51b8152600401610996906127fa565b600f55565b60606117f282611b64565b6118565760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610996565b600e546301000000900460ff166118f9576008805461187490612959565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090612959565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b50505050509050919050565b6000611903611f6a565b905060008151116119235760405180602001604052806000815250611951565b8061192d84611f79565b600760405160200161194193929190612649565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146119825760405162461bcd60e51b8152600401610996906127fa565b600a55565b6005546001600160a01b031633146119b15760405162461bcd60e51b8152600401610996906127fa565b60025460005b600e5460ff9081169082161015610b13576119d98361116b60ff841685612880565b806119e3816129af565b9150506119b7565b600880546119f890612959565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2490612959565b8015611a715780601f10611a4657610100808354040283529160200191611a71565b820191906000526020600020905b815481529060010190602001808311611a5457829003601f168201915b505050505081565b6005546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610996906127fa565b6001600160a01b038116611b085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610996565b611b1181611ee5565b50565b60006001600160e01b031982166380ac58cd60e01b1480611b4557506001600160e01b03198216635b5e139f60e01b145b8061089657506301ffc9a760e01b6001600160e01b0319831614610896565b60025460009082108015610896575060006001600160a01b031660028381548110611b9157611b91612a0f565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611be3826111f4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c2782611b64565b611c885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610996565b6000611c93836111f4565b9050806001600160a01b0316846001600160a01b03161480611cce5750836001600160a01b0316611cc38461092e565b6001600160a01b0316145b80611cfe57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611d19826111f4565b6001600160a01b031614611d815760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610996565b6001600160a01b038216611de35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610996565b611dee600082611bae565b8160028281548110611e0257611e02612a0f565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611cfe838386612077565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f42848484611d06565b611f4e8484848461208d565b6113225760405162461bcd60e51b8152600401610996906127a8565b6060600680546108ab90612959565b606081611f9d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611fc75780611fb181612994565b9150611fc09050600a836128e3565b9150611fa1565b60008167ffffffffffffffff811115611fe257611fe2612a25565b6040519080825280601f01601f19166020018201604052801561200c576020820181803683370190505b5090505b8415611cfe57612021600183612916565b915061202e600a866129cf565b6120399060306128a6565b60f81b81838151811061204e5761204e612a0f565b60200101906001600160f81b031916908160001a905350612070600a866128e3565b9450612010565b600082612084858461219a565b14949350505050565b60006001600160a01b0384163b1561218f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120d190339089908890889060040161270d565b602060405180830381600087803b1580156120eb57600080fd5b505af192505050801561211b575060408051601f3d908101601f1916820190925261211891810190612516565b60015b612175573d808015612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b50805161216d5760405162461bcd60e51b8152600401610996906127a8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cfe565b506001949350505050565b600081815b84518110156122065760008582815181106121bc576121bc612a0f565b602002602001015190508083116121e257600083815260208290526040902092506121f3565b600081815260208490526040902092505b50806121fe81612994565b91505061219f565b509392505050565b82805461221a90612959565b90600052602060002090601f01602090048101928261223c5760008555612282565b82601f1061225557805160ff1916838001178555612282565b82800160010185558215612282579182015b82811115612282578251825591602001919060010190612267565b50610eab9291505b80821115610eab576000815560010161228a565b600067ffffffffffffffff808411156122b9576122b9612a25565b604051601f8501601f19908116603f011681019082821181831017156122e1576122e1612a25565b816040528093508581528686860111156122fa57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461232b57600080fd5b919050565b803560ff8116811461232b57600080fd5b60006020828403121561235357600080fd5b61195182612314565b6000806040838503121561236f57600080fd5b61237883612314565b915061238660208401612314565b90509250929050565b6000806000606084860312156123a457600080fd5b6123ad84612314565b92506123bb60208501612314565b9150604084013590509250925092565b600080600080608085870312156123e157600080fd5b6123ea85612314565b93506123f860208601612314565b925060408501359150606085013567ffffffffffffffff81111561241b57600080fd5b8501601f8101871361242c57600080fd5b61243b8782356020840161229e565b91505092959194509250565b6000806040838503121561245a57600080fd5b61246383612314565b91506020830135801515811461247857600080fd5b809150509250929050565b6000806040838503121561249657600080fd5b61249f83612314565b9150602083013561ffff8116811461247857600080fd5b600080604083850312156124c957600080fd5b6124d283612314565b946020939093013593505050565b6000602082840312156124f257600080fd5b5035919050565b60006020828403121561250b57600080fd5b813561195181612a3b565b60006020828403121561252857600080fd5b815161195181612a3b565b60006020828403121561254557600080fd5b813567ffffffffffffffff81111561255c57600080fd5b8201601f8101841361256d57600080fd5b611cfe8482356020840161229e565b60006020828403121561258e57600080fd5b61195182612330565b6000806000604084860312156125ac57600080fd5b6125b584612330565b9250602084013567ffffffffffffffff808211156125d257600080fd5b818601915086601f8301126125e657600080fd5b8135818111156125f557600080fd5b8760208260051b850101111561260a57600080fd5b6020830194508093505050509250925092565b6000815180845261263581602086016020860161292d565b601f01601f19169290920160200192915050565b60008451602061265c8285838a0161292d565b85519184019161266f8184848a0161292d565b8554920191600090600181811c908083168061268c57607f831692505b8583108114156126aa57634e487b7160e01b85526022600452602485fd5b8080156126be57600181146126cf576126fc565b60ff198516885283880195506126fc565b60008b81526020902060005b858110156126f45781548a8201529084019088016126db565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906127409083018461261d565b9695505050505050565b602081526000611951602083018461261d565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600061ffff80831681851680830382111561289d5761289d6129e3565b01949350505050565b600082198211156128b9576128b96129e3565b500190565b600060ff821660ff84168060ff038211156128db576128db6129e3565b019392505050565b6000826128f2576128f26129f9565b500490565b6000816000190483118215151615612911576129116129e3565b500290565b600082821015612928576129286129e3565b500390565b60005b83811015612948578181015183820152602001612930565b838111156113225750506000910152565b600181811c9082168061296d57607f821691505b6020821081141561298e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129a8576129a86129e3565b5060010190565b600060ff821660ff8114156129c6576129c66129e3565b60010192915050565b6000826129de576129de6129f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b1157600080fdfea264697066735822122029dedbf78761364959ffa20dea64484f6930b1cedaa8c5190c7dc1b4ae95ce5a64736f6c63430008070033
Deployed Bytecode Sourcemap
31590:5730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30284:224;;;;;;;;;;-1:-1:-1;30284:224:0;;;;;:::i;:::-;;:::i;:::-;;;8511:14:1;;8504:22;8486:41;;8474:2;8459:18;30284:224:0;;;;;;;;18897:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19709:308::-;;;;;;;;;;-1:-1:-1;19709:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7809:32:1;;;7791:51;;7779:2;7764:18;19709:308:0;7645:203:1;34378:75:0;;;;;;;;;;;;;:::i;:::-;;19232:411;;;;;;;;;;-1:-1:-1;19232:411:0;;;;;:::i;:::-;;:::i;31867:33::-;;;;;;;;;;;;;;;;;;;8684:25:1;;;8672:2;8657:18;31867:33:0;8538:177:1;30584:110:0;;;;;;;;;;-1:-1:-1;30672:7:0;:14;30584:110;;20768:376;;;;;;;;;;-1:-1:-1;20768:376:0;;;;;:::i;:::-;;:::i;36601:115::-;;;;;;;;;;-1:-1:-1;36601:115:0;;;;;:::i;:::-;;:::i;31060:490::-;;;;;;;;;;-1:-1:-1;31060:490:0;;;;;:::i;:::-;;:::i;34457:69::-;;;;;;;;;;;;;:::i;34302:71::-;;;;;;;;;;;;;:::i;36727:335::-;;;;;;;;;;;;;:::i;21215:185::-;;;;;;;;;;-1:-1:-1;21215:185:0;;;;;:::i;:::-;;:::i;36517:76::-;;;;;;;;;;-1:-1:-1;36517:76:0;;;;;:::i;:::-;;:::i;32048:49::-;;;;;;;;;;-1:-1:-1;32048:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19205:4:1;19193:17;;;19175:36;;19163:2;19148:18;32048:49:0;19033:184:1;30771:205:0;;;;;;;;;;-1:-1:-1;30771:205:0;;;;;:::i;:::-;;:::i;36262:126::-;;;;;;;;;;-1:-1:-1;36262:126:0;;;;;:::i;:::-;;:::i;31954:41::-;;;;;;;;;;-1:-1:-1;31954:41:0;;;;;;;;35251:1005;;;;;;:::i;:::-;;:::i;32102:47::-;;;;;;;;;;-1:-1:-1;32102:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32271:25;;;;;;;;;;-1:-1:-1;32271:25:0;;;;;;;;;;;18504:326;;;;;;;;;;-1:-1:-1;18504:326:0;;;;;:::i;:::-;;:::i;34640:127::-;;;;;;;;;;-1:-1:-1;34640:127:0;;;;;:::i;:::-;;:::i;33503:286::-;;;;;;;;;;-1:-1:-1;33503:286:0;;;;;:::i;:::-;;:::i;32538:691::-;;;;;;:::i;:::-;;:::i;17996:446::-;;;;;;;;;;-1:-1:-1;17996:446:0;;;;;:::i;:::-;;:::i;6007:103::-;;;;;;;;;;;;;:::i;36401:102::-;;;;;;;;;;-1:-1:-1;36401:102:0;;;;;:::i;:::-;;:::i;32238:28::-;;;;;;;;;;-1:-1:-1;32238:28:0;;;;;;;;;;;5356:87;;;;;;;;;;-1:-1:-1;5429:6:0;;-1:-1:-1;;;;;5429:6:0;5356:87;;31905:42;;;;;;;;;;;;;;;;19066:104;;;;;;;;;;;;;:::i;20089:327::-;;;;;;;;;;-1:-1:-1;20089:327:0;;;;;:::i;:::-;;:::i;32301:26::-;;;;;;;;;;-1:-1:-1;32301:26:0;;;;;;;;;;;32338:103;;;;;;;;;;;;;;;;21471:365;;;;;;;;;;-1:-1:-1;21471:365:0;;;;;:::i;:::-;;:::i;32002:39::-;;;;;;;;;;-1:-1:-1;32002:39:0;;;;;;;;;;;34769:142;;;;;;;;;;-1:-1:-1;34769:142:0;;;;;:::i;:::-;;:::i;33802:496::-;;;;;;;;;;-1:-1:-1;33802:496:0;;;;;:::i;:::-;;:::i;34530:106::-;;;;;;;;;;-1:-1:-1;34530:106:0;;;;;:::i;:::-;;:::i;32187:39::-;;;;;;;;;;;;32222:4;32187:39;;;;;18832:6:1;18820:19;;;18802:38;;18790:2;18775:18;32187:39:0;18658:188:1;33237:262:0;;;;;;;;;;-1:-1:-1;33237:262:0;;;;;:::i;:::-;;:::i;20487:214::-;;;;;;;;;;-1:-1:-1;20487:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;20658:25:0;;;20629:4;20658:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;20487:214;31769:81;;;;;;;;;;;;;:::i;6265:201::-;;;;;;;;;;-1:-1:-1;6265:201:0;;;;;:::i;:::-;;:::i;32154:26::-;;;;;;;;;;-1:-1:-1;32154:26:0;;;;;;;;30284:224;30386:4;-1:-1:-1;;;;;;30410:50:0;;-1:-1:-1;;;30410:50:0;;:90;;;30464:36;30488:11;30464:23;:36::i;:::-;30403:97;30284:224;-1:-1:-1;;30284:224:0:o;18897:100::-;18951:13;18984:5;18977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18897:100;:::o;19709:308::-;19830:7;19877:16;19885:7;19877;:16::i;:::-;19855:110;;;;-1:-1:-1;;;19855:110:0;;14615:2:1;19855:110:0;;;14597:21:1;14654:2;14634:18;;;14627:30;14693:34;14673:18;;;14666:62;-1:-1:-1;;;14744:18:1;;;14737:42;14796:19;;19855:110:0;;;;;;;;;-1:-1:-1;19985:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;19985:24:0;;19709:308::o;34378:75::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34439:8:::1;::::0;;-1:-1:-1;;34427:20:0;::::1;34439:8;::::0;;;::::1;;;34438:9;34427:20:::0;;::::1;;::::0;;34378:75::o;19232:411::-;19313:13;19329:23;19344:7;19329:14;:23::i;:::-;19313:39;;19377:5;-1:-1:-1;;;;;19371:11:0;:2;-1:-1:-1;;;;;19371:11:0;;;19363:57;;;;-1:-1:-1;;;19363:57:0;;16922:2:1;19363:57:0;;;16904:21:1;16961:2;16941:18;;;16934:30;17000:34;16980:18;;;16973:62;-1:-1:-1;;;17051:18:1;;;17044:31;17092:19;;19363:57:0;16720:397:1;19363:57:0;4160:10;-1:-1:-1;;;;;19455:21:0;;;;:62;;-1:-1:-1;19480:37:0;19497:5;4160:10;20487:214;:::i;19480:37::-;19433:168;;;;-1:-1:-1;;;19433:168:0;;12662:2:1;19433:168:0;;;12644:21:1;12701:2;12681:18;;;12674:30;12740:34;12720:18;;;12713:62;12811:26;12791:18;;;12784:54;12855:19;;19433:168:0;12460:420:1;19433:168:0;19614:21;19623:2;19627:7;19614:8;:21::i;:::-;19302:341;19232:411;;:::o;20768:376::-;20977:41;4160:10;21010:7;20977:18;:41::i;:::-;20955:140;;;;-1:-1:-1;;;20955:140:0;;;;;;;:::i;:::-;21108:28;21118:4;21124:2;21128:7;21108:9;:28::i;36601:115::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;36677:22:::1;:31:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;36677:31:0;;::::1;::::0;;;::::1;::::0;;36601:115::o;31060:490::-;31157:15;31201:16;31211:5;31201:9;:16::i;:::-;31193:5;:24;31185:80;;;;-1:-1:-1;;;31185:80:0;;;;;;;:::i;:::-;31278:10;31303:6;31299:178;31315:7;:14;31311:18;;31299:178;;;31362:7;31370:1;31362:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31353:19:0;;;31362:10;;31353:19;31350:116;;;31404:5;31395;:14;31392:58;;;31418:1;-1:-1:-1;31411:8:0;;-1:-1:-1;31411:8:0;31392:58;31443:7;;;;:::i;:::-;;;;31392:58;31331:3;;;;:::i;:::-;;;;31299:178;;;;31489:53;;-1:-1:-1;;;31489:53:0;;;;;;;:::i;34457:69::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34514:6:::1;::::0;;-1:-1:-1;;34504:16:0;::::1;34514:6:::0;;;;::::1;;;34513:7;34504:16:::0;;::::1;;::::0;;34457:69::o;34302:71::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34361:6:::1;::::0;;-1:-1:-1;;34351:16:0;::::1;34361:6:::0;;;;::::1;;;34360:7;34351:16:::0;;::::1;;::::0;;34302:71::o;36727:335::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;36787:21:::1;36824:10;36816:50;36861:3;36845:13;36787:21:::0;36856:2:::1;36845:13;:::i;:::-;:19;;;;:::i;:::-;36816:50;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;36882:42:0::1;36874:82;36951:3;36935:13;:8:::0;36946:2:::1;36935:13;:::i;:::-;:19;;;;:::i;:::-;36874:82;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;36973:42:0::1;36965:80;37041:3;37026:12;:8:::0;37037:1:::1;37026:12;:::i;:::-;:18;;;;:::i;:::-;36965:80;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36766:296;36727:335::o:0;21215:185::-;21353:39;21370:4;21376:2;21380:7;21353:39;;;;;;;;;;;;:16;:39::i;36517:76::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;36573:4:::1;:12:::0;36517:76::o;30771:205::-;30882:7;:14;30846:7;;30874:22;;30866:79;;;;-1:-1:-1;;;30866:79:0;;17742:2:1;30866:79:0;;;17724:21:1;17781:2;17761:18;;;17754:30;17820:34;17800:18;;;17793:62;-1:-1:-1;;;17871:18:1;;;17864:42;17923:19;;30866:79:0;17540:408:1;30866:79:0;-1:-1:-1;30963:5:0;30771:205::o;36262:126::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;36352:30;;::::1;::::0;:9:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;35251:1005::-:0;35035:23;;;35394:10;6028:2:1;6024:15;-1:-1:-1;;6020:53:1;35035:23:0;;;;6008:66:1;;;;35035:23:0;;;;;;;;;6090:12:1;;;;35035:23:0;;;35025:34;;;;;35433:56;35441:8;35454:11;;35433:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35469:19:0;;;-1:-1:-1;35433:7:0;;-1:-1:-1;35433:56:0:i;:::-;35425:93;;;;-1:-1:-1;;;35425:93:0;;14263:2:1;35425:93:0;;;14245:21:1;14302:2;14282:18;;;14275:30;14341:25;14321:18;;;14314:53;14384:18;;35425:93:0;14061:347:1;35425:93:0;35582:24;;35553:10;35582:24;35537:27;;;:15;:27;;;;;;35582:24;;;;;35537:41;;35567:11;;35537:27;:41;:::i;:::-;:69;;;;35528:109;;;;-1:-1:-1;;;35528:109:0;;15028:2:1;35528:109:0;;;15010:21:1;15067:2;15047:18;;;15040:30;15106:28;15086:18;;;15079:56;15152:18;;35528:109:0;14826:350:1;35528:109:0;35653:8;;;;;;;35652:9;35644:50;;;;-1:-1:-1;;;35644:50:0;;18155:2:1;35644:50:0;;;18137:21:1;18194:2;18174:18;;;18167:30;18233;18213:18;;;18206:58;18281:18;;35644:50:0;17953:352:1;35644:50:0;35738:11;35722:27;;:13;;:27;;;;:::i;:::-;35709:9;:40;;35701:72;;;;-1:-1:-1;;;35701:72:0;;18512:2:1;35701:72:0;;;18494:21:1;18551:2;18531:18;;;18524:30;-1:-1:-1;;;18570:18:1;;;18563:49;18629:18;;35701:72:0;18310:343:1;35701:72:0;35813:7;:14;35870:4;35843:25;;;;35813:14;35843:25;:::i;:::-;:31;;;35835:85;;;;-1:-1:-1;;;35835:85:0;;9146:2:1;35835:85:0;;;9128:21:1;9185:2;9165:18;;;9158:30;9224:34;9204:18;;;9197:62;-1:-1:-1;;;9275:18:1;;;9268:38;9323:19;;35835:85:0;8944:404:1;35835:85:0;35931:7;35927:86;35944:11;35940:15;;:1;:15;;;35927:86;;;35969:35;35975:10;35988:15;;;;:11;:15;:::i;:::-;35969:35;;:5;:35::i;:::-;35957:3;;;;:::i;:::-;;;;35927:86;;;-1:-1:-1;36037:10:0;36021:27;;;;:15;:27;;;;;:42;;36052:11;;36021:27;:42;;36052:11;;36021:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36105:4;36090:11;36076:25;;:11;:25;;;;:::i;:::-;:33;;;36072:109;;36130:8;:15;;-1:-1:-1;;36157:14:0;36130:15;36157:14;;;36072:109;-1:-1:-1;;;;;35251:1005:0:o;18504:326::-;18621:7;18646:13;18662:7;18670;18662:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;18662:16:0;;-1:-1:-1;18711:19:0;18689:110;;;;-1:-1:-1;;;18689:110:0;;13498:2:1;18689:110:0;;;13480:21:1;13537:2;13517:18;;;13510:30;13576:34;13556:18;;;13549:62;-1:-1:-1;;;13627:18:1;;;13620:39;13676:19;;18689:110:0;13296:405:1;34640:127:0;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34709:24:::1;:33:::0;;-1:-1:-1;;34709:33:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;34640:127::o;33503:286::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;33614:7:::1;:14:::0;33586:18:::1;33642:86;33659:11;33655:15;;:1;:15;;;33642:86;;;33685:34;33691:9:::0;33703:15:::1;;::::0;::::1;:11:::0;:15:::1;:::i;33685:34::-;33673:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33642:86;;;-1:-1:-1::0;;;;33503:286:0:o;32538:691::-;32624:7;:14;32654:15;;;32646:55;;;;-1:-1:-1;;;32646:55:0;;13908:2:1;32646:55:0;;;13890:21:1;13947:2;13927:18;;;13920:30;13986:28;13966:18;;;13959:56;14032:18;;32646:55:0;13706:350:1;32646:55:0;32222:4;32716:25;;;;:11;:25;:::i;:::-;:38;;;;32708:62;;;;-1:-1:-1;;;32708:62:0;;10793:2:1;32708:62:0;;;10775:21:1;10832:2;10812:18;;;10805:30;-1:-1:-1;;;10851:18:1;;;10844:41;10902:18;;32708:62:0;10591:335:1;32708:62:0;32828:22;;32799:10;32785:25;;;;:13;:25;;;;;;32828:22;;;;;;;;32785:39;;32813:11;;32785:25;:39;:::i;:::-;:65;;;;32777:106;;;;-1:-1:-1;;;32777:106:0;;11892:2:1;32777:106:0;;;11874:21:1;11931:2;11911:18;;;11904:30;11970;11950:18;;;11943:58;12018:18;;32777:106:0;11690:352:1;32777:106:0;32901:6;;;;;;;32900:7;32892:43;;;;-1:-1:-1;;;32892:43:0;;15744:2:1;32892:43:0;;;15726:21:1;15783:2;15763:18;;;15756:30;15822:25;15802:18;;;15795:53;15865:18;;32892:43:0;15542:347:1;32892:43:0;32970:11;32963:18;;:4;;:18;;;;:::i;:::-;32950:9;:31;;32942:63;;;;-1:-1:-1;;;32942:63:0;;18512:2:1;32942:63:0;;;18494:21:1;18551:2;18531:18;;;18524:30;-1:-1:-1;;;18570:18:1;;;18563:49;18629:18;;32942:63:0;18310:343:1;32942:63:0;33017:7;33013:85;33030:11;33026:15;;:1;:15;;;33013:85;;;33055:34;33061:10;33073:15;;;;:11;:15;:::i;33055:34::-;33043:3;;;;:::i;:::-;;;;33013:85;;;-1:-1:-1;33145:10:0;33131:25;;;;:13;:25;;;;;;:39;;33159:11;;33131:25;;:39;:::i;:::-;33118:10;33104:25;;;;:13;:25;;;;;:66;;-1:-1:-1;;33104:66:0;;;;;;;;;;;;-1:-1:-1;;32538:691:0:o;17996:446::-;18118:4;-1:-1:-1;;;;;18149:19:0;;18141:74;;;;-1:-1:-1;;;18141:74:0;;13087:2:1;18141:74:0;;;13069:21:1;13126:2;13106:18;;;13099:30;13165:34;13145:18;;;13138:62;-1:-1:-1;;;13216:18:1;;;13209:40;13266:19;;18141:74:0;12885:406:1;18141:74:0;18262:7;:14;18228:10;;;18287:101;18304:6;18300:1;:10;18287:101;;;18343:7;18351:1;18343:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;18334:19:0;;;18343:10;;18334:19;18330:46;;;18369:7;;;:::i;:::-;;;18330:46;18312:3;;;:::i;:::-;;;18287:101;;;-1:-1:-1;18429:5:0;;17996:446;-1:-1:-1;;;17996:446:0:o;6007:103::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;6072:30:::1;6099:1;6072:18;:30::i;:::-;6007:103::o:0;36401:102::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;36475:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;19066:104::-:0;19122:13;19155:7;19148:14;;;;;:::i;20089:327::-;-1:-1:-1;;;;;20224:24:0;;4160:10;20224:24;;20216:62;;;;-1:-1:-1;;;20216:62:0;;11538:2:1;20216:62:0;;;11520:21:1;11577:2;11557:18;;;11550:30;11616:27;11596:18;;;11589:55;11661:18;;20216:62:0;11336:349:1;20216:62:0;4160:10;20291:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;20291:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;20291:53:0;;;;;;;;;;20360:48;;8486:41:1;;;20291:42:0;;4160:10;20360:48;;8459:18:1;20360:48:0;;;;;;;20089:327;;:::o;21471:365::-;21660:41;4160:10;21693:7;21660:18;:41::i;:::-;21638:140;;;;-1:-1:-1;;;21638:140:0;;;;;;;:::i;:::-;21789:39;21803:4;21809:2;21813:7;21822:5;21789:13;:39::i;34769:142::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34861:19:::1;:42:::0;34769:142::o;33802:496::-;33901:13;33942:17;33950:8;33942:7;:17::i;:::-;33926:98;;;;-1:-1:-1;;;33926:98:0;;16506:2:1;33926:98:0;;;16488:21:1;16545:2;16525:18;;;16518:30;16584:34;16564:18;;;16557:62;-1:-1:-1;;;16635:18:1;;;16628:45;16690:19;;33926:98:0;16304:411:1;33926:98:0;34041:6;;;;;;;34037:54;;34074:9;34067:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33802:496;;;:::o;34037:54::-;34107:28;34138:10;:8;:10::i;:::-;34107:41;;34193:1;34168:14;34162:28;:32;:130;;;;;;;;;;;;;;;;;34230:14;34246:19;:8;:17;:19::i;:::-;34267:9;34213:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34162:130;34155:137;33802:496;-1:-1:-1;;;33802:496:0:o;34530:106::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;34590:13:::1;:21:::0;34530:106::o;33237:262::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;33327:7:::1;:14:::0;33299:18:::1;33355:83;33372:8;::::0;::::1;::::0;;::::1;33368:12:::0;;::::1;;33355:83;;;33395:34;33401:9:::0;33413:15:::1;;::::0;::::1;:11:::0;:15:::1;:::i;33395:34::-;33383:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33355:83;;31769:81:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6265:201::-;5429:6;;-1:-1:-1;;;;;5429:6:0;4160:10;5576:23;5568:68;;;;-1:-1:-1;;;5568:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6354:22:0;::::1;6346:73;;;::::0;-1:-1:-1;;;6346:73:0;;10386:2:1;6346:73:0::1;::::0;::::1;10368:21:1::0;10425:2;10405:18;;;10398:30;10464:34;10444:18;;;10437:62;-1:-1:-1;;;10515:18:1;;;10508:36;10561:19;;6346:73:0::1;10184:402:1::0;6346:73:0::1;6430:28;6449:8;6430:18;:28::i;:::-;6265:201:::0;:::o;17577:355::-;17724:4;-1:-1:-1;;;;;;17766:40:0;;-1:-1:-1;;;17766:40:0;;:105;;-1:-1:-1;;;;;;;17823:48:0;;-1:-1:-1;;;17823:48:0;17766:105;:158;;;-1:-1:-1;;;;;;;;;;9746:40:0;;;17888:36;9637:157;23383:155;23482:7;:14;23448:4;;23472:24;;:58;;;;;23528:1;-1:-1:-1;;;;;23500:30:0;:7;23508;23500:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23500:16:0;:30;;23465:65;23383:155;-1:-1:-1;;23383:155:0:o;27408:174::-;27483:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;27483:29:0;-1:-1:-1;;;;;27483:29:0;;;;;;;;:24;;27537:23;27483:24;27537:14;:23::i;:::-;-1:-1:-1;;;;;27528:46:0;;;;;;;;;;;27408:174;;:::o;23705:452::-;23834:4;23878:16;23886:7;23878;:16::i;:::-;23856:110;;;;-1:-1:-1;;;23856:110:0;;12249:2:1;23856:110:0;;;12231:21:1;12288:2;12268:18;;;12261:30;12327:34;12307:18;;;12300:62;-1:-1:-1;;;12378:18:1;;;12371:42;12430:19;;23856:110:0;12047:408:1;23856:110:0;23977:13;23993:23;24008:7;23993:14;:23::i;:::-;23977:39;;24046:5;-1:-1:-1;;;;;24035:16:0;:7;-1:-1:-1;;;;;24035:16:0;;:64;;;;24092:7;-1:-1:-1;;;;;24068:31:0;:20;24080:7;24068:11;:20::i;:::-;-1:-1:-1;;;;;24068:31:0;;24035:64;:113;;;-1:-1:-1;;;;;;20658:25:0;;;20629:4;20658:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;24116:32;24027:122;23705:452;-1:-1:-1;;;;23705:452:0:o;26737:553::-;26910:4;-1:-1:-1;;;;;26883:31:0;:23;26898:7;26883:14;:23::i;:::-;-1:-1:-1;;;;;26883:31:0;;26861:122;;;;-1:-1:-1;;;26861:122:0;;16096:2:1;26861:122:0;;;16078:21:1;16135:2;16115:18;;;16108:30;16174:34;16154:18;;;16147:62;-1:-1:-1;;;16225:18:1;;;16218:39;16274:19;;26861:122:0;15894:405:1;26861:122:0;-1:-1:-1;;;;;27002:16:0;;26994:65;;;;-1:-1:-1;;;26994:65:0;;11133:2:1;26994:65:0;;;11115:21:1;11172:2;11152:18;;;11145:30;11211:34;11191:18;;;11184:62;-1:-1:-1;;;11262:18:1;;;11255:34;11306:19;;26994:65:0;10931:400:1;26994:65:0;27176:29;27193:1;27197:7;27176:8;:29::i;:::-;27235:2;27216:7;27224;27216:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;27216:21:0;-1:-1:-1;;;;;27216:21:0;;;;;;27255:27;;27274:7;;27255:27;;;;;;;;;;27216:16;27255:27;26737:553;;;:::o;35073:174::-;35172:4;35196:43;35215:5;35222:10;35234:4;35196:18;:43::i;37069:154::-;37150:7;:16;;;;;;;-1:-1:-1;37150:16:0;;;;;;;-1:-1:-1;;;;;;37150:16:0;-1:-1:-1;;;;;37150:16:0;;;;;;;;37182:33;;37207:7;;-1:-1:-1;37182:33:0;;-1:-1:-1;;37182:33:0;37069:154;;:::o;6626:191::-;6719:6;;;-1:-1:-1;;;;;6736:17:0;;;-1:-1:-1;;;;;;6736:17:0;;;;;;;6769:40;;6719:6;;;6736:17;6719:6;;6769:40;;6700:16;;6769:40;6689:128;6626:191;:::o;22718:352::-;22875:28;22885:4;22891:2;22895:7;22875:9;:28::i;:::-;22936:48;22959:4;22965:2;22969:7;22978:5;22936:22;:48::i;:::-;22914:148;;;;-1:-1:-1;;;22914:148:0;;;;;;;:::i;37229:88::-;37273:13;37302:9;37295:16;;;;;:::i;2669:723::-;2725:13;2946:10;2942:53;;-1:-1:-1;;2973:10:0;;;;;;;;;;;;-1:-1:-1;;;2973:10:0;;;;;2669:723::o;2942:53::-;3020:5;3005:12;3061:78;3068:9;;3061:78;;3094:8;;;;:::i;:::-;;-1:-1:-1;3117:10:0;;-1:-1:-1;3125:2:0;3117:10;;:::i;:::-;;;3061:78;;;3149:19;3181:6;3171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:17:0;;3149:39;;3199:154;3206:10;;3199:154;;3233:11;3243:1;3233:11;;:::i;:::-;;-1:-1:-1;3302:10:0;3310:2;3302:5;:10;:::i;:::-;3289:24;;:2;:24;:::i;:::-;3276:39;;3259:6;3266;3259:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3259:56:0;;;;;;;;-1:-1:-1;3330:11:0;3339:2;3330:11;;:::i;:::-;;;3199:154;;952:190;1077:4;1130;1101:25;1114:5;1121:4;1101:12;:25::i;:::-;:33;;952:190;-1:-1:-1;;;;952:190:0:o;28147:980::-;28302:4;-1:-1:-1;;;;;28323:13:0;;16777:20;16825:8;28319:801;;28376:175;;-1:-1:-1;;;28376:175:0;;-1:-1:-1;;;;;28376:36:0;;;;;:175;;4160:10;;28470:4;;28497:7;;28527:5;;28376:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28376:175:0;;;;;;;;-1:-1:-1;;28376:175:0;;;;;;;;;;;;:::i;:::-;;;28355:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28734:13:0;;28730:320;;28777:108;;-1:-1:-1;;;28777:108:0;;;;;;;:::i;28730:320::-;29000:6;28994:13;28985:6;28981:2;28977:15;28970:38;28355:710;-1:-1:-1;;;;;;28615:51:0;-1:-1:-1;;;28615:51:0;;-1:-1:-1;28608:58:0;;28319:801;-1:-1:-1;29104:4:0;28147:980;;;;;;:::o;1504:675::-;1587:7;1630:4;1587:7;1645:497;1669:5;:12;1665:1;:16;1645:497;;;1703:20;1726:5;1732:1;1726:8;;;;;;;;:::i;:::-;;;;;;;1703:31;;1769:12;1753;:28;1749:382;;2255:13;2305:15;;;2341:4;2334:15;;;2388:4;2372:21;;1881:57;;1749:382;;;2255:13;2305:15;;;2341:4;2334:15;;;2388:4;2372:21;;2058:57;;1749:382;-1:-1:-1;1683:3:0;;;;:::i;:::-;;;;1645:497;;;-1:-1:-1;2159:12:0;1504:675;-1:-1:-1;;;1504:675:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:156::-;894:20;;954:4;943:16;;933:27;;923:55;;974:1;971;964:12;989:186;1048:6;1101:2;1089:9;1080:7;1076:23;1072:32;1069:52;;;1117:1;1114;1107:12;1069:52;1140:29;1159:9;1140:29;:::i;1180:260::-;1248:6;1256;1309:2;1297:9;1288:7;1284:23;1280:32;1277:52;;;1325:1;1322;1315:12;1277:52;1348:29;1367:9;1348:29;:::i;:::-;1338:39;;1396:38;1430:2;1419:9;1415:18;1396:38;:::i;:::-;1386:48;;1180:260;;;;;:::o;1445:328::-;1522:6;1530;1538;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;1630:29;1649:9;1630:29;:::i;:::-;1620:39;;1678:38;1712:2;1701:9;1697:18;1678:38;:::i;:::-;1668:48;;1763:2;1752:9;1748:18;1735:32;1725:42;;1445:328;;;;;:::o;1778:666::-;1873:6;1881;1889;1897;1950:3;1938:9;1929:7;1925:23;1921:33;1918:53;;;1967:1;1964;1957:12;1918:53;1990:29;2009:9;1990:29;:::i;:::-;1980:39;;2038:38;2072:2;2061:9;2057:18;2038:38;:::i;:::-;2028:48;;2123:2;2112:9;2108:18;2095:32;2085:42;;2178:2;2167:9;2163:18;2150:32;2205:18;2197:6;2194:30;2191:50;;;2237:1;2234;2227:12;2191:50;2260:22;;2313:4;2305:13;;2301:27;-1:-1:-1;2291:55:1;;2342:1;2339;2332:12;2291:55;2365:73;2430:7;2425:2;2412:16;2407:2;2403;2399:11;2365:73;:::i;:::-;2355:83;;;1778:666;;;;;;;:::o;2449:347::-;2514:6;2522;2575:2;2563:9;2554:7;2550:23;2546:32;2543:52;;;2591:1;2588;2581:12;2543:52;2614:29;2633:9;2614:29;:::i;:::-;2604:39;;2693:2;2682:9;2678:18;2665:32;2740:5;2733:13;2726:21;2719:5;2716:32;2706:60;;2762:1;2759;2752:12;2706:60;2785:5;2775:15;;;2449:347;;;;;:::o;2801:346::-;2868:6;2876;2929:2;2917:9;2908:7;2904:23;2900:32;2897:52;;;2945:1;2942;2935:12;2897:52;2968:29;2987:9;2968:29;:::i;:::-;2958:39;;3047:2;3036:9;3032:18;3019:32;3091:6;3084:5;3080:18;3073:5;3070:29;3060:57;;3113:1;3110;3103:12;3152:254;3220:6;3228;3281:2;3269:9;3260:7;3256:23;3252:32;3249:52;;;3297:1;3294;3287:12;3249:52;3320:29;3339:9;3320:29;:::i;:::-;3310:39;3396:2;3381:18;;;;3368:32;;-1:-1:-1;;;3152:254:1:o;3411:180::-;3470:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:52;;;3539:1;3536;3529:12;3491:52;-1:-1:-1;3562:23:1;;3411:180;-1:-1:-1;3411:180:1:o;3596:245::-;3654:6;3707:2;3695:9;3686:7;3682:23;3678:32;3675:52;;;3723:1;3720;3713:12;3675:52;3762:9;3749:23;3781:30;3805:5;3781:30;:::i;3846:249::-;3915:6;3968:2;3956:9;3947:7;3943:23;3939:32;3936:52;;;3984:1;3981;3974:12;3936:52;4016:9;4010:16;4035:30;4059:5;4035:30;:::i;4100:450::-;4169:6;4222:2;4210:9;4201:7;4197:23;4193:32;4190:52;;;4238:1;4235;4228:12;4190:52;4278:9;4265:23;4311:18;4303:6;4300:30;4297:50;;;4343:1;4340;4333:12;4297:50;4366:22;;4419:4;4411:13;;4407:27;-1:-1:-1;4397:55:1;;4448:1;4445;4438:12;4397:55;4471:73;4536:7;4531:2;4518:16;4513:2;4509;4505:11;4471:73;:::i;4740:182::-;4797:6;4850:2;4838:9;4829:7;4825:23;4821:32;4818:52;;;4866:1;4863;4856:12;4818:52;4889:27;4906:9;4889:27;:::i;4927:685::-;5020:6;5028;5036;5089:2;5077:9;5068:7;5064:23;5060:32;5057:52;;;5105:1;5102;5095:12;5057:52;5128:27;5145:9;5128:27;:::i;:::-;5118:37;;5206:2;5195:9;5191:18;5178:32;5229:18;5270:2;5262:6;5259:14;5256:34;;;5286:1;5283;5276:12;5256:34;5324:6;5313:9;5309:22;5299:32;;5369:7;5362:4;5358:2;5354:13;5350:27;5340:55;;5391:1;5388;5381:12;5340:55;5431:2;5418:16;5457:2;5449:6;5446:14;5443:34;;;5473:1;5470;5463:12;5443:34;5526:7;5521:2;5511:6;5508:1;5504:14;5500:2;5496:23;5492:32;5489:45;5486:65;;;5547:1;5544;5537:12;5486:65;5578:2;5574;5570:11;5560:21;;5600:6;5590:16;;;;;4927:685;;;;;:::o;5617:257::-;5658:3;5696:5;5690:12;5723:6;5718:3;5711:19;5739:63;5795:6;5788:4;5783:3;5779:14;5772:4;5765:5;5761:16;5739:63;:::i;:::-;5856:2;5835:15;-1:-1:-1;;5831:29:1;5822:39;;;;5863:4;5818:50;;5617:257;-1:-1:-1;;5617:257:1:o;6113:1527::-;6337:3;6375:6;6369:13;6401:4;6414:51;6458:6;6453:3;6448:2;6440:6;6436:15;6414:51;:::i;:::-;6528:13;;6487:16;;;;6550:55;6528:13;6487:16;6572:15;;;6550:55;:::i;:::-;6694:13;;6627:20;;;6667:1;;6754;6776:18;;;;6829;;;;6856:93;;6934:4;6924:8;6920:19;6908:31;;6856:93;6997:2;6987:8;6984:16;6964:18;6961:40;6958:167;;;-1:-1:-1;;;7024:33:1;;7080:4;7077:1;7070:15;7110:4;7031:3;7098:17;6958:167;7141:18;7168:110;;;;7292:1;7287:328;;;;7134:481;;7168:110;-1:-1:-1;;7203:24:1;;7189:39;;7248:20;;;;-1:-1:-1;7168:110:1;;7287:328;19295:1;19288:14;;;19332:4;19319:18;;7382:1;7396:169;7410:8;7407:1;7404:15;7396:169;;;7492:14;;7477:13;;;7470:37;7535:16;;;;7427:10;;7396:169;;;7400:3;;7596:8;7589:5;7585:20;7578:27;;7134:481;-1:-1:-1;7631:3:1;;6113:1527;-1:-1:-1;;;;;;;;;;;6113:1527:1:o;7853:488::-;-1:-1:-1;;;;;8122:15:1;;;8104:34;;8174:15;;8169:2;8154:18;;8147:43;8221:2;8206:18;;8199:34;;;8269:3;8264:2;8249:18;;8242:31;;;8047:4;;8290:45;;8315:19;;8307:6;8290:45;:::i;:::-;8282:53;7853:488;-1:-1:-1;;;;;;7853:488:1:o;8720:219::-;8869:2;8858:9;8851:21;8832:4;8889:44;8929:2;8918:9;8914:18;8906:6;8889:44;:::i;9353:407::-;9555:2;9537:21;;;9594:2;9574:18;;;9567:30;9633:34;9628:2;9613:18;;9606:62;-1:-1:-1;;;9699:2:1;9684:18;;9677:41;9750:3;9735:19;;9353:407::o;9765:414::-;9967:2;9949:21;;;10006:2;9986:18;;;9979:30;10045:34;10040:2;10025:18;;10018:62;-1:-1:-1;;;10111:2:1;10096:18;;10089:48;10169:3;10154:19;;9765:414::o;15181:356::-;15383:2;15365:21;;;15402:18;;;15395:30;15461:34;15456:2;15441:18;;15434:62;15528:2;15513:18;;15181:356::o;17122:413::-;17324:2;17306:21;;;17363:2;17343:18;;;17336:30;17402:34;17397:2;17382:18;;17375:62;-1:-1:-1;;;17468:2:1;17453:18;;17446:47;17525:3;17510:19;;17122:413::o;19348:224::-;19387:3;19415:6;19448:2;19445:1;19441:10;19478:2;19475:1;19471:10;19509:3;19505:2;19501:12;19496:3;19493:21;19490:47;;;19517:18;;:::i;:::-;19553:13;;19348:224;-1:-1:-1;;;;19348:224:1:o;19577:128::-;19617:3;19648:1;19644:6;19641:1;19638:13;19635:39;;;19654:18;;:::i;:::-;-1:-1:-1;19690:9:1;;19577:128::o;19710:204::-;19748:3;19784:4;19781:1;19777:12;19816:4;19813:1;19809:12;19851:3;19845:4;19841:14;19836:3;19833:23;19830:49;;;19859:18;;:::i;:::-;19895:13;;19710:204;-1:-1:-1;;;19710:204:1:o;19919:120::-;19959:1;19985;19975:35;;19990:18;;:::i;:::-;-1:-1:-1;20024:9:1;;19919:120::o;20044:168::-;20084:7;20150:1;20146;20142:6;20138:14;20135:1;20132:21;20127:1;20120:9;20113:17;20109:45;20106:71;;;20157:18;;:::i;:::-;-1:-1:-1;20197:9:1;;20044:168::o;20217:125::-;20257:4;20285:1;20282;20279:8;20276:34;;;20290:18;;:::i;:::-;-1:-1:-1;20327:9:1;;20217:125::o;20347:258::-;20419:1;20429:113;20443:6;20440:1;20437:13;20429:113;;;20519:11;;;20513:18;20500:11;;;20493:39;20465:2;20458:10;20429:113;;;20560:6;20557:1;20554:13;20551:48;;;-1:-1:-1;;20595:1:1;20577:16;;20570:27;20347:258::o;20610:380::-;20689:1;20685:12;;;;20732;;;20753:61;;20807:4;20799:6;20795:17;20785:27;;20753:61;20860:2;20852:6;20849:14;20829:18;20826:38;20823:161;;;20906:10;20901:3;20897:20;20894:1;20887:31;20941:4;20938:1;20931:15;20969:4;20966:1;20959:15;20823:161;;20610:380;;;:::o;20995:135::-;21034:3;-1:-1:-1;;21055:17:1;;21052:43;;;21075:18;;:::i;:::-;-1:-1:-1;21122:1:1;21111:13;;20995:135::o;21135:175::-;21172:3;21216:4;21209:5;21205:16;21245:4;21236:7;21233:17;21230:43;;;21253:18;;:::i;:::-;21302:1;21289:15;;21135:175;-1:-1:-1;;21135:175:1:o;21315:112::-;21347:1;21373;21363:35;;21378:18;;:::i;:::-;-1:-1:-1;21412:9:1;;21315:112::o;21432:127::-;21493:10;21488:3;21484:20;21481:1;21474:31;21524:4;21521:1;21514:15;21548:4;21545:1;21538:15;21564:127;21625:10;21620:3;21616:20;21613:1;21606:31;21656:4;21653:1;21646:15;21680:4;21677:1;21670:15;21696:127;21757:10;21752:3;21748:20;21745:1;21738:31;21788:4;21785:1;21778:15;21812:4;21809:1;21802:15;21828:127;21889:10;21884:3;21880:20;21877:1;21870:31;21920:4;21917:1;21910:15;21944:4;21941:1;21934:15;21960:131;-1:-1:-1;;;;;;22034:32:1;;22024:43;;22014:71;;22081:1;22078;22071:12
Swarm Source
ipfs://29dedbf78761364959ffa20dea64484f6930b1cedaa8c5190c7dc1b4ae95ce5a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.