Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 20 from a total of 20 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Presale Cost | 16127299 | 676 days ago | IN | 0 ETH | 0.00032264 | ||||
Set Paused | 16127295 | 676 days ago | IN | 0 ETH | 0.00041521 | ||||
Transfer From | 16015659 | 691 days ago | IN | 0 ETH | 0.00068553 | ||||
Freesale Mint | 16006786 | 692 days ago | IN | 0 ETH | 0.00107498 | ||||
Safe Transfer Fr... | 15994402 | 694 days ago | IN | 0 ETH | 0.0011518 | ||||
Freesale Mint | 15984314 | 695 days ago | IN | 0 ETH | 0.00123611 | ||||
Freesale Mint | 15984312 | 695 days ago | IN | 0 ETH | 0.00145926 | ||||
Mint | 15983756 | 696 days ago | IN | 0 ETH | 0.00050793 | ||||
Mint | 15983750 | 696 days ago | IN | 0 ETH | 0.00047693 | ||||
Set Freesale | 15983694 | 696 days ago | IN | 0 ETH | 0.00061579 | ||||
Owner Mint | 15956816 | 699 days ago | IN | 0 ETH | 0.00077411 | ||||
Transfer Ownersh... | 15956651 | 699 days ago | IN | 0 ETH | 0.00030161 | ||||
Set Hidden URI | 15928137 | 703 days ago | IN | 0 ETH | 0.00167838 | ||||
Set Base URI | 15920619 | 704 days ago | IN | 0 ETH | 0.00071366 | ||||
Set Hidden URI | 15920617 | 704 days ago | IN | 0 ETH | 0.0007249 | ||||
Set Hidden URI | 15920614 | 704 days ago | IN | 0 ETH | 0.0007479 | ||||
Transfer Ownersh... | 15915020 | 705 days ago | IN | 0 ETH | 0.0003299 | ||||
Owner Mint | 15891916 | 708 days ago | IN | 0 ETH | 0.00180412 | ||||
Transfer Ownersh... | 15885785 | 709 days ago | IN | 0 ETH | 0.00054554 | ||||
0x61271060 | 15885153 | 709 days ago | IN | 0 ETH | 0.0392557 |
Loading...
Loading
Contract Name:
The4thDs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-02 */ // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @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, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` 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 payable; /** * @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 payable; /** * @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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); // ============================================================= // IERC721Metadata // ============================================================= /** * @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); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721 token receiver. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC721A * * @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721) * Non-Fungible Token Standard, including the Metadata extension. * Optimized for lower gas during batch mints. * * Token IDs are minted in sequential order (e.g. 0, 1, 2, 3, ...) * starting from `_startTokenId()`. * * Assumptions: * * - An owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * - The maximum token ID cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364). struct TokenApprovalRef { address value; } // ============================================================= // CONSTANTS // ============================================================= // Mask of an entry in packed address data. uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant _BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant _BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant _BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant _BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant _BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; // The bit position of `extraData` in packed ownership. uint256 private constant _BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; // The maximum `quantity` that can be minted with {_mintERC2309}. // This limit is to prevent overflows on the address data entries. // For a limit of 5000, a total of 3.689e15 calls to {_mintERC2309} // is required to cause an overflow, which is unrealistic. uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // The `Transfer` event signature is given by: // `keccak256(bytes("Transfer(address,address,uint256)"))`. bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; // ============================================================= // STORAGE // ============================================================= // The next token ID to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // 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 {_packedOwnershipOf} implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` // - [232..255] `extraData` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => TokenApprovalRef) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // ============================================================= // CONSTRUCTOR // ============================================================= constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } // ============================================================= // TOKEN COUNTING OPERATIONS // ============================================================= /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() public view virtual override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view virtual returns (uint256) { // Counter underflow is impossible as `_currentIndex` does not decrement, // and it is initialized to `_startTokenId()`. unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } // ============================================================= // ADDRESS DATA OPERATIONS // ============================================================= /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } /** * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes // of the XOR of all function selectors in the interface. // See: [ERC165](https://eips.ethereum.org/EIPS/eip-165) // (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`) return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the token collection symbol. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @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, it can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } // ============================================================= // OWNERSHIPS OPERATIONS // ============================================================= /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around over time. */ function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & _BITMASK_BURNED == 0) { // Invariant: // There will always be an initialized ownership slot // (i.e. `ownership.addr != address(0) && ownership.burned == false`) // before an unintialized ownership slot // (i.e. `ownership.addr == address(0) && ownership.burned == false`) // Hence, `curr` will not underflow. // // We can directly compare the packed value. // If the address is zero, packed will be zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } /** * @dev Packs ownership data into a single uint256. */ function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } // ============================================================= // APPROVAL OPERATIONS // ============================================================= /** * @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) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } /** * @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) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @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. See {_mint}. */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } /** * @dev Returns whether `msgSender` is equal to `approvedAddress` or `owner`. */ function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, _BITMASK_ADDRESS) // `msgSender == owner || msgSender == approvedAddress`. result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`. assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } // ============================================================= // TRANSFER OPERATIONS // ============================================================= /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @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 memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Hook that is called before a set of serially-ordered token IDs * are about to be transferred. This includes minting. * And also called before burning one token. * * `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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * `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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * `from` - Previous owner of the given token ID. * `to` - Target address that will receive the token. * `tokenId` - Token ID to be transferred. * `_data` - Optional data to send along with the call. * * Returns whether the call correctly returned the expected magic value. */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } // ============================================================= // MINT OPERATIONS // ============================================================= /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // `balance` and `numberMinted` have a maximum limit of 2**64. // `tokenId` has a maximum limit of 2**256. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; // Use assembly to loop and emit the `Transfer` event for gas savings. // The duplicated `log4` removes an extra check and reduces stack juggling. // The assembly, together with the surrounding Solidity code, have been // delicately arranged to nudge the compiler into producing optimized opcodes. assembly { // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean. toMasked := and(to, _BITMASK_ADDRESS) // Emit the `Transfer` event. log4( 0, // Start of data (0, since no data). 0, // End of data (0, since no data). _TRANSFER_EVENT_SIGNATURE, // Signature. 0, // `address(0)`. toMasked, // `to`. startTokenId // `tokenId`. ) // The `iszero(eq(,))` check ensures that large values of `quantity` // that overflows uint256 will make the loop run out of gas. // The compiler will optimize the `iszero` away for performance. for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { // Emit the `Transfer` event. Similar to above. log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * This function is intended for efficient minting only during contract creation. * * It emits only one {ConsecutiveTransfer} as defined in * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309), * instead of a sequence of {Transfer} event(s). * * Calling this function outside of contract creation WILL make your contract * non-compliant with the ERC721 standard. * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309 * {ConsecutiveTransfer} event is only permissible during contract creation. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {ConsecutiveTransfer} event. */ function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * See {_mint}. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } // ============================================================= // BURN OPERATIONS // ============================================================= /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << _BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } // ============================================================= // EXTRA DATA OPERATIONS // ============================================================= /** * @dev Directly sets the extra data for the ownership data `index`. */ function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } /** * @dev Called during each token transfer to set the 24bit `extraData` field. * Intended to be overridden by the cosumer contract. * * `previousExtraData` - the value of `extraData` before transfer. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} /** * @dev Returns the next extra data for the packed ownership data. * The returned result is shifted into position. */ function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } // ============================================================= // OTHER OPERATIONS // ============================================================= /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a uint256 to its ASCII string decimal representation. */ function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), but // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned. // We will need 1 word for the trailing zeros padding, 1 word for the length, // and 3 words for a maximum of 78 digits. Total: 5 * 0x20 = 0xa0. let m := add(mload(0x40), 0xa0) // Update the free memory pointer to allocate. mstore(0x40, m) // Assign the `str` to the end. str := sub(m, 0x20) // Zeroize the slot after the string. mstore(str, 0) // Cache the end of the memory to calculate the length later. let end := str // We write the string from rightmost digit to leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // prettier-ignore for { let temp := value } 1 {} { str := sub(str, 1) // Write the character to the pointer. // The ASCII index of the '0' character is 48. mstore8(str, add(48, mod(temp, 10))) // Keep dividing `temp` until zero. temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } let length := sub(end, str) // Move the pointer 32 bytes leftwards to make room for the length. str := sub(str, 0x20) // Store the length. mstore(str, length) } } } // File: The4thDs .sol pragma solidity 0.8.7; contract The4thDs is ERC721A, Ownable { // Supply uint256 public maxSupply = 10000; uint256 public preSaleSUpply = 3000; uint256 public freesaleSupply = 1000; // States bool public freesale = true; bool public presale = false; bool public revealed = false; bool public paused = false; // Costs uint256 public presaleCost = 0.05 ether; uint256 public publicsaleCost = 0.1 ether; //Mint Limit uint256 public nftPerAddressLimit = 9; uint256 public nftPresalePerAddressLimit = 2; // URI string public baseURI = "ipfs://QmSkeBM3MfTmKyDbkSBjL9bu82KvLs7vYphTQrfaGS76Qe/"; //Hidden URI string public hiddenURI = "ipfs://QmZz15c44onmxbQQ9SiksFgYuJxHtRsJTh5aPPky3uh8uK/1"; // Constructor constructor() ERC721A("The 4th Ds", "T4D") {} // Mint - Functions function freesaleMint(uint256 _mintAmount) external { require(!paused, "MSG: The contract is paused"); require(totalSupply() + _mintAmount <= maxSupply, "MSG: Max supply exceeded."); require(freesale, "MSG: Freesale is not live yet."); require(balanceOf(msg.sender) <= nftPerAddressLimit, "Max Mint per wallet reached"); require(totalSupply() + _mintAmount <= freesaleSupply , "MSG: Freesale max supply exceeded."); _safeMint(msg.sender, _mintAmount); } //Presale Mint function presaleMint(uint256 _mintAmount) external payable { require(!paused, "MSG: The contract is paused"); require(totalSupply() + _mintAmount <= maxSupply, "MSG: Max supply exceeded."); require(!freesale && presale, "MSG: Presale is not active."); require(totalSupply() + _mintAmount <= preSaleSUpply, "MSG: Presale max supply exceeded."); require(balanceOf(msg.sender) <= nftPresalePerAddressLimit, "Max Mint per wallet reached"); require(msg.value >= presaleCost, "MSG: Insufficient live yet."); _safeMint(msg.sender, _mintAmount); } //Public Sale Mint function publicsaleMint(uint256 _mintAmount) external payable { require(!paused, "MSG: The contract is paused"); require(totalSupply() + _mintAmount <= maxSupply, "MSG: Max supply exceeded."); require(!freesale && !presale, "MSG: Publicsale is not active."); require(msg.value >= publicsaleCost, "MSG: Insufficient live yet."); require(balanceOf(msg.sender) <= nftPerAddressLimit, "Max Mint per wallet reached"); _safeMint(msg.sender, _mintAmount); } //Owner Mint function ownerMint(uint256 _mintAmount) external onlyOwner { require(!paused, "MSG: The contract is paused"); require(totalSupply() + _mintAmount <= maxSupply, "MSG: Max supply exceeded."); _safeMint(msg.sender, _mintAmount); } // Set Max Supply function setMaxSupply(uint256 _supply) public onlyOwner { maxSupply = _supply; } // Set Per Address Limit function setPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setPresalePerAddressLimit(uint256 _limit) public onlyOwner { nftPresalePerAddressLimit = _limit; } //set freesale SUpply function setFreesaleSupply(uint256 _supply) public onlyOwner { freesaleSupply = _supply; } //set Presale Cost function setPresaleCost(uint256 _cost) public onlyOwner { presaleCost = _cost; } //set Public Sale Cost function setPublicsaleCost(uint256 _cost) public onlyOwner { publicsaleCost = _cost; } //set Freesale function setFreesale(bool _state) public onlyOwner { freesale = _state; } //set Presale function setPresale(bool _state) public onlyOwner { presale = _state; } //set Revealed function setRevealed(bool _state) public onlyOwner { revealed = _state; } //set Hidden URI function setHiddenURI(string memory _uri) public onlyOwner { hiddenURI = _uri; } //set BaseURI function setBaseURI(string memory _uri) public onlyOwner { baseURI = _uri; } //Return Base Uri function _baseURI() internal view override returns (string memory) { return baseURI; } // Show Hidden Uri function tokenURI(uint256 tokenId) public view override returns (string memory) { if(!revealed) { return hiddenURI; } return super.tokenURI(tokenId); } // set Paused function setPaused(bool _state) public onlyOwner { paused = _state; } //withdraw function withdraw() external payable onlyOwner { payable(owner()).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freesale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"freesaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freesaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPresalePerAddressLimit","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":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleSUpply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicsaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setFreesale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setFreesaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setPresalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicsaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","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":"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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6127106009908155610bb8600a556103e8600b55600c805463ffffffff1916600117905566b1a2bc2ec50000600d5567016345785d8a0000600e55600f55600260105560e060405260366080818152906200213760a03980516200006c9160119160209091019062000179565b50604051806060016040528060378152602001620021006037913980516200009d9160129160209091019062000179565b50348015620000ab57600080fd5b50604080518082018252600a8152695468652034746820447360b01b602080830191825283518085019094526003845262150d1160ea1b908401528151919291620000f99160029162000179565b5080516200010f90600390602084019062000179565b50506000805550620001213362000127565b6200025c565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000187906200021f565b90600052602060002090601f016020900481019282620001ab5760008555620001f6565b82601f10620001c657805160ff1916838001178555620001f6565b82800160010185558215620001f6579182015b82811115620001f6578251825591602001919060010190620001d9565b506200020492915062000208565b5090565b5b8082111562000204576000815560010162000209565b600181811c908216806200023457607f821691505b602082108114156200025657634e487b7160e01b600052602260045260246000fd5b50919050565b611e94806200026c6000396000f3fe6080604052600436106102885760003560e01c806370a082311161015a578063c54e73e3116100c1578063e436b05d1161007a578063e436b05d14610702578063e985e9c514610722578063f19e75d41461076b578063f2fde38b1461078b578063f9632bb9146107ab578063fdea8e0b146107cb57600080fd5b8063c54e73e314610659578063c87b56dd14610679578063c9b298f114610699578063d5abeb01146106ac578063d7ad6382146106c2578063e0a80853146106e257600080fd5b806392829d741161011357806392829d74146105c557806395d89b41146105db578063a22cb465146105f0578063b88d4fde14610610578063ba7d2c7614610623578063bbaac02f1461063957600080fd5b806370a082311461051d578063715018a61461053d5780637fc7df60146105525780638cc54e7f146105725780638da5cb5b146105875780638fdcf942146105a557600080fd5b80632f291cce116101fe5780635c975abb116101b75780635c975abb146104715780636352211e146104925780636905b184146104b25780636c0360eb146104d25780636f636e8b146104e75780636f8b44b0146104fd57600080fd5b80632f291cce146103e65780633ccfd60b146103fc57806342842e0e14610404578063494f41a514610417578063518302271461043157806355f804b31461045157600080fd5b806318160ddd1161025057806318160ddd146103515780631ee812931461037457806323b872dd1461038757806329de6e8a1461039a57806329f767e8146103b05780632a23d07d146103d057600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031c57806316c38b3c14610331575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611bb9565b6107ea565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761083c565b6040516102b99190611ced565b3480156102f057600080fd5b506103046102ff366004611c3c565b6108ce565b6040516001600160a01b0390911681526020016102b9565b61032f61032a366004611b74565b610912565b005b34801561033d57600080fd5b5061032f61034c366004611b9e565b6109b2565b34801561035d57600080fd5b50600154600054035b6040519081526020016102b9565b61032f610382366004611c3c565b6109d8565b61032f610395366004611a92565b610b34565b3480156103a657600080fd5b50610366600a5481565b3480156103bc57600080fd5b5061032f6103cb366004611c3c565b610cc5565b3480156103dc57600080fd5b50610366600d5481565b3480156103f257600080fd5b50610366600b5481565b61032f610cd2565b61032f610412366004611a92565b610d13565b34801561042357600080fd5b50600c546102ad9060ff1681565b34801561043d57600080fd5b50600c546102ad9062010000900460ff1681565b34801561045d57600080fd5b5061032f61046c366004611bf3565b610d33565b34801561047d57600080fd5b50600c546102ad906301000000900460ff1681565b34801561049e57600080fd5b506103046104ad366004611c3c565b610d52565b3480156104be57600080fd5b5061032f6104cd366004611c3c565b610d5d565b3480156104de57600080fd5b506102d7610d6a565b3480156104f357600080fd5b5061036660105481565b34801561050957600080fd5b5061032f610518366004611c3c565b610df8565b34801561052957600080fd5b50610366610538366004611a44565b610e05565b34801561054957600080fd5b5061032f610e54565b34801561055e57600080fd5b5061032f61056d366004611c3c565b610e68565b34801561057e57600080fd5b506102d7610e75565b34801561059357600080fd5b506008546001600160a01b0316610304565b3480156105b157600080fd5b5061032f6105c0366004611c3c565b610e82565b3480156105d157600080fd5b50610366600e5481565b3480156105e757600080fd5b506102d7610e8f565b3480156105fc57600080fd5b5061032f61060b366004611b4a565b610e9e565b61032f61061e366004611ace565b610f0a565b34801561062f57600080fd5b50610366600f5481565b34801561064557600080fd5b5061032f610654366004611bf3565b610f54565b34801561066557600080fd5b5061032f610674366004611b9e565b610f6f565b34801561068557600080fd5b506102d7610694366004611c3c565b610f91565b61032f6106a7366004611c3c565b61103f565b3480156106b857600080fd5b5061036660095481565b3480156106ce57600080fd5b5061032f6106dd366004611c3c565b6111f7565b3480156106ee57600080fd5b5061032f6106fd366004611b9e565b61134a565b34801561070e57600080fd5b5061032f61071d366004611b9e565b61136e565b34801561072e57600080fd5b506102ad61073d366004611a5f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077757600080fd5b5061032f610786366004611c3c565b611389565b34801561079757600080fd5b5061032f6107a6366004611a44565b6113f4565b3480156107b757600080fd5b5061032f6107c6366004611c3c565b61146a565b3480156107d757600080fd5b50600c546102ad90610100900460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061081b57506380ac58cd60e01b6001600160e01b03198316145b806108365750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606002805461084b90611df7565b80601f016020809104026020016040519081016040528092919081815260200182805461087790611df7565b80156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905090565b60006108d982611477565b6108f6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061091d82610d52565b9050336001600160a01b0382161461095657610939813361073d565b610956576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109ba61149e565b600c805491151563010000000263ff00000019909216919091179055565b600c546301000000900460ff1615610a0b5760405162461bcd60e51b8152600401610a0290611d00565b60405180910390fd5b60095481610a1c6001546000540390565b610a269190611da5565b1115610a445760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff16158015610a5f5750600c54610100900460ff16155b610aab5760405162461bcd60e51b815260206004820152601e60248201527f4d53473a205075626c696373616c65206973206e6f74206163746976652e00006044820152606401610a02565b600e54341015610afd5760405162461bcd60e51b815260206004820152601b60248201527f4d53473a20496e73756666696369656e74206c697665207965742e00000000006044820152606401610a02565b600f54610b0933610e05565b1115610b275760405162461bcd60e51b8152600401610a0290611d6e565b610b3133826114f8565b50565b6000610b3f82611512565b9050836001600160a01b0316816001600160a01b031614610b725760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610bbf57610ba2863361073d565b610bbf57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610be657604051633a954ecd60e21b815260040160405180910390fd5b8015610bf157600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610c7c5760018401600081815260046020526040902054610c7a576000548114610c7a5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b610ccd61149e565b600f55565b610cda61149e565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b31573d6000803e3d6000fd5b610d2e83838360405180602001604052806000815250610f0a565b505050565b610d3b61149e565b8051610d4e906011906020840190611909565b5050565b600061083682611512565b610d6561149e565b600e55565b60118054610d7790611df7565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390611df7565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b505050505081565b610e0061149e565b600955565b60006001600160a01b038216610e2e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610e5c61149e565b610e66600061157a565b565b610e7061149e565b600b55565b60128054610d7790611df7565b610e8a61149e565b600d55565b60606003805461084b90611df7565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f15848484610b34565b6001600160a01b0383163b15610f4e57610f31848484846115cc565b610f4e576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b610f5c61149e565b8051610d4e906012906020840190611909565b610f7761149e565b600c80549115156101000261ff0019909216919091179055565b600c5460609062010000900460ff166110365760128054610fb190611df7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdd90611df7565b801561102a5780601f10610fff5761010080835404028352916020019161102a565b820191906000526020600020905b81548152906001019060200180831161100d57829003601f168201915b50505050509050919050565b610836826116c4565b600c546301000000900460ff16156110695760405162461bcd60e51b8152600401610a0290611d00565b6009548161107a6001546000540390565b6110849190611da5565b11156110a25760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff161580156110bc5750600c54610100900460ff165b6111085760405162461bcd60e51b815260206004820152601b60248201527f4d53473a2050726573616c65206973206e6f74206163746976652e00000000006044820152606401610a02565b600a54816111196001546000540390565b6111239190611da5565b111561117b5760405162461bcd60e51b815260206004820152602160248201527f4d53473a2050726573616c65206d617820737570706c792065786365656465646044820152601760f91b6064820152608401610a02565b60105461118733610e05565b11156111a55760405162461bcd60e51b8152600401610a0290611d6e565b600d54341015610b275760405162461bcd60e51b815260206004820152601b60248201527f4d53473a20496e73756666696369656e74206c697665207965742e00000000006044820152606401610a02565b600c546301000000900460ff16156112215760405162461bcd60e51b8152600401610a0290611d00565b600954816112326001546000540390565b61123c9190611da5565b111561125a5760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff166112ac5760405162461bcd60e51b815260206004820152601e60248201527f4d53473a204672656573616c65206973206e6f74206c697665207965742e00006044820152606401610a02565b600f546112b833610e05565b11156112d65760405162461bcd60e51b8152600401610a0290611d6e565b600b54816112e76001546000540390565b6112f19190611da5565b1115610b275760405162461bcd60e51b815260206004820152602260248201527f4d53473a204672656573616c65206d617820737570706c792065786365656465604482015261321760f11b6064820152608401610a02565b61135261149e565b600c8054911515620100000262ff000019909216919091179055565b61137661149e565b600c805460ff1916911515919091179055565b61139161149e565b600c546301000000900460ff16156113bb5760405162461bcd60e51b8152600401610a0290611d00565b600954816113cc6001546000540390565b6113d69190611da5565b1115610b275760405162461bcd60e51b8152600401610a0290611d37565b6113fc61149e565b6001600160a01b0381166114615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a02565b610b318161157a565b61147261149e565b601055565b6000805482108015610836575050600090815260046020526040902054600160e01b161590565b6008546001600160a01b03163314610e665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a02565b610d4e828260405180602001604052806000815250611748565b60008160005481101561156157600081815260046020526040902054600160e01b811661155f575b8061155857506000190160008181526004602052604090205461153a565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611601903390899088908890600401611cb0565b602060405180830381600087803b15801561161b57600080fd5b505af192505050801561164b575060408051601f3d908101601f1916820190925261164891810190611bd6565b60015b6116a6573d808015611679576040519150601f19603f3d011682016040523d82523d6000602084013e61167e565b606091505b50805161169e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606116cf82611477565b6116ec57604051630a14c4b560e41b815260040160405180910390fd5b60006116f66117b5565b90508051600014156117175760405180602001604052806000815250611558565b80611721846117c4565b604051602001611732929190611c81565b6040516020818303038152906040529392505050565b6117528383611812565b6001600160a01b0383163b15610d2e576000548281035b61177c60008683806001019450866115cc565b611799576040516368d2bf6b60e11b815260040160405180910390fd5b8181106117695781600054146117ae57600080fd5b5050505050565b60606011805461084b90611df7565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117fb57611800565b6117de565b50819003601f19909101908152919050565b600054816118335760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146118e257808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016118aa565b508161190057604051622e076360e81b815260040160405180910390fd5b60005550505050565b82805461191590611df7565b90600052602060002090601f016020900481019282611937576000855561197d565b82601f1061195057805160ff191683800117855561197d565b8280016001018555821561197d579182015b8281111561197d578251825591602001919060010190611962565b5061198992915061198d565b5090565b5b80821115611989576000815560010161198e565b600067ffffffffffffffff808411156119bd576119bd611e32565b604051601f8501601f19908116603f011681019082821181831017156119e5576119e5611e32565b816040528093508581528686860111156119fe57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611a2f57600080fd5b919050565b80358015158114611a2f57600080fd5b600060208284031215611a5657600080fd5b61155882611a18565b60008060408385031215611a7257600080fd5b611a7b83611a18565b9150611a8960208401611a18565b90509250929050565b600080600060608486031215611aa757600080fd5b611ab084611a18565b9250611abe60208501611a18565b9150604084013590509250925092565b60008060008060808587031215611ae457600080fd5b611aed85611a18565b9350611afb60208601611a18565b925060408501359150606085013567ffffffffffffffff811115611b1e57600080fd5b8501601f81018713611b2f57600080fd5b611b3e878235602084016119a2565b91505092959194509250565b60008060408385031215611b5d57600080fd5b611b6683611a18565b9150611a8960208401611a34565b60008060408385031215611b8757600080fd5b611b9083611a18565b946020939093013593505050565b600060208284031215611bb057600080fd5b61155882611a34565b600060208284031215611bcb57600080fd5b813561155881611e48565b600060208284031215611be857600080fd5b815161155881611e48565b600060208284031215611c0557600080fd5b813567ffffffffffffffff811115611c1c57600080fd5b8201601f81018413611c2d57600080fd5b6116bc848235602084016119a2565b600060208284031215611c4e57600080fd5b5035919050565b60008151808452611c6d816020860160208601611dcb565b601f01601f19169290920160200192915050565b60008351611c93818460208801611dcb565b835190830190611ca7818360208801611dcb565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ce390830184611c55565b9695505050505050565b6020815260006115586020830184611c55565b6020808252601b908201527f4d53473a2054686520636f6e7472616374206973207061757365640000000000604082015260600190565b60208082526019908201527f4d53473a204d617820737570706c792065786365656465642e00000000000000604082015260600190565b6020808252601b908201527f4d6178204d696e74207065722077616c6c657420726561636865640000000000604082015260600190565b60008219821115611dc657634e487b7160e01b600052601160045260246000fd5b500190565b60005b83811015611de6578181015183820152602001611dce565b83811115610f4e5750506000910152565b600181811c90821680611e0b57607f821691505b60208210811415611e2c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3157600080fdfea26469706673582212202434b301754e6f7e8c1674285b00e6caec94aeef27f49f907580a03a401f3e2f64736f6c63430008070033697066733a2f2f516d5a7a31356334346f6e6d786251513953696b73466759754a78487452734a5468356150506b7933756838754b2f31697066733a2f2f516d536b65424d334d66546d4b7944626b53426a4c39627538324b764c73377659706854517266614753373651652f
Deployed Bytecode
0x6080604052600436106102885760003560e01c806370a082311161015a578063c54e73e3116100c1578063e436b05d1161007a578063e436b05d14610702578063e985e9c514610722578063f19e75d41461076b578063f2fde38b1461078b578063f9632bb9146107ab578063fdea8e0b146107cb57600080fd5b8063c54e73e314610659578063c87b56dd14610679578063c9b298f114610699578063d5abeb01146106ac578063d7ad6382146106c2578063e0a80853146106e257600080fd5b806392829d741161011357806392829d74146105c557806395d89b41146105db578063a22cb465146105f0578063b88d4fde14610610578063ba7d2c7614610623578063bbaac02f1461063957600080fd5b806370a082311461051d578063715018a61461053d5780637fc7df60146105525780638cc54e7f146105725780638da5cb5b146105875780638fdcf942146105a557600080fd5b80632f291cce116101fe5780635c975abb116101b75780635c975abb146104715780636352211e146104925780636905b184146104b25780636c0360eb146104d25780636f636e8b146104e75780636f8b44b0146104fd57600080fd5b80632f291cce146103e65780633ccfd60b146103fc57806342842e0e14610404578063494f41a514610417578063518302271461043157806355f804b31461045157600080fd5b806318160ddd1161025057806318160ddd146103515780631ee812931461037457806323b872dd1461038757806329de6e8a1461039a57806329f767e8146103b05780632a23d07d146103d057600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031c57806316c38b3c14610331575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611bb9565b6107ea565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d761083c565b6040516102b99190611ced565b3480156102f057600080fd5b506103046102ff366004611c3c565b6108ce565b6040516001600160a01b0390911681526020016102b9565b61032f61032a366004611b74565b610912565b005b34801561033d57600080fd5b5061032f61034c366004611b9e565b6109b2565b34801561035d57600080fd5b50600154600054035b6040519081526020016102b9565b61032f610382366004611c3c565b6109d8565b61032f610395366004611a92565b610b34565b3480156103a657600080fd5b50610366600a5481565b3480156103bc57600080fd5b5061032f6103cb366004611c3c565b610cc5565b3480156103dc57600080fd5b50610366600d5481565b3480156103f257600080fd5b50610366600b5481565b61032f610cd2565b61032f610412366004611a92565b610d13565b34801561042357600080fd5b50600c546102ad9060ff1681565b34801561043d57600080fd5b50600c546102ad9062010000900460ff1681565b34801561045d57600080fd5b5061032f61046c366004611bf3565b610d33565b34801561047d57600080fd5b50600c546102ad906301000000900460ff1681565b34801561049e57600080fd5b506103046104ad366004611c3c565b610d52565b3480156104be57600080fd5b5061032f6104cd366004611c3c565b610d5d565b3480156104de57600080fd5b506102d7610d6a565b3480156104f357600080fd5b5061036660105481565b34801561050957600080fd5b5061032f610518366004611c3c565b610df8565b34801561052957600080fd5b50610366610538366004611a44565b610e05565b34801561054957600080fd5b5061032f610e54565b34801561055e57600080fd5b5061032f61056d366004611c3c565b610e68565b34801561057e57600080fd5b506102d7610e75565b34801561059357600080fd5b506008546001600160a01b0316610304565b3480156105b157600080fd5b5061032f6105c0366004611c3c565b610e82565b3480156105d157600080fd5b50610366600e5481565b3480156105e757600080fd5b506102d7610e8f565b3480156105fc57600080fd5b5061032f61060b366004611b4a565b610e9e565b61032f61061e366004611ace565b610f0a565b34801561062f57600080fd5b50610366600f5481565b34801561064557600080fd5b5061032f610654366004611bf3565b610f54565b34801561066557600080fd5b5061032f610674366004611b9e565b610f6f565b34801561068557600080fd5b506102d7610694366004611c3c565b610f91565b61032f6106a7366004611c3c565b61103f565b3480156106b857600080fd5b5061036660095481565b3480156106ce57600080fd5b5061032f6106dd366004611c3c565b6111f7565b3480156106ee57600080fd5b5061032f6106fd366004611b9e565b61134a565b34801561070e57600080fd5b5061032f61071d366004611b9e565b61136e565b34801561072e57600080fd5b506102ad61073d366004611a5f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077757600080fd5b5061032f610786366004611c3c565b611389565b34801561079757600080fd5b5061032f6107a6366004611a44565b6113f4565b3480156107b757600080fd5b5061032f6107c6366004611c3c565b61146a565b3480156107d757600080fd5b50600c546102ad90610100900460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061081b57506380ac58cd60e01b6001600160e01b03198316145b806108365750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606002805461084b90611df7565b80601f016020809104026020016040519081016040528092919081815260200182805461087790611df7565b80156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905090565b60006108d982611477565b6108f6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061091d82610d52565b9050336001600160a01b0382161461095657610939813361073d565b610956576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109ba61149e565b600c805491151563010000000263ff00000019909216919091179055565b600c546301000000900460ff1615610a0b5760405162461bcd60e51b8152600401610a0290611d00565b60405180910390fd5b60095481610a1c6001546000540390565b610a269190611da5565b1115610a445760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff16158015610a5f5750600c54610100900460ff16155b610aab5760405162461bcd60e51b815260206004820152601e60248201527f4d53473a205075626c696373616c65206973206e6f74206163746976652e00006044820152606401610a02565b600e54341015610afd5760405162461bcd60e51b815260206004820152601b60248201527f4d53473a20496e73756666696369656e74206c697665207965742e00000000006044820152606401610a02565b600f54610b0933610e05565b1115610b275760405162461bcd60e51b8152600401610a0290611d6e565b610b3133826114f8565b50565b6000610b3f82611512565b9050836001600160a01b0316816001600160a01b031614610b725760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610bbf57610ba2863361073d565b610bbf57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610be657604051633a954ecd60e21b815260040160405180910390fd5b8015610bf157600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610c7c5760018401600081815260046020526040902054610c7a576000548114610c7a5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b610ccd61149e565b600f55565b610cda61149e565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b31573d6000803e3d6000fd5b610d2e83838360405180602001604052806000815250610f0a565b505050565b610d3b61149e565b8051610d4e906011906020840190611909565b5050565b600061083682611512565b610d6561149e565b600e55565b60118054610d7790611df7565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390611df7565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b505050505081565b610e0061149e565b600955565b60006001600160a01b038216610e2e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610e5c61149e565b610e66600061157a565b565b610e7061149e565b600b55565b60128054610d7790611df7565b610e8a61149e565b600d55565b60606003805461084b90611df7565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f15848484610b34565b6001600160a01b0383163b15610f4e57610f31848484846115cc565b610f4e576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b610f5c61149e565b8051610d4e906012906020840190611909565b610f7761149e565b600c80549115156101000261ff0019909216919091179055565b600c5460609062010000900460ff166110365760128054610fb190611df7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdd90611df7565b801561102a5780601f10610fff5761010080835404028352916020019161102a565b820191906000526020600020905b81548152906001019060200180831161100d57829003601f168201915b50505050509050919050565b610836826116c4565b600c546301000000900460ff16156110695760405162461bcd60e51b8152600401610a0290611d00565b6009548161107a6001546000540390565b6110849190611da5565b11156110a25760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff161580156110bc5750600c54610100900460ff165b6111085760405162461bcd60e51b815260206004820152601b60248201527f4d53473a2050726573616c65206973206e6f74206163746976652e00000000006044820152606401610a02565b600a54816111196001546000540390565b6111239190611da5565b111561117b5760405162461bcd60e51b815260206004820152602160248201527f4d53473a2050726573616c65206d617820737570706c792065786365656465646044820152601760f91b6064820152608401610a02565b60105461118733610e05565b11156111a55760405162461bcd60e51b8152600401610a0290611d6e565b600d54341015610b275760405162461bcd60e51b815260206004820152601b60248201527f4d53473a20496e73756666696369656e74206c697665207965742e00000000006044820152606401610a02565b600c546301000000900460ff16156112215760405162461bcd60e51b8152600401610a0290611d00565b600954816112326001546000540390565b61123c9190611da5565b111561125a5760405162461bcd60e51b8152600401610a0290611d37565b600c5460ff166112ac5760405162461bcd60e51b815260206004820152601e60248201527f4d53473a204672656573616c65206973206e6f74206c697665207965742e00006044820152606401610a02565b600f546112b833610e05565b11156112d65760405162461bcd60e51b8152600401610a0290611d6e565b600b54816112e76001546000540390565b6112f19190611da5565b1115610b275760405162461bcd60e51b815260206004820152602260248201527f4d53473a204672656573616c65206d617820737570706c792065786365656465604482015261321760f11b6064820152608401610a02565b61135261149e565b600c8054911515620100000262ff000019909216919091179055565b61137661149e565b600c805460ff1916911515919091179055565b61139161149e565b600c546301000000900460ff16156113bb5760405162461bcd60e51b8152600401610a0290611d00565b600954816113cc6001546000540390565b6113d69190611da5565b1115610b275760405162461bcd60e51b8152600401610a0290611d37565b6113fc61149e565b6001600160a01b0381166114615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a02565b610b318161157a565b61147261149e565b601055565b6000805482108015610836575050600090815260046020526040902054600160e01b161590565b6008546001600160a01b03163314610e665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a02565b610d4e828260405180602001604052806000815250611748565b60008160005481101561156157600081815260046020526040902054600160e01b811661155f575b8061155857506000190160008181526004602052604090205461153a565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611601903390899088908890600401611cb0565b602060405180830381600087803b15801561161b57600080fd5b505af192505050801561164b575060408051601f3d908101601f1916820190925261164891810190611bd6565b60015b6116a6573d808015611679576040519150601f19603f3d011682016040523d82523d6000602084013e61167e565b606091505b50805161169e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606116cf82611477565b6116ec57604051630a14c4b560e41b815260040160405180910390fd5b60006116f66117b5565b90508051600014156117175760405180602001604052806000815250611558565b80611721846117c4565b604051602001611732929190611c81565b6040516020818303038152906040529392505050565b6117528383611812565b6001600160a01b0383163b15610d2e576000548281035b61177c60008683806001019450866115cc565b611799576040516368d2bf6b60e11b815260040160405180910390fd5b8181106117695781600054146117ae57600080fd5b5050505050565b60606011805461084b90611df7565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117fb57611800565b6117de565b50819003601f19909101908152919050565b600054816118335760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146118e257808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016118aa565b508161190057604051622e076360e81b815260040160405180910390fd5b60005550505050565b82805461191590611df7565b90600052602060002090601f016020900481019282611937576000855561197d565b82601f1061195057805160ff191683800117855561197d565b8280016001018555821561197d579182015b8281111561197d578251825591602001919060010190611962565b5061198992915061198d565b5090565b5b80821115611989576000815560010161198e565b600067ffffffffffffffff808411156119bd576119bd611e32565b604051601f8501601f19908116603f011681019082821181831017156119e5576119e5611e32565b816040528093508581528686860111156119fe57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611a2f57600080fd5b919050565b80358015158114611a2f57600080fd5b600060208284031215611a5657600080fd5b61155882611a18565b60008060408385031215611a7257600080fd5b611a7b83611a18565b9150611a8960208401611a18565b90509250929050565b600080600060608486031215611aa757600080fd5b611ab084611a18565b9250611abe60208501611a18565b9150604084013590509250925092565b60008060008060808587031215611ae457600080fd5b611aed85611a18565b9350611afb60208601611a18565b925060408501359150606085013567ffffffffffffffff811115611b1e57600080fd5b8501601f81018713611b2f57600080fd5b611b3e878235602084016119a2565b91505092959194509250565b60008060408385031215611b5d57600080fd5b611b6683611a18565b9150611a8960208401611a34565b60008060408385031215611b8757600080fd5b611b9083611a18565b946020939093013593505050565b600060208284031215611bb057600080fd5b61155882611a34565b600060208284031215611bcb57600080fd5b813561155881611e48565b600060208284031215611be857600080fd5b815161155881611e48565b600060208284031215611c0557600080fd5b813567ffffffffffffffff811115611c1c57600080fd5b8201601f81018413611c2d57600080fd5b6116bc848235602084016119a2565b600060208284031215611c4e57600080fd5b5035919050565b60008151808452611c6d816020860160208601611dcb565b601f01601f19169290920160200192915050565b60008351611c93818460208801611dcb565b835190830190611ca7818360208801611dcb565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ce390830184611c55565b9695505050505050565b6020815260006115586020830184611c55565b6020808252601b908201527f4d53473a2054686520636f6e7472616374206973207061757365640000000000604082015260600190565b60208082526019908201527f4d53473a204d617820737570706c792065786365656465642e00000000000000604082015260600190565b6020808252601b908201527f4d6178204d696e74207065722077616c6c657420726561636865640000000000604082015260600190565b60008219821115611dc657634e487b7160e01b600052601160045260246000fd5b500190565b60005b83811015611de6578181015183820152602001611dce565b83811115610f4e5750506000910152565b600181811c90821680611e0b57607f821691505b60208210811415611e2c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3157600080fdfea26469706673582212202434b301754e6f7e8c1674285b00e6caec94aeef27f49f907580a03a401f3e2f64736f6c63430008070033
Deployed Bytecode Sourcemap
55086:4856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21997:639;;;;;;;;;;-1:-1:-1;21997:639:0;;;;;:::i;:::-;;:::i;:::-;;;5903:14:1;;5896:22;5878:41;;5866:2;5851:18;21997:639:0;;;;;;;;22899:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29390:218::-;;;;;;;;;;-1:-1:-1;29390:218:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5201:32:1;;;5183:51;;5171:2;5156:18;29390:218:0;5037:203:1;28823:408:0;;;;;;:::i;:::-;;:::i;:::-;;59717:83;;;;;;;;;;-1:-1:-1;59717:83:0;;;;;:::i;:::-;;:::i;18650:323::-;;;;;;;;;;-1:-1:-1;18924:12:0;;18711:7;18908:13;:28;18650:323;;;10369:25:1;;;10357:2;10342:18;18650:323:0;10223:177:1;57148:509:0;;;;;;:::i;:::-;;:::i;33029:2825::-;;;;;;:::i;:::-;;:::i;55187:35::-;;;;;;;;;;;;;;;;58113:107;;;;;;;;;;-1:-1:-1;58113:107:0;;;;;:::i;:::-;;:::i;55441:39::-;;;;;;;;;;;;;;;;55229:36;;;;;;;;;;;;;;;;59825:114;;;:::i;35950:193::-;;;;;;:::i;:::-;;:::i;55289:27::-;;;;;;;;;;-1:-1:-1;55289:27:0;;;;;;;;55357:28;;;;;;;;;;-1:-1:-1;55357:28:0;;;;;;;;;;;59240:90;;;;;;;;;;-1:-1:-1;59240:90:0;;;;;:::i;:::-;;:::i;55392:26::-;;;;;;;;;;-1:-1:-1;55392:26:0;;;;;;;;;;;24292:152;;;;;;;;;;-1:-1:-1;24292:152:0;;;;;:::i;:::-;;:::i;58648:100::-;;;;;;;;;;-1:-1:-1;58648:100:0;;;;;:::i;:::-;;:::i;55664:80::-;;;;;;;;;;;;;:::i;55599:44::-;;;;;;;;;;;;;;;;57981:94;;;;;;;;;;-1:-1:-1;57981:94:0;;;;;:::i;:::-;;:::i;19834:233::-;;;;;;;;;;-1:-1:-1;19834:233:0;;;;;:::i;:::-;;:::i;2776:103::-;;;;;;;;;;;;;:::i;58382:104::-;;;;;;;;;;-1:-1:-1;58382:104:0;;;;;:::i;:::-;;:::i;55771:83::-;;;;;;;;;;;;;:::i;2128:87::-;;;;;;;;;;-1:-1:-1;2201:6:0;;-1:-1:-1;;;;;2201:6:0;2128:87;;58518:94;;;;;;;;;;-1:-1:-1;58518:94:0;;;;;:::i;:::-;;:::i;55487:41::-;;;;;;;;;;;;;;;;23075:104;;;;;;;;;;;;;:::i;29948:234::-;;;;;;;;;;-1:-1:-1;29948:234:0;;;;;:::i;:::-;;:::i;36741:407::-;;;;;;:::i;:::-;;:::i;55555:37::-;;;;;;;;;;;;;;;;59118:94;;;;;;;;;;-1:-1:-1;59118:94:0;;;;;:::i;:::-;;:::i;58888:85::-;;;;;;;;;;-1:-1:-1;58888:85:0;;;;;:::i;:::-;;:::i;59495:195::-;;;;;;;;;;-1:-1:-1;59495:195:0;;;;;:::i;:::-;;:::i;56505:611::-;;;;;;:::i;:::-;;:::i;55148:32::-;;;;;;;;;;;;;;;;55963:514;;;;;;;;;;-1:-1:-1;55963:514:0;;;;;:::i;:::-;;:::i;59001:87::-;;;;;;;;;;-1:-1:-1;59001:87:0;;;;;:::i;:::-;;:::i;58774:::-;;;;;;;;;;-1:-1:-1;58774:87:0;;;;;:::i;:::-;;:::i;30339:164::-;;;;;;;;;;-1:-1:-1;30339:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;30460:25:0;;;30436:4;30460:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30339:164;57681:259;;;;;;;;;;-1:-1:-1;57681:259:0;;;;;:::i;:::-;;:::i;3034:201::-;;;;;;;;;;-1:-1:-1;3034:201:0;;;;;:::i;:::-;;:::i;58226:121::-;;;;;;;;;;-1:-1:-1;58226:121:0;;;;;:::i;:::-;;:::i;55323:27::-;;;;;;;;;;-1:-1:-1;55323:27:0;;;;;;;;;;;21997:639;22082:4;-1:-1:-1;;;;;;;;;22406:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;22483:25:0;;;22406:102;:179;;;-1:-1:-1;;;;;;;;;;22560:25:0;;;22406:179;22386:199;21997:639;-1:-1:-1;;21997:639:0:o;22899:100::-;22953:13;22986:5;22979:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22899:100;:::o;29390:218::-;29466:7;29491:16;29499:7;29491;:16::i;:::-;29486:64;;29516:34;;-1:-1:-1;;;29516:34:0;;;;;;;;;;;29486:64;-1:-1:-1;29570:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;29570:30:0;;29390:218::o;28823:408::-;28912:13;28928:16;28936:7;28928;:16::i;:::-;28912:32;-1:-1:-1;53156:10:0;-1:-1:-1;;;;;28961:28:0;;;28957:175;;29009:44;29026:5;53156:10;30339:164;:::i;29009:44::-;29004:128;;29081:35;;-1:-1:-1;;;29081:35:0;;;;;;;;;;;29004:128;29144:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;29144:35:0;-1:-1:-1;;;;;29144:35:0;;;;;;;;;29195:28;;29144:24;;29195:28;;;;;;;28901:330;28823:408;;:::o;59717:83::-;2014:13;:11;:13::i;:::-;59777:6:::1;:15:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;59777:15:0;;::::1;::::0;;;::::1;::::0;;59717:83::o;57148:509::-;57230:6;;;;;;;57229:7;57221:47;;;;-1:-1:-1;;;57221:47:0;;;;;;;:::i;:::-;;;;;;;;;57318:9;;57303:11;57287:13;18924:12;;18711:7;18908:13;:28;;18650:323;57287:13;:27;;;;:::i;:::-;:40;;57279:78;;;;-1:-1:-1;;;57279:78:0;;;;;;;:::i;:::-;57377:8;;;;57376:9;:21;;;;-1:-1:-1;57390:7:0;;;;;;;57389:8;57376:21;57368:64;;;;-1:-1:-1;;;57368:64:0;;8551:2:1;57368:64:0;;;8533:21:1;8590:2;8570:18;;;8563:30;8629:32;8609:18;;;8602:60;8679:18;;57368:64:0;8349:354:1;57368:64:0;57464:14;;57451:9;:27;;57443:67;;;;-1:-1:-1;;;57443:67:0;;7478:2:1;57443:67:0;;;7460:21:1;7517:2;7497:18;;;7490:30;7556:29;7536:18;;;7529:57;7603:18;;57443:67:0;7276:351:1;57443:67:0;57554:18;;57529:21;57539:10;57529:9;:21::i;:::-;:43;;57521:83;;;;-1:-1:-1;;;57521:83:0;;;;;;;:::i;:::-;57615:34;57625:10;57637:11;57615:9;:34::i;:::-;57148:509;:::o;33029:2825::-;33171:27;33201;33220:7;33201:18;:27::i;:::-;33171:57;;33286:4;-1:-1:-1;;;;;33245:45:0;33261:19;-1:-1:-1;;;;;33245:45:0;;33241:86;;33299:28;;-1:-1:-1;;;33299:28:0;;;;;;;;;;;33241:86;33341:27;32137:24;;;:15;:24;;;;;32365:26;;53156:10;31762:30;;;-1:-1:-1;;;;;31455:28:0;;31740:20;;;31737:56;33527:180;;33620:43;33637:4;53156:10;30339:164;:::i;33620:43::-;33615:92;;33672:35;;-1:-1:-1;;;33672:35:0;;;;;;;;;;;33615:92;-1:-1:-1;;;;;33724:16:0;;33720:52;;33749:23;;-1:-1:-1;;;33749:23:0;;;;;;;;;;;33720:52;33921:15;33918:160;;;34061:1;34040:19;34033:30;33918:160;-1:-1:-1;;;;;34458:24:0;;;;;;;:18;:24;;;;;;34456:26;;-1:-1:-1;;34456:26:0;;;34527:22;;;;;;;;;34525:24;;-1:-1:-1;34525:24:0;;;27681:11;27656:23;27652:41;27639:63;-1:-1:-1;;;27639:63:0;34820:26;;;;:17;:26;;;;;:175;-1:-1:-1;;;35115:47:0;;35111:627;;35220:1;35210:11;;35188:19;35343:30;;;:17;:30;;;;;;35339:384;;35481:13;;35466:11;:28;35462:242;;35628:30;;;;:17;:30;;;;;:52;;;35462:242;35169:569;35111:627;35785:7;35781:2;-1:-1:-1;;;;;35766:27:0;35775:4;-1:-1:-1;;;;;35766:27:0;;;;;;;;;;;33160:2694;;;33029:2825;;;:::o;58113:107::-;2014:13;:11;:13::i;:::-;58185:18:::1;:27:::0;58113:107::o;59825:114::-;2014:13;:11;:13::i;:::-;2201:6;;59883:48:::1;::::0;-1:-1:-1;;;;;2201:6:0;;;;59909:21:::1;59883:48:::0;::::1;;;::::0;::::1;::::0;;;59909:21;2201:6;59883:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;35950:193:::0;36096:39;36113:4;36119:2;36123:7;36096:39;;;;;;;;;;;;:16;:39::i;:::-;35950:193;;;:::o;59240:90::-;2014:13;:11;:13::i;:::-;59308:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;59240:90:::0;:::o;24292:152::-;24364:7;24407:27;24426:7;24407:18;:27::i;58648:100::-;2014:13;:11;:13::i;:::-;58718:14:::1;:22:::0;58648:100::o;55664:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57981:94::-;2014:13;:11;:13::i;:::-;58048:9:::1;:19:::0;57981:94::o;19834:233::-;19906:7;-1:-1:-1;;;;;19930:19:0;;19926:60;;19958:28;;-1:-1:-1;;;19958:28:0;;;;;;;;;;;19926:60;-1:-1:-1;;;;;;20004:25:0;;;;;:18;:25;;;;;;13993:13;20004:55;;19834:233::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;58382:104::-;2014:13;:11;:13::i;:::-;58454:14:::1;:24:::0;58382:104::o;55771:83::-;;;;;;;:::i;58518:94::-;2014:13;:11;:13::i;:::-;58585:11:::1;:19:::0;58518:94::o;23075:104::-;23131:13;23164:7;23157:14;;;;;:::i;29948:234::-;53156:10;30043:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;30043:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;30043:60:0;;;;;;;;;;30119:55;;5878:41:1;;;30043:49:0;;53156:10;30119:55;;5851:18:1;30119:55:0;;;;;;;29948:234;;:::o;36741:407::-;36916:31;36929:4;36935:2;36939:7;36916:12;:31::i;:::-;-1:-1:-1;;;;;36962:14:0;;;:19;36958:183;;37001:56;37032:4;37038:2;37042:7;37051:5;37001:30;:56::i;:::-;36996:145;;37085:40;;-1:-1:-1;;;37085:40:0;;;;;;;;;;;36996:145;36741:407;;;;:::o;59118:94::-;2014:13;:11;:13::i;:::-;59188:16;;::::1;::::0;:9:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;58888:85::-:0;2014:13;:11;:13::i;:::-;58949:7:::1;:16:::0;;;::::1;;;;-1:-1:-1::0;;58949:16:0;;::::1;::::0;;;::::1;::::0;;58888:85::o;59495:195::-;59590:8;;59560:13;;59590:8;;;;;59586:57;;59622:9;59615:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59495:195;;;:::o;59586:57::-;59662:23;59677:7;59662:14;:23::i;56505:611::-;56584:6;;;;;;;56583:7;56575:47;;;;-1:-1:-1;;;56575:47:0;;;;;;;:::i;:::-;56672:9;;56657:11;56641:13;18924:12;;18711:7;18908:13;:28;;18650:323;56641:13;:27;;;;:::i;:::-;:40;;56633:78;;;;-1:-1:-1;;;56633:78:0;;;;;;;:::i;:::-;56731:8;;;;56730:9;:20;;;;-1:-1:-1;56743:7:0;;;;;;;56730:20;56722:60;;;;-1:-1:-1;;;56722:60:0;;7834:2:1;56722:60:0;;;7816:21:1;7873:2;7853:18;;;7846:30;7912:29;7892:18;;;7885:57;7959:18;;56722:60:0;7632:351:1;56722:60:0;56832:13;;56817:11;56801:13;18924:12;;18711:7;18908:13;:28;;18650:323;56801:13;:27;;;;:::i;:::-;:44;;56793:90;;;;-1:-1:-1;;;56793:90:0;;9264:2:1;56793:90:0;;;9246:21:1;9303:2;9283:18;;;9276:30;9342:34;9322:18;;;9315:62;-1:-1:-1;;;9393:18:1;;;9386:31;9434:19;;56793:90:0;9062:397:1;56793:90:0;56927:25;;56902:21;56912:10;56902:9;:21::i;:::-;:50;;56894:90;;;;-1:-1:-1;;;56894:90:0;;;;;;;:::i;:::-;57018:11;;57005:9;:24;;56997:64;;;;-1:-1:-1;;;56997:64:0;;7478:2:1;56997:64:0;;;7460:21:1;7517:2;7497:18;;;7490:30;7556:29;7536:18;;;7529:57;7603:18;;56997:64:0;7276:351:1;55963:514:0;56035:6;;;;;;;56034:7;56026:47;;;;-1:-1:-1;;;56026:47:0;;;;;;;:::i;:::-;56123:9;;56108:11;56092:13;18924:12;;18711:7;18908:13;:28;;18650:323;56092:13;:27;;;;:::i;:::-;:40;;56084:78;;;;-1:-1:-1;;;56084:78:0;;;;;;;:::i;:::-;56181:8;;;;56173:51;;;;-1:-1:-1;;;56173:51:0;;6356:2:1;56173:51:0;;;6338:21:1;6395:2;6375:18;;;6368:30;6434:32;6414:18;;;6407:60;6484:18;;56173:51:0;6154:354:1;56173:51:0;56268:18;;56243:21;56253:10;56243:9;:21::i;:::-;:43;;56235:83;;;;-1:-1:-1;;;56235:83:0;;;;;;;:::i;:::-;56368:14;;56353:11;56337:13;18924:12;;18711:7;18908:13;:28;;18650:323;56337:13;:27;;;;:::i;:::-;:45;;56329:93;;;;-1:-1:-1;;;56329:93:0;;10022:2:1;56329:93:0;;;10004:21:1;10061:2;10041:18;;;10034:30;10100:34;10080:18;;;10073:62;-1:-1:-1;;;10151:18:1;;;10144:32;10193:19;;56329:93:0;9820:398:1;59001:87:0;2014:13;:11;:13::i;:::-;59063:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;59063:17:0;;::::1;::::0;;;::::1;::::0;;59001:87::o;58774:::-;2014:13;:11;:13::i;:::-;58836:8:::1;:17:::0;;-1:-1:-1;;58836:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58774:87::o;57681:259::-;2014:13;:11;:13::i;:::-;57760:6:::1;::::0;;;::::1;;;57759:7;57751:47;;;;-1:-1:-1::0;;;57751:47:0::1;;;;;;;:::i;:::-;57848:9;;57833:11;57817:13;18924:12:::0;;18711:7;18908:13;:28;;18650:323;57817:13:::1;:27;;;;:::i;:::-;:40;;57809:78;;;;-1:-1:-1::0;;;57809:78:0::1;;;;;;;:::i;3034:201::-:0;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;3123:22:0;::::1;3115:73;;;::::0;-1:-1:-1;;;3115:73:0;;6715:2:1;3115:73:0::1;::::0;::::1;6697:21:1::0;6754:2;6734:18;;;6727:30;6793:34;6773:18;;;6766:62;-1:-1:-1;;;6844:18:1;;;6837:36;6890:19;;3115:73:0::1;6513:402:1::0;3115:73:0::1;3199:28;3218:8;3199:18;:28::i;58226:121::-:0;2014:13;:11;:13::i;:::-;58305:25:::1;:34:::0;58226:121::o;30761:282::-;30826:4;30916:13;;30906:7;:23;30863:153;;;;-1:-1:-1;;30967:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;30967:44:0;:49;;30761:282::o;2293:132::-;2201:6;;-1:-1:-1;;;;;2201:6:0;53156:10;2357:23;2349:68;;;;-1:-1:-1;;;2349:68:0;;8190:2:1;2349:68:0;;;8172:21:1;;;8209:18;;;8202:30;8268:34;8248:18;;;8241:62;8320:18;;2349:68:0;7988:356:1;46901:112:0;46978:27;46988:2;46992:8;46978:27;;;;;;;;;;;;:9;:27::i;25447:1275::-;25514:7;25549;25651:13;;25644:4;:20;25640:1015;;;25689:14;25706:23;;;:17;:23;;;;;;-1:-1:-1;;;25795:24:0;;25791:845;;26460:113;26467:11;26460:113;;-1:-1:-1;;;26538:6:0;26520:25;;;;:17;:25;;;;;;26460:113;;;26606:6;25447:1275;-1:-1:-1;;;25447:1275:0:o;25791:845::-;25666:989;25640:1015;26683:31;;-1:-1:-1;;;26683:31:0;;;;;;;;;;;3395:191;3488:6;;;-1:-1:-1;;;;;3505:17:0;;;-1:-1:-1;;;;;;3505:17:0;;;;;;;3538:40;;3488:6;;;3505:17;3488:6;;3538:40;;3469:16;;3538:40;3458:128;3395:191;:::o;39232:716::-;39416:88;;-1:-1:-1;;;39416:88:0;;39395:4;;-1:-1:-1;;;;;39416:45:0;;;;;:88;;53156:10;;39483:4;;39489:7;;39498:5;;39416:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39416:88:0;;;;;;;;-1:-1:-1;;39416:88:0;;;;;;;;;;;;:::i;:::-;;;39412:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39699:13:0;;39695:235;;39745:40;;-1:-1:-1;;;39745:40:0;;;;;;;;;;;39695:235;39888:6;39882:13;39873:6;39869:2;39865:15;39858:38;39412:529;-1:-1:-1;;;;;;39575:64:0;-1:-1:-1;;;39575:64:0;;-1:-1:-1;39412:529:0;39232:716;;;;;;:::o;23285:318::-;23358:13;23389:16;23397:7;23389;:16::i;:::-;23384:59;;23414:29;;-1:-1:-1;;;23414:29:0;;;;;;;;;;;23384:59;23456:21;23480:10;:8;:10::i;:::-;23456:34;;23514:7;23508:21;23533:1;23508:26;;:87;;;;;;;;;;;;;;;;;23561:7;23570:18;23580:7;23570:9;:18::i;:::-;23544:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23501:94;23285:318;-1:-1:-1;;;23285:318:0:o;46128:689::-;46259:19;46265:2;46269:8;46259:5;:19::i;:::-;-1:-1:-1;;;;;46320:14:0;;;:19;46316:483;;46360:11;46374:13;46422:14;;;46455:233;46486:62;46525:1;46529:2;46533:7;;;;;;46542:5;46486:30;:62::i;:::-;46481:167;;46584:40;;-1:-1:-1;;;46584:40:0;;;;;;;;;;;46481:167;46683:3;46675:5;:11;46455:233;;46770:3;46753:13;;:20;46749:34;;46775:8;;;46749:34;46341:458;;46128:689;;;:::o;59363:100::-;59415:13;59448:7;59441:14;;;;;:::i;53276:1745::-;53341:17;53775:4;53768;53762:11;53758:22;53867:1;53861:4;53854:15;53942:4;53939:1;53935:12;53928:19;;;54024:1;54019:3;54012:14;54128:3;54367:5;54349:428;54415:1;54410:3;54406:11;54399:18;;54586:2;54580:4;54576:13;54572:2;54568:22;54563:3;54555:36;54680:2;54670:13;;;54737:25;;54755:5;;54737:25;54349:428;;;-1:-1:-1;54807:13:0;;;-1:-1:-1;;54922:14:0;;;54984:19;;;54922:14;53276:1745;-1:-1:-1;53276:1745:0:o;40410:2966::-;40483:20;40506:13;40534;40530:44;;40556:18;;-1:-1:-1;;;40556:18:0;;;;;;;;;;;40530:44;-1:-1:-1;;;;;41062:22:0;;;;;;:18;:22;;;;14131:2;41062:22;;;:71;;41100:32;41088:45;;41062:71;;;41376:31;;;:17;:31;;;;;-1:-1:-1;28112:15:0;;28086:24;28082:46;27681:11;27656:23;27652:41;27649:52;27639:63;;41376:173;;41611:23;;;;41376:31;;41062:22;;42376:25;41062:22;;42229:335;42890:1;42876:12;42872:20;42830:346;42931:3;42922:7;42919:16;42830:346;;43149:7;43139:8;43136:1;43109:25;43106:1;43103;43098:59;42984:1;42971:15;42830:346;;;-1:-1:-1;43209:13:0;43205:45;;43231:19;;-1:-1:-1;;;43231:19:0;;;;;;;;;;;43205:45;43267:13;:19;-1:-1:-1;35950:193:0;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:245::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3322:9;3309:23;3341:30;3365:5;3341:30;:::i;3406:249::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3576:9;3570:16;3595:30;3619:5;3595:30;:::i;3660:450::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;3871:18;3863:6;3860:30;3857:50;;;3903:1;3900;3893:12;3857:50;3926:22;;3979:4;3971:13;;3967:27;-1:-1:-1;3957:55:1;;4008:1;4005;3998:12;3957:55;4031:73;4096:7;4091:2;4078:16;4073:2;4069;4065:11;4031:73;:::i;4115:180::-;4174:6;4227:2;4215:9;4206:7;4202:23;4198:32;4195:52;;;4243:1;4240;4233:12;4195:52;-1:-1:-1;4266:23:1;;4115:180;-1:-1:-1;4115:180:1:o;4300:257::-;4341:3;4379:5;4373:12;4406:6;4401:3;4394:19;4422:63;4478:6;4471:4;4466:3;4462:14;4455:4;4448:5;4444:16;4422:63;:::i;:::-;4539:2;4518:15;-1:-1:-1;;4514:29:1;4505:39;;;;4546:4;4501:50;;4300:257;-1:-1:-1;;4300:257:1:o;4562:470::-;4741:3;4779:6;4773:13;4795:53;4841:6;4836:3;4829:4;4821:6;4817:17;4795:53;:::i;:::-;4911:13;;4870:16;;;;4933:57;4911:13;4870:16;4967:4;4955:17;;4933:57;:::i;:::-;5006:20;;4562:470;-1:-1:-1;;;;4562:470:1:o;5245:488::-;-1:-1:-1;;;;;5514:15:1;;;5496:34;;5566:15;;5561:2;5546:18;;5539:43;5613:2;5598:18;;5591:34;;;5661:3;5656:2;5641:18;;5634:31;;;5439:4;;5682:45;;5707:19;;5699:6;5682:45;:::i;:::-;5674:53;5245:488;-1:-1:-1;;;;;;5245:488:1:o;5930:219::-;6079:2;6068:9;6061:21;6042:4;6099:44;6139:2;6128:9;6124:18;6116:6;6099:44;:::i;6920:351::-;7122:2;7104:21;;;7161:2;7141:18;;;7134:30;7200:29;7195:2;7180:18;;7173:57;7262:2;7247:18;;6920:351::o;8708:349::-;8910:2;8892:21;;;8949:2;8929:18;;;8922:30;8988:27;8983:2;8968:18;;8961:55;9048:2;9033:18;;8708:349::o;9464:351::-;9666:2;9648:21;;;9705:2;9685:18;;;9678:30;9744:29;9739:2;9724:18;;9717:57;9806:2;9791:18;;9464:351::o;10405:225::-;10445:3;10476:1;10472:6;10469:1;10466:13;10463:136;;;10521:10;10516:3;10512:20;10509:1;10502:31;10556:4;10553:1;10546:15;10584:4;10581:1;10574:15;10463:136;-1:-1:-1;10615:9:1;;10405:225::o;10635:258::-;10707:1;10717:113;10731:6;10728:1;10725:13;10717:113;;;10807:11;;;10801:18;10788:11;;;10781:39;10753:2;10746:10;10717:113;;;10848:6;10845:1;10842:13;10839:48;;;-1:-1:-1;;10883:1:1;10865:16;;10858:27;10635:258::o;10898:380::-;10977:1;10973:12;;;;11020;;;11041:61;;11095:4;11087:6;11083:17;11073:27;;11041:61;11148:2;11140:6;11137:14;11117:18;11114:38;11111:161;;;11194:10;11189:3;11185:20;11182:1;11175:31;11229:4;11226:1;11219:15;11257:4;11254:1;11247:15;11111:161;;10898:380;;;:::o;11283:127::-;11344:10;11339:3;11335:20;11332:1;11325:31;11375:4;11372:1;11365:15;11399:4;11396:1;11389:15;11415:131;-1:-1:-1;;;;;;11489:32:1;;11479:43;;11469:71;;11536:1;11533;11526:12
Swarm Source
ipfs://2434b301754e6f7e8c1674285b00e6caec94aeef27f49f907580a03a401f3e2f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.