ERC-721
Overview
Max Total Supply
879 DW
Holders
147
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
16 DWLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DalleWalle
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-17 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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.2 // 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(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * 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; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @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; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the * zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev 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.2 // 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 { // Reference type for token approval. 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 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 { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _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]`. 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 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 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 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. 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`. ) 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 0x80 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 0x20 + 3 * 0x20 = 0x80. str := add(mload(0x40), 0x80) // Update the free memory pointer to allocate. mstore(0x40, str) // 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: DalleWalle.sol pragma solidity >=0.8.9 <0.9.0; contract DalleWalle is ERC721A, Ownable, ReentrancyGuard { using Strings for uint; string public uriPrefix = ''; string public uriSuffix = '.json'; string public hiddenMetadataUri; uint public cost = 0.02 ether; uint public MAXSUPPLY = 999; uint public FREESUPPLY = 750; uint public MAXPERWALLET = 5; uint public maxMintAmountPerTx = 5; bool public paused = true; bool public revealed = true; mapping(address => bool) public freeMintClaimed; constructor( string memory _tokenName, string memory _tokenSymbol, string memory _hiddenMetadataUri ) ERC721A(_tokenName, _tokenSymbol) { setHiddenMetadataUri(_hiddenMetadataUri); } // ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~ modifier mintCompliance(uint _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, 'Invalid mint amount!'); require(_mintAmount + balanceOf(_msgSender()) <= MAXPERWALLET, 'Only two allowed per wallet!'); require(totalSupply() + _mintAmount <= MAXSUPPLY, 'Max supply exceeded!'); _; } modifier mintPriceCompliance(uint _mintAmount) { if (freeMintClaimed[_msgSender()] || totalSupply() >= FREESUPPLY) { require(msg.value >= cost * _mintAmount, 'Insufficient funds!'); } _; } // ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~ function mint(uint _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(!paused, 'The contract is paused!'); freeMintClaimed[_msgSender()] = true; _safeMint(_msgSender(), _mintAmount); } function mintForAddress(uint _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_receiver, _mintAmount); } // ~~~~~~~~~~~~~~~~~~~~ Various Checks ~~~~~~~~~~~~~~~~~~~~ function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function tokenURI(uint _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token'); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : 'QmXi7Gpqk2NHh7Y1vYxPzrDJxsinrPR4Fzh4mtghkR7Q5T'; } // ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~ function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setFreeSupply(uint _freeQty) public onlyOwner { FREESUPPLY = _freeQty; } // ~~~~~~~~~~~~~~~~~~~~ Withdraw Functions ~~~~~~~~~~~~~~~~~~~~ function withdraw() public onlyOwner nonReentrant { (bool os, ) = payable(owner()).call{value: address(this).balance}(''); require(os); } /* */ }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","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":[],"name":"FREESUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXPERWALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"hiddenMetadataUri","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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeQty","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a9081620000249190620005a3565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90816200006b9190620005a3565b5066470de4df820000600d556103e7600e556102ee600f55600560105560056011556001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000d057600080fd5b5060405162004164380380620041648339818101604052810190620000f69190620007ee565b82828160029081620001099190620005a3565b5080600390816200011b9190620005a3565b506200012c6200017660201b60201c565b600081905550505062000154620001486200017b60201b60201c565b6200018360201b60201c565b60016009819055506200016d816200024960201b60201c565b5050506200092a565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002596200026e60201b60201c565b80600c90816200026a9190620005a3565b5050565b6200027e6200017b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a4620002ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f49062000908565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ab57607f821691505b602082108103620003c157620003c062000363565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200042b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003ec565b620004378683620003ec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004846200047e62000478846200044f565b62000459565b6200044f565b9050919050565b6000819050919050565b620004a08362000463565b620004b8620004af826200048b565b848454620003f9565b825550505050565b600090565b620004cf620004c0565b620004dc81848462000495565b505050565b5b818110156200050457620004f8600082620004c5565b600181019050620004e2565b5050565b601f82111562000553576200051d81620003c7565b6200052884620003dc565b8101602085101562000538578190505b620005506200054785620003dc565b830182620004e1565b50505b505050565b600082821c905092915050565b6000620005786000198460080262000558565b1980831691505092915050565b600062000593838362000565565b9150826002028217905092915050565b620005ae8262000329565b67ffffffffffffffff811115620005ca57620005c962000334565b5b620005d6825462000392565b620005e382828562000508565b600060209050601f8311600181146200061b576000841562000606578287015190505b62000612858262000585565b86555062000682565b601f1984166200062b86620003c7565b60005b8281101562000655578489015182556001820191506020850194506020810190506200062e565b8683101562000675578489015162000671601f89168262000565565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006c482620006a8565b810181811067ffffffffffffffff82111715620006e657620006e562000334565b5b80604052505050565b6000620006fb6200068a565b9050620007098282620006b9565b919050565b600067ffffffffffffffff8211156200072c576200072b62000334565b5b6200073782620006a8565b9050602081019050919050565b60005b838110156200076457808201518184015260208101905062000747565b60008484015250505050565b60006200078762000781846200070e565b620006ef565b905082815260208101848484011115620007a657620007a5620006a3565b5b620007b384828562000744565b509392505050565b600082601f830112620007d357620007d26200069e565b5b8151620007e584826020860162000770565b91505092915050565b6000806000606084860312156200080a576200080962000694565b5b600084015167ffffffffffffffff8111156200082b576200082a62000699565b5b6200083986828701620007bb565b935050602084015167ffffffffffffffff8111156200085d576200085c62000699565b5b6200086b86828701620007bb565b925050604084015167ffffffffffffffff8111156200088f576200088e62000699565b5b6200089d86828701620007bb565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008f0602083620008a7565b9150620008fd82620008b8565b602082019050919050565b600060208201905081810360008301526200092381620008e1565b9050919050565b61382a806200093a6000396000f3fe6080604052600436106102305760003560e01c806370a082311161012e578063a45ba8e7116100ab578063e0ec7c361161006f578063e0ec7c36146107f6578063e985e9c514610833578063efbd73f414610870578063f2fde38b14610899578063f676308a146108c257610230565b8063a45ba8e714610713578063b071401b1461073e578063b88d4fde14610767578063c87b56dd14610790578063e0a80853146107cd57610230565b806394354fd0116100f257806394354fd01461064d57806395d89b41146106785780639dbc61fa146106a3578063a0712d68146106ce578063a22cb465146106ea57610230565b806370a082311461057a578063715018a6146105b7578063758b4e86146105ce5780637ec4a659146105f95780638da5cb5b1461062257610230565b806323b872dd116101bc578063518302271161018057806351830227146104915780635503a0e8146104bc5780635c975abb146104e757806362b99ad4146105125780636352211e1461053d57610230565b806323b872dd146103d65780633ccfd60b146103ff57806342842e0e1461041657806344a0d68a1461043f5780634fdd43cb1461046857610230565b8063095ea7b311610203578063095ea7b31461030557806313faede61461032e57806316ba10e01461035957806316c38b3c1461038257806318160ddd146103ab57610230565b806301ffc9a71461023557806304cb229e1461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612619565b6108eb565b6040516102699190612661565b60405180910390f35b34801561027e57600080fd5b5061028761097d565b6040516102949190612695565b60405180910390f35b3480156102a957600080fd5b506102b2610983565b6040516102bf9190612740565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea919061278e565b610a15565b6040516102fc91906127fc565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190612843565b610a94565b005b34801561033a57600080fd5b50610343610bd8565b6040516103509190612695565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906129b8565b610bde565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612a2d565b610bf9565b005b3480156103b757600080fd5b506103c0610c1e565b6040516103cd9190612695565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612a5a565b610c35565b005b34801561040b57600080fd5b50610414610f57565b005b34801561042257600080fd5b5061043d60048036038101906104389190612a5a565b611034565b005b34801561044b57600080fd5b506104666004803603810190610461919061278e565b611054565b005b34801561047457600080fd5b5061048f600480360381019061048a91906129b8565b611066565b005b34801561049d57600080fd5b506104a6611081565b6040516104b39190612661565b60405180910390f35b3480156104c857600080fd5b506104d1611094565b6040516104de9190612740565b60405180910390f35b3480156104f357600080fd5b506104fc611122565b6040516105099190612661565b60405180910390f35b34801561051e57600080fd5b50610527611135565b6040516105349190612740565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061278e565b6111c3565b60405161057191906127fc565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612aad565b6111d5565b6040516105ae9190612695565b60405180910390f35b3480156105c357600080fd5b506105cc61128d565b005b3480156105da57600080fd5b506105e36112a1565b6040516105f09190612695565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b91906129b8565b6112a7565b005b34801561062e57600080fd5b506106376112c2565b60405161064491906127fc565b60405180910390f35b34801561065957600080fd5b506106626112ec565b60405161066f9190612695565b60405180910390f35b34801561068457600080fd5b5061068d6112f2565b60405161069a9190612740565b60405180910390f35b3480156106af57600080fd5b506106b8611384565b6040516106c59190612695565b60405180910390f35b6106e860048036038101906106e3919061278e565b61138a565b005b3480156106f657600080fd5b50610711600480360381019061070c9190612ada565b611616565b005b34801561071f57600080fd5b5061072861178d565b6040516107359190612740565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061278e565b61181b565b005b34801561077357600080fd5b5061078e60048036038101906107899190612bbb565b61182d565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061278e565b6118a0565b6040516107c49190612740565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190612a2d565b611a01565b005b34801561080257600080fd5b5061081d60048036038101906108189190612aad565b611a26565b60405161082a9190612661565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190612c3e565b611a46565b6040516108679190612661565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190612c7e565b611ada565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190612aad565b611bf9565b005b3480156108ce57600080fd5b506108e960048036038101906108e4919061278e565b611c7c565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109765750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600f5481565b60606002805461099290612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546109be90612ced565b8015610a0b5780601f106109e057610100808354040283529160200191610a0b565b820191906000526020600020905b8154815290600101906020018083116109ee57829003601f168201915b5050505050905090565b6000610a2082611c8e565b610a56576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9f826111c3565b90508073ffffffffffffffffffffffffffffffffffffffff16610ac0611ced565b73ffffffffffffffffffffffffffffffffffffffff1614610b2357610aec81610ae7611ced565b611a46565b610b22576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610be6611cf5565b80600b9081610bf59190612eca565b5050565b610c01611cf5565b80601260006101000a81548160ff02191690831515021790555050565b6000610c28611d73565b6001546000540303905090565b6000610c4082611d78565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cb384611e44565b91509150610cc98187610cc4611ced565b611e6b565b610d1557610cde86610cd9611ced565b611a46565b610d14576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d7b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d888686866001611eaf565b8015610d9357600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e6185610e3d888887611eb5565b7c020000000000000000000000000000000000000000000000000000000017611edd565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610ee75760006001850190506000600460008381526020019081526020016000205403610ee5576000548114610ee4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f4f8686866001611f08565b505050505050565b610f5f611cf5565b600260095403610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90612fe8565b60405180910390fd5b60026009819055506000610fb66112c2565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fd990613039565b60006040518083038185875af1925050503d8060008114611016576040519150601f19603f3d011682016040523d82523d6000602084013e61101b565b606091505b505090508061102957600080fd5b506001600981905550565b61104f8383836040518060200160405280600081525061182d565b505050565b61105c611cf5565b80600d8190555050565b61106e611cf5565b80600c908161107d9190612eca565b5050565b601260019054906101000a900460ff1681565b600b80546110a190612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546110cd90612ced565b801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a805461114290612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461116e90612ced565b80156111bb5780601f10611190576101008083540402835291602001916111bb565b820191906000526020600020905b81548152906001019060200180831161119e57829003601f168201915b505050505081565b60006111ce82611d78565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361123c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611295611cf5565b61129f6000611f0e565b565b600e5481565b6112af611cf5565b80600a90816112be9190612eca565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606003805461130190612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461132d90612ced565b801561137a5780601f1061134f5761010080835404028352916020019161137a565b820191906000526020600020905b81548152906001019060200180831161135d57829003601f168201915b5050505050905090565b60105481565b8060008111801561139d57506011548111155b6113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d39061309a565b60405180910390fd5b6010546113ef6113ea611fd4565b6111d5565b826113fa91906130e9565b111561143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613169565b60405180910390fd5b600e5481611447610c1e565b61145191906130e9565b1115611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906131d5565b60405180910390fd5b816013600061149f611fd4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114fb5750600f546114f8610c1e565b10155b156115515780600d5461150e91906131f5565b341015611550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115479061329b565b60405180910390fd5b5b601260009054906101000a900460ff16156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613307565b60405180910390fd5b6001601360006115af611fd4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161161160b611fd4565b84611fdc565b505050565b61161e611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611682576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061168f611ced565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661173c611ced565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117819190612661565b60405180910390a35050565b600c805461179a90612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546117c690612ced565b80156118135780601f106117e857610100808354040283529160200191611813565b820191906000526020600020905b8154815290600101906020018083116117f657829003601f168201915b505050505081565b611823611cf5565b8060118190555050565b611838848484610c35565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461189a5761186384848484611ffa565b611899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606118ab82611c8e565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613399565b60405180910390fd5b60001515601260019054906101000a900460ff1615150361199757600c805461191290612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461193e90612ced565b801561198b5780601f106119605761010080835404028352916020019161198b565b820191906000526020600020905b81548152906001019060200180831161196e57829003601f168201915b505050505090506119fc565b60006119a161214a565b905060008151116119ca576040518060600160405280602e81526020016137c7602e91396119f8565b806119d4846121dc565b600b6040516020016119e893929190613478565b6040516020818303038152906040525b9150505b919050565b611a09611cf5565b80601260016101000a81548160ff02191690831515021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611aed57506011548111155b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239061309a565b60405180910390fd5b601054611b3f611b3a611fd4565b6111d5565b82611b4a91906130e9565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613169565b60405180910390fd5b600e5481611b97610c1e565b611ba191906130e9565b1115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906131d5565b60405180910390fd5b611bea611cf5565b611bf48284611fdc565b505050565b611c01611cf5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061351b565b60405180910390fd5b611c7981611f0e565b50565b611c84611cf5565b80600f8190555050565b600081611c99611d73565b11158015611ca8575060005482105b8015611ce6575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611cfd611fd4565b73ffffffffffffffffffffffffffffffffffffffff16611d1b6112c2565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890613587565b60405180910390fd5b565b600090565b60008082905080611d87611d73565b11611e0d57600054811015611e0c5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611e0a575b60008103611e00576004600083600190039350838152602001908152602001600020549050611dd6565b8092505050611e3f565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611ecc86868461233c565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b611ff6828260405180602001604052806000815250612345565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612020611ced565b8786866040518563ffffffff1660e01b815260040161204294939291906135fc565b6020604051808303816000875af192505050801561207e57506040513d601f19601f8201168201806040525081019061207b919061365d565b60015b6120f7573d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5060008151036120ef576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461215990612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461218590612ced565b80156121d25780601f106121a7576101008083540402835291602001916121d2565b820191906000526020600020905b8154815290600101906020018083116121b557829003601f168201915b5050505050905090565b606060008203612223576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612337565b600082905060005b6000821461225557808061223e9061368a565b915050600a8261224e9190613701565b915061222b565b60008167ffffffffffffffff8111156122715761227061288d565b5b6040519080825280601f01601f1916602001820160405280156122a35781602001600182028036833780820191505090505b5090505b60008514612330576001826122bc9190613732565b9150600a856122cb9190613766565b60306122d791906130e9565b60f81b8183815181106122ed576122ec613797565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123299190613701565b94506122a7565b8093505050505b919050565b60009392505050565b61234f83836123e2565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123dd57600080549050600083820390505b61238f6000868380600101945086611ffa565b6123c5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061237c5781600054146123da57600080fd5b50505b505050565b60008054905060008203612422576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61242f6000848385611eaf565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506124a6836124976000866000611eb5565b6124a08561259d565b17611edd565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461254757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061250c565b5060008203612582576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125986000848385611f08565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125f6816125c1565b811461260157600080fd5b50565b600081359050612613816125ed565b92915050565b60006020828403121561262f5761262e6125b7565b5b600061263d84828501612604565b91505092915050565b60008115159050919050565b61265b81612646565b82525050565b60006020820190506126766000830184612652565b92915050565b6000819050919050565b61268f8161267c565b82525050565b60006020820190506126aa6000830184612686565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126ea5780820151818401526020810190506126cf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612712826126b0565b61271c81856126bb565b935061272c8185602086016126cc565b612735816126f6565b840191505092915050565b6000602082019050818103600083015261275a8184612707565b905092915050565b61276b8161267c565b811461277657600080fd5b50565b60008135905061278881612762565b92915050565b6000602082840312156127a4576127a36125b7565b5b60006127b284828501612779565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127e6826127bb565b9050919050565b6127f6816127db565b82525050565b600060208201905061281160008301846127ed565b92915050565b612820816127db565b811461282b57600080fd5b50565b60008135905061283d81612817565b92915050565b6000806040838503121561285a576128596125b7565b5b60006128688582860161282e565b925050602061287985828601612779565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128c5826126f6565b810181811067ffffffffffffffff821117156128e4576128e361288d565b5b80604052505050565b60006128f76125ad565b905061290382826128bc565b919050565b600067ffffffffffffffff8211156129235761292261288d565b5b61292c826126f6565b9050602081019050919050565b82818337600083830152505050565b600061295b61295684612908565b6128ed565b90508281526020810184848401111561297757612976612888565b5b612982848285612939565b509392505050565b600082601f83011261299f5761299e612883565b5b81356129af848260208601612948565b91505092915050565b6000602082840312156129ce576129cd6125b7565b5b600082013567ffffffffffffffff8111156129ec576129eb6125bc565b5b6129f88482850161298a565b91505092915050565b612a0a81612646565b8114612a1557600080fd5b50565b600081359050612a2781612a01565b92915050565b600060208284031215612a4357612a426125b7565b5b6000612a5184828501612a18565b91505092915050565b600080600060608486031215612a7357612a726125b7565b5b6000612a818682870161282e565b9350506020612a928682870161282e565b9250506040612aa386828701612779565b9150509250925092565b600060208284031215612ac357612ac26125b7565b5b6000612ad18482850161282e565b91505092915050565b60008060408385031215612af157612af06125b7565b5b6000612aff8582860161282e565b9250506020612b1085828601612a18565b9150509250929050565b600067ffffffffffffffff821115612b3557612b3461288d565b5b612b3e826126f6565b9050602081019050919050565b6000612b5e612b5984612b1a565b6128ed565b905082815260208101848484011115612b7a57612b79612888565b5b612b85848285612939565b509392505050565b600082601f830112612ba257612ba1612883565b5b8135612bb2848260208601612b4b565b91505092915050565b60008060008060808587031215612bd557612bd46125b7565b5b6000612be38782880161282e565b9450506020612bf48782880161282e565b9350506040612c0587828801612779565b925050606085013567ffffffffffffffff811115612c2657612c256125bc565b5b612c3287828801612b8d565b91505092959194509250565b60008060408385031215612c5557612c546125b7565b5b6000612c638582860161282e565b9250506020612c748582860161282e565b9150509250929050565b60008060408385031215612c9557612c946125b7565b5b6000612ca385828601612779565b9250506020612cb48582860161282e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d0557607f821691505b602082108103612d1857612d17612cbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612d807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d43565b612d8a8683612d43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612dc7612dc2612dbd8461267c565b612da2565b61267c565b9050919050565b6000819050919050565b612de183612dac565b612df5612ded82612dce565b848454612d50565b825550505050565b600090565b612e0a612dfd565b612e15818484612dd8565b505050565b5b81811015612e3957612e2e600082612e02565b600181019050612e1b565b5050565b601f821115612e7e57612e4f81612d1e565b612e5884612d33565b81016020851015612e67578190505b612e7b612e7385612d33565b830182612e1a565b50505b505050565b600082821c905092915050565b6000612ea160001984600802612e83565b1980831691505092915050565b6000612eba8383612e90565b9150826002028217905092915050565b612ed3826126b0565b67ffffffffffffffff811115612eec57612eeb61288d565b5b612ef68254612ced565b612f01828285612e3d565b600060209050601f831160018114612f345760008415612f22578287015190505b612f2c8582612eae565b865550612f94565b601f198416612f4286612d1e565b60005b82811015612f6a57848901518255600182019150602085019450602081019050612f45565b86831015612f875784890151612f83601f891682612e90565b8355505b6001600288020188555050505b505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612fd2601f836126bb565b9150612fdd82612f9c565b602082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b600081905092915050565b50565b6000613023600083613008565b915061302e82613013565b600082019050919050565b600061304482613016565b9150819050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006130846014836126bb565b915061308f8261304e565b602082019050919050565b600060208201905081810360008301526130b381613077565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130f48261267c565b91506130ff8361267c565b9250828201905080821115613117576131166130ba565b5b92915050565b7f4f6e6c792074776f20616c6c6f776564207065722077616c6c65742100000000600082015250565b6000613153601c836126bb565b915061315e8261311d565b602082019050919050565b6000602082019050818103600083015261318281613146565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006131bf6014836126bb565b91506131ca82613189565b602082019050919050565b600060208201905081810360008301526131ee816131b2565b9050919050565b60006132008261267c565b915061320b8361267c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613244576132436130ba565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006132856013836126bb565b91506132908261324f565b602082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b60006132f16017836126bb565b91506132fc826132bb565b602082019050919050565b60006020820190508181036000830152613320816132e4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613383602f836126bb565b915061338e82613327565b604082019050919050565b600060208201905081810360008301526133b281613376565b9050919050565b600081905092915050565b60006133cf826126b0565b6133d981856133b9565b93506133e98185602086016126cc565b80840191505092915050565b6000815461340281612ced565b61340c81866133b9565b94506001821660008114613427576001811461343c5761346f565b60ff198316865281151582028601935061346f565b61344585612d1e565b60005b8381101561346757815481890152600182019150602081019050613448565b838801955050505b50505092915050565b600061348482866133c4565b915061349082856133c4565b915061349c82846133f5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135056026836126bb565b9150613510826134a9565b604082019050919050565b60006020820190508181036000830152613534816134f8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135716020836126bb565b915061357c8261353b565b602082019050919050565b600060208201905081810360008301526135a081613564565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006135ce826135a7565b6135d881856135b2565b93506135e88185602086016126cc565b6135f1816126f6565b840191505092915050565b600060808201905061361160008301876127ed565b61361e60208301866127ed565b61362b6040830185612686565b818103606083015261363d81846135c3565b905095945050505050565b600081519050613657816125ed565b92915050565b600060208284031215613673576136726125b7565b5b600061368184828501613648565b91505092915050565b60006136958261267c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136c7576136c66130ba565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370c8261267c565b91506137178361267c565b925082613727576137266136d2565b5b828204905092915050565b600061373d8261267c565b91506137488361267c565b92508282039050818111156137605761375f6130ba565b5b92915050565b60006137718261267c565b915061377c8361267c565b92508261378c5761378b6136d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe516d5869374770716b324e4868375931765978507a72444a7873696e72505234467a68346d7467686b5237513554a26469706673582212205e2a8cce9501ce55d717a654bc8d9976be6e89916c52f7371349b02ffda29c5a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a44616c6c6557616c6c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51625877564e366a574c7174744a6d77514a595073377279486831586e794565504c644c4e7a75624d4c51722f00000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c806370a082311161012e578063a45ba8e7116100ab578063e0ec7c361161006f578063e0ec7c36146107f6578063e985e9c514610833578063efbd73f414610870578063f2fde38b14610899578063f676308a146108c257610230565b8063a45ba8e714610713578063b071401b1461073e578063b88d4fde14610767578063c87b56dd14610790578063e0a80853146107cd57610230565b806394354fd0116100f257806394354fd01461064d57806395d89b41146106785780639dbc61fa146106a3578063a0712d68146106ce578063a22cb465146106ea57610230565b806370a082311461057a578063715018a6146105b7578063758b4e86146105ce5780637ec4a659146105f95780638da5cb5b1461062257610230565b806323b872dd116101bc578063518302271161018057806351830227146104915780635503a0e8146104bc5780635c975abb146104e757806362b99ad4146105125780636352211e1461053d57610230565b806323b872dd146103d65780633ccfd60b146103ff57806342842e0e1461041657806344a0d68a1461043f5780634fdd43cb1461046857610230565b8063095ea7b311610203578063095ea7b31461030557806313faede61461032e57806316ba10e01461035957806316c38b3c1461038257806318160ddd146103ab57610230565b806301ffc9a71461023557806304cb229e1461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612619565b6108eb565b6040516102699190612661565b60405180910390f35b34801561027e57600080fd5b5061028761097d565b6040516102949190612695565b60405180910390f35b3480156102a957600080fd5b506102b2610983565b6040516102bf9190612740565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea919061278e565b610a15565b6040516102fc91906127fc565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190612843565b610a94565b005b34801561033a57600080fd5b50610343610bd8565b6040516103509190612695565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906129b8565b610bde565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612a2d565b610bf9565b005b3480156103b757600080fd5b506103c0610c1e565b6040516103cd9190612695565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612a5a565b610c35565b005b34801561040b57600080fd5b50610414610f57565b005b34801561042257600080fd5b5061043d60048036038101906104389190612a5a565b611034565b005b34801561044b57600080fd5b506104666004803603810190610461919061278e565b611054565b005b34801561047457600080fd5b5061048f600480360381019061048a91906129b8565b611066565b005b34801561049d57600080fd5b506104a6611081565b6040516104b39190612661565b60405180910390f35b3480156104c857600080fd5b506104d1611094565b6040516104de9190612740565b60405180910390f35b3480156104f357600080fd5b506104fc611122565b6040516105099190612661565b60405180910390f35b34801561051e57600080fd5b50610527611135565b6040516105349190612740565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061278e565b6111c3565b60405161057191906127fc565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612aad565b6111d5565b6040516105ae9190612695565b60405180910390f35b3480156105c357600080fd5b506105cc61128d565b005b3480156105da57600080fd5b506105e36112a1565b6040516105f09190612695565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b91906129b8565b6112a7565b005b34801561062e57600080fd5b506106376112c2565b60405161064491906127fc565b60405180910390f35b34801561065957600080fd5b506106626112ec565b60405161066f9190612695565b60405180910390f35b34801561068457600080fd5b5061068d6112f2565b60405161069a9190612740565b60405180910390f35b3480156106af57600080fd5b506106b8611384565b6040516106c59190612695565b60405180910390f35b6106e860048036038101906106e3919061278e565b61138a565b005b3480156106f657600080fd5b50610711600480360381019061070c9190612ada565b611616565b005b34801561071f57600080fd5b5061072861178d565b6040516107359190612740565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061278e565b61181b565b005b34801561077357600080fd5b5061078e60048036038101906107899190612bbb565b61182d565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061278e565b6118a0565b6040516107c49190612740565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190612a2d565b611a01565b005b34801561080257600080fd5b5061081d60048036038101906108189190612aad565b611a26565b60405161082a9190612661565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190612c3e565b611a46565b6040516108679190612661565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190612c7e565b611ada565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190612aad565b611bf9565b005b3480156108ce57600080fd5b506108e960048036038101906108e4919061278e565b611c7c565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109765750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600f5481565b60606002805461099290612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546109be90612ced565b8015610a0b5780601f106109e057610100808354040283529160200191610a0b565b820191906000526020600020905b8154815290600101906020018083116109ee57829003601f168201915b5050505050905090565b6000610a2082611c8e565b610a56576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9f826111c3565b90508073ffffffffffffffffffffffffffffffffffffffff16610ac0611ced565b73ffffffffffffffffffffffffffffffffffffffff1614610b2357610aec81610ae7611ced565b611a46565b610b22576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610be6611cf5565b80600b9081610bf59190612eca565b5050565b610c01611cf5565b80601260006101000a81548160ff02191690831515021790555050565b6000610c28611d73565b6001546000540303905090565b6000610c4082611d78565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cb384611e44565b91509150610cc98187610cc4611ced565b611e6b565b610d1557610cde86610cd9611ced565b611a46565b610d14576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d7b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d888686866001611eaf565b8015610d9357600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e6185610e3d888887611eb5565b7c020000000000000000000000000000000000000000000000000000000017611edd565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610ee75760006001850190506000600460008381526020019081526020016000205403610ee5576000548114610ee4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f4f8686866001611f08565b505050505050565b610f5f611cf5565b600260095403610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90612fe8565b60405180910390fd5b60026009819055506000610fb66112c2565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fd990613039565b60006040518083038185875af1925050503d8060008114611016576040519150601f19603f3d011682016040523d82523d6000602084013e61101b565b606091505b505090508061102957600080fd5b506001600981905550565b61104f8383836040518060200160405280600081525061182d565b505050565b61105c611cf5565b80600d8190555050565b61106e611cf5565b80600c908161107d9190612eca565b5050565b601260019054906101000a900460ff1681565b600b80546110a190612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546110cd90612ced565b801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a805461114290612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461116e90612ced565b80156111bb5780601f10611190576101008083540402835291602001916111bb565b820191906000526020600020905b81548152906001019060200180831161119e57829003601f168201915b505050505081565b60006111ce82611d78565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361123c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611295611cf5565b61129f6000611f0e565b565b600e5481565b6112af611cf5565b80600a90816112be9190612eca565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606003805461130190612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461132d90612ced565b801561137a5780601f1061134f5761010080835404028352916020019161137a565b820191906000526020600020905b81548152906001019060200180831161135d57829003601f168201915b5050505050905090565b60105481565b8060008111801561139d57506011548111155b6113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d39061309a565b60405180910390fd5b6010546113ef6113ea611fd4565b6111d5565b826113fa91906130e9565b111561143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613169565b60405180910390fd5b600e5481611447610c1e565b61145191906130e9565b1115611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906131d5565b60405180910390fd5b816013600061149f611fd4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114fb5750600f546114f8610c1e565b10155b156115515780600d5461150e91906131f5565b341015611550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115479061329b565b60405180910390fd5b5b601260009054906101000a900460ff16156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613307565b60405180910390fd5b6001601360006115af611fd4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161161160b611fd4565b84611fdc565b505050565b61161e611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611682576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061168f611ced565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661173c611ced565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117819190612661565b60405180910390a35050565b600c805461179a90612ced565b80601f01602080910402602001604051908101604052809291908181526020018280546117c690612ced565b80156118135780601f106117e857610100808354040283529160200191611813565b820191906000526020600020905b8154815290600101906020018083116117f657829003601f168201915b505050505081565b611823611cf5565b8060118190555050565b611838848484610c35565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461189a5761186384848484611ffa565b611899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606118ab82611c8e565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613399565b60405180910390fd5b60001515601260019054906101000a900460ff1615150361199757600c805461191290612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461193e90612ced565b801561198b5780601f106119605761010080835404028352916020019161198b565b820191906000526020600020905b81548152906001019060200180831161196e57829003601f168201915b505050505090506119fc565b60006119a161214a565b905060008151116119ca576040518060600160405280602e81526020016137c7602e91396119f8565b806119d4846121dc565b600b6040516020016119e893929190613478565b6040516020818303038152906040525b9150505b919050565b611a09611cf5565b80601260016101000a81548160ff02191690831515021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611aed57506011548111155b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239061309a565b60405180910390fd5b601054611b3f611b3a611fd4565b6111d5565b82611b4a91906130e9565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613169565b60405180910390fd5b600e5481611b97610c1e565b611ba191906130e9565b1115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906131d5565b60405180910390fd5b611bea611cf5565b611bf48284611fdc565b505050565b611c01611cf5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061351b565b60405180910390fd5b611c7981611f0e565b50565b611c84611cf5565b80600f8190555050565b600081611c99611d73565b11158015611ca8575060005482105b8015611ce6575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611cfd611fd4565b73ffffffffffffffffffffffffffffffffffffffff16611d1b6112c2565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890613587565b60405180910390fd5b565b600090565b60008082905080611d87611d73565b11611e0d57600054811015611e0c5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611e0a575b60008103611e00576004600083600190039350838152602001908152602001600020549050611dd6565b8092505050611e3f565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611ecc86868461233c565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b611ff6828260405180602001604052806000815250612345565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612020611ced565b8786866040518563ffffffff1660e01b815260040161204294939291906135fc565b6020604051808303816000875af192505050801561207e57506040513d601f19601f8201168201806040525081019061207b919061365d565b60015b6120f7573d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5060008151036120ef576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461215990612ced565b80601f016020809104026020016040519081016040528092919081815260200182805461218590612ced565b80156121d25780601f106121a7576101008083540402835291602001916121d2565b820191906000526020600020905b8154815290600101906020018083116121b557829003601f168201915b5050505050905090565b606060008203612223576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612337565b600082905060005b6000821461225557808061223e9061368a565b915050600a8261224e9190613701565b915061222b565b60008167ffffffffffffffff8111156122715761227061288d565b5b6040519080825280601f01601f1916602001820160405280156122a35781602001600182028036833780820191505090505b5090505b60008514612330576001826122bc9190613732565b9150600a856122cb9190613766565b60306122d791906130e9565b60f81b8183815181106122ed576122ec613797565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123299190613701565b94506122a7565b8093505050505b919050565b60009392505050565b61234f83836123e2565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123dd57600080549050600083820390505b61238f6000868380600101945086611ffa565b6123c5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061237c5781600054146123da57600080fd5b50505b505050565b60008054905060008203612422576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61242f6000848385611eaf565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506124a6836124976000866000611eb5565b6124a08561259d565b17611edd565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461254757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061250c565b5060008203612582576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125986000848385611f08565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125f6816125c1565b811461260157600080fd5b50565b600081359050612613816125ed565b92915050565b60006020828403121561262f5761262e6125b7565b5b600061263d84828501612604565b91505092915050565b60008115159050919050565b61265b81612646565b82525050565b60006020820190506126766000830184612652565b92915050565b6000819050919050565b61268f8161267c565b82525050565b60006020820190506126aa6000830184612686565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126ea5780820151818401526020810190506126cf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612712826126b0565b61271c81856126bb565b935061272c8185602086016126cc565b612735816126f6565b840191505092915050565b6000602082019050818103600083015261275a8184612707565b905092915050565b61276b8161267c565b811461277657600080fd5b50565b60008135905061278881612762565b92915050565b6000602082840312156127a4576127a36125b7565b5b60006127b284828501612779565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127e6826127bb565b9050919050565b6127f6816127db565b82525050565b600060208201905061281160008301846127ed565b92915050565b612820816127db565b811461282b57600080fd5b50565b60008135905061283d81612817565b92915050565b6000806040838503121561285a576128596125b7565b5b60006128688582860161282e565b925050602061287985828601612779565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128c5826126f6565b810181811067ffffffffffffffff821117156128e4576128e361288d565b5b80604052505050565b60006128f76125ad565b905061290382826128bc565b919050565b600067ffffffffffffffff8211156129235761292261288d565b5b61292c826126f6565b9050602081019050919050565b82818337600083830152505050565b600061295b61295684612908565b6128ed565b90508281526020810184848401111561297757612976612888565b5b612982848285612939565b509392505050565b600082601f83011261299f5761299e612883565b5b81356129af848260208601612948565b91505092915050565b6000602082840312156129ce576129cd6125b7565b5b600082013567ffffffffffffffff8111156129ec576129eb6125bc565b5b6129f88482850161298a565b91505092915050565b612a0a81612646565b8114612a1557600080fd5b50565b600081359050612a2781612a01565b92915050565b600060208284031215612a4357612a426125b7565b5b6000612a5184828501612a18565b91505092915050565b600080600060608486031215612a7357612a726125b7565b5b6000612a818682870161282e565b9350506020612a928682870161282e565b9250506040612aa386828701612779565b9150509250925092565b600060208284031215612ac357612ac26125b7565b5b6000612ad18482850161282e565b91505092915050565b60008060408385031215612af157612af06125b7565b5b6000612aff8582860161282e565b9250506020612b1085828601612a18565b9150509250929050565b600067ffffffffffffffff821115612b3557612b3461288d565b5b612b3e826126f6565b9050602081019050919050565b6000612b5e612b5984612b1a565b6128ed565b905082815260208101848484011115612b7a57612b79612888565b5b612b85848285612939565b509392505050565b600082601f830112612ba257612ba1612883565b5b8135612bb2848260208601612b4b565b91505092915050565b60008060008060808587031215612bd557612bd46125b7565b5b6000612be38782880161282e565b9450506020612bf48782880161282e565b9350506040612c0587828801612779565b925050606085013567ffffffffffffffff811115612c2657612c256125bc565b5b612c3287828801612b8d565b91505092959194509250565b60008060408385031215612c5557612c546125b7565b5b6000612c638582860161282e565b9250506020612c748582860161282e565b9150509250929050565b60008060408385031215612c9557612c946125b7565b5b6000612ca385828601612779565b9250506020612cb48582860161282e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d0557607f821691505b602082108103612d1857612d17612cbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612d807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d43565b612d8a8683612d43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612dc7612dc2612dbd8461267c565b612da2565b61267c565b9050919050565b6000819050919050565b612de183612dac565b612df5612ded82612dce565b848454612d50565b825550505050565b600090565b612e0a612dfd565b612e15818484612dd8565b505050565b5b81811015612e3957612e2e600082612e02565b600181019050612e1b565b5050565b601f821115612e7e57612e4f81612d1e565b612e5884612d33565b81016020851015612e67578190505b612e7b612e7385612d33565b830182612e1a565b50505b505050565b600082821c905092915050565b6000612ea160001984600802612e83565b1980831691505092915050565b6000612eba8383612e90565b9150826002028217905092915050565b612ed3826126b0565b67ffffffffffffffff811115612eec57612eeb61288d565b5b612ef68254612ced565b612f01828285612e3d565b600060209050601f831160018114612f345760008415612f22578287015190505b612f2c8582612eae565b865550612f94565b601f198416612f4286612d1e565b60005b82811015612f6a57848901518255600182019150602085019450602081019050612f45565b86831015612f875784890151612f83601f891682612e90565b8355505b6001600288020188555050505b505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612fd2601f836126bb565b9150612fdd82612f9c565b602082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b600081905092915050565b50565b6000613023600083613008565b915061302e82613013565b600082019050919050565b600061304482613016565b9150819050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006130846014836126bb565b915061308f8261304e565b602082019050919050565b600060208201905081810360008301526130b381613077565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130f48261267c565b91506130ff8361267c565b9250828201905080821115613117576131166130ba565b5b92915050565b7f4f6e6c792074776f20616c6c6f776564207065722077616c6c65742100000000600082015250565b6000613153601c836126bb565b915061315e8261311d565b602082019050919050565b6000602082019050818103600083015261318281613146565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006131bf6014836126bb565b91506131ca82613189565b602082019050919050565b600060208201905081810360008301526131ee816131b2565b9050919050565b60006132008261267c565b915061320b8361267c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613244576132436130ba565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006132856013836126bb565b91506132908261324f565b602082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b60006132f16017836126bb565b91506132fc826132bb565b602082019050919050565b60006020820190508181036000830152613320816132e4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613383602f836126bb565b915061338e82613327565b604082019050919050565b600060208201905081810360008301526133b281613376565b9050919050565b600081905092915050565b60006133cf826126b0565b6133d981856133b9565b93506133e98185602086016126cc565b80840191505092915050565b6000815461340281612ced565b61340c81866133b9565b94506001821660008114613427576001811461343c5761346f565b60ff198316865281151582028601935061346f565b61344585612d1e565b60005b8381101561346757815481890152600182019150602081019050613448565b838801955050505b50505092915050565b600061348482866133c4565b915061349082856133c4565b915061349c82846133f5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135056026836126bb565b9150613510826134a9565b604082019050919050565b60006020820190508181036000830152613534816134f8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135716020836126bb565b915061357c8261353b565b602082019050919050565b600060208201905081810360008301526135a081613564565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006135ce826135a7565b6135d881856135b2565b93506135e88185602086016126cc565b6135f1816126f6565b840191505092915050565b600060808201905061361160008301876127ed565b61361e60208301866127ed565b61362b6040830185612686565b818103606083015261363d81846135c3565b905095945050505050565b600081519050613657816125ed565b92915050565b600060208284031215613673576136726125b7565b5b600061368184828501613648565b91505092915050565b60006136958261267c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136c7576136c66130ba565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370c8261267c565b91506137178361267c565b925082613727576137266136d2565b5b828204905092915050565b600061373d8261267c565b91506137488361267c565b92508282039050818111156137605761375f6130ba565b5b92915050565b60006137718261267c565b915061377c8361267c565b92508261378c5761378b6136d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe516d5869374770716b324e4868375931765978507a72444a7873696e72505234467a68346d7467686b5237513554a26469706673582212205e2a8cce9501ce55d717a654bc8d9976be6e89916c52f7371349b02ffda29c5a64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a44616c6c6557616c6c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51625877564e366a574c7174744a6d77514a595073377279486831586e794565504c644c4e7a75624d4c51722f00000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): DalleWalle
Arg [1] : _tokenSymbol (string): DW
Arg [2] : _hiddenMetadataUri (string): ipfs://QmQbXwVN6jWLqttJmwQJYPs7ryHh1XnyEePLdLNzubMLQr/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 44616c6c6557616c6c6500000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4457000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d51625877564e366a574c7174744a6d77514a5950733772
Arg [9] : 79486831586e794565504c644c4e7a75624d4c51722f00000000000000000000
Deployed Bytecode Sourcemap
59778:3595:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27313:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60048:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28215:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34698:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34139:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59982:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62859:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62965:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23966:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38405:2817;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63210:150;;;;;;;;;;;;;:::i;:::-;;41318:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62405:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62615:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60185:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59904:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60155:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59871:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29608:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25150:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:103;;;;;;;;;;;;;:::i;:::-;;60016:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62753:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7413:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60114:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28391:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60081:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61161:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35256:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59942:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62482:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42101:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61756:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62318:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60219:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35721:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61423:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8319:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63048:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27313:639;27398:4;27737:10;27722:25;;:11;:25;;;;:102;;;;27814:10;27799:25;;:11;:25;;;;27722:102;:179;;;;27891:10;27876:25;;:11;:25;;;;27722:179;27702:199;;27313:639;;;:::o;60048:28::-;;;;:::o;28215:100::-;28269:13;28302:5;28295:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28215:100;:::o;34698:218::-;34774:7;34799:16;34807:7;34799;:16::i;:::-;34794:64;;34824:34;;;;;;;;;;;;;;34794:64;34878:15;:24;34894:7;34878:24;;;;;;;;;;;:30;;;;;;;;;;;;34871:37;;34698:218;;;:::o;34139:400::-;34220:13;34236:16;34244:7;34236;:16::i;:::-;34220:32;;34292:5;34269:28;;:19;:17;:19::i;:::-;:28;;;34265:175;;34317:44;34334:5;34341:19;:17;:19::i;:::-;34317:16;:44::i;:::-;34312:128;;34389:35;;;;;;;;;;;;;;34312:128;34265:175;34485:2;34452:15;:24;34468:7;34452:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;34523:7;34519:2;34503:28;;34512:5;34503:28;;;;;;;;;;;;34209:330;34139:400;;:::o;59982:29::-;;;;:::o;62859:100::-;7299:13;:11;:13::i;:::-;62943:10:::1;62931:9;:22;;;;;;:::i;:::-;;62859:100:::0;:::o;62965:77::-;7299:13;:11;:13::i;:::-;63030:6:::1;63021;;:15;;;;;;;;;;;;;;;;;;62965:77:::0;:::o;23966:323::-;24027:7;24255:15;:13;:15::i;:::-;24240:12;;24224:13;;:28;:46;24217:53;;23966:323;:::o;38405:2817::-;38539:27;38569;38588:7;38569:18;:27::i;:::-;38539:57;;38654:4;38613:45;;38629:19;38613:45;;;38609:86;;38667:28;;;;;;;;;;;;;;38609:86;38709:27;38738:23;38765:35;38792:7;38765:26;:35::i;:::-;38708:92;;;;38900:68;38925:15;38942:4;38948:19;:17;:19::i;:::-;38900:24;:68::i;:::-;38895:180;;38988:43;39005:4;39011:19;:17;:19::i;:::-;38988:16;:43::i;:::-;38983:92;;39040:35;;;;;;;;;;;;;;38983:92;38895:180;39106:1;39092:16;;:2;:16;;;39088:52;;39117:23;;;;;;;;;;;;;;39088:52;39153:43;39175:4;39181:2;39185:7;39194:1;39153:21;:43::i;:::-;39289:15;39286:160;;;39429:1;39408:19;39401:30;39286:160;39826:18;:24;39845:4;39826:24;;;;;;;;;;;;;;;;39824:26;;;;;;;;;;;;39895:18;:22;39914:2;39895:22;;;;;;;;;;;;;;;;39893:24;;;;;;;;;;;40217:146;40254:2;40303:45;40318:4;40324:2;40328:19;40303:14;:45::i;:::-;20365:8;40275:73;40217:18;:146::i;:::-;40188:17;:26;40206:7;40188:26;;;;;;;;;;;:175;;;;40534:1;20365:8;40483:19;:47;:52;40479:627;;40556:19;40588:1;40578:7;:11;40556:33;;40745:1;40711:17;:30;40729:11;40711:30;;;;;;;;;;;;:35;40707:384;;40849:13;;40834:11;:28;40830:242;;41029:19;40996:17;:30;41014:11;40996:30;;;;;;;;;;;:52;;;;40830:242;40707:384;40537:569;40479:627;41153:7;41149:2;41134:27;;41143:4;41134:27;;;;;;;;;;;;41172:42;41193:4;41199:2;41203:7;41212:1;41172:20;:42::i;:::-;38528:2694;;;38405:2817;;;:::o;63210:150::-;7299:13;:11;:13::i;:::-;1841:1:::1;2439:7;;:19:::0;2431:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1841:1;2572:7;:18;;;;63268:7:::2;63289;:5;:7::i;:::-;63281:21;;63310;63281:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63267:69;;;63351:2;63343:11;;;::::0;::::2;;63260:100;1797:1:::1;2751:7;:22;;;;63210:150::o:0;41318:185::-;41456:39;41473:4;41479:2;41483:7;41456:39;;;;;;;;;;;;:16;:39::i;:::-;41318:185;;;:::o;62405:71::-;7299:13;:11;:13::i;:::-;62465:5:::1;62458:4;:12;;;;62405:71:::0;:::o;62615:132::-;7299:13;:11;:13::i;:::-;62723:18:::1;62703:17;:38;;;;;;:::i;:::-;;62615:132:::0;:::o;60185:27::-;;;;;;;;;;;;;:::o;59904:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;60155:25::-;;;;;;;;;;;;;:::o;59871:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29608:152::-;29680:7;29723:27;29742:7;29723:18;:27::i;:::-;29700:52;;29608:152;;;:::o;25150:233::-;25222:7;25263:1;25246:19;;:5;:19;;;25242:60;;25274:28;;;;;;;;;;;;;;25242:60;19309:13;25320:18;:25;25339:5;25320:25;;;;;;;;;;;;;;;;:55;25313:62;;25150:233;;;:::o;8061:103::-;7299:13;:11;:13::i;:::-;8126:30:::1;8153:1;8126:18;:30::i;:::-;8061:103::o:0;60016:27::-;;;;:::o;62753:100::-;7299:13;:11;:13::i;:::-;62837:10:::1;62825:9;:22;;;;;;:::i;:::-;;62753:100:::0;:::o;7413:87::-;7459:7;7486:6;;;;;;;;;;;7479:13;;7413:87;:::o;60114:34::-;;;;:::o;28391:104::-;28447:13;28480:7;28473:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28391:104;:::o;60081:28::-;;;;:::o;61161:254::-;61223:11;60615:1;60601:11;:15;:52;;;;;60635:18;;60620:11;:33;;60601:52;60593:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;60734:12;;60707:23;60717:12;:10;:12::i;:::-;60707:9;:23::i;:::-;60693:11;:37;;;;:::i;:::-;:53;;60685:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;60825:9;;60810:11;60794:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;60786:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;61256:11:::1;60937:15;:29;60953:12;:10;:12::i;:::-;60937:29;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;60987:10;;60970:13;:11;:13::i;:::-;:27;;60937:60;60933:146;;;61036:11;61029:4;;:18;;;;:::i;:::-;61016:9;:31;;61008:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;60933:146;61285:6:::2;;;;;;;;;;;61284:7;61276:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;61358:4;61326:15;:29;61342:12;:10;:12::i;:::-;61326:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;61371;61381:12;:10;:12::i;:::-;61395:11;61371:9;:36::i;:::-;60866:1:::1;61161:254:::0;;:::o;35256:308::-;35367:19;:17;:19::i;:::-;35355:31;;:8;:31;;;35351:61;;35395:17;;;;;;;;;;;;;;35351:61;35477:8;35425:18;:39;35444:19;:17;:19::i;:::-;35425:39;;;;;;;;;;;;;;;:49;35465:8;35425:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;35537:8;35501:55;;35516:19;:17;:19::i;:::-;35501:55;;;35547:8;35501:55;;;;;;:::i;:::-;;;;;;;;35256:308;;:::o;59942:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;62482:127::-;7299:13;:11;:13::i;:::-;62584:19:::1;62563:18;:40;;;;62482:127:::0;:::o;42101:399::-;42268:31;42281:4;42287:2;42291:7;42268:12;:31::i;:::-;42332:1;42314:2;:14;;;:19;42310:183;;42353:56;42384:4;42390:2;42394:7;42403:5;42353:30;:56::i;:::-;42348:145;;42437:40;;;;;;;;;;;;;;42348:145;42310:183;42101:399;;;;:::o;61756:488::-;61827:13;61857:17;61865:8;61857:7;:17::i;:::-;61849:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;61951:5;61939:17;;:8;;;;;;;;;;;:17;;;61935:64;;61974:17;61967:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61935:64;62007:28;62038:10;:8;:10::i;:::-;62007:41;;62093:1;62068:14;62062:28;:32;:176;;;;;;;;;;;;;;;;;;;;;;62130:14;62146:19;:8;:17;:19::i;:::-;62167:9;62113:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62062:176;62055:183;;;61756:488;;;;:::o;62318:81::-;7299:13;:11;:13::i;:::-;62387:6:::1;62376:8;;:17;;;;;;;;;;;;;;;;;;62318:81:::0;:::o;60219:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;35721:164::-;35818:4;35842:18;:25;35861:5;35842:25;;;;;;;;;;;;;;;:35;35868:8;35842:35;;;;;;;;;;;;;;;;;;;;;;;;;35835:42;;35721:164;;;;:::o;61423:152::-;61506:11;60615:1;60601:11;:15;:52;;;;;60635:18;;60620:11;:33;;60601:52;60593:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;60734:12;;60707:23;60717:12;:10;:12::i;:::-;60707:9;:23::i;:::-;60693:11;:37;;;;:::i;:::-;:53;;60685:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;60825:9;;60810:11;60794:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;60786:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7299:13:::1;:11;:13::i;:::-;61536:33:::2;61546:9;61557:11;61536:9;:33::i;:::-;61423:152:::0;;;:::o;8319:201::-;7299:13;:11;:13::i;:::-;8428:1:::1;8408:22;;:8;:22;;::::0;8400:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8484:28;8503:8;8484:18;:28::i;:::-;8319:201:::0;:::o;63048:89::-;7299:13;:11;:13::i;:::-;63123:8:::1;63110:10;:21;;;;63048:89:::0;:::o;36143:282::-;36208:4;36264:7;36245:15;:13;:15::i;:::-;:26;;:66;;;;;36298:13;;36288:7;:23;36245:66;:153;;;;;36397:1;20085:8;36349:17;:26;36367:7;36349:26;;;;;;;;;;;;:44;:49;36245:153;36225:173;;36143:282;;;:::o;57909:105::-;57969:7;57996:10;57989:17;;57909:105;:::o;7578:132::-;7653:12;:10;:12::i;:::-;7642:23;;:7;:5;:7::i;:::-;:23;;;7634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7578:132::o;23482:92::-;23538:7;23482:92;:::o;30763:1275::-;30830:7;30850:12;30865:7;30850:22;;30933:4;30914:15;:13;:15::i;:::-;:23;30910:1061;;30967:13;;30960:4;:20;30956:1015;;;31005:14;31022:17;:23;31040:4;31022:23;;;;;;;;;;;;31005:40;;31139:1;20085:8;31111:6;:24;:29;31107:845;;31776:113;31793:1;31783:6;:11;31776:113;;31836:17;:25;31854:6;;;;;;;31836:25;;;;;;;;;;;;31827:34;;31776:113;;;31922:6;31915:13;;;;;;31107:845;30982:989;30956:1015;30910:1061;31999:31;;;;;;;;;;;;;;30763:1275;;;;:::o;37306:479::-;37408:27;37437:23;37478:38;37519:15;:24;37535:7;37519:24;;;;;;;;;;;37478:65;;37690:18;37667:41;;37747:19;37741:26;37722:45;;37652:126;37306:479;;;:::o;36534:659::-;36683:11;36848:16;36841:5;36837:28;36828:37;;37008:16;36997:9;36993:32;36980:45;;37158:15;37147:9;37144:30;37136:5;37125:9;37122:20;37119:56;37109:66;;36534:659;;;;;:::o;43162:159::-;;;;;:::o;57218:311::-;57353:7;57373:16;20489:3;57399:19;:41;;57373:68;;20489:3;57467:31;57478:4;57484:2;57488:9;57467:10;:31::i;:::-;57459:40;;:62;;57452:69;;;57218:311;;;;;:::o;32586:450::-;32666:14;32834:16;32827:5;32823:28;32814:37;;33011:5;32997:11;32972:23;32968:41;32965:52;32958:5;32955:63;32945:73;;32586:450;;;;:::o;43986:158::-;;;;;:::o;8680:191::-;8754:16;8773:6;;;;;;;;;;;8754:25;;8799:8;8790:6;;:17;;;;;;;;;;;;;;;;;;8854:8;8823:40;;8844:8;8823:40;;;;;;;;;;;;8743:128;8680:191;:::o;5964:98::-;6017:7;6044:10;6037:17;;5964:98;:::o;51741:112::-;51818:27;51828:2;51832:8;51818:27;;;;;;;;;;;;:9;:27::i;:::-;51741:112;;:::o;44584:716::-;44747:4;44793:2;44768:45;;;44814:19;:17;:19::i;:::-;44835:4;44841:7;44850:5;44768:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44764:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45068:1;45051:6;:13;:18;45047:235;;45097:40;;;;;;;;;;;;;;45047:235;45240:6;45234:13;45225:6;45221:2;45217:15;45210:38;44764:529;44937:54;;;44927:64;;;:6;:64;;;;44920:71;;;44584:716;;;;;;:::o;61646:104::-;61706:13;61735:9;61728:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61646:104;:::o;3218:723::-;3274:13;3504:1;3495:5;:10;3491:53;;3522:10;;;;;;;;;;;;;;;;;;;;;3491:53;3554:12;3569:5;3554:20;;3585:14;3610:78;3625:1;3617:4;:9;3610:78;;3643:8;;;;;:::i;:::-;;;;3674:2;3666:10;;;;;:::i;:::-;;;3610:78;;;3698:19;3730:6;3720:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:39;;3748:154;3764:1;3755:5;:10;3748:154;;3792:1;3782:11;;;;;:::i;:::-;;;3859:2;3851:5;:10;;;;:::i;:::-;3838:2;:24;;;;:::i;:::-;3825:39;;3808:6;3815;3808:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3888:2;3879:11;;;;;:::i;:::-;;;3748:154;;;3926:6;3912:21;;;;;3218:723;;;;:::o;56919:147::-;57056:6;56919:147;;;;;:::o;50968:689::-;51099:19;51105:2;51109:8;51099:5;:19::i;:::-;51178:1;51160:2;:14;;;:19;51156:483;;51200:11;51214:13;;51200:27;;51246:13;51268:8;51262:3;:14;51246:30;;51295:233;51326:62;51365:1;51369:2;51373:7;;;;;;51382:5;51326:30;:62::i;:::-;51321:167;;51424:40;;;;;;;;;;;;;;51321:167;51523:3;51515:5;:11;51295:233;;51610:3;51593:13;;:20;51589:34;;51615:8;;;51589:34;51181:458;;51156:483;50968:689;;;:::o;45762:2454::-;45835:20;45858:13;;45835:36;;45898:1;45886:8;:13;45882:44;;45908:18;;;;;;;;;;;;;;45882:44;45939:61;45969:1;45973:2;45977:12;45991:8;45939:21;:61::i;:::-;46483:1;19447:2;46453:1;:26;;46452:32;46440:8;:45;46414:18;:22;46433:2;46414:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;46762:139;46799:2;46853:33;46876:1;46880:2;46884:1;46853:14;:33::i;:::-;46820:30;46841:8;46820:20;:30::i;:::-;:66;46762:18;:139::i;:::-;46728:17;:31;46746:12;46728:31;;;;;;;;;;;:173;;;;46918:16;46949:11;46978:8;46963:12;:23;46949:37;;47233:16;47229:2;47225:25;47213:37;;47605:12;47565:8;47524:1;47462:25;47403:1;47342;47315:335;47730:1;47716:12;47712:20;47670:346;47771:3;47762:7;47759:16;47670:346;;47989:7;47979:8;47976:1;47949:25;47946:1;47943;47938:59;47824:1;47815:7;47811:15;47800:26;;47670:346;;;47674:77;48061:1;48049:8;:13;48045:45;;48071:19;;;;;;;;;;;;;;48045:45;48123:3;48107:13;:19;;;;46188:1950;;48148:60;48177:1;48181:2;48185:12;48199:8;48148:20;:60::i;:::-;45824:2392;45762:2454;;:::o;33138:324::-;33208:14;33441:1;33431:8;33428:15;33402:24;33398:46;33388:56;;33138:324;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:246::-;2314:1;2324:113;2338:6;2335:1;2332:13;2324:113;;;2423:1;2418:3;2414:11;2408:18;2404:1;2399:3;2395:11;2388:39;2360:2;2357:1;2353:10;2348:15;;2324:113;;;2471:1;2462:6;2457:3;2453:16;2446:27;2295:184;2233:246;;;:::o;2485:102::-;2526:6;2577:2;2573:7;2568:2;2561:5;2557:14;2553:28;2543:38;;2485:102;;;:::o;2593:377::-;2681:3;2709:39;2742:5;2709:39;:::i;:::-;2764:71;2828:6;2823:3;2764:71;:::i;:::-;2757:78;;2844:65;2902:6;2897:3;2890:4;2883:5;2879:16;2844:65;:::i;:::-;2934:29;2956:6;2934:29;:::i;:::-;2929:3;2925:39;2918:46;;2685:285;2593:377;;;;:::o;2976:313::-;3089:4;3127:2;3116:9;3112:18;3104:26;;3176:9;3170:4;3166:20;3162:1;3151:9;3147:17;3140:47;3204:78;3277:4;3268:6;3204:78;:::i;:::-;3196:86;;2976:313;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:117::-;5351:1;5348;5341:12;5365:117;5474:1;5471;5464:12;5488:180;5536:77;5533:1;5526:88;5633:4;5630:1;5623:15;5657:4;5654:1;5647:15;5674:281;5757:27;5779:4;5757:27;:::i;:::-;5749:6;5745:40;5887:6;5875:10;5872:22;5851:18;5839:10;5836:34;5833:62;5830:88;;;5898:18;;:::i;:::-;5830:88;5938:10;5934:2;5927:22;5717:238;5674:281;;:::o;5961:129::-;5995:6;6022:20;;:::i;:::-;6012:30;;6051:33;6079:4;6071:6;6051:33;:::i;:::-;5961:129;;;:::o;6096:308::-;6158:4;6248:18;6240:6;6237:30;6234:56;;;6270:18;;:::i;:::-;6234:56;6308:29;6330:6;6308:29;:::i;:::-;6300:37;;6392:4;6386;6382:15;6374:23;;6096:308;;;:::o;6410:146::-;6507:6;6502:3;6497;6484:30;6548:1;6539:6;6534:3;6530:16;6523:27;6410:146;;;:::o;6562:425::-;6640:5;6665:66;6681:49;6723:6;6681:49;:::i;:::-;6665:66;:::i;:::-;6656:75;;6754:6;6747:5;6740:21;6792:4;6785:5;6781:16;6830:3;6821:6;6816:3;6812:16;6809:25;6806:112;;;6837:79;;:::i;:::-;6806:112;6927:54;6974:6;6969:3;6964;6927:54;:::i;:::-;6646:341;6562:425;;;;;:::o;7007:340::-;7063:5;7112:3;7105:4;7097:6;7093:17;7089:27;7079:122;;7120:79;;:::i;:::-;7079:122;7237:6;7224:20;7262:79;7337:3;7329:6;7322:4;7314:6;7310:17;7262:79;:::i;:::-;7253:88;;7069:278;7007:340;;;;:::o;7353:509::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7625:1;7614:9;7610:17;7597:31;7655:18;7647:6;7644:30;7641:117;;;7677:79;;:::i;:::-;7641:117;7782:63;7837:7;7828:6;7817:9;7813:22;7782:63;:::i;:::-;7772:73;;7568:287;7353:509;;;;:::o;7868:116::-;7938:21;7953:5;7938:21;:::i;:::-;7931:5;7928:32;7918:60;;7974:1;7971;7964:12;7918:60;7868:116;:::o;7990:133::-;8033:5;8071:6;8058:20;8049:29;;8087:30;8111:5;8087:30;:::i;:::-;7990:133;;;;:::o;8129:323::-;8185:6;8234:2;8222:9;8213:7;8209:23;8205:32;8202:119;;;8240:79;;:::i;:::-;8202:119;8360:1;8385:50;8427:7;8418:6;8407:9;8403:22;8385:50;:::i;:::-;8375:60;;8331:114;8129:323;;;;:::o;8458:619::-;8535:6;8543;8551;8600:2;8588:9;8579:7;8575:23;8571:32;8568:119;;;8606:79;;:::i;:::-;8568:119;8726:1;8751:53;8796:7;8787:6;8776:9;8772:22;8751:53;:::i;:::-;8741:63;;8697:117;8853:2;8879:53;8924:7;8915:6;8904:9;8900:22;8879:53;:::i;:::-;8869:63;;8824:118;8981:2;9007:53;9052:7;9043:6;9032:9;9028:22;9007:53;:::i;:::-;8997:63;;8952:118;8458:619;;;;;:::o;9083:329::-;9142:6;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:53;9387:7;9378:6;9367:9;9363:22;9342:53;:::i;:::-;9332:63;;9288:117;9083:329;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:::-;12488:6;12496;12545:2;12533:9;12524:7;12520:23;12516:32;12513:119;;;12551:79;;:::i;:::-;12513:119;12671:1;12696:53;12741:7;12732:6;12721:9;12717:22;12696:53;:::i;:::-;12686:63;;12642:117;12798:2;12824:53;12869:7;12860:6;12849:9;12845:22;12824:53;:::i;:::-;12814:63;;12769:118;12420:474;;;;;:::o;12900:180::-;12948:77;12945:1;12938:88;13045:4;13042:1;13035:15;13069:4;13066:1;13059:15;13086:320;13130:6;13167:1;13161:4;13157:12;13147:22;;13214:1;13208:4;13204:12;13235:18;13225:81;;13291:4;13283:6;13279:17;13269:27;;13225:81;13353:2;13345:6;13342:14;13322:18;13319:38;13316:84;;13372:18;;:::i;:::-;13316:84;13137:269;13086:320;;;:::o;13412:141::-;13461:4;13484:3;13476:11;;13507:3;13504:1;13497:14;13541:4;13538:1;13528:18;13520:26;;13412:141;;;:::o;13559:93::-;13596:6;13643:2;13638;13631:5;13627:14;13623:23;13613:33;;13559:93;;;:::o;13658:107::-;13702:8;13752:5;13746:4;13742:16;13721:37;;13658:107;;;;:::o;13771:393::-;13840:6;13890:1;13878:10;13874:18;13913:97;13943:66;13932:9;13913:97;:::i;:::-;14031:39;14061:8;14050:9;14031:39;:::i;:::-;14019:51;;14103:4;14099:9;14092:5;14088:21;14079:30;;14152:4;14142:8;14138:19;14131:5;14128:30;14118:40;;13847:317;;13771:393;;;;;:::o;14170:60::-;14198:3;14219:5;14212:12;;14170:60;;;:::o;14236:142::-;14286:9;14319:53;14337:34;14346:24;14364:5;14346:24;:::i;:::-;14337:34;:::i;:::-;14319:53;:::i;:::-;14306:66;;14236:142;;;:::o;14384:75::-;14427:3;14448:5;14441:12;;14384:75;;;:::o;14465:269::-;14575:39;14606:7;14575:39;:::i;:::-;14636:91;14685:41;14709:16;14685:41;:::i;:::-;14677:6;14670:4;14664:11;14636:91;:::i;:::-;14630:4;14623:105;14541:193;14465:269;;;:::o;14740:73::-;14785:3;14740:73;:::o;14819:189::-;14896:32;;:::i;:::-;14937:65;14995:6;14987;14981:4;14937:65;:::i;:::-;14872:136;14819:189;;:::o;15014:186::-;15074:120;15091:3;15084:5;15081:14;15074:120;;;15145:39;15182:1;15175:5;15145:39;:::i;:::-;15118:1;15111:5;15107:13;15098:22;;15074:120;;;15014:186;;:::o;15206:543::-;15307:2;15302:3;15299:11;15296:446;;;15341:38;15373:5;15341:38;:::i;:::-;15425:29;15443:10;15425:29;:::i;:::-;15415:8;15411:44;15608:2;15596:10;15593:18;15590:49;;;15629:8;15614:23;;15590:49;15652:80;15708:22;15726:3;15708:22;:::i;:::-;15698:8;15694:37;15681:11;15652:80;:::i;:::-;15311:431;;15296:446;15206:543;;;:::o;15755:117::-;15809:8;15859:5;15853:4;15849:16;15828:37;;15755:117;;;;:::o;15878:169::-;15922:6;15955:51;16003:1;15999:6;15991:5;15988:1;15984:13;15955:51;:::i;:::-;15951:56;16036:4;16030;16026:15;16016:25;;15929:118;15878:169;;;;:::o;16052:295::-;16128:4;16274:29;16299:3;16293:4;16274:29;:::i;:::-;16266:37;;16336:3;16333:1;16329:11;16323:4;16320:21;16312:29;;16052:295;;;;:::o;16352:1395::-;16469:37;16502:3;16469:37;:::i;:::-;16571:18;16563:6;16560:30;16557:56;;;16593:18;;:::i;:::-;16557:56;16637:38;16669:4;16663:11;16637:38;:::i;:::-;16722:67;16782:6;16774;16768:4;16722:67;:::i;:::-;16816:1;16840:4;16827:17;;16872:2;16864:6;16861:14;16889:1;16884:618;;;;17546:1;17563:6;17560:77;;;17612:9;17607:3;17603:19;17597:26;17588:35;;17560:77;17663:67;17723:6;17716:5;17663:67;:::i;:::-;17657:4;17650:81;17519:222;16854:887;;16884:618;16936:4;16932:9;16924:6;16920:22;16970:37;17002:4;16970:37;:::i;:::-;17029:1;17043:208;17057:7;17054:1;17051:14;17043:208;;;17136:9;17131:3;17127:19;17121:26;17113:6;17106:42;17187:1;17179:6;17175:14;17165:24;;17234:2;17223:9;17219:18;17206:31;;17080:4;17077:1;17073:12;17068:17;;17043:208;;;17279:6;17270:7;17267:19;17264:179;;;17337:9;17332:3;17328:19;17322:26;17380:48;17422:4;17414:6;17410:17;17399:9;17380:48;:::i;:::-;17372:6;17365:64;17287:156;17264:179;17489:1;17485;17477:6;17473:14;17469:22;17463:4;17456:36;16891:611;;;16854:887;;16444:1303;;;16352:1395;;:::o;17753:181::-;17893:33;17889:1;17881:6;17877:14;17870:57;17753:181;:::o;17940:366::-;18082:3;18103:67;18167:2;18162:3;18103:67;:::i;:::-;18096:74;;18179:93;18268:3;18179:93;:::i;:::-;18297:2;18292:3;18288:12;18281:19;;17940:366;;;:::o;18312:419::-;18478:4;18516:2;18505:9;18501:18;18493:26;;18565:9;18559:4;18555:20;18551:1;18540:9;18536:17;18529:47;18593:131;18719:4;18593:131;:::i;:::-;18585:139;;18312:419;;;:::o;18737:147::-;18838:11;18875:3;18860:18;;18737:147;;;;:::o;18890:114::-;;:::o;19010:398::-;19169:3;19190:83;19271:1;19266:3;19190:83;:::i;:::-;19183:90;;19282:93;19371:3;19282:93;:::i;:::-;19400:1;19395:3;19391:11;19384:18;;19010:398;;;:::o;19414:379::-;19598:3;19620:147;19763:3;19620:147;:::i;:::-;19613:154;;19784:3;19777:10;;19414:379;;;:::o;19799:170::-;19939:22;19935:1;19927:6;19923:14;19916:46;19799:170;:::o;19975:366::-;20117:3;20138:67;20202:2;20197:3;20138:67;:::i;:::-;20131:74;;20214:93;20303:3;20214:93;:::i;:::-;20332:2;20327:3;20323:12;20316:19;;19975:366;;;:::o;20347:419::-;20513:4;20551:2;20540:9;20536:18;20528:26;;20600:9;20594:4;20590:20;20586:1;20575:9;20571:17;20564:47;20628:131;20754:4;20628:131;:::i;:::-;20620:139;;20347:419;;;:::o;20772:180::-;20820:77;20817:1;20810:88;20917:4;20914:1;20907:15;20941:4;20938:1;20931:15;20958:191;20998:3;21017:20;21035:1;21017:20;:::i;:::-;21012:25;;21051:20;21069:1;21051:20;:::i;:::-;21046:25;;21094:1;21091;21087:9;21080:16;;21115:3;21112:1;21109:10;21106:36;;;21122:18;;:::i;:::-;21106:36;20958:191;;;;:::o;21155:178::-;21295:30;21291:1;21283:6;21279:14;21272:54;21155:178;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:170::-;22276:22;22272:1;22264:6;22260:14;22253:46;22136:170;:::o;22312:366::-;22454:3;22475:67;22539:2;22534:3;22475:67;:::i;:::-;22468:74;;22551:93;22640:3;22551:93;:::i;:::-;22669:2;22664:3;22660:12;22653:19;;22312:366;;;:::o;22684:419::-;22850:4;22888:2;22877:9;22873:18;22865:26;;22937:9;22931:4;22927:20;22923:1;22912:9;22908:17;22901:47;22965:131;23091:4;22965:131;:::i;:::-;22957:139;;22684:419;;;:::o;23109:348::-;23149:7;23172:20;23190:1;23172:20;:::i;:::-;23167:25;;23206:20;23224:1;23206:20;:::i;:::-;23201:25;;23394:1;23326:66;23322:74;23319:1;23316:81;23311:1;23304:9;23297:17;23293:105;23290:131;;;23401:18;;:::i;:::-;23290:131;23449:1;23446;23442:9;23431:20;;23109:348;;;;:::o;23463:169::-;23603:21;23599:1;23591:6;23587:14;23580:45;23463:169;:::o;23638:366::-;23780:3;23801:67;23865:2;23860:3;23801:67;:::i;:::-;23794:74;;23877:93;23966:3;23877:93;:::i;:::-;23995:2;23990:3;23986:12;23979:19;;23638:366;;;:::o;24010:419::-;24176:4;24214:2;24203:9;24199:18;24191:26;;24263:9;24257:4;24253:20;24249:1;24238:9;24234:17;24227:47;24291:131;24417:4;24291:131;:::i;:::-;24283:139;;24010:419;;;:::o;24435:173::-;24575:25;24571:1;24563:6;24559:14;24552:49;24435:173;:::o;24614:366::-;24756:3;24777:67;24841:2;24836:3;24777:67;:::i;:::-;24770:74;;24853:93;24942:3;24853:93;:::i;:::-;24971:2;24966:3;24962:12;24955:19;;24614:366;;;:::o;24986:419::-;25152:4;25190:2;25179:9;25175:18;25167:26;;25239:9;25233:4;25229:20;25225:1;25214:9;25210:17;25203:47;25267:131;25393:4;25267:131;:::i;:::-;25259:139;;24986:419;;;:::o;25411:234::-;25551:34;25547:1;25539:6;25535:14;25528:58;25620:17;25615:2;25607:6;25603:15;25596:42;25411:234;:::o;25651:366::-;25793:3;25814:67;25878:2;25873:3;25814:67;:::i;:::-;25807:74;;25890:93;25979:3;25890:93;:::i;:::-;26008:2;26003:3;25999:12;25992:19;;25651:366;;;:::o;26023:419::-;26189:4;26227:2;26216:9;26212:18;26204:26;;26276:9;26270:4;26266:20;26262:1;26251:9;26247:17;26240:47;26304:131;26430:4;26304:131;:::i;:::-;26296:139;;26023:419;;;:::o;26448:148::-;26550:11;26587:3;26572:18;;26448:148;;;;:::o;26602:390::-;26708:3;26736:39;26769:5;26736:39;:::i;:::-;26791:89;26873:6;26868:3;26791:89;:::i;:::-;26784:96;;26889:65;26947:6;26942:3;26935:4;26928:5;26924:16;26889:65;:::i;:::-;26979:6;26974:3;26970:16;26963:23;;26712:280;26602:390;;;;:::o;27022:874::-;27125:3;27162:5;27156:12;27191:36;27217:9;27191:36;:::i;:::-;27243:89;27325:6;27320:3;27243:89;:::i;:::-;27236:96;;27363:1;27352:9;27348:17;27379:1;27374:166;;;;27554:1;27549:341;;;;27341:549;;27374:166;27458:4;27454:9;27443;27439:25;27434:3;27427:38;27520:6;27513:14;27506:22;27498:6;27494:35;27489:3;27485:45;27478:52;;27374:166;;27549:341;27616:38;27648:5;27616:38;:::i;:::-;27676:1;27690:154;27704:6;27701:1;27698:13;27690:154;;;27778:7;27772:14;27768:1;27763:3;27759:11;27752:35;27828:1;27819:7;27815:15;27804:26;;27726:4;27723:1;27719:12;27714:17;;27690:154;;;27873:6;27868:3;27864:16;27857:23;;27556:334;;27341:549;;27129:767;;27022:874;;;;:::o;27902:589::-;28127:3;28149:95;28240:3;28231:6;28149:95;:::i;:::-;28142:102;;28261:95;28352:3;28343:6;28261:95;:::i;:::-;28254:102;;28373:92;28461:3;28452:6;28373:92;:::i;:::-;28366:99;;28482:3;28475:10;;27902:589;;;;;;:::o;28497:225::-;28637:34;28633:1;28625:6;28621:14;28614:58;28706:8;28701:2;28693:6;28689:15;28682:33;28497:225;:::o;28728:366::-;28870:3;28891:67;28955:2;28950:3;28891:67;:::i;:::-;28884:74;;28967:93;29056:3;28967:93;:::i;:::-;29085:2;29080:3;29076:12;29069:19;;28728:366;;;:::o;29100:419::-;29266:4;29304:2;29293:9;29289:18;29281:26;;29353:9;29347:4;29343:20;29339:1;29328:9;29324:17;29317:47;29381:131;29507:4;29381:131;:::i;:::-;29373:139;;29100:419;;;:::o;29525:182::-;29665:34;29661:1;29653:6;29649:14;29642:58;29525:182;:::o;29713:366::-;29855:3;29876:67;29940:2;29935:3;29876:67;:::i;:::-;29869:74;;29952:93;30041:3;29952:93;:::i;:::-;30070:2;30065:3;30061:12;30054:19;;29713:366;;;:::o;30085:419::-;30251:4;30289:2;30278:9;30274:18;30266:26;;30338:9;30332:4;30328:20;30324:1;30313:9;30309:17;30302:47;30366:131;30492:4;30366:131;:::i;:::-;30358:139;;30085:419;;;:::o;30510:98::-;30561:6;30595:5;30589:12;30579:22;;30510:98;;;:::o;30614:168::-;30697:11;30731:6;30726:3;30719:19;30771:4;30766:3;30762:14;30747:29;;30614:168;;;;:::o;30788:373::-;30874:3;30902:38;30934:5;30902:38;:::i;:::-;30956:70;31019:6;31014:3;30956:70;:::i;:::-;30949:77;;31035:65;31093:6;31088:3;31081:4;31074:5;31070:16;31035:65;:::i;:::-;31125:29;31147:6;31125:29;:::i;:::-;31120:3;31116:39;31109:46;;30878:283;30788:373;;;;:::o;31167:640::-;31362:4;31400:3;31389:9;31385:19;31377:27;;31414:71;31482:1;31471:9;31467:17;31458:6;31414:71;:::i;:::-;31495:72;31563:2;31552:9;31548:18;31539:6;31495:72;:::i;:::-;31577;31645:2;31634:9;31630:18;31621:6;31577:72;:::i;:::-;31696:9;31690:4;31686:20;31681:2;31670:9;31666:18;31659:48;31724:76;31795:4;31786:6;31724:76;:::i;:::-;31716:84;;31167:640;;;;;;;:::o;31813:141::-;31869:5;31900:6;31894:13;31885:22;;31916:32;31942:5;31916:32;:::i;:::-;31813:141;;;;:::o;31960:349::-;32029:6;32078:2;32066:9;32057:7;32053:23;32049:32;32046:119;;;32084:79;;:::i;:::-;32046:119;32204:1;32229:63;32284:7;32275:6;32264:9;32260:22;32229:63;:::i;:::-;32219:73;;32175:127;31960:349;;;;:::o;32315:233::-;32354:3;32377:24;32395:5;32377:24;:::i;:::-;32368:33;;32423:66;32416:5;32413:77;32410:103;;32493:18;;:::i;:::-;32410:103;32540:1;32533:5;32529:13;32522:20;;32315:233;;;:::o;32554:180::-;32602:77;32599:1;32592:88;32699:4;32696:1;32689:15;32723:4;32720:1;32713:15;32740:185;32780:1;32797:20;32815:1;32797:20;:::i;:::-;32792:25;;32831:20;32849:1;32831:20;:::i;:::-;32826:25;;32870:1;32860:35;;32875:18;;:::i;:::-;32860:35;32917:1;32914;32910:9;32905:14;;32740:185;;;;:::o;32931:194::-;32971:4;32991:20;33009:1;32991:20;:::i;:::-;32986:25;;33025:20;33043:1;33025:20;:::i;:::-;33020:25;;33069:1;33066;33062:9;33054:17;;33093:1;33087:4;33084:11;33081:37;;;33098:18;;:::i;:::-;33081:37;32931:194;;;;:::o;33131:176::-;33163:1;33180:20;33198:1;33180:20;:::i;:::-;33175:25;;33214:20;33232:1;33214:20;:::i;:::-;33209:25;;33253:1;33243:35;;33258:18;;:::i;:::-;33243:35;33299:1;33296;33292:9;33287:14;;33131:176;;;;:::o;33313:180::-;33361:77;33358:1;33351:88;33458:4;33455:1;33448:15;33482:4;33479:1;33472:15
Swarm Source
ipfs://5e2a8cce9501ce55d717a654bc8d9976be6e89916c52f7371349b02ffda29c5a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.