ERC-721
Overview
Max Total Supply
87 BFFs Passes
Holders
34
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 BFFs PassesLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BFFsFoundersPass
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-08 */ /** *Submitted for verification at Etherscan.io on 2022-07-08 */ // SPDX-License-Identifier: MIT // //░██▄▒▄▀▄▒█▀▄░▀█▀░▀░▄▀▀░░▒█▀▒▄▀▄▒█▀▄░█▄▒▄█░░▒█▀▒█▀▄▒██▀░█▄░█░▄▀▀ //▒█▄█░█▀█░█▀▄░▒█▒░░▒▄██▒░░█▀░█▀█░█▀▄░█▒▀▒█▒░░█▀░█▀▄░█▄▄░█▒▀█▒▄██ //******************************************************************@@@*********** //***********************************@@@@@@@@@&******************@@, @*********** //****************************#@@@@@@@@@@@@@@@@@,/@@@@/******&@@. @@*********** //******@@@@***************@@@@@@@@@@@@@@@@@@@@% @@@@@ @@************ //******@@ @@@@*******@@@@@@@@@@&,,%@@@@@@@% @@& @@************* //*******@@ @@@@@( @@*.#@@*************** //********&@( @@ @@@@@@@@@@@@@*********** //**********(@@ @@. @@@( (@@@@@ @@******** //**************@@@@@. .@@@@@@ @@@ @@ &@@@&@@ @@@@%@@@@@@********** //**********@@@. @@. @@@@@@@@ @@@@@@ #@@@@ .@@@***************** //*******@@% @@@@ %@@@@@@@@@ ,/(((* @***************** //*********%@@@@***@@ @@@@@@@@@@ @@@@@,,,,,,,,,,,,(@@@@ /@***************** //******************@%. @@@@& (@@,,,,,,,,,,,,,,,,,,,,,,,(@@/**************** //******************#@ @@*,,,,,,,(@,,,,,,,,@@@@,,,,,,*@(*************** //*******************(@* . @@,,,,,,,,&@@@,,,,,,,,(#,,,,,,,,@@*************** //********************/@@. @@,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,@@*************** //***********************@@@ @@,,,,,@@@@@@@@@@@@,,,,,,,,,,,(@@**************** //***************************@@@@@@@%,,,*@@@@@@@@@@,,,,,,,,,@@@******************* //***********************************@@@@#,,,,,,,,,(&@@@@@%*********************** // contract by @ZombieBitsNFT //https://founders-pass.bartsfarmfrens.io //Exclusive Access OG Pass to unlock airdrops & extra perks at the farm // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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 (last updated v4.5.0) (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); /** * @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: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) 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) } } } // 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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /**ERC721A import * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(),".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // //░██▄▒▄▀▄▒█▀▄░▀█▀░▀░▄▀▀░░▒█▀▒▄▀▄▒█▀▄░█▄▒▄█░░▒█▀▒█▀▄▒██▀░█▄░█░▄▀▀ //▒█▄█░█▀█░█▀▄░▒█▒░░▒▄██▒░░█▀░█▀█░█▀▄░█▒▀▒█▒░░█▀░█▀▄░█▄▄░█▒▀█▒▄██ library OpenSeaGasFreeListing { /** @notice Returns whether the operator is an OpenSea proxy for the owner, thus allowing it to list without the token owner paying gas. @dev ERC{721,1155}.isApprovedForAll should be overriden to also check if this function returns true. */ function isApprovedForAll(address owner, address operator) internal view returns (bool) { ProxyRegistry registry; assembly { switch chainid() case 1 { // mainnet registry := 0xa5409ec958c83c3f309868babaca7c86dcb077c1 } case 4 { // rinkeby registry := 0xf57b2c51ded3a29e6891aba85459d600256cf317 } } return address(registry) != address(0) && (address(registry.proxies(owner)) == operator); } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract BFFsFoundersPass is Ownable, ERC721A, ReentrancyGuard { using Address for address; using Strings for uint256; //allows for team reserves uint256 public MAX_TEAM_RESERVES_PRESALE = 44; //sets total max supply of 444 passes uint256 public immutable MAX_TOKENS; //OG presale token price uint256 public OG_TOKEN_PRICE = 0.00 ether; //public token price uint256 public TOKEN_PRICE = 0.04 ether; //max mints per tx during the public mint uint256 public MAX_MINTS_PER_TX = 50; bool public preSale = false; bool public publicSale = false; //tracks amount a user can claim mapping (address => uint256) public presaleReserved; //tracks how many a user has claimed mapping (address => uint) public saleNumMinted; bytes32 public merkleroot; constructor( uint256 maxBatchSize_, uint256 collectionSize_, uint256 maxTOKENS_ ) ERC721A("BFFs Founders Pass","BFFs Passes", maxBatchSize_,collectionSize_) { MAX_MINTS_PER_TX = maxBatchSize_; MAX_TOKENS = maxTOKENS_; require( maxTOKENS_ <= collectionSize_, "larger collection size needed" ); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } //minting function for the presale OG claim function OGclaim(uint256 quantity, bytes32[] calldata PresaleMerkleProof) external payable callerIsUser nonReentrant { require(preSale, "pre sale is not live"); require(totalSupply() + quantity <= MAX_TOKENS, "minting this many would exceed supply"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(PresaleMerkleProof, merkleroot, leaf), "Invalid proof."); _checkPreMintRequirements(quantity); _safeMint(msg.sender, quantity); } function _checkPreMintRequirements(uint256 quantity) internal { require(quantity > 0 && quantity <= presaleReserved[msg.sender], "invalid quantity: zero or greater than mint allowance"); require(msg.value == OG_TOKEN_PRICE * quantity, "wrong amount of ether sent"); saleNumMinted[msg.sender] = saleNumMinted[msg.sender] + quantity; require(saleNumMinted[msg.sender] <= presaleReserved[msg.sender], "Cannot mint more than your allowance"); } //public mint function function mint(uint256 quantity) external payable callerIsUser nonReentrant { require(publicSale, "public sale is not live"); require(totalSupply() + quantity <= MAX_TOKENS, "invalid quantity: would exceed max supply"); _checkMintRequirements(quantity); _safeMint(msg.sender, quantity); } function _checkMintRequirements(uint256 quantity) internal { require(quantity > 0 && quantity <= MAX_MINTS_PER_TX, "invalid quantity: zero or greater than mint allowance"); require(msg.value == TOKEN_PRICE * quantity, "wrong amount of ether sent"); } //admin minting function for team tokens function teamReservesPreSaleMint(uint256 quantity) public onlyOwner { require(quantity <= MAX_TEAM_RESERVES_PRESALE, "Can't reserve more than set amount" ); MAX_TEAM_RESERVES_PRESALE -= quantity; require(totalSupply() + quantity <= MAX_TOKENS, "invalid quantity: would exceed max supply"); _safeMint(msg.sender, quantity); } function togglePreSale() public onlyOwner { preSale = !preSale; } function togglePublicSale() public onlyOwner { publicSale = !publicSale; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setMAX_MINTS_PER_TX(uint256 _MAX_MINTS_PER_TX) public onlyOwner() { MAX_MINTS_PER_TX = _MAX_MINTS_PER_TX; } function setTOKEN_PRICE(uint256 _TOKEN_PRICE) public onlyOwner() { TOKEN_PRICE = _TOKEN_PRICE; } // Edit reserved presale spots function editPresaleReserved(address[] memory _a, uint256[] memory _amount) public onlyOwner { for(uint256 i; i < _a.length; i++){ presaleReserved[_a[i]] = _amount[i]; } } function setMerkleRoot(bytes32 newMerkle) public onlyOwner { merkleroot = newMerkle; } function isApprovedForAll(address owner, address operator) public view override returns (bool) { return OpenSeaGasFreeListing.isApprovedForAll(owner, operator) || super.isApprovedForAll(owner, operator); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"maxTOKENS_","type":"uint256"}],"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":[],"name":"MAX_MINTS_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TEAM_RESERVES_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OG_TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"PresaleMerkleProof","type":"bytes32[]"}],"name":"OGclaim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"editPresaleReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"merkleroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"saleNumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_MINTS_PER_TX","type":"uint256"}],"name":"setMAX_MINTS_PER_TX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkle","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TOKEN_PRICE","type":"uint256"}],"name":"setTOKEN_PRICE","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":"quantity","type":"uint256"}],"name":"teamReservesPreSaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600060018190556008819055602c600a55600b55668e1bc9bf040000600c556032600d55600e805461ffff191690553480156200004057600080fd5b50604051620035d2380380620035d2833981016040819052620000639162000338565b604051806040016040528060128152602001714246467320466f756e64657273205061737360701b8152506040518060400160405280600b81526020016a424646732050617373657360a81b8152508484620000ce620000c86200023e60201b60201c565b62000242565b600081116200013b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b600082116200019d5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000132565b8351620001b290600290602087019062000292565b508251620001c890600390602086019062000292565b5060a09190915260805250506001600955600d83905560c081905281811115620002355760405162461bcd60e51b815260206004820152601d60248201527f6c617267657220636f6c6c656374696f6e2073697a65206e6565646564000000604482015260640162000132565b505050620003a4565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620002a09062000367565b90600052602060002090601f016020900481019282620002c457600085556200030f565b82601f10620002df57805160ff19168380011785556200030f565b828001600101855582156200030f579182015b828111156200030f578251825591602001919060010190620002f2565b506200031d92915062000321565b5090565b5b808211156200031d576000815560010162000322565b6000806000606084860312156200034e57600080fd5b8351925060208401519150604084015190509250925092565b600181811c908216806200037c57607f821691505b602082108114156200039e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516131d4620003fe600039600081816107bf01528181610b55015281816111c90152611354015260008181611f7401528181611f9e015261264f015260008181611d7a0152611dac01526131d46000f3fe6080604052600436106102675760003560e01c8063715018a611610144578063c6a91b42116100b6578063da40760a1161007a578063da40760a1461070b578063dc33e68114610738578063e222c7f914610758578063e985e9c51461076d578063f2fde38b1461078d578063f47c84c5146107ad57600080fd5b8063c6a91b4214610694578063c87b56dd146106aa578063ca3cb522146106ca578063d2d8cb67146106df578063d7224ba0146106f557600080fd5b806395d89b411161010857806395d89b4114610601578063a0712d6814610616578063a22cb46514610629578063ac44600214610649578063b6c7ecf51461065e578063b88d4fde1461067457600080fd5b8063715018a6146105415780637a37744a146105565780637cb64759146105765780638da5cb5b146105965780639231ab2a146105b457600080fd5b806339c36fa0116101dd5780635a7adf7f116101a15780635a7adf7f146104915780636352211e146104ab57806364be5287146104cb57806368df66a6146104eb5780636b2fd8651461050157806370a082311461052157600080fd5b806339c36fa0146103e457806342842e0e146104115780634f4342e2146104315780634f6ccce71461045157806355f804b31461047157600080fd5b80631bbaa8ec1161022f5780631bbaa8ec1461033c57806323b872dd146103525780632bd1c94e146103725780632d20fb60146103855780632f745c59146103a557806333bc1c5c146103c557600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb57806318160ddd1461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004612c08565b6107e1565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b661084e565b6040516102989190612df6565b3480156102cf57600080fd5b506102e36102de366004612bef565b6108e0565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b610316366004612afb565b610970565b005b34801561032957600080fd5b506001545b604051908152602001610298565b34801561034857600080fd5b5061032e600a5481565b34801561035e57600080fd5b5061031b61036d3660046129c4565b610a88565b61031b610380366004612cd0565b610a93565b34801561039157600080fd5b5061031b6103a0366004612bef565b610cb9565b3480156103b157600080fd5b5061032e6103c0366004612afb565b610d1c565b3480156103d157600080fd5b50600e5461028c90610100900460ff1681565b3480156103f057600080fd5b5061032e6103ff36600461296e565b600f6020526000908152604090205481565b34801561041d57600080fd5b5061031b61042c3660046129c4565b610e94565b34801561043d57600080fd5b5061031b61044c366004612bef565b610eaf565b34801561045d57600080fd5b5061032e61046c366004612bef565b610ede565b34801561047d57600080fd5b5061031b61048c366004612c5f565b610f47565b34801561049d57600080fd5b50600e5461028c9060ff1681565b3480156104b757600080fd5b506102e36104c6366004612bef565b610f7d565b3480156104d757600080fd5b5061031b6104e6366004612bef565b610f8f565b3480156104f757600080fd5b5061032e600b5481565b34801561050d57600080fd5b5061031b61051c366004612b27565b610fbe565b34801561052d57600080fd5b5061032e61053c36600461296e565b611063565b34801561054d57600080fd5b5061031b6110f4565b34801561056257600080fd5b5061031b610571366004612bef565b61112a565b34801561058257600080fd5b5061031b610591366004612bef565b611229565b3480156105a257600080fd5b506000546001600160a01b03166102e3565b3480156105c057600080fd5b506105d46105cf366004612bef565b611258565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610298565b34801561060d57600080fd5b506102b6611275565b61031b610624366004612bef565b611284565b34801561063557600080fd5b5061031b610644366004612ac8565b6113b8565b34801561065557600080fd5b5061031b61147d565b34801561066a57600080fd5b5061032e60115481565b34801561068057600080fd5b5061031b61068f366004612a05565b61155a565b3480156106a057600080fd5b5061032e600d5481565b3480156106b657600080fd5b506102b66106c5366004612bef565b611593565b3480156106d657600080fd5b5061031b611660565b3480156106eb57600080fd5b5061032e600c5481565b34801561070157600080fd5b5061032e60085481565b34801561071757600080fd5b5061032e61072636600461296e565b60106020526000908152604090205481565b34801561074457600080fd5b5061032e61075336600461296e565b61169e565b34801561076457600080fd5b5061031b6116a9565b34801561077957600080fd5b5061028c61078836600461298b565b6116f0565b34801561079957600080fd5b5061031b6107a836600461296e565b611730565b3480156107b957600080fd5b5061032e7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166380ac58cd60e01b148061081257506001600160e01b03198216635b5e139f60e01b145b8061082d57506001600160e01b0319821663780e9d6360e01b145b8061084857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461085d906130b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610889906130b1565b80156108d65780601f106108ab576101008083540402835291602001916108d6565b820191906000526020600020905b8154815290600101906020018083116108b957829003601f168201915b5050505050905090565b60006108ed826001541190565b6109545760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061097b82610f7d565b9050806001600160a01b0316836001600160a01b031614156109ea5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161094b565b336001600160a01b0382161480610a065750610a0681336116f0565b610a785760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161094b565b610a838383836117c8565b505050565b610a83838383611824565b323314610ae25760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161094b565b60026009541415610b055760405162461bcd60e51b815260040161094b90612eda565b6002600955600e5460ff16610b535760405162461bcd60e51b81526020600482015260146024820152737072652073616c65206973206e6f74206c69766560601b604482015260640161094b565b7f000000000000000000000000000000000000000000000000000000000000000083610b7e60015490565b610b889190612fe4565b1115610be45760405162461bcd60e51b815260206004820152602560248201527f6d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152647570706c7960d81b606482015260840161094b565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c5e838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506011549150849050611baa565b610c9b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161094b565b610ca484611bc0565b610cae3385611ceb565b505060016009555050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b815260040161094b90612e52565b60026009541415610d065760405162461bcd60e51b815260040161094b90612eda565b6002600955610d1481611d09565b506001600955565b6000610d2783611063565b8210610d805760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161094b565b6000610d8b60015490565b905060008060005b83811015610e34576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610de557805192505b876001600160a01b0316836001600160a01b03161415610e215786841415610e135750935061084892505050565b83610e1d816130ec565b9450505b5080610e2c816130ec565b915050610d93565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161094b565b610a838383836040518060200160405280600081525061155a565b6000546001600160a01b03163314610ed95760405162461bcd60e51b815260040161094b90612e52565b600d55565b6000610ee960015490565b8210610f435760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161094b565b5090565b6000546001600160a01b03163314610f715760405162461bcd60e51b815260040161094b90612e52565b610a836012838361286c565b6000610f8882611ef2565b5192915050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b815260040161094b90612e52565b600c55565b6000546001600160a01b03163314610fe85760405162461bcd60e51b815260040161094b90612e52565b60005b8251811015610a835781818151811061100657611006613147565b6020026020010151600f600085848151811061102457611024613147565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061105b906130ec565b915050610feb565b60006001600160a01b0382166110cf5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161094b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b0316331461111e5760405162461bcd60e51b815260040161094b90612e52565b611128600061209b565b565b6000546001600160a01b031633146111545760405162461bcd60e51b815260040161094b90612e52565b600a548111156111b15760405162461bcd60e51b815260206004820152602260248201527f43616e27742072657365727665206d6f7265207468616e2073657420616d6f756044820152611b9d60f21b606482015260840161094b565b80600a60008282546111c39190613057565b909155507f00000000000000000000000000000000000000000000000000000000000000009050816111f460015490565b6111fe9190612fe4565b111561121c5760405162461bcd60e51b815260040161094b90612e09565b6112263382611ceb565b50565b6000546001600160a01b031633146112535760405162461bcd60e51b815260040161094b90612e52565b601155565b604080518082019091526000808252602082015261084882611ef2565b60606003805461085d906130b1565b3233146112d35760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161094b565b600260095414156112f65760405162461bcd60e51b815260040161094b90612eda565b6002600955600e54610100900460ff166113525760405162461bcd60e51b815260206004820152601760248201527f7075626c69632073616c65206973206e6f74206c697665000000000000000000604482015260640161094b565b7f00000000000000000000000000000000000000000000000000000000000000008161137d60015490565b6113879190612fe4565b11156113a55760405162461bcd60e51b815260040161094b90612e09565b6113ae816120eb565b610d143382611ceb565b6001600160a01b0382163314156114115760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161094b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b031633146114a75760405162461bcd60e51b815260040161094b90612e52565b600260095414156114ca5760405162461bcd60e51b815260040161094b90612eda565b6002600955604051600090339047908381818185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b5050905080610d145760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161094b565b611565848484611824565b61157184848484612175565b61158d5760405162461bcd60e51b815260040161094b90612e87565b50505050565b60606115a0826001541190565b6116045760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161094b565b600061160e612283565b9050600081511161162e5760405180602001604052806000815250611659565b8061163884612292565b604051602001611649929190612d7a565b6040516020818303038152906040525b9392505050565b6000546001600160a01b0316331461168a5760405162461bcd60e51b815260040161094b90612e52565b600e805460ff19811660ff90911615179055565b60006108488261238f565b6000546001600160a01b031633146116d35760405162461bcd60e51b815260040161094b90612e52565b600e805461ff001981166101009182900460ff1615909102179055565b60006116fc838361242d565b8061165957506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff16611659565b6000546001600160a01b0316331461175a5760405162461bcd60e51b815260040161094b90612e52565b6001600160a01b0381166117bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161094b565b6112268161209b565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061182f82611ef2565b80519091506000906001600160a01b0316336001600160a01b0316148061186657503361185b846108e0565b6001600160a01b0316145b806118785750815161187890336116f0565b9050806118e25760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161094b565b846001600160a01b031682600001516001600160a01b0316146119565760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161094b565b6001600160a01b0384166119ba5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161094b565b6119ca60008484600001516117c8565b6001600160a01b03851660009081526005602052604081208054600192906119fc9084906001600160801b031661302f565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611a4891859116612fb9565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611acf846001612fe4565b6000818152600460205260409020549091506001600160a01b0316611b6057611af9816001541190565b15611b605760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600082611bb7858461251e565b14949350505050565b600081118015611bdf5750336000908152600f60205260409020548111155b611bfb5760405162461bcd60e51b815260040161094b90612f11565b80600b54611c099190613010565b3414611c575760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161094b565b33600090815260106020526040902054611c72908290612fe4565b336000908152601060208181526040808420859055600f825290922054915210156112265760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74206d696e74206d6f7265207468616e20796f757220616c6c6f77604482015263616e636560e01b606482015260840161094b565b611d05828260405180602001604052806000815250612592565b5050565b60085481611d595760405162461bcd60e51b815260206004820152601860248201527f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000604482015260640161094b565b60006001611d678484612fe4565b611d719190613057565b9050611d9e60017f0000000000000000000000000000000000000000000000000000000000000000613057565b811115611dd357611dd060017f0000000000000000000000000000000000000000000000000000000000000000613057565b90505b611dde816001541190565b611e395760405162461bcd60e51b815260206004820152602660248201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360448201526506c65616e75760d41b606482015260840161094b565b815b818111611ede576000818152600460205260409020546001600160a01b0316611ecc576000611e6982611ef2565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b039081168584019081526000888152600490965293909420915182549351909416600160a01b026001600160e01b0319909316931692909217179055505b80611ed6816130ec565b915050611e3b565b50611eea816001612fe4565b600855505050565b6040805180820190915260008082526020820152611f11826001541190565b611f705760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161094b565b60007f00000000000000000000000000000000000000000000000000000000000000008310611fd157611fc37f000000000000000000000000000000000000000000000000000000000000000084613057565b611fce906001612fe4565b90505b825b81811061203a576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561202757949350505050565b50806120328161309a565b915050611fd3565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161094b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000811180156120fd5750600d548111155b6121195760405162461bcd60e51b815260040161094b90612f11565b80600c546121279190613010565b34146112265760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161094b565b60006001600160a01b0384163b1561227757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121b9903390899088908890600401612db9565b602060405180830381600087803b1580156121d357600080fd5b505af1925050508015612203575060408051601f3d908101601f1916820190925261220091810190612c25565b60015b61225d573d808015612231576040519150601f19603f3d011682016040523d82523d6000602084013e612236565b606091505b5080516122555760405162461bcd60e51b815260040161094b90612e87565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061227b565b5060015b949350505050565b60606012805461085d906130b1565b6060816122b65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122e057806122ca816130ec565b91506122d99050600a83612ffc565b91506122ba565b6000816001600160401b038111156122fa576122fa61315d565b6040519080825280601f01601f191660200182016040528015612324576020820181803683370190505b5090505b841561227b57612339600183613057565b9150612346600a86613107565b612351906030612fe4565b60f81b81838151811061236657612366613147565b60200101906001600160f81b031916908160001a905350612388600a86612ffc565b9450612328565b60006001600160a01b0382166124015760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161094b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b600080466001811461244657600481146124625761247a565b73a5409ec958c83c3f309868babaca7c86dcb077c1915061247a565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b506001600160a01b0381161580159061227b575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190612c42565b6001600160a01b031614949350505050565b600081815b845181101561258a57600085828151811061254057612540613147565b602002602001015190508083116125665760008381526020829052604090209250612577565b600081815260208490526040902092505b5080612582816130ec565b915050612523565b509392505050565b6001546001600160a01b0384166125f55760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161094b565b612600816001541190565b1561264d5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161094b565b7f00000000000000000000000000000000000000000000000000000000000000008311156126c85760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161094b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612724908790612fb9565b6001600160801b031681526020018583602001516127429190612fb9565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156128615760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46128256000888488612175565b6128415760405162461bcd60e51b815260040161094b90612e87565b8161284b816130ec565b9250508080612859906130ec565b9150506127d8565b506001819055611ba2565b828054612878906130b1565b90600052602060002090601f01602090048101928261289a57600085556128e0565b82601f106128b35782800160ff198235161785556128e0565b828001600101855582156128e0579182015b828111156128e05782358255916020019190600101906128c5565b50610f439291505b80821115610f4357600081556001016128e8565b600082601f83011261290d57600080fd5b8135602061292261291d83612f96565b612f66565b80838252828201915082860187848660051b890101111561294257600080fd5b60005b8581101561296157813584529284019290840190600101612945565b5090979650505050505050565b60006020828403121561298057600080fd5b813561165981613173565b6000806040838503121561299e57600080fd5b82356129a981613173565b915060208301356129b981613173565b809150509250929050565b6000806000606084860312156129d957600080fd5b83356129e481613173565b925060208401356129f481613173565b929592945050506040919091013590565b60008060008060808587031215612a1b57600080fd5b8435612a2681613173565b9350602085810135612a3781613173565b93506040860135925060608601356001600160401b0380821115612a5a57600080fd5b818801915088601f830112612a6e57600080fd5b813581811115612a8057612a8061315d565b612a92601f8201601f19168501612f66565b91508082528984828501011115612aa857600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612adb57600080fd5b8235612ae681613173565b9150602083013580151581146129b957600080fd5b60008060408385031215612b0e57600080fd5b8235612b1981613173565b946020939093013593505050565b60008060408385031215612b3a57600080fd5b82356001600160401b0380821115612b5157600080fd5b818501915085601f830112612b6557600080fd5b81356020612b7561291d83612f96565b8083825282820191508286018a848660051b8901011115612b9557600080fd5b600096505b84871015612bc1578035612bad81613173565b835260019690960195918301918301612b9a565b5096505086013592505080821115612bd857600080fd5b50612be5858286016128fc565b9150509250929050565b600060208284031215612c0157600080fd5b5035919050565b600060208284031215612c1a57600080fd5b813561165981613188565b600060208284031215612c3757600080fd5b815161165981613188565b600060208284031215612c5457600080fd5b815161165981613173565b60008060208385031215612c7257600080fd5b82356001600160401b0380821115612c8957600080fd5b818501915085601f830112612c9d57600080fd5b813581811115612cac57600080fd5b866020828501011115612cbe57600080fd5b60209290920196919550909350505050565b600080600060408486031215612ce557600080fd5b8335925060208401356001600160401b0380821115612d0357600080fd5b818601915086601f830112612d1757600080fd5b813581811115612d2657600080fd5b8760208260051b8501011115612d3b57600080fd5b6020830194508093505050509250925092565b60008151808452612d6681602086016020860161306e565b601f01601f19169290920160200192915050565b60008351612d8c81846020880161306e565b835190830190612da081836020880161306e565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dec90830184612d4e565b9695505050505050565b6020815260006116596020830184612d4e565b60208082526029908201527f696e76616c6964207175616e746974793a20776f756c6420657863656564206d604082015268617820737570706c7960b81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526035908201527f696e76616c6964207175616e746974793a207a65726f206f722067726561746560408201527472207468616e206d696e7420616c6c6f77616e636560581b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715612f8e57612f8e61315d565b604052919050565b60006001600160401b03821115612faf57612faf61315d565b5060051b60200190565b60006001600160801b03808316818516808303821115612fdb57612fdb61311b565b01949350505050565b60008219821115612ff757612ff761311b565b500190565b60008261300b5761300b613131565b500490565b600081600019048311821515161561302a5761302a61311b565b500290565b60006001600160801b038381169083168181101561304f5761304f61311b565b039392505050565b6000828210156130695761306961311b565b500390565b60005b83811015613089578181015183820152602001613071565b8381111561158d5750506000910152565b6000816130a9576130a961311b565b506000190190565b600181811c908216806130c557607f821691505b602082108114156130e657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131005761310061311b565b5060010190565b60008261311657613116613131565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461122657600080fd5b6001600160e01b03198116811461122657600080fdfea2646970667358221220adc615eaedc7871f09cafa516aad30df61026199d0c897684c960518b6717ef764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000001bc
Deployed Bytecode
0x6080604052600436106102675760003560e01c8063715018a611610144578063c6a91b42116100b6578063da40760a1161007a578063da40760a1461070b578063dc33e68114610738578063e222c7f914610758578063e985e9c51461076d578063f2fde38b1461078d578063f47c84c5146107ad57600080fd5b8063c6a91b4214610694578063c87b56dd146106aa578063ca3cb522146106ca578063d2d8cb67146106df578063d7224ba0146106f557600080fd5b806395d89b411161010857806395d89b4114610601578063a0712d6814610616578063a22cb46514610629578063ac44600214610649578063b6c7ecf51461065e578063b88d4fde1461067457600080fd5b8063715018a6146105415780637a37744a146105565780637cb64759146105765780638da5cb5b146105965780639231ab2a146105b457600080fd5b806339c36fa0116101dd5780635a7adf7f116101a15780635a7adf7f146104915780636352211e146104ab57806364be5287146104cb57806368df66a6146104eb5780636b2fd8651461050157806370a082311461052157600080fd5b806339c36fa0146103e457806342842e0e146104115780634f4342e2146104315780634f6ccce71461045157806355f804b31461047157600080fd5b80631bbaa8ec1161022f5780631bbaa8ec1461033c57806323b872dd146103525780632bd1c94e146103725780632d20fb60146103855780632f745c59146103a557806333bc1c5c146103c557600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb57806318160ddd1461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004612c08565b6107e1565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b661084e565b6040516102989190612df6565b3480156102cf57600080fd5b506102e36102de366004612bef565b6108e0565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b610316366004612afb565b610970565b005b34801561032957600080fd5b506001545b604051908152602001610298565b34801561034857600080fd5b5061032e600a5481565b34801561035e57600080fd5b5061031b61036d3660046129c4565b610a88565b61031b610380366004612cd0565b610a93565b34801561039157600080fd5b5061031b6103a0366004612bef565b610cb9565b3480156103b157600080fd5b5061032e6103c0366004612afb565b610d1c565b3480156103d157600080fd5b50600e5461028c90610100900460ff1681565b3480156103f057600080fd5b5061032e6103ff36600461296e565b600f6020526000908152604090205481565b34801561041d57600080fd5b5061031b61042c3660046129c4565b610e94565b34801561043d57600080fd5b5061031b61044c366004612bef565b610eaf565b34801561045d57600080fd5b5061032e61046c366004612bef565b610ede565b34801561047d57600080fd5b5061031b61048c366004612c5f565b610f47565b34801561049d57600080fd5b50600e5461028c9060ff1681565b3480156104b757600080fd5b506102e36104c6366004612bef565b610f7d565b3480156104d757600080fd5b5061031b6104e6366004612bef565b610f8f565b3480156104f757600080fd5b5061032e600b5481565b34801561050d57600080fd5b5061031b61051c366004612b27565b610fbe565b34801561052d57600080fd5b5061032e61053c36600461296e565b611063565b34801561054d57600080fd5b5061031b6110f4565b34801561056257600080fd5b5061031b610571366004612bef565b61112a565b34801561058257600080fd5b5061031b610591366004612bef565b611229565b3480156105a257600080fd5b506000546001600160a01b03166102e3565b3480156105c057600080fd5b506105d46105cf366004612bef565b611258565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610298565b34801561060d57600080fd5b506102b6611275565b61031b610624366004612bef565b611284565b34801561063557600080fd5b5061031b610644366004612ac8565b6113b8565b34801561065557600080fd5b5061031b61147d565b34801561066a57600080fd5b5061032e60115481565b34801561068057600080fd5b5061031b61068f366004612a05565b61155a565b3480156106a057600080fd5b5061032e600d5481565b3480156106b657600080fd5b506102b66106c5366004612bef565b611593565b3480156106d657600080fd5b5061031b611660565b3480156106eb57600080fd5b5061032e600c5481565b34801561070157600080fd5b5061032e60085481565b34801561071757600080fd5b5061032e61072636600461296e565b60106020526000908152604090205481565b34801561074457600080fd5b5061032e61075336600461296e565b61169e565b34801561076457600080fd5b5061031b6116a9565b34801561077957600080fd5b5061028c61078836600461298b565b6116f0565b34801561079957600080fd5b5061031b6107a836600461296e565b611730565b3480156107b957600080fd5b5061032e7f00000000000000000000000000000000000000000000000000000000000001bc81565b60006001600160e01b031982166380ac58cd60e01b148061081257506001600160e01b03198216635b5e139f60e01b145b8061082d57506001600160e01b0319821663780e9d6360e01b145b8061084857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461085d906130b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610889906130b1565b80156108d65780601f106108ab576101008083540402835291602001916108d6565b820191906000526020600020905b8154815290600101906020018083116108b957829003601f168201915b5050505050905090565b60006108ed826001541190565b6109545760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061097b82610f7d565b9050806001600160a01b0316836001600160a01b031614156109ea5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161094b565b336001600160a01b0382161480610a065750610a0681336116f0565b610a785760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161094b565b610a838383836117c8565b505050565b610a83838383611824565b323314610ae25760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161094b565b60026009541415610b055760405162461bcd60e51b815260040161094b90612eda565b6002600955600e5460ff16610b535760405162461bcd60e51b81526020600482015260146024820152737072652073616c65206973206e6f74206c69766560601b604482015260640161094b565b7f00000000000000000000000000000000000000000000000000000000000001bc83610b7e60015490565b610b889190612fe4565b1115610be45760405162461bcd60e51b815260206004820152602560248201527f6d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152647570706c7960d81b606482015260840161094b565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c5e838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506011549150849050611baa565b610c9b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161094b565b610ca484611bc0565b610cae3385611ceb565b505060016009555050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b815260040161094b90612e52565b60026009541415610d065760405162461bcd60e51b815260040161094b90612eda565b6002600955610d1481611d09565b506001600955565b6000610d2783611063565b8210610d805760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161094b565b6000610d8b60015490565b905060008060005b83811015610e34576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610de557805192505b876001600160a01b0316836001600160a01b03161415610e215786841415610e135750935061084892505050565b83610e1d816130ec565b9450505b5080610e2c816130ec565b915050610d93565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161094b565b610a838383836040518060200160405280600081525061155a565b6000546001600160a01b03163314610ed95760405162461bcd60e51b815260040161094b90612e52565b600d55565b6000610ee960015490565b8210610f435760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161094b565b5090565b6000546001600160a01b03163314610f715760405162461bcd60e51b815260040161094b90612e52565b610a836012838361286c565b6000610f8882611ef2565b5192915050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b815260040161094b90612e52565b600c55565b6000546001600160a01b03163314610fe85760405162461bcd60e51b815260040161094b90612e52565b60005b8251811015610a835781818151811061100657611006613147565b6020026020010151600f600085848151811061102457611024613147565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061105b906130ec565b915050610feb565b60006001600160a01b0382166110cf5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161094b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b0316331461111e5760405162461bcd60e51b815260040161094b90612e52565b611128600061209b565b565b6000546001600160a01b031633146111545760405162461bcd60e51b815260040161094b90612e52565b600a548111156111b15760405162461bcd60e51b815260206004820152602260248201527f43616e27742072657365727665206d6f7265207468616e2073657420616d6f756044820152611b9d60f21b606482015260840161094b565b80600a60008282546111c39190613057565b909155507f00000000000000000000000000000000000000000000000000000000000001bc9050816111f460015490565b6111fe9190612fe4565b111561121c5760405162461bcd60e51b815260040161094b90612e09565b6112263382611ceb565b50565b6000546001600160a01b031633146112535760405162461bcd60e51b815260040161094b90612e52565b601155565b604080518082019091526000808252602082015261084882611ef2565b60606003805461085d906130b1565b3233146112d35760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161094b565b600260095414156112f65760405162461bcd60e51b815260040161094b90612eda565b6002600955600e54610100900460ff166113525760405162461bcd60e51b815260206004820152601760248201527f7075626c69632073616c65206973206e6f74206c697665000000000000000000604482015260640161094b565b7f00000000000000000000000000000000000000000000000000000000000001bc8161137d60015490565b6113879190612fe4565b11156113a55760405162461bcd60e51b815260040161094b90612e09565b6113ae816120eb565b610d143382611ceb565b6001600160a01b0382163314156114115760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161094b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b031633146114a75760405162461bcd60e51b815260040161094b90612e52565b600260095414156114ca5760405162461bcd60e51b815260040161094b90612eda565b6002600955604051600090339047908381818185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b5050905080610d145760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161094b565b611565848484611824565b61157184848484612175565b61158d5760405162461bcd60e51b815260040161094b90612e87565b50505050565b60606115a0826001541190565b6116045760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161094b565b600061160e612283565b9050600081511161162e5760405180602001604052806000815250611659565b8061163884612292565b604051602001611649929190612d7a565b6040516020818303038152906040525b9392505050565b6000546001600160a01b0316331461168a5760405162461bcd60e51b815260040161094b90612e52565b600e805460ff19811660ff90911615179055565b60006108488261238f565b6000546001600160a01b031633146116d35760405162461bcd60e51b815260040161094b90612e52565b600e805461ff001981166101009182900460ff1615909102179055565b60006116fc838361242d565b8061165957506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff16611659565b6000546001600160a01b0316331461175a5760405162461bcd60e51b815260040161094b90612e52565b6001600160a01b0381166117bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161094b565b6112268161209b565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061182f82611ef2565b80519091506000906001600160a01b0316336001600160a01b0316148061186657503361185b846108e0565b6001600160a01b0316145b806118785750815161187890336116f0565b9050806118e25760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161094b565b846001600160a01b031682600001516001600160a01b0316146119565760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161094b565b6001600160a01b0384166119ba5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161094b565b6119ca60008484600001516117c8565b6001600160a01b03851660009081526005602052604081208054600192906119fc9084906001600160801b031661302f565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611a4891859116612fb9565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611acf846001612fe4565b6000818152600460205260409020549091506001600160a01b0316611b6057611af9816001541190565b15611b605760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600082611bb7858461251e565b14949350505050565b600081118015611bdf5750336000908152600f60205260409020548111155b611bfb5760405162461bcd60e51b815260040161094b90612f11565b80600b54611c099190613010565b3414611c575760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161094b565b33600090815260106020526040902054611c72908290612fe4565b336000908152601060208181526040808420859055600f825290922054915210156112265760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74206d696e74206d6f7265207468616e20796f757220616c6c6f77604482015263616e636560e01b606482015260840161094b565b611d05828260405180602001604052806000815250612592565b5050565b60085481611d595760405162461bcd60e51b815260206004820152601860248201527f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000604482015260640161094b565b60006001611d678484612fe4565b611d719190613057565b9050611d9e60017f00000000000000000000000000000000000000000000000000000000000001bc613057565b811115611dd357611dd060017f00000000000000000000000000000000000000000000000000000000000001bc613057565b90505b611dde816001541190565b611e395760405162461bcd60e51b815260206004820152602660248201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360448201526506c65616e75760d41b606482015260840161094b565b815b818111611ede576000818152600460205260409020546001600160a01b0316611ecc576000611e6982611ef2565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b039081168584019081526000888152600490965293909420915182549351909416600160a01b026001600160e01b0319909316931692909217179055505b80611ed6816130ec565b915050611e3b565b50611eea816001612fe4565b600855505050565b6040805180820190915260008082526020820152611f11826001541190565b611f705760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161094b565b60007f00000000000000000000000000000000000000000000000000000000000000328310611fd157611fc37f000000000000000000000000000000000000000000000000000000000000003284613057565b611fce906001612fe4565b90505b825b81811061203a576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561202757949350505050565b50806120328161309a565b915050611fd3565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161094b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000811180156120fd5750600d548111155b6121195760405162461bcd60e51b815260040161094b90612f11565b80600c546121279190613010565b34146112265760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161094b565b60006001600160a01b0384163b1561227757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121b9903390899088908890600401612db9565b602060405180830381600087803b1580156121d357600080fd5b505af1925050508015612203575060408051601f3d908101601f1916820190925261220091810190612c25565b60015b61225d573d808015612231576040519150601f19603f3d011682016040523d82523d6000602084013e612236565b606091505b5080516122555760405162461bcd60e51b815260040161094b90612e87565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061227b565b5060015b949350505050565b60606012805461085d906130b1565b6060816122b65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122e057806122ca816130ec565b91506122d99050600a83612ffc565b91506122ba565b6000816001600160401b038111156122fa576122fa61315d565b6040519080825280601f01601f191660200182016040528015612324576020820181803683370190505b5090505b841561227b57612339600183613057565b9150612346600a86613107565b612351906030612fe4565b60f81b81838151811061236657612366613147565b60200101906001600160f81b031916908160001a905350612388600a86612ffc565b9450612328565b60006001600160a01b0382166124015760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161094b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b600080466001811461244657600481146124625761247a565b73a5409ec958c83c3f309868babaca7c86dcb077c1915061247a565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b506001600160a01b0381161580159061227b575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190612c42565b6001600160a01b031614949350505050565b600081815b845181101561258a57600085828151811061254057612540613147565b602002602001015190508083116125665760008381526020829052604090209250612577565b600081815260208490526040902092505b5080612582816130ec565b915050612523565b509392505050565b6001546001600160a01b0384166125f55760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161094b565b612600816001541190565b1561264d5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161094b565b7f00000000000000000000000000000000000000000000000000000000000000328311156126c85760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161094b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612724908790612fb9565b6001600160801b031681526020018583602001516127429190612fb9565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156128615760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46128256000888488612175565b6128415760405162461bcd60e51b815260040161094b90612e87565b8161284b816130ec565b9250508080612859906130ec565b9150506127d8565b506001819055611ba2565b828054612878906130b1565b90600052602060002090601f01602090048101928261289a57600085556128e0565b82601f106128b35782800160ff198235161785556128e0565b828001600101855582156128e0579182015b828111156128e05782358255916020019190600101906128c5565b50610f439291505b80821115610f4357600081556001016128e8565b600082601f83011261290d57600080fd5b8135602061292261291d83612f96565b612f66565b80838252828201915082860187848660051b890101111561294257600080fd5b60005b8581101561296157813584529284019290840190600101612945565b5090979650505050505050565b60006020828403121561298057600080fd5b813561165981613173565b6000806040838503121561299e57600080fd5b82356129a981613173565b915060208301356129b981613173565b809150509250929050565b6000806000606084860312156129d957600080fd5b83356129e481613173565b925060208401356129f481613173565b929592945050506040919091013590565b60008060008060808587031215612a1b57600080fd5b8435612a2681613173565b9350602085810135612a3781613173565b93506040860135925060608601356001600160401b0380821115612a5a57600080fd5b818801915088601f830112612a6e57600080fd5b813581811115612a8057612a8061315d565b612a92601f8201601f19168501612f66565b91508082528984828501011115612aa857600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612adb57600080fd5b8235612ae681613173565b9150602083013580151581146129b957600080fd5b60008060408385031215612b0e57600080fd5b8235612b1981613173565b946020939093013593505050565b60008060408385031215612b3a57600080fd5b82356001600160401b0380821115612b5157600080fd5b818501915085601f830112612b6557600080fd5b81356020612b7561291d83612f96565b8083825282820191508286018a848660051b8901011115612b9557600080fd5b600096505b84871015612bc1578035612bad81613173565b835260019690960195918301918301612b9a565b5096505086013592505080821115612bd857600080fd5b50612be5858286016128fc565b9150509250929050565b600060208284031215612c0157600080fd5b5035919050565b600060208284031215612c1a57600080fd5b813561165981613188565b600060208284031215612c3757600080fd5b815161165981613188565b600060208284031215612c5457600080fd5b815161165981613173565b60008060208385031215612c7257600080fd5b82356001600160401b0380821115612c8957600080fd5b818501915085601f830112612c9d57600080fd5b813581811115612cac57600080fd5b866020828501011115612cbe57600080fd5b60209290920196919550909350505050565b600080600060408486031215612ce557600080fd5b8335925060208401356001600160401b0380821115612d0357600080fd5b818601915086601f830112612d1757600080fd5b813581811115612d2657600080fd5b8760208260051b8501011115612d3b57600080fd5b6020830194508093505050509250925092565b60008151808452612d6681602086016020860161306e565b601f01601f19169290920160200192915050565b60008351612d8c81846020880161306e565b835190830190612da081836020880161306e565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dec90830184612d4e565b9695505050505050565b6020815260006116596020830184612d4e565b60208082526029908201527f696e76616c6964207175616e746974793a20776f756c6420657863656564206d604082015268617820737570706c7960b81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526035908201527f696e76616c6964207175616e746974793a207a65726f206f722067726561746560408201527472207468616e206d696e7420616c6c6f77616e636560581b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715612f8e57612f8e61315d565b604052919050565b60006001600160401b03821115612faf57612faf61315d565b5060051b60200190565b60006001600160801b03808316818516808303821115612fdb57612fdb61311b565b01949350505050565b60008219821115612ff757612ff761311b565b500190565b60008261300b5761300b613131565b500490565b600081600019048311821515161561302a5761302a61311b565b500290565b60006001600160801b038381169083168181101561304f5761304f61311b565b039392505050565b6000828210156130695761306961311b565b500390565b60005b83811015613089578181015183820152602001613071565b8381111561158d5750506000910152565b6000816130a9576130a961311b565b506000190190565b600181811c908216806130c557607f821691505b602082108114156130e657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131005761310061311b565b5060010190565b60008261311657613116613131565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461122657600080fd5b6001600160e01b03198116811461122657600080fdfea2646970667358221220adc615eaedc7871f09cafa516aad30df61026199d0c897684c960518b6717ef764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000001bc
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 50
Arg [1] : collectionSize_ (uint256): 444
Arg [2] : maxTOKENS_ (uint256): 444
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001bc
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001bc
Deployed Bytecode Sourcemap
48634:5307:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34918:370;;;;;;;;;;-1:-1:-1;34918:370:0;;;;;:::i;:::-;;:::i;:::-;;;9541:14:1;;9534:22;9516:41;;9504:2;9489:18;34918:370:0;;;;;;;;36644:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38177:204::-;;;;;;;;;;-1:-1:-1;38177:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8839:32:1;;;8821:51;;8809:2;8794:18;38177:204:0;8675:203:1;37740:379:0;;;;;;;;;;-1:-1:-1;37740:379:0;;;;;:::i;:::-;;:::i;:::-;;33479:94;;;;;;;;;;-1:-1:-1;33555:12:0;;33479:94;;;9714:25:1;;;9702:2;9687:18;33479:94:0;9568:177:1;48805:45:0;;;;;;;;;;;;;;;;39027:142;;;;;;;;;;-1:-1:-1;39027:142:0;;;;;:::i;:::-;;:::i;50012:522::-;;;;;;:::i;:::-;;:::i;52381:118::-;;;;;;;;;;-1:-1:-1;52381:118:0;;;;;:::i;:::-;;:::i;34110:744::-;;;;;;;;;;-1:-1:-1;34110:744:0;;;;;:::i;:::-;;:::i;49219:30::-;;;;;;;;;;-1:-1:-1;49219:30:0;;;;;;;;;;;49292:51;;;;;;;;;;-1:-1:-1;49292:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;39232:157;;;;;;;;;;-1:-1:-1;39232:157:0;;;;;:::i;:::-;;:::i;52793:126::-;;;;;;;;;;-1:-1:-1;52793:126:0;;;;;:::i;:::-;;:::i;33642:177::-;;;;;;;;;;-1:-1:-1;33642:177:0;;;;;:::i;:::-;;:::i;52684:100::-;;;;;;;;;;-1:-1:-1;52684:100:0;;;;;:::i;:::-;;:::i;49185:27::-;;;;;;;;;;-1:-1:-1;49185:27:0;;;;;;;;36467:118;;;;;;;;;;-1:-1:-1;36467:118:0;;;;;:::i;:::-;;:::i;52927:106::-;;;;;;;;;;-1:-1:-1;52927:106:0;;;;;:::i;:::-;;:::i;48972:42::-;;;;;;;;;;;;;;;;53075:189;;;;;;;;;;-1:-1:-1;53075:189:0;;;;;:::i;:::-;;:::i;35344:211::-;;;;;;;;;;-1:-1:-1;35344:211:0;;;;;:::i;:::-;;:::i;27623:103::-;;;;;;;;;;;;;:::i;51710:365::-;;;;;;;;;;-1:-1:-1;51710:365:0;;;;;:::i;:::-;;:::i;53271:96::-;;;;;;;;;;-1:-1:-1;53271:96:0;;;;;:::i;:::-;;:::i;26972:87::-;;;;;;;;;;-1:-1:-1;27018:7:0;27045:6;-1:-1:-1;;;;;27045:6:0;26972:87;;53602:147;;;;;;;;;;-1:-1:-1;53602:147:0;;;;;:::i;:::-;;:::i;:::-;;;;23949:13:1;;-1:-1:-1;;;;;23945:39:1;23927:58;;24045:4;24033:17;;;24027:24;-1:-1:-1;;;;;24023:49:1;24001:20;;;23994:79;;;;23900:18;53602:147:0;23719:360:1;36799:98:0;;;;;;;;;;;;;:::i;51051:328::-;;;;;;:::i;:::-;;:::i;38445:274::-;;;;;;;;;;-1:-1:-1;38445:274:0;;;;;:::i;:::-;;:::i;53755:181::-;;;;;;;;;;;;;:::i;49445:25::-;;;;;;;;;;;;;;;;39452:311;;;;;;;;;;-1:-1:-1;39452:311:0;;;;;:::i;:::-;;:::i;49140:36::-;;;;;;;;;;;;;;;;36960:402;;;;;;;;;;-1:-1:-1;36960:402:0;;;;;:::i;:::-;;:::i;52083:79::-;;;;;;;;;;;;;:::i;49047:39::-;;;;;;;;;;;;;;;;43867:43;;;;;;;;;;;;;;;;49390:46;;;;;;;;;;-1:-1:-1;49390:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;52266:107;;;;;;;;;;-1:-1:-1;52266:107:0;;;;;:::i;:::-;;:::i;52170:88::-;;;;;;;;;;;;;:::i;53375:219::-;;;;;;;;;;-1:-1:-1;53375:219:0;;;;;:::i;:::-;;:::i;27881:201::-;;;;;;;;;;-1:-1:-1;27881:201:0;;;;;:::i;:::-;;:::i;48900:35::-;;;;;;;;;;;;;;;34918:370;35045:4;-1:-1:-1;;;;;;35075:40:0;;-1:-1:-1;;;35075:40:0;;:99;;-1:-1:-1;;;;;;;35126:48:0;;-1:-1:-1;;;35126:48:0;35075:99;:160;;;-1:-1:-1;;;;;;;35185:50:0;;-1:-1:-1;;;35185:50:0;35075:160;:207;;;-1:-1:-1;;;;;;;;;;13694:40:0;;;35246:36;35061:221;34918:370;-1:-1:-1;;34918:370:0:o;36644:94::-;36698:13;36727:5;36720:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36644:94;:::o;38177:204::-;38245:7;38269:16;38277:7;40089:12;;-1:-1:-1;40079:22:0;40002:105;38269:16;38261:74;;;;-1:-1:-1;;;38261:74:0;;23104:2:1;38261:74:0;;;23086:21:1;23143:2;23123:18;;;23116:30;23182:34;23162:18;;;23155:62;-1:-1:-1;;;23233:18:1;;;23226:43;23286:19;;38261:74:0;;;;;;;;;-1:-1:-1;38351:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;38351:24:0;;38177:204::o;37740:379::-;37809:13;37825:24;37841:7;37825:15;:24::i;:::-;37809:40;;37870:5;-1:-1:-1;;;;;37864:11:0;:2;-1:-1:-1;;;;;37864:11:0;;;37856:58;;;;-1:-1:-1;;;37856:58:0;;18458:2:1;37856:58:0;;;18440:21:1;18497:2;18477:18;;;18470:30;18536:34;18516:18;;;18509:62;-1:-1:-1;;;18587:18:1;;;18580:32;18629:19;;37856:58:0;18256:398:1;37856:58:0;25776:10;-1:-1:-1;;;;;37939:21:0;;;;:62;;-1:-1:-1;37964:37:0;37981:5;25776:10;53375:219;:::i;37964:37::-;37923:153;;;;-1:-1:-1;;;37923:153:0;;13685:2:1;37923:153:0;;;13667:21:1;13724:2;13704:18;;;13697:30;13763:34;13743:18;;;13736:62;13834:27;13814:18;;;13807:55;13879:19;;37923:153:0;13483:421:1;37923:153:0;38085:28;38094:2;38098:7;38107:5;38085:8;:28::i;:::-;37802:317;37740:379;;:::o;39027:142::-;39135:28;39145:4;39151:2;39155:7;39135:9;:28::i;50012:522::-;49882:9;49895:10;49882:23;49874:66;;;;-1:-1:-1;;;49874:66:0;;13326:2:1;49874:66:0;;;13308:21:1;13365:2;13345:18;;;13338:30;13404:32;13384:18;;;13377:60;13454:18;;49874:66:0;13124:354:1;49874:66:0;30252:1:::1;30850:7;;:19;;30842:63;;;;-1:-1:-1::0;;;30842:63:0::1;;;;;;;:::i;:::-;30252:1;30983:7;:18:::0;50148:7:::2;::::0;::::2;;50140:40;;;::::0;-1:-1:-1;;;50140:40:0;;12977:2:1;50140:40:0::2;::::0;::::2;12959:21:1::0;13016:2;12996:18;;;12989:30;-1:-1:-1;;;13035:18:1;;;13028:50;13095:18;;50140:40:0::2;12775:344:1::0;50140:40:0::2;50227:10;50215:8;50199:13;33555:12:::0;;;33479:94;50199:13:::2;:24;;;;:::i;:::-;:38;;50191:88;;;::::0;-1:-1:-1;;;50191:88:0;;16862:2:1;50191:88:0::2;::::0;::::2;16844:21:1::0;16901:2;16881:18;;;16874:30;16940:34;16920:18;;;16913:62;-1:-1:-1;;;16991:18:1;;;16984:35;17036:19;;50191:88:0::2;16660:401:1::0;50191:88:0::2;50315:28;::::0;-1:-1:-1;;50332:10:0::2;7738:2:1::0;7734:15;7730:53;50315:28:0::2;::::0;::::2;7718:66:1::0;50290:12:0::2;::::0;7800::1;;50315:28:0::2;;;;;;;;;;;;50305:39;;;;;;50290:54;;50363:56;50382:18;;50363:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;50402:10:0::2;::::0;;-1:-1:-1;50414:4:0;;-1:-1:-1;50363:18:0::2;:56::i;:::-;50355:83;;;::::0;-1:-1:-1;;;50355:83:0;;20386:2:1;50355:83:0::2;::::0;::::2;20368:21:1::0;20425:2;20405:18;;;20398:30;-1:-1:-1;;;20444:18:1;;;20437:44;20498:18;;50355:83:0::2;20184:338:1::0;50355:83:0::2;50449:35;50475:8;50449:25;:35::i;:::-;50495:31;50505:10;50517:8;50495:9;:31::i;:::-;-1:-1:-1::0;;30208:1:0::1;31162:7;:22:::0;-1:-1:-1;;50012:522:0:o;52381:118::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;30252:1:::1;30850:7;;:19;;30842:63;;;;-1:-1:-1::0;;;30842:63:0::1;;;;;;;:::i;:::-;30252:1;30983:7;:18:::0;52465:28:::2;52484:8:::0;52465:18:::2;:28::i;:::-;-1:-1:-1::0;30208:1:0::1;31162:7;:22:::0;52381:118::o;34110:744::-;34219:7;34254:16;34264:5;34254:9;:16::i;:::-;34246:5;:24;34238:71;;;;-1:-1:-1;;;34238:71:0;;10176:2:1;34238:71:0;;;10158:21:1;10215:2;10195:18;;;10188:30;10254:34;10234:18;;;10227:62;-1:-1:-1;;;10305:18:1;;;10298:32;10347:19;;34238:71:0;9974:398:1;34238:71:0;34316:22;34341:13;33555:12;;;33479:94;34341:13;34316:38;;34361:19;34391:25;34441:9;34436:350;34460:14;34456:1;:18;34436:350;;;34490:31;34524:14;;;:11;:14;;;;;;;;;34490:48;;;;;;;;;-1:-1:-1;;;;;34490:48:0;;;;;-1:-1:-1;;;34490:48:0;;;-1:-1:-1;;;;;34490:48:0;;;;;;;;34551:28;34547:89;;34612:14;;;-1:-1:-1;34547:89:0;34669:5;-1:-1:-1;;;;;34648:26:0;:17;-1:-1:-1;;;;;34648:26:0;;34644:135;;;34706:5;34691:11;:20;34687:59;;;-1:-1:-1;34733:1:0;-1:-1:-1;34726:8:0;;-1:-1:-1;;;34726:8:0;34687:59;34756:13;;;;:::i;:::-;;;;34644:135;-1:-1:-1;34476:3:0;;;;:::i;:::-;;;;34436:350;;;-1:-1:-1;34792:56:0;;-1:-1:-1;;;34792:56:0;;20729:2:1;34792:56:0;;;20711:21:1;20768:2;20748:18;;;20741:30;20807:34;20787:18;;;20780:62;-1:-1:-1;;;20858:18:1;;;20851:44;20912:19;;34792:56:0;20527:410:1;39232:157:0;39344:39;39361:4;39367:2;39371:7;39344:39;;;;;;;;;;;;:16;:39::i;52793:126::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;52875:16:::1;:36:::0;52793:126::o;33642:177::-;33709:7;33741:13;33555:12;;;33479:94;33741:13;33733:5;:21;33725:69;;;;-1:-1:-1;;;33725:69:0;;11749:2:1;33725:69:0;;;11731:21:1;11788:2;11768:18;;;11761:30;11827:34;11807:18;;;11800:62;-1:-1:-1;;;11878:18:1;;;11871:33;11921:19;;33725:69:0;11547:399:1;33725:69:0;-1:-1:-1;33808:5:0;33642:177::o;52684:100::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;52755:23:::1;:13;52771:7:::0;;52755:23:::1;:::i;36467:118::-:0;36531:7;36554:20;36566:7;36554:11;:20::i;:::-;:25;;36467:118;-1:-1:-1;;36467:118:0:o;52927:106::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;52999:11:::1;:26:::0;52927:106::o;53075:189::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;53179:9:::1;53175:84;53194:2;:9;53190:1;:13;53175:84;;;53241:7;53249:1;53241:10;;;;;;;;:::i;:::-;;;;;;;53216:15;:22;53232:2;53235:1;53232:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;53216:22:0::1;-1:-1:-1::0;;;;;53216:22:0::1;;;;;;;;;;;;:35;;;;53205:3;;;;;:::i;:::-;;;;53175:84;;35344:211:::0;35408:7;-1:-1:-1;;;;;35432:19:0;;35424:75;;;;-1:-1:-1;;;35424:75:0;;15279:2:1;35424:75:0;;;15261:21:1;15318:2;15298:18;;;15291:30;15357:34;15337:18;;;15330:62;-1:-1:-1;;;15408:18:1;;;15401:41;15459:19;;35424:75:0;15077:407:1;35424:75:0;-1:-1:-1;;;;;;35521:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;35521:27:0;;35344:211::o;27623:103::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;27688:30:::1;27715:1;27688:18;:30::i;:::-;27623:103::o:0;51710:365::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;51809:25:::1;;51797:8;:37;;51789:85;;;::::0;-1:-1:-1;;;51789:85:0;;16098:2:1;51789:85:0::1;::::0;::::1;16080:21:1::0;16137:2;16117:18;;;16110:30;16176:34;16156:18;;;16149:62;-1:-1:-1;;;16227:18:1;;;16220:32;16269:19;;51789:85:0::1;15896:398:1::0;51789:85:0::1;51914:8;51885:25;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;51969:10:0::1;::::0;-1:-1:-1;51957:8:0;51941:13:::1;33555:12:::0;;;33479:94;51941:13:::1;:24;;;;:::i;:::-;:38;;51933:92;;;;-1:-1:-1::0;;;51933:92:0::1;;;;;;;:::i;:::-;52036:31;52046:10;52058:8;52036:9;:31::i;:::-;51710:365:::0;:::o;53271:96::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;53337:10:::1;:22:::0;53271:96::o;53602:147::-;-1:-1:-1;;;;;;;;;;;;;;;;;53723:20:0;53735:7;53723:11;:20::i;36799:98::-;36855:13;36884:7;36877:14;;;;;:::i;51051:328::-;49882:9;49895:10;49882:23;49874:66;;;;-1:-1:-1;;;49874:66:0;;13326:2:1;49874:66:0;;;13308:21:1;13365:2;13345:18;;;13338:30;13404:32;13384:18;;;13377:60;13454:18;;49874:66:0;13124:354:1;49874:66:0;30252:1:::1;30850:7;;:19;;30842:63;;;;-1:-1:-1::0;;;30842:63:0::1;;;;;;;:::i;:::-;30252:1;30983:7;:18:::0;51145:10:::2;::::0;::::2;::::0;::::2;;;51137:46;;;::::0;-1:-1:-1;;;51137:46:0;;10579:2:1;51137:46:0::2;::::0;::::2;10561:21:1::0;10618:2;10598:18;;;10591:30;10657:25;10637:18;;;10630:53;10700:18;;51137:46:0::2;10377:347:1::0;51137:46:0::2;51230:10;51218:8;51202:13;33555:12:::0;;;33479:94;51202:13:::2;:24;;;;:::i;:::-;:38;;51194:92;;;;-1:-1:-1::0;;;51194:92:0::2;;;;;;;:::i;:::-;51297:32;51320:8;51297:22;:32::i;:::-;51340:31;51350:10;51362:8;51340:9;:31::i;38445:274::-:0;-1:-1:-1;;;;;38536:24:0;;25776:10;38536:24;;38528:63;;;;-1:-1:-1;;;38528:63:0;;17684:2:1;38528:63:0;;;17666:21:1;17723:2;17703:18;;;17696:30;17762:28;17742:18;;;17735:56;17808:18;;38528:63:0;17482:350:1;38528:63:0;25776:10;38600:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;38600:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;38600:53:0;;;;;;;;;;38665:48;;9516:41:1;;;38600:42:0;;25776:10;38665:48;;9489:18:1;38665:48:0;;;;;;;38445:274;;:::o;53755:181::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;30252:1:::1;30850:7;;:19;;30842:63;;;;-1:-1:-1::0;;;30842:63:0::1;;;;;;;:::i;:::-;30252:1;30983:7;:18:::0;53838:49:::2;::::0;53820:12:::2;::::0;53838:10:::2;::::0;53861:21:::2;::::0;53820:12;53838:49;53820:12;53838:49;53861:21;53838:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53819:68;;;53902:7;53894:36;;;::::0;-1:-1:-1;;;53894:36:0;;18861:2:1;53894:36:0::2;::::0;::::2;18843:21:1::0;18900:2;18880:18;;;18873:30;-1:-1:-1;;;18919:18:1;;;18912:46;18975:18;;53894:36:0::2;18659:340:1::0;39452:311:0;39589:28;39599:4;39605:2;39609:7;39589:9;:28::i;:::-;39640:48;39663:4;39669:2;39673:7;39682:5;39640:22;:48::i;:::-;39624:133;;;;-1:-1:-1;;;39624:133:0;;;;;;;:::i;:::-;39452:311;;;;:::o;36960:402::-;37058:13;37099:16;37107:7;40089:12;;-1:-1:-1;40079:22:0;40002:105;37099:16;37083:97;;;;-1:-1:-1;;;37083:97:0;;17268:2:1;37083:97:0;;;17250:21:1;17307:2;17287:18;;;17280:30;17346:34;17326:18;;;17319:62;-1:-1:-1;;;17397:18:1;;;17390:45;17452:19;;37083:97:0;17066:411:1;37083:97:0;37189:21;37213:10;:8;:10::i;:::-;37189:34;;37268:1;37250:7;37244:21;:25;:112;;;;;;;;;;;;;;;;;37305:7;37314:18;:7;:16;:18::i;:::-;37288:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37244:112;37230:126;36960:402;-1:-1:-1;;;36960:402:0:o;52083:79::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;52147:7:::1;::::0;;-1:-1:-1;;52136:18:0;::::1;52147:7;::::0;;::::1;52146:8;52136:18;::::0;;52083:79::o;52266:107::-;52324:7;52347:20;52361:5;52347:13;:20::i;52170:88::-;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;52240:10:::1;::::0;;-1:-1:-1;;52226:24:0;::::1;52240:10;::::0;;;::::1;;;52239:11;52226:24:::0;;::::1;;::::0;;52170:88::o;53375:219::-;53464:4;53488:55;53527:5;53534:8;53488:38;:55::i;:::-;:98;;;-1:-1:-1;;;;;;38927:25:0;;;38904:4;38927:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;53547:39;38782:186;27881:201;27018:7;27045:6;-1:-1:-1;;;;;27045:6:0;25776:10;27192:23;27184:68;;;;-1:-1:-1;;;27184:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27970:22:0;::::1;27962:73;;;::::0;-1:-1:-1;;;27962:73:0;;10931:2:1;27962:73:0::1;::::0;::::1;10913:21:1::0;10970:2;10950:18;;;10943:30;11009:34;10989:18;;;10982:62;-1:-1:-1;;;11060:18:1;;;11053:36;11106:19;;27962:73:0::1;10729:402:1::0;27962:73:0::1;28046:28;28065:8;28046:18;:28::i;43689:172::-:0;43786:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;43786:29:0;-1:-1:-1;;;;;43786:29:0;;;;;;;;;43827:28;;43786:24;;43827:28;;;;;;;43689:172;;;:::o;42054:1529::-;42151:35;42189:20;42201:7;42189:11;:20::i;:::-;42260:18;;42151:58;;-1:-1:-1;42218:22:0;;-1:-1:-1;;;;;42244:34:0;25776:10;-1:-1:-1;;;;;42244:34:0;;:81;;;-1:-1:-1;25776:10:0;42289:20;42301:7;42289:11;:20::i;:::-;-1:-1:-1;;;;;42289:36:0;;42244:81;:142;;;-1:-1:-1;42353:18:0;;42336:50;;25776:10;53375:219;:::i;42336:50::-;42218:169;;42412:17;42396:101;;;;-1:-1:-1;;;42396:101:0;;18039:2:1;42396:101:0;;;18021:21:1;18078:2;18058:18;;;18051:30;18117:34;18097:18;;;18090:62;-1:-1:-1;;;18168:18:1;;;18161:48;18226:19;;42396:101:0;17837:414:1;42396:101:0;42544:4;-1:-1:-1;;;;;42522:26:0;:13;:18;;;-1:-1:-1;;;;;42522:26:0;;42506:98;;;;-1:-1:-1;;;42506:98:0;;15691:2:1;42506:98:0;;;15673:21:1;15730:2;15710:18;;;15703:30;15769:34;15749:18;;;15742:62;-1:-1:-1;;;15820:18:1;;;15813:36;15866:19;;42506:98:0;15489:402:1;42506:98:0;-1:-1:-1;;;;;42619:16:0;;42611:66;;;;-1:-1:-1;;;42611:66:0;;12153:2:1;42611:66:0;;;12135:21:1;12192:2;12172:18;;;12165:30;12231:34;12211:18;;;12204:62;-1:-1:-1;;;12282:18:1;;;12275:35;12327:19;;42611:66:0;11951:401:1;42611:66:0;42786:49;42803:1;42807:7;42816:13;:18;;;42786:8;:49::i;:::-;-1:-1:-1;;;;;42844:18:0;;;;;;:12;:18;;;;;:31;;42874:1;;42844:18;:31;;42874:1;;-1:-1:-1;;;;;42844:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;42844:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42882:16:0;;-1:-1:-1;42882:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;42882:16:0;;:29;;-1:-1:-1;;42882:29:0;;:::i;:::-;;;-1:-1:-1;;;;;42882:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42941:43:0;;;;;;;;-1:-1:-1;;;;;42941:43:0;;;;;-1:-1:-1;;;;;42967:15:0;42941:43;;;;;;;;;-1:-1:-1;42918:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;42918:66:0;-1:-1:-1;;;;;;42918:66:0;;;;;;;;;;;43234:11;42930:7;-1:-1:-1;43234:11:0;:::i;:::-;43297:1;43256:24;;;:11;:24;;;;;:29;43212:33;;-1:-1:-1;;;;;;43256:29:0;43252:236;;43314:20;43322:11;40089:12;;-1:-1:-1;40079:22:0;40002:105;43314:20;43310:171;;;43374:97;;;;;;;;43401:18;;-1:-1:-1;;;;;43374:97:0;;;;;;43432:28;;;;-1:-1:-1;;;;;43374:97:0;;;;;;;;;-1:-1:-1;43347:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;43347:124:0;-1:-1:-1;;;;;;43347:124:0;;;;;;;;;;;;43310:171;43520:7;43516:2;-1:-1:-1;;;;;43501:27:0;43510:4;-1:-1:-1;;;;;43501:27:0;;;;;;;;;;;43535:42;42144:1439;;;42054:1529;;;:::o;23551:190::-;23676:4;23729;23700:25;23713:5;23720:4;23700:12;:25::i;:::-;:33;;23551:190;-1:-1:-1;;;;23551:190:0:o;50542:477::-;50634:1;50623:8;:12;:55;;;;-1:-1:-1;50667:10:0;50651:27;;;;:15;:27;;;;;;50639:39;;;50623:55;50615:121;;;;-1:-1:-1;;;50615:121:0;;;;;;;:::i;:::-;50785:8;50768:14;;:25;;;;:::i;:::-;50755:9;:38;50747:77;;;;-1:-1:-1;;;50747:77:0;;21911:2:1;50747:77:0;;;21893:21:1;21950:2;21930:18;;;21923:30;21989:28;21969:18;;;21962:56;22035:18;;50747:77:0;21709:350:1;50747:77:0;50877:10;50863:25;;;;:13;:25;;;;;;:36;;50891:8;;50863:36;:::i;:::-;50849:10;50835:25;;;;:13;:25;;;;;;;;:64;;;50947:15;:27;;;;;;50918:25;;-1:-1:-1;50918:56:0;50910:105;;;;-1:-1:-1;;;50910:105:0;;14464:2:1;50910:105:0;;;14446:21:1;14503:2;14483:18;;;14476:30;14542:34;14522:18;;;14515:62;-1:-1:-1;;;14593:18:1;;;14586:34;14637:19;;50910:105:0;14262:400:1;40113:98:0;40178:27;40188:2;40192:8;40178:27;;;;;;;;;;;;:9;:27::i;:::-;40113:98;;:::o;44015:846::-;44105:24;;44144:12;44136:49;;;;-1:-1:-1;;;44136:49:0;;14111:2:1;44136:49:0;;;14093:21:1;14150:2;14130:18;;;14123:30;14189:26;14169:18;;;14162:54;14233:18;;44136:49:0;13909:348:1;44136:49:0;44192:16;44242:1;44211:28;44231:8;44211:17;:28;:::i;:::-;:32;;;;:::i;:::-;44192:51;-1:-1:-1;44265:18:0;44282:1;44265:14;:18;:::i;:::-;44254:8;:29;44250:81;;;44305:18;44322:1;44305:14;:18;:::i;:::-;44294:29;;44250:81;44446:17;44454:8;40089:12;;-1:-1:-1;40079:22:0;40002:105;44446:17;44438:68;;;;-1:-1:-1;;;44438:68:0;;21144:2:1;44438:68:0;;;21126:21:1;21183:2;21163:18;;;21156:30;21222:34;21202:18;;;21195:62;-1:-1:-1;;;21273:18:1;;;21266:36;21319:19;;44438:68:0;20942:402:1;44438:68:0;44530:17;44513:297;44554:8;44549:1;:13;44513:297;;44613:1;44582:14;;;:11;:14;;;;;:19;-1:-1:-1;;;;;44582:19:0;44578:225;;44628:31;44662:14;44674:1;44662:11;:14::i;:::-;44704:89;;;;;;;;44731:14;;-1:-1:-1;;;;;44704:89:0;;;;;;44758:24;;;;-1:-1:-1;;;;;44704:89:0;;;;;;;;;-1:-1:-1;44687:14:0;;;:11;:14;;;;;;;:106;;;;;;;;;-1:-1:-1;;;44687:106:0;-1:-1:-1;;;;;;44687:106:0;;;;;;;;;;;;-1:-1:-1;44578:225:0;44564:3;;;;:::i;:::-;;;;44513:297;;;-1:-1:-1;44843:12:0;:8;44854:1;44843:12;:::i;:::-;44816:24;:39;-1:-1:-1;;;44015:846:0:o;35807:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;35924:16:0;35932:7;40089:12;;-1:-1:-1;40079:22:0;40002:105;35924:16;35916:71;;;;-1:-1:-1;;;35916:71:0;;11338:2:1;35916:71:0;;;11320:21:1;11377:2;11357:18;;;11350:30;11416:34;11396:18;;;11389:62;-1:-1:-1;;;11467:18:1;;;11460:40;11517:19;;35916:71:0;11136:406:1;35916:71:0;35996:26;36044:12;36033:7;:23;36029:93;;36088:22;36098:12;36088:7;:22;:::i;:::-;:26;;36113:1;36088:26;:::i;:::-;36067:47;;36029:93;36150:7;36130:212;36167:18;36159:4;:26;36130:212;;36204:31;36238:17;;;:11;:17;;;;;;;;;36204:51;;;;;;;;;-1:-1:-1;;;;;36204:51:0;;;;;-1:-1:-1;;;36204:51:0;;;-1:-1:-1;;;;;36204:51:0;;;;;;;;36268:28;36264:71;;36316:9;35807:606;-1:-1:-1;;;;35807:606:0:o;36264:71::-;-1:-1:-1;36187:6:0;;;;:::i;:::-;;;;36130:212;;;-1:-1:-1;36350:57:0;;-1:-1:-1;;;36350:57:0;;22266:2:1;36350:57:0;;;22248:21:1;22305:2;22285:18;;;22278:30;22344:34;22324:18;;;22317:62;-1:-1:-1;;;22395:18:1;;;22388:45;22450:19;;36350:57:0;22064:411:1;28242:191:0;28316:16;28335:6;;-1:-1:-1;;;;;28352:17:0;;;-1:-1:-1;;;;;;28352:17:0;;;;;;28385:40;;28335:6;;;;;;;28385:40;;28316:16;28385:40;28305:128;28242:191;:::o;51387:275::-;51476:1;51465:8;:12;:44;;;;;51493:16;;51481:8;:28;;51465:44;51457:110;;;;-1:-1:-1;;;51457:110:0;;;;;;;:::i;:::-;51613:8;51599:11;;:22;;;;:::i;:::-;51586:9;:35;51578:74;;;;-1:-1:-1;;;51578:74:0;;21911:2:1;51578:74:0;;;21893:21:1;21950:2;21930:18;;;21923:30;21989:28;21969:18;;;21962:56;22035:18;;51578:74:0;21709:350:1;45404:690:0;45541:4;-1:-1:-1;;;;;45558:13:0;;3797:19;:23;45554:535;;45597:72;;-1:-1:-1;;;45597:72:0;;-1:-1:-1;;;;;45597:36:0;;;;;:72;;25776:10;;45648:4;;45654:7;;45663:5;;45597:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45597:72:0;;;;;;;;-1:-1:-1;;45597:72:0;;;;;;;;;;;;:::i;:::-;;;45584:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45828:13:0;;45824:215;;45861:61;;-1:-1:-1;;;45861:61:0;;;;;;;:::i;45824:215::-;46007:6;46001:13;45992:6;45988:2;45984:15;45977:38;45584:464;-1:-1:-1;;;;;;45719:55:0;-1:-1:-1;;;45719:55:0;;-1:-1:-1;45712:62:0;;45554:535;-1:-1:-1;46077:4:0;45554:535;45404:690;;;;;;:::o;52568:108::-;52628:13;52657;52650:20;;;;;:::i;20869:723::-;20925:13;21146:10;21142:53;;-1:-1:-1;;21173:10:0;;;;;;;;;;;;-1:-1:-1;;;21173:10:0;;;;;20869:723::o;21142:53::-;21220:5;21205:12;21261:78;21268:9;;21261:78;;21294:8;;;;:::i;:::-;;-1:-1:-1;21317:10:0;;-1:-1:-1;21325:2:0;21317:10;;:::i;:::-;;;21261:78;;;21349:19;21381:6;-1:-1:-1;;;;;21371:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21371:17:0;;21349:39;;21399:154;21406:10;;21399:154;;21433:11;21443:1;21433:11;;:::i;:::-;;-1:-1:-1;21502:10:0;21510:2;21502:5;:10;:::i;:::-;21489:24;;:2;:24;:::i;:::-;21476:39;;21459:6;21466;21459:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;21459:56:0;;;;;;;;-1:-1:-1;21530:11:0;21539:2;21530:11;;:::i;:::-;;;21399:154;;35561:240;35622:7;-1:-1:-1;;;;;35654:19:0;;35638:102;;;;-1:-1:-1;;;35638:102:0;;12559:2:1;35638:102:0;;;12541:21:1;12598:2;12578:18;;;12571:30;12637:34;12617:18;;;12610:62;-1:-1:-1;;;12688:18:1;;;12681:47;12745:19;;35638:102:0;12357:413:1;35638:102:0;-1:-1:-1;;;;;;35762:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;35762:32:0;;-1:-1:-1;;;;;35762:32:0;;35561:240::o;47931:565::-;48013:4;48030:22;48094:9;48122:1;48117:123;;;;48259:1;48254:123;;;;48087:290;;48117:123;48183:42;48171:54;;48117:123;;48254;48320:42;48308:54;;48087:290;-1:-1:-1;;;;;;48407:31:0;;;;;;:81;;-1:-1:-1;48451:23:0;;-1:-1:-1;;;48451:23:0;;-1:-1:-1;;;;;8839:32:1;;;48451:23:0;;;8821:51:1;48443:44:0;;;;48451:16;;;;;;8794:18:1;;48451:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48443:44:0;;48400:88;47931:565;-1:-1:-1;;;;47931:565:0:o;24103:675::-;24186:7;24229:4;24186:7;24244:497;24268:5;:12;24264:1;:16;24244:497;;;24302:20;24325:5;24331:1;24325:8;;;;;;;;:::i;:::-;;;;;;;24302:31;;24368:12;24352;:28;24348:382;;24854:13;24904:15;;;24940:4;24933:15;;;24987:4;24971:21;;24480:57;;24348:382;;;24854:13;24904:15;;;24940:4;24933:15;;;24987:4;24971:21;;24657:57;;24348:382;-1:-1:-1;24282:3:0;;;;:::i;:::-;;;;24244:497;;;-1:-1:-1;24758:12:0;24103:675;-1:-1:-1;;;24103:675:0:o;40550:1272::-;40678:12;;-1:-1:-1;;;;;40705:16:0;;40697:62;;;;-1:-1:-1;;;40697:62:0;;19984:2:1;40697:62:0;;;19966:21:1;20023:2;20003:18;;;19996:30;20062:34;20042:18;;;20035:62;-1:-1:-1;;;20113:18:1;;;20106:31;20154:19;;40697:62:0;19782:397:1;40697:62:0;40896:21;40904:12;40089;;-1:-1:-1;40079:22:0;40002:105;40896:21;40895:22;40887:64;;;;-1:-1:-1;;;40887:64:0;;19626:2:1;40887:64:0;;;19608:21:1;19665:2;19645:18;;;19638:30;19704:31;19684:18;;;19677:59;19753:18;;40887:64:0;19424:353:1;40887:64:0;40978:12;40966:8;:24;;40958:71;;;;-1:-1:-1;;;40958:71:0;;23518:2:1;40958:71:0;;;23500:21:1;23557:2;23537:18;;;23530:30;23596:34;23576:18;;;23569:62;-1:-1:-1;;;23647:18:1;;;23640:32;23689:19;;40958:71:0;23316:398:1;40958:71:0;-1:-1:-1;;;;;41141:16:0;;41108:30;41141:16;;;:12;:16;;;;;;;;;41108:49;;;;;;;;;-1:-1:-1;;;;;41108:49:0;;;;;-1:-1:-1;;;41108:49:0;;;;;;;;;;;41183:119;;;;;;;;41203:19;;41108:49;;41183:119;;;41203:39;;41233:8;;41203:39;:::i;:::-;-1:-1:-1;;;;;41183:119:0;;;;;41286:8;41251:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;41183:119:0;;;;;;-1:-1:-1;;;;;41164:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;41164:138:0;;;;;;;;;;;;41337:43;;;;;;;;;;-1:-1:-1;;;;;41363:15:0;41337:43;;;;;;;;41309:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;41309:71:0;-1:-1:-1;;;;;;41309:71:0;;;;;;;;;;;;;;;;;;41321:12;;41433:281;41457:8;41453:1;:12;41433:281;;;41486:38;;41511:12;;-1:-1:-1;;;;;41486:38:0;;;41503:1;;41486:38;;41503:1;;41486:38;41551:59;41582:1;41586:2;41590:12;41604:5;41551:22;:59::i;:::-;41533:150;;;;-1:-1:-1;;;41533:150:0;;;;;;;:::i;:::-;41692:14;;;;:::i;:::-;;;;41467:3;;;;;:::i;:::-;;;;41433:281;;;-1:-1:-1;41722:12:0;:27;;;41756:60;39452:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:673:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:247::-;751:6;804:2;792:9;783:7;779:23;775:32;772:52;;;820:1;817;810:12;772:52;859:9;846:23;878:31;903:5;878:31;:::i;944:388::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;-1:-1:-1;1254:2:1;1239:18;;1226:32;1267:33;1226:32;1267:33;:::i;:::-;1319:7;1309:17;;;944:388;;;;;:::o;1337:456::-;1414:6;1422;1430;1483:2;1471:9;1462:7;1458:23;1454:32;1451:52;;;1499:1;1496;1489:12;1451:52;1538:9;1525:23;1557:31;1582:5;1557:31;:::i;:::-;1607:5;-1:-1:-1;1664:2:1;1649:18;;1636:32;1677:33;1636:32;1677:33;:::i;:::-;1337:456;;1729:7;;-1:-1:-1;;;1783:2:1;1768:18;;;;1755:32;;1337:456::o;1798:1108::-;1893:6;1901;1909;1917;1970:3;1958:9;1949:7;1945:23;1941:33;1938:53;;;1987:1;1984;1977:12;1938:53;2026:9;2013:23;2045:31;2070:5;2045:31;:::i;:::-;2095:5;-1:-1:-1;2119:2:1;2158:18;;;2145:32;2186:33;2145:32;2186:33;:::i;:::-;2238:7;-1:-1:-1;2292:2:1;2277:18;;2264:32;;-1:-1:-1;2347:2:1;2332:18;;2319:32;-1:-1:-1;;;;;2400:14:1;;;2397:34;;;2427:1;2424;2417:12;2397:34;2465:6;2454:9;2450:22;2440:32;;2510:7;2503:4;2499:2;2495:13;2491:27;2481:55;;2532:1;2529;2522:12;2481:55;2568:2;2555:16;2590:2;2586;2583:10;2580:36;;;2596:18;;:::i;:::-;2638:53;2681:2;2662:13;;-1:-1:-1;;2658:27:1;2654:36;;2638:53;:::i;:::-;2625:66;;2714:2;2707:5;2700:17;2754:7;2749:2;2744;2740;2736:11;2732:20;2729:33;2726:53;;;2775:1;2772;2765:12;2726:53;2830:2;2825;2821;2817:11;2812:2;2805:5;2801:14;2788:45;2874:1;2869:2;2864;2857:5;2853:14;2849:23;2842:34;;2895:5;2885:15;;;;;1798:1108;;;;;;;:::o;2911:416::-;2976:6;2984;3037:2;3025:9;3016:7;3012:23;3008:32;3005:52;;;3053:1;3050;3043:12;3005:52;3092:9;3079:23;3111:31;3136:5;3111:31;:::i;:::-;3161:5;-1:-1:-1;3218:2:1;3203:18;;3190:32;3260:15;;3253:23;3241:36;;3231:64;;3291:1;3288;3281:12;3332:315;3400:6;3408;3461:2;3449:9;3440:7;3436:23;3432:32;3429:52;;;3477:1;3474;3467:12;3429:52;3516:9;3503:23;3535:31;3560:5;3535:31;:::i;:::-;3585:5;3637:2;3622:18;;;;3609:32;;-1:-1:-1;;;3332:315:1:o;3652:1226::-;3770:6;3778;3831:2;3819:9;3810:7;3806:23;3802:32;3799:52;;;3847:1;3844;3837:12;3799:52;3887:9;3874:23;-1:-1:-1;;;;;3957:2:1;3949:6;3946:14;3943:34;;;3973:1;3970;3963:12;3943:34;4011:6;4000:9;3996:22;3986:32;;4056:7;4049:4;4045:2;4041:13;4037:27;4027:55;;4078:1;4075;4068:12;4027:55;4114:2;4101:16;4136:4;4160:60;4176:43;4216:2;4176:43;:::i;4160:60::-;4242:3;4266:2;4261:3;4254:15;4294:2;4289:3;4285:12;4278:19;;4325:2;4321;4317:11;4373:7;4368:2;4362;4359:1;4355:10;4351:2;4347:19;4343:28;4340:41;4337:61;;;4394:1;4391;4384:12;4337:61;4416:1;4407:10;;4426:238;4440:2;4437:1;4434:9;4426:238;;;4511:3;4498:17;4528:31;4553:5;4528:31;:::i;:::-;4572:18;;4458:1;4451:9;;;;;4610:12;;;;4642;;4426:238;;;-1:-1:-1;4683:5:1;-1:-1:-1;;4726:18:1;;4713:32;;-1:-1:-1;;4757:16:1;;;4754:36;;;4786:1;4783;4776:12;4754:36;;4809:63;4864:7;4853:8;4842:9;4838:24;4809:63;:::i;:::-;4799:73;;;3652:1226;;;;;:::o;4883:180::-;4942:6;4995:2;4983:9;4974:7;4970:23;4966:32;4963:52;;;5011:1;5008;5001:12;4963:52;-1:-1:-1;5034:23:1;;4883:180;-1:-1:-1;4883:180:1:o;5068:245::-;5126:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:52;;;5195:1;5192;5185:12;5147:52;5234:9;5221:23;5253:30;5277:5;5253:30;:::i;5318:249::-;5387:6;5440:2;5428:9;5419:7;5415:23;5411:32;5408:52;;;5456:1;5453;5446:12;5408:52;5488:9;5482:16;5507:30;5531:5;5507:30;:::i;5572:280::-;5671:6;5724:2;5712:9;5703:7;5699:23;5695:32;5692:52;;;5740:1;5737;5730:12;5692:52;5772:9;5766:16;5791:31;5816:5;5791:31;:::i;5857:592::-;5928:6;5936;5989:2;5977:9;5968:7;5964:23;5960:32;5957:52;;;6005:1;6002;5995:12;5957:52;6045:9;6032:23;-1:-1:-1;;;;;6115:2:1;6107:6;6104:14;6101:34;;;6131:1;6128;6121:12;6101:34;6169:6;6158:9;6154:22;6144:32;;6214:7;6207:4;6203:2;6199:13;6195:27;6185:55;;6236:1;6233;6226:12;6185:55;6276:2;6263:16;6302:2;6294:6;6291:14;6288:34;;;6318:1;6315;6308:12;6288:34;6363:7;6358:2;6349:6;6345:2;6341:15;6337:24;6334:37;6331:57;;;6384:1;6381;6374:12;6331:57;6415:2;6407:11;;;;;6437:6;;-1:-1:-1;5857:592:1;;-1:-1:-1;;;;5857:592:1:o;6639:683::-;6734:6;6742;6750;6803:2;6791:9;6782:7;6778:23;6774:32;6771:52;;;6819:1;6816;6809:12;6771:52;6855:9;6842:23;6832:33;;6916:2;6905:9;6901:18;6888:32;-1:-1:-1;;;;;6980:2:1;6972:6;6969:14;6966:34;;;6996:1;6993;6986:12;6966:34;7034:6;7023:9;7019:22;7009:32;;7079:7;7072:4;7068:2;7064:13;7060:27;7050:55;;7101:1;7098;7091:12;7050:55;7141:2;7128:16;7167:2;7159:6;7156:14;7153:34;;;7183:1;7180;7173:12;7153:34;7236:7;7231:2;7221:6;7218:1;7214:14;7210:2;7206:23;7202:32;7199:45;7196:65;;;7257:1;7254;7247:12;7196:65;7288:2;7284;7280:11;7270:21;;7310:6;7300:16;;;;;6639:683;;;;;:::o;7327:257::-;7368:3;7406:5;7400:12;7433:6;7428:3;7421:19;7449:63;7505:6;7498:4;7493:3;7489:14;7482:4;7475:5;7471:16;7449:63;:::i;:::-;7566:2;7545:15;-1:-1:-1;;7541:29:1;7532:39;;;;7573:4;7528:50;;7327:257;-1:-1:-1;;7327:257:1:o;7823:637::-;8103:3;8141:6;8135:13;8157:53;8203:6;8198:3;8191:4;8183:6;8179:17;8157:53;:::i;:::-;8273:13;;8232:16;;;;8295:57;8273:13;8232:16;8329:4;8317:17;;8295:57;:::i;:::-;-1:-1:-1;;;8374:20:1;;8403:22;;;8452:1;8441:13;;7823:637;-1:-1:-1;;;;7823:637:1:o;8883:488::-;-1:-1:-1;;;;;9152:15:1;;;9134:34;;9204:15;;9199:2;9184:18;;9177:43;9251:2;9236:18;;9229:34;;;9299:3;9294:2;9279:18;;9272:31;;;9077:4;;9320:45;;9345:19;;9337:6;9320:45;:::i;:::-;9312:53;8883:488;-1:-1:-1;;;;;;8883:488:1:o;9750:219::-;9899:2;9888:9;9881:21;9862:4;9919:44;9959:2;9948:9;9944:18;9936:6;9919:44;:::i;14667:405::-;14869:2;14851:21;;;14908:2;14888:18;;;14881:30;14947:34;14942:2;14927:18;;14920:62;-1:-1:-1;;;15013:2:1;14998:18;;14991:39;15062:3;15047:19;;14667:405::o;16299:356::-;16501:2;16483:21;;;16520:18;;;16513:30;16579:34;16574:2;16559:18;;16552:62;16646:2;16631:18;;16299:356::o;19004:415::-;19206:2;19188:21;;;19245:2;19225:18;;;19218:30;19284:34;19279:2;19264:18;;19257:62;-1:-1:-1;;;19350:2:1;19335:18;;19328:49;19409:3;19394:19;;19004:415::o;21349:355::-;21551:2;21533:21;;;21590:2;21570:18;;;21563:30;21629:33;21624:2;21609:18;;21602:61;21695:2;21680:18;;21349:355::o;22480:417::-;22682:2;22664:21;;;22721:2;22701:18;;;22694:30;22760:34;22755:2;22740:18;;22733:62;-1:-1:-1;;;22826:2:1;22811:18;;22804:51;22887:3;22872:19;;22480:417::o;24266:275::-;24337:2;24331:9;24402:2;24383:13;;-1:-1:-1;;24379:27:1;24367:40;;-1:-1:-1;;;;;24422:34:1;;24458:22;;;24419:62;24416:88;;;24484:18;;:::i;:::-;24520:2;24513:22;24266:275;;-1:-1:-1;24266:275:1:o;24546:183::-;24606:4;-1:-1:-1;;;;;24631:6:1;24628:30;24625:56;;;24661:18;;:::i;:::-;-1:-1:-1;24706:1:1;24702:14;24718:4;24698:25;;24546:183::o;24734:253::-;24774:3;-1:-1:-1;;;;;24863:2:1;24860:1;24856:10;24893:2;24890:1;24886:10;24924:3;24920:2;24916:12;24911:3;24908:21;24905:47;;;24932:18;;:::i;:::-;24968:13;;24734:253;-1:-1:-1;;;;24734:253:1:o;24992:128::-;25032:3;25063:1;25059:6;25056:1;25053:13;25050:39;;;25069:18;;:::i;:::-;-1:-1:-1;25105:9:1;;24992:128::o;25125:120::-;25165:1;25191;25181:35;;25196:18;;:::i;:::-;-1:-1:-1;25230:9:1;;25125:120::o;25250:168::-;25290:7;25356:1;25352;25348:6;25344:14;25341:1;25338:21;25333:1;25326:9;25319:17;25315:45;25312:71;;;25363:18;;:::i;:::-;-1:-1:-1;25403:9:1;;25250:168::o;25423:246::-;25463:4;-1:-1:-1;;;;;25576:10:1;;;;25546;;25598:12;;;25595:38;;;25613:18;;:::i;:::-;25650:13;;25423:246;-1:-1:-1;;;25423:246:1:o;25674:125::-;25714:4;25742:1;25739;25736:8;25733:34;;;25747:18;;:::i;:::-;-1:-1:-1;25784:9:1;;25674:125::o;25804:258::-;25876:1;25886:113;25900:6;25897:1;25894:13;25886:113;;;25976:11;;;25970:18;25957:11;;;25950:39;25922:2;25915:10;25886:113;;;26017:6;26014:1;26011:13;26008:48;;;-1:-1:-1;;26052:1:1;26034:16;;26027:27;25804:258::o;26067:136::-;26106:3;26134:5;26124:39;;26143:18;;:::i;:::-;-1:-1:-1;;;26179:18:1;;26067:136::o;26208:380::-;26287:1;26283:12;;;;26330;;;26351:61;;26405:4;26397:6;26393:17;26383:27;;26351:61;26458:2;26450:6;26447:14;26427:18;26424:38;26421:161;;;26504:10;26499:3;26495:20;26492:1;26485:31;26539:4;26536:1;26529:15;26567:4;26564:1;26557:15;26421:161;;26208:380;;;:::o;26593:135::-;26632:3;-1:-1:-1;;26653:17:1;;26650:43;;;26673:18;;:::i;:::-;-1:-1:-1;26720:1:1;26709:13;;26593:135::o;26733:112::-;26765:1;26791;26781:35;;26796:18;;:::i;:::-;-1:-1:-1;26830:9:1;;26733:112::o;26850:127::-;26911:10;26906:3;26902:20;26899:1;26892:31;26942:4;26939:1;26932:15;26966:4;26963:1;26956:15;26982:127;27043:10;27038:3;27034:20;27031:1;27024:31;27074:4;27071:1;27064:15;27098:4;27095:1;27088:15;27114:127;27175:10;27170:3;27166:20;27163:1;27156:31;27206:4;27203:1;27196:15;27230:4;27227:1;27220:15;27246:127;27307:10;27302:3;27298:20;27295:1;27288:31;27338:4;27335:1;27328:15;27362:4;27359:1;27352:15;27378:131;-1:-1:-1;;;;;27453:31:1;;27443:42;;27433:70;;27499:1;27496;27489:12;27514:131;-1:-1:-1;;;;;;27588:32:1;;27578:43;;27568:71;;27635:1;27632;27625:12
Swarm Source
ipfs://adc615eaedc7871f09cafa516aad30df61026199d0c897684c960518b6717ef7
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.