Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
117 CS
Holders
112
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ClownSquad
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-19 */ // SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.1 pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ 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(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // 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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev 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); } /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // 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 tokenId of the next token 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` 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 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @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 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 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 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 returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ 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: 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. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (_addressToUint256(owner) == 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 { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * 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 ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * 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; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { 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 ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, 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. * * 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 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 { uint256 startTokenId = _currentIndex; if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _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] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 offset; do { emit Transfer(address(0), to, startTokenId + offset++); } while (offset < quantity); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); address approvedAddress = _tokenApprovals[tokenId]; bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (_addressToUint256(to) == 0) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // 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] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // 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 `_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)); address approvedAddress = _tokenApprovals[tokenId]; if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // 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] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // 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++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) public virtual 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)) } } } } /** * @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 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 returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 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: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } contract ClownPresale { mapping (address => uint8) public _presaleAddresses; mapping (address => bool) public _presaleAddressesMinted; address public owner; constructor () { owner = msg.sender; } function setMainContract(address _address) public { require(msg.sender == owner, "Clowns: You are not the owner"); owner = _address; } function addPresalers(address[] calldata _addresses) public { require(msg.sender == owner, "Clowns: You are not the owner"); for (uint x = 0; x < _addresses.length; x++) { _presaleAddresses[_addresses[x]] = 1; } } function removePresalers(address[] calldata _addresses) public { require(msg.sender == owner, "Clowns: You are not the owner"); for (uint x = 0; x < _addresses.length; x++) { _presaleAddresses[_addresses[x]] = 0; } } function isInPresale(address _address) public view returns (uint8) { return _presaleAddresses[_address]; } function isInMintedPresale(address _address) public view returns (bool) { return _presaleAddressesMinted[_address]; } function addToMinted(address _address) public { require(msg.sender == owner, "Clowns: You are not the owner"); _presaleAddressesMinted[_address] = true; } } contract ClownSquad is ERC721A { string public baseURI; uint256 public MAX = 7777; uint _saleTime = 1655697600; uint _presaleTime = 1655676000; uint _presaleTimeEnd = 1655712000; uint256 _price = 30000000000000000; address public _presaleContract; address[] public _presaleAddresses; address[] public _presaleAddressesMinted; mapping(address => bool) public _minters; mapping(address => bool) public _mintersLast; mapping(address => bool) public _presaleAlreadyMinted; address _owner; // The tokenId of the next token to be minted. uint256 private _currentIndex; constructor (string memory _initialBaseURI, address presaleContract) ERC721A("ClownSquad", "CS") { baseURI = _initialBaseURI; _presaleContract = presaleContract; _owner = msg.sender; } function price(uint _count) public view returns (uint256) { return _price * _count; } function mint(address to, uint256 quantity) public payable { require(totalSupply() + quantity <= MAX, "Clowns: Not enough left to mint"); require(totalSupply() < MAX, "Clowns: Not enough left to mint"); require(block.timestamp >= _saleTime, "Clowns: Not sale time yet!"); if (quantity > 1 && _minters[msg.sender] == false) { require(quantity == 2, "Clowns: Exceeds the max you can mint"); require(msg.value >= price(quantity-1), "Clowns: Value below price"); _safeMint(to, quantity, ''); _minters[msg.sender] = true; _mintersLast[msg.sender] = true; } else if (quantity == 1 && _minters[msg.sender] == false) { require(quantity == 1, "Clowns: Exceeds the max you can mint"); _safeMint(to, quantity, ''); _minters[msg.sender] = true; } else if (_minters[msg.sender] == true && _mintersLast[msg.sender] == false) { require(quantity == 1, "Clowns: Exceeds the max you can mint"); require(msg.value >= price(quantity), "Clowns: Value below price"); _safeMint(to, quantity, ''); _mintersLast[msg.sender] = true; } } function mintFromPresale(address to, uint256 quantity) public payable { require(block.timestamp < _presaleTimeEnd && block.timestamp >= _presaleTime, "Clowns: Presale ended!"); require(totalSupply() + quantity <= MAX, "Clowns: Not enough left to mint"); require(totalSupply() < MAX, "Clowns: Not enough left to mint"); require(quantity == 1, "Clowns: Exceeds the max you can mint"); require(quantity <= ClownPresale(_presaleContract).isInPresale(msg.sender), "Clowns: Exceeds the max you can mint in the presale"); require(ClownPresale(_presaleContract).isInPresale(msg.sender) > 0, "Clowns: You are not in the presale"); require(_presaleAlreadyMinted[msg.sender] == false, "Clowns: You already minted from the presale"); _safeMint(to, quantity, ''); _presaleAlreadyMinted[msg.sender] = true; } function didMintPresale(address addr) public view returns (bool) { return _presaleAlreadyMinted[addr]; } function reserve(uint256 quantity) public payable { require(msg.sender == _owner, "Clowns: You are not the owner"); require(totalSupply() + quantity <= MAX, "Clowns: Not enough left to mint"); require(totalSupply() < MAX, "Clowns: Not enough left to mint"); _safeMint(msg.sender, quantity, ''); } function didHeMintTheFreeOne(address addr) public view returns (bool) { return _minters[addr]; } function didHeMint(address addr) public view returns (bool) { return _mintersLast[addr]; } /** * @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. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal override { _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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) public override 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)) } } } } function withdrawAll() public payable { require(_owner == msg.sender); require(payable(msg.sender).send(address(this).balance)); } } // Creator: Elit Deus (Bleiserman)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initialBaseURI","type":"string"},{"internalType":"address","name":"presaleContract","type":"address"}],"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":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX","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"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"_checkContractOnERC721Received","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintersLast","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_presaleAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_presaleAddressesMinted","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_presaleAlreadyMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"didHeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"didHeMintTheFreeOne","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"didMintPresale","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintFromPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"payable","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":"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052611e616009556362aff0c0600a556362af9c60600b556362b02900600c55666a94d74f430000600d553480156200003a57600080fd5b506040516200392e3803806200392e8339818101604052810190620000609190620002f7565b6040518060400160405280600a81526020017f436c6f776e5371756164000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f43530000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000e4929190620001be565b508060039080519060200190620000fd929190620001be565b506200010e620001b960201b60201c565b600081905550505081600890805190602001906200012e929190620001be565b5080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200050f565b600090565b828054620001cc906200041a565b90600052602060002090601f016020900481019282620001f057600085556200023c565b82601f106200020b57805160ff19168380011785556200023c565b828001600101855582156200023c579182015b828111156200023b5782518255916020019190600101906200021e565b5b5090506200024b91906200024f565b5090565b5b808211156200026a57600081600090555060010162000250565b5090565b6000620002856200027f846200037a565b62000351565b9050828152602081018484840111156200029e57600080fd5b620002ab848285620003e4565b509392505050565b600081519050620002c481620004f5565b92915050565b600082601f830112620002dc57600080fd5b8151620002ee8482602086016200026e565b91505092915050565b600080604083850312156200030b57600080fd5b600083015167ffffffffffffffff8111156200032657600080fd5b6200033485828601620002ca565b92505060206200034785828601620002b3565b9150509250929050565b60006200035d62000370565b90506200036b828262000450565b919050565b6000604051905090565b600067ffffffffffffffff821115620003985762000397620004b5565b5b620003a382620004e4565b9050602081019050919050565b6000620003bd82620003c4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000404578082015181840152602081019050620003e7565b8381111562000414576000848401525b50505050565b600060028204905060018216806200043357607f821691505b602082108114156200044a576200044962000486565b5b50919050565b6200045b82620004e4565b810181811067ffffffffffffffff821117156200047d576200047c620004b5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200050081620003b0565b81146200050c57600080fd5b50565b61340f806200051f6000396000f3fe6080604052600436106101d85760003560e01c80636352211e11610102578063a22cb46511610095578063d49d518111610064578063d49d5181146106f8578063d7e28e3014610723578063d88343e214610760578063e985e9c51461079d576101d8565b8063a22cb4651461064d578063b88d4fde14610676578063c87b56dd1461069f578063cca5caf8146106dc576101d8565b8063819b25ba116100d1578063819b25ba146105bf578063853828b6146105db57806388f465d9146105e557806395d89b4114610622576101d8565b80636352211e146104dd5780636c0360eb1461051a57806370a0823114610545578063803930a914610582576101d8565b806323b872dd1161017a57806340c10f191161014957806340c10f191461041e578063417975831461043a57806342842e0e1461047757806349a91ddb146104a0576101d8565b806323b872dd1461033e57806326a49e37146103675780632bd7c025146103a45780633575597d146103e1576101d8565b8063095ea7b3116101b6578063095ea7b314610282578063119b2a20146102ab5780631495c18a146102e857806318160ddd14610313576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061296a565b6107da565b6040516102119190612ca4565b60405180910390f35b34801561022657600080fd5b5061022f61086c565b60405161023c9190612cbf565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129bc565b6108fe565b6040516102799190612c3d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a4919061292e565b61097a565b005b3480156102b757600080fd5b506102d260048036038101906102cd91906129bc565b610abb565b6040516102df9190612c3d565b60405180910390f35b3480156102f457600080fd5b506102fd610afa565b60405161030a9190612c3d565b60405180910390f35b34801561031f57600080fd5b50610328610b20565b6040516103359190612e01565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612828565b610b37565b005b34801561037357600080fd5b5061038e600480360381019061038991906129bc565b610b47565b60405161039b9190612e01565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906129bc565b610b5e565b6040516103d89190612c3d565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906127c3565b610b9d565b6040516104159190612ca4565b60405180910390f35b6104386004803603810190610433919061292e565b610bbd565b005b34801561044657600080fd5b50610461600480360381019061045c91906127c3565b61114d565b60405161046e9190612ca4565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612828565b61116d565b005b3480156104ac57600080fd5b506104c760048036038101906104c291906127c3565b61118d565b6040516104d49190612ca4565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129bc565b6111ad565b6040516105119190612c3d565b60405180910390f35b34801561052657600080fd5b5061052f6111bf565b60405161053c9190612cbf565b60405180910390f35b34801561055157600080fd5b5061056c600480360381019061056791906127c3565b61124d565b6040516105799190612e01565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906127c3565b6112e2565b6040516105b69190612ca4565b60405180910390f35b6105d960048036038101906105d491906129bc565b611338565b005b6105e3611487565b005b3480156105f157600080fd5b5061060c600480360381019061060791906127c3565b611521565b6040516106199190612ca4565b60405180910390f35b34801561062e57600080fd5b50610637611577565b6040516106449190612cbf565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906128f2565b611609565b005b34801561068257600080fd5b5061069d60048036038101906106989190612877565b611781565b005b3480156106ab57600080fd5b506106c660048036038101906106c191906129bc565b6117f4565b6040516106d39190612cbf565b60405180910390f35b6106f660048036038101906106f1919061292e565b611893565b005b34801561070457600080fd5b5061070d611cb3565b60405161071a9190612e01565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906127c3565b611cb9565b6040516107579190612ca4565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190612877565b611d0f565b6040516107949190612ca4565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906127ec565b611e6f565b6040516107d19190612ca4565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108655750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461087b9061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546108a79061305c565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b5050505050905090565b600061090982611f03565b61093f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610985826111ad565b90508073ffffffffffffffffffffffffffffffffffffffff166109a6611f62565b73ffffffffffffffffffffffffffffffffffffffff1614610a09576109d2816109cd611f62565b611e6f565b610a08576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60108181548110610acb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b2a611f6a565b6001546000540303905090565b610b42838383611f6f565b505050565b600081600d54610b579190612f0b565b9050919050565b600f8181548110610b6e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b60095481610bc9610b20565b610bd39190612eb5565b1115610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90612dc1565b60405180910390fd5b600954610c1f610b20565b10610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612dc1565b60405180910390fd5b600a54421015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612d81565b60405180910390fd5b600181118015610d04575060001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610e725760028114610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390612de1565b60405180910390fd5b610d61600182610d5c9190612f65565b610b47565b341015610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612d61565b60405180910390fd5b610dbd828260405180602001604052806000815250612337565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611149565b600181148015610ed2575060001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610f915760018114610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612de1565b60405180910390fd5b610f34828260405180602001604052806000815250612337565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611148565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611041575060001515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156111475760018114611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090612de1565b60405180910390fd5b61109281610b47565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612d61565b60405180910390fd5b6110ee828260405180602001604052806000815250612337565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5050565b60136020528060005260406000206000915054906101000a900460ff1681565b61118883838360405180602001604052806000815250611781565b505050565b60126020528060005260406000206000915054906101000a900460ff1681565b60006111b8826123d5565b9050919050565b600880546111cc9061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546111f89061305c565b80156112455780601f1061121a57610100808354040283529160200191611245565b820191906000526020600020905b81548152906001019060200180831161122857829003601f168201915b505050505081565b600080611259836124a3565b1415611291576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90612d01565b60405180910390fd5b600954816113d4610b20565b6113de9190612eb5565b111561141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612dc1565b60405180910390fd5b60095461142a610b20565b1061146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190612dc1565b60405180910390fd5b611484338260405180602001604052806000815250612337565b50565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061151f57600080fd5b565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600380546115869061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546115b29061305c565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b611611611f62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611676576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611683611f62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611730611f62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117759190612ca4565b60405180910390a35050565b61178c848484611f6f565b60008373ffffffffffffffffffffffffffffffffffffffff163b146117ee576117b784848484611d0f565b6117ed576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606117ff82611f03565b611835576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061183f6124ad565b9050600081511415611860576040518060200160405280600081525061188b565b8061186a846124c4565b60405160200161187b929190612c19565b6040516020818303038152906040525b915050919050565b600c54421080156118a65750600b544210155b6118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90612d41565b60405180910390fd5b600954816118f1610b20565b6118fb9190612eb5565b111561193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390612dc1565b60405180910390fd5b600954611947610b20565b10611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90612dc1565b60405180910390fd5b600181146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190612de1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb996844336040518263ffffffff1660e01b8152600401611a259190612c3d565b60206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7591906129e5565b60ff16811115611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190612ce1565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb996844336040518263ffffffff1660e01b8152600401611b179190612c3d565b60206040518083038186803b158015611b2f57600080fd5b505afa158015611b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6791906129e5565b60ff1611611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190612da1565b60405180910390fd5b60001515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490612d21565b60405180910390fd5b611c57828260405180602001604052806000815250612337565b6001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d35611f62565b8786866040518563ffffffff1660e01b8152600401611d579493929190612c58565b602060405180830381600087803b158015611d7157600080fd5b505af1925050508015611da257506040513d601f19601f82011682018060405250810190611d9f9190612993565b60015b611e1c573d8060008114611dd2576040519150601f19603f3d011682016040523d82523d6000602084013e611dd7565b606091505b50600081511415611e14576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081611f0e611f6a565b11158015611f1d575060005482105b8015611f5b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611f7a826123d5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661203a611f62565b73ffffffffffffffffffffffffffffffffffffffff161480612069575061206886612063611f62565b611e6f565b5b806120a65750612077611f62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050806120df576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006120ea866124a3565b1415612122576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61212f868686600161251e565b600061213a836124a3565b14612176576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61223d876124a3565b1717600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156122c75760006001850190506000600460008381526020019081526020016000205414156122c55760005481146122c4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461232f8686866001612524565b505050505050565b612341838361252a565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123d05760006015549050600083820390505b6123826000868380600101945086611d0f565b6123b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061236f5781601554146123cd57600080fd5b50505b505050565b600080829050806123e4611f6a565b1161246c5760005481101561246b5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612469575b600081141561245f576004600083600190039350838152602001908152602001600020549050612434565b809250505061249e565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000819050919050565b606060405180602001604052806000815250905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561250a57600183039250600a81066030018353600a810490506124ea565b508181036020830392508083525050919050565b50505050565b50505050565b600080549050600061253b846124a3565b1415612573576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156125ae576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bb600084838561251e565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612620600184146126d3565b901b60a042901b612630856124a3565b1717600460008381526020019081526020016000208190555060005b8080600101915082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482811061264c57828201600081905550506126ce6000848385612524565b505050565b6000819050919050565b60006126f06126eb84612e41565b612e1c565b90508281526020810184848401111561270857600080fd5b61271384828561301a565b509392505050565b60008135905061272a81613366565b92915050565b60008135905061273f8161337d565b92915050565b60008135905061275481613394565b92915050565b60008151905061276981613394565b92915050565b600082601f83011261278057600080fd5b81356127908482602086016126dd565b91505092915050565b6000813590506127a8816133ab565b92915050565b6000815190506127bd816133c2565b92915050565b6000602082840312156127d557600080fd5b60006127e38482850161271b565b91505092915050565b600080604083850312156127ff57600080fd5b600061280d8582860161271b565b925050602061281e8582860161271b565b9150509250929050565b60008060006060848603121561283d57600080fd5b600061284b8682870161271b565b935050602061285c8682870161271b565b925050604061286d86828701612799565b9150509250925092565b6000806000806080858703121561288d57600080fd5b600061289b8782880161271b565b94505060206128ac8782880161271b565b93505060406128bd87828801612799565b925050606085013567ffffffffffffffff8111156128da57600080fd5b6128e68782880161276f565b91505092959194509250565b6000806040838503121561290557600080fd5b60006129138582860161271b565b925050602061292485828601612730565b9150509250929050565b6000806040838503121561294157600080fd5b600061294f8582860161271b565b925050602061296085828601612799565b9150509250929050565b60006020828403121561297c57600080fd5b600061298a84828501612745565b91505092915050565b6000602082840312156129a557600080fd5b60006129b38482850161275a565b91505092915050565b6000602082840312156129ce57600080fd5b60006129dc84828501612799565b91505092915050565b6000602082840312156129f757600080fd5b6000612a05848285016127ae565b91505092915050565b612a1781612f99565b82525050565b612a2681612fab565b82525050565b6000612a3782612e72565b612a418185612e88565b9350612a51818560208601613029565b612a5a8161314c565b840191505092915050565b6000612a7082612e7d565b612a7a8185612e99565b9350612a8a818560208601613029565b612a938161314c565b840191505092915050565b6000612aa982612e7d565b612ab38185612eaa565b9350612ac3818560208601613029565b80840191505092915050565b6000612adc603383612e99565b9150612ae78261315d565b604082019050919050565b6000612aff601d83612e99565b9150612b0a826131ac565b602082019050919050565b6000612b22602b83612e99565b9150612b2d826131d5565b604082019050919050565b6000612b45601683612e99565b9150612b5082613224565b602082019050919050565b6000612b68601983612e99565b9150612b738261324d565b602082019050919050565b6000612b8b601a83612e99565b9150612b9682613276565b602082019050919050565b6000612bae602283612e99565b9150612bb98261329f565b604082019050919050565b6000612bd1601f83612e99565b9150612bdc826132ee565b602082019050919050565b6000612bf4602483612e99565b9150612bff82613317565b604082019050919050565b612c1381613003565b82525050565b6000612c258285612a9e565b9150612c318284612a9e565b91508190509392505050565b6000602082019050612c526000830184612a0e565b92915050565b6000608082019050612c6d6000830187612a0e565b612c7a6020830186612a0e565b612c876040830185612c0a565b8181036060830152612c998184612a2c565b905095945050505050565b6000602082019050612cb96000830184612a1d565b92915050565b60006020820190508181036000830152612cd98184612a65565b905092915050565b60006020820190508181036000830152612cfa81612acf565b9050919050565b60006020820190508181036000830152612d1a81612af2565b9050919050565b60006020820190508181036000830152612d3a81612b15565b9050919050565b60006020820190508181036000830152612d5a81612b38565b9050919050565b60006020820190508181036000830152612d7a81612b5b565b9050919050565b60006020820190508181036000830152612d9a81612b7e565b9050919050565b60006020820190508181036000830152612dba81612ba1565b9050919050565b60006020820190508181036000830152612dda81612bc4565b9050919050565b60006020820190508181036000830152612dfa81612be7565b9050919050565b6000602082019050612e166000830184612c0a565b92915050565b6000612e26612e37565b9050612e32828261308e565b919050565b6000604051905090565b600067ffffffffffffffff821115612e5c57612e5b61311d565b5b612e658261314c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ec082613003565b9150612ecb83613003565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f0057612eff6130bf565b5b828201905092915050565b6000612f1682613003565b9150612f2183613003565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f5a57612f596130bf565b5b828202905092915050565b6000612f7082613003565b9150612f7b83613003565b925082821015612f8e57612f8d6130bf565b5b828203905092915050565b6000612fa482612fe3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561304757808201518184015260208101905061302c565b83811115613056576000848401525b50505050565b6000600282049050600182168061307457607f821691505b60208210811415613088576130876130ee565b5b50919050565b6130978261314c565b810181811067ffffffffffffffff821117156130b6576130b561311d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f436c6f776e733a204578636565647320746865206d617820796f752063616e2060008201527f6d696e7420696e207468652070726573616c6500000000000000000000000000602082015250565b7f436c6f776e733a20596f7520617265206e6f7420746865206f776e6572000000600082015250565b7f436c6f776e733a20596f7520616c7265616479206d696e7465642066726f6d2060008201527f7468652070726573616c65000000000000000000000000000000000000000000602082015250565b7f436c6f776e733a2050726573616c6520656e6465642100000000000000000000600082015250565b7f436c6f776e733a2056616c75652062656c6f7720707269636500000000000000600082015250565b7f436c6f776e733a204e6f742073616c652074696d652079657421000000000000600082015250565b7f436c6f776e733a20596f7520617265206e6f7420696e2074686520707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b7f436c6f776e733a204e6f7420656e6f756768206c65667420746f206d696e7400600082015250565b7f436c6f776e733a204578636565647320746865206d617820796f752063616e2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b61336f81612f99565b811461337a57600080fd5b50565b61338681612fab565b811461339157600080fd5b50565b61339d81612fb7565b81146133a857600080fd5b50565b6133b481613003565b81146133bf57600080fd5b50565b6133cb8161300d565b81146133d657600080fd5b5056fea2646970667358221220fdf756c1eab8d4a10600c3d7d0b99e1383312c26db558528dc3a4a0d8adba76264736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000006f7052c7f8fdde8d3381d0963756b6627ebff9cc000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f636c6f776e73717561642e6c6f6c2f6d6574612f00000000
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80636352211e11610102578063a22cb46511610095578063d49d518111610064578063d49d5181146106f8578063d7e28e3014610723578063d88343e214610760578063e985e9c51461079d576101d8565b8063a22cb4651461064d578063b88d4fde14610676578063c87b56dd1461069f578063cca5caf8146106dc576101d8565b8063819b25ba116100d1578063819b25ba146105bf578063853828b6146105db57806388f465d9146105e557806395d89b4114610622576101d8565b80636352211e146104dd5780636c0360eb1461051a57806370a0823114610545578063803930a914610582576101d8565b806323b872dd1161017a57806340c10f191161014957806340c10f191461041e578063417975831461043a57806342842e0e1461047757806349a91ddb146104a0576101d8565b806323b872dd1461033e57806326a49e37146103675780632bd7c025146103a45780633575597d146103e1576101d8565b8063095ea7b3116101b6578063095ea7b314610282578063119b2a20146102ab5780631495c18a146102e857806318160ddd14610313576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061296a565b6107da565b6040516102119190612ca4565b60405180910390f35b34801561022657600080fd5b5061022f61086c565b60405161023c9190612cbf565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129bc565b6108fe565b6040516102799190612c3d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a4919061292e565b61097a565b005b3480156102b757600080fd5b506102d260048036038101906102cd91906129bc565b610abb565b6040516102df9190612c3d565b60405180910390f35b3480156102f457600080fd5b506102fd610afa565b60405161030a9190612c3d565b60405180910390f35b34801561031f57600080fd5b50610328610b20565b6040516103359190612e01565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612828565b610b37565b005b34801561037357600080fd5b5061038e600480360381019061038991906129bc565b610b47565b60405161039b9190612e01565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906129bc565b610b5e565b6040516103d89190612c3d565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906127c3565b610b9d565b6040516104159190612ca4565b60405180910390f35b6104386004803603810190610433919061292e565b610bbd565b005b34801561044657600080fd5b50610461600480360381019061045c91906127c3565b61114d565b60405161046e9190612ca4565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612828565b61116d565b005b3480156104ac57600080fd5b506104c760048036038101906104c291906127c3565b61118d565b6040516104d49190612ca4565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129bc565b6111ad565b6040516105119190612c3d565b60405180910390f35b34801561052657600080fd5b5061052f6111bf565b60405161053c9190612cbf565b60405180910390f35b34801561055157600080fd5b5061056c600480360381019061056791906127c3565b61124d565b6040516105799190612e01565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906127c3565b6112e2565b6040516105b69190612ca4565b60405180910390f35b6105d960048036038101906105d491906129bc565b611338565b005b6105e3611487565b005b3480156105f157600080fd5b5061060c600480360381019061060791906127c3565b611521565b6040516106199190612ca4565b60405180910390f35b34801561062e57600080fd5b50610637611577565b6040516106449190612cbf565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906128f2565b611609565b005b34801561068257600080fd5b5061069d60048036038101906106989190612877565b611781565b005b3480156106ab57600080fd5b506106c660048036038101906106c191906129bc565b6117f4565b6040516106d39190612cbf565b60405180910390f35b6106f660048036038101906106f1919061292e565b611893565b005b34801561070457600080fd5b5061070d611cb3565b60405161071a9190612e01565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906127c3565b611cb9565b6040516107579190612ca4565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190612877565b611d0f565b6040516107949190612ca4565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906127ec565b611e6f565b6040516107d19190612ca4565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108655750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461087b9061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546108a79061305c565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b5050505050905090565b600061090982611f03565b61093f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610985826111ad565b90508073ffffffffffffffffffffffffffffffffffffffff166109a6611f62565b73ffffffffffffffffffffffffffffffffffffffff1614610a09576109d2816109cd611f62565b611e6f565b610a08576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60108181548110610acb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b2a611f6a565b6001546000540303905090565b610b42838383611f6f565b505050565b600081600d54610b579190612f0b565b9050919050565b600f8181548110610b6e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b60095481610bc9610b20565b610bd39190612eb5565b1115610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90612dc1565b60405180910390fd5b600954610c1f610b20565b10610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612dc1565b60405180910390fd5b600a54421015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612d81565b60405180910390fd5b600181118015610d04575060001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610e725760028114610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390612de1565b60405180910390fd5b610d61600182610d5c9190612f65565b610b47565b341015610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612d61565b60405180910390fd5b610dbd828260405180602001604052806000815250612337565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611149565b600181148015610ed2575060001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610f915760018114610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612de1565b60405180910390fd5b610f34828260405180602001604052806000815250612337565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611148565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015611041575060001515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156111475760018114611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090612de1565b60405180910390fd5b61109281610b47565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612d61565b60405180910390fd5b6110ee828260405180602001604052806000815250612337565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5050565b60136020528060005260406000206000915054906101000a900460ff1681565b61118883838360405180602001604052806000815250611781565b505050565b60126020528060005260406000206000915054906101000a900460ff1681565b60006111b8826123d5565b9050919050565b600880546111cc9061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546111f89061305c565b80156112455780601f1061121a57610100808354040283529160200191611245565b820191906000526020600020905b81548152906001019060200180831161122857829003601f168201915b505050505081565b600080611259836124a3565b1415611291576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90612d01565b60405180910390fd5b600954816113d4610b20565b6113de9190612eb5565b111561141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612dc1565b60405180910390fd5b60095461142a610b20565b1061146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190612dc1565b60405180910390fd5b611484338260405180602001604052806000815250612337565b50565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061151f57600080fd5b565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600380546115869061305c565b80601f01602080910402602001604051908101604052809291908181526020018280546115b29061305c565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b611611611f62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611676576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611683611f62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611730611f62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117759190612ca4565b60405180910390a35050565b61178c848484611f6f565b60008373ffffffffffffffffffffffffffffffffffffffff163b146117ee576117b784848484611d0f565b6117ed576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606117ff82611f03565b611835576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061183f6124ad565b9050600081511415611860576040518060200160405280600081525061188b565b8061186a846124c4565b60405160200161187b929190612c19565b6040516020818303038152906040525b915050919050565b600c54421080156118a65750600b544210155b6118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90612d41565b60405180910390fd5b600954816118f1610b20565b6118fb9190612eb5565b111561193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390612dc1565b60405180910390fd5b600954611947610b20565b10611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90612dc1565b60405180910390fd5b600181146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190612de1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb996844336040518263ffffffff1660e01b8152600401611a259190612c3d565b60206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7591906129e5565b60ff16811115611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190612ce1565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb996844336040518263ffffffff1660e01b8152600401611b179190612c3d565b60206040518083038186803b158015611b2f57600080fd5b505afa158015611b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6791906129e5565b60ff1611611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190612da1565b60405180910390fd5b60001515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490612d21565b60405180910390fd5b611c57828260405180602001604052806000815250612337565b6001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d35611f62565b8786866040518563ffffffff1660e01b8152600401611d579493929190612c58565b602060405180830381600087803b158015611d7157600080fd5b505af1925050508015611da257506040513d601f19601f82011682018060405250810190611d9f9190612993565b60015b611e1c573d8060008114611dd2576040519150601f19603f3d011682016040523d82523d6000602084013e611dd7565b606091505b50600081511415611e14576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081611f0e611f6a565b11158015611f1d575060005482105b8015611f5b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611f7a826123d5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661203a611f62565b73ffffffffffffffffffffffffffffffffffffffff161480612069575061206886612063611f62565b611e6f565b5b806120a65750612077611f62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050806120df576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006120ea866124a3565b1415612122576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61212f868686600161251e565b600061213a836124a3565b14612176576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61223d876124a3565b1717600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156122c75760006001850190506000600460008381526020019081526020016000205414156122c55760005481146122c4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461232f8686866001612524565b505050505050565b612341838361252a565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123d05760006015549050600083820390505b6123826000868380600101945086611d0f565b6123b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061236f5781601554146123cd57600080fd5b50505b505050565b600080829050806123e4611f6a565b1161246c5760005481101561246b5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612469575b600081141561245f576004600083600190039350838152602001908152602001600020549050612434565b809250505061249e565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000819050919050565b606060405180602001604052806000815250905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561250a57600183039250600a81066030018353600a810490506124ea565b508181036020830392508083525050919050565b50505050565b50505050565b600080549050600061253b846124a3565b1415612573576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156125ae576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bb600084838561251e565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612620600184146126d3565b901b60a042901b612630856124a3565b1717600460008381526020019081526020016000208190555060005b8080600101915082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482811061264c57828201600081905550506126ce6000848385612524565b505050565b6000819050919050565b60006126f06126eb84612e41565b612e1c565b90508281526020810184848401111561270857600080fd5b61271384828561301a565b509392505050565b60008135905061272a81613366565b92915050565b60008135905061273f8161337d565b92915050565b60008135905061275481613394565b92915050565b60008151905061276981613394565b92915050565b600082601f83011261278057600080fd5b81356127908482602086016126dd565b91505092915050565b6000813590506127a8816133ab565b92915050565b6000815190506127bd816133c2565b92915050565b6000602082840312156127d557600080fd5b60006127e38482850161271b565b91505092915050565b600080604083850312156127ff57600080fd5b600061280d8582860161271b565b925050602061281e8582860161271b565b9150509250929050565b60008060006060848603121561283d57600080fd5b600061284b8682870161271b565b935050602061285c8682870161271b565b925050604061286d86828701612799565b9150509250925092565b6000806000806080858703121561288d57600080fd5b600061289b8782880161271b565b94505060206128ac8782880161271b565b93505060406128bd87828801612799565b925050606085013567ffffffffffffffff8111156128da57600080fd5b6128e68782880161276f565b91505092959194509250565b6000806040838503121561290557600080fd5b60006129138582860161271b565b925050602061292485828601612730565b9150509250929050565b6000806040838503121561294157600080fd5b600061294f8582860161271b565b925050602061296085828601612799565b9150509250929050565b60006020828403121561297c57600080fd5b600061298a84828501612745565b91505092915050565b6000602082840312156129a557600080fd5b60006129b38482850161275a565b91505092915050565b6000602082840312156129ce57600080fd5b60006129dc84828501612799565b91505092915050565b6000602082840312156129f757600080fd5b6000612a05848285016127ae565b91505092915050565b612a1781612f99565b82525050565b612a2681612fab565b82525050565b6000612a3782612e72565b612a418185612e88565b9350612a51818560208601613029565b612a5a8161314c565b840191505092915050565b6000612a7082612e7d565b612a7a8185612e99565b9350612a8a818560208601613029565b612a938161314c565b840191505092915050565b6000612aa982612e7d565b612ab38185612eaa565b9350612ac3818560208601613029565b80840191505092915050565b6000612adc603383612e99565b9150612ae78261315d565b604082019050919050565b6000612aff601d83612e99565b9150612b0a826131ac565b602082019050919050565b6000612b22602b83612e99565b9150612b2d826131d5565b604082019050919050565b6000612b45601683612e99565b9150612b5082613224565b602082019050919050565b6000612b68601983612e99565b9150612b738261324d565b602082019050919050565b6000612b8b601a83612e99565b9150612b9682613276565b602082019050919050565b6000612bae602283612e99565b9150612bb98261329f565b604082019050919050565b6000612bd1601f83612e99565b9150612bdc826132ee565b602082019050919050565b6000612bf4602483612e99565b9150612bff82613317565b604082019050919050565b612c1381613003565b82525050565b6000612c258285612a9e565b9150612c318284612a9e565b91508190509392505050565b6000602082019050612c526000830184612a0e565b92915050565b6000608082019050612c6d6000830187612a0e565b612c7a6020830186612a0e565b612c876040830185612c0a565b8181036060830152612c998184612a2c565b905095945050505050565b6000602082019050612cb96000830184612a1d565b92915050565b60006020820190508181036000830152612cd98184612a65565b905092915050565b60006020820190508181036000830152612cfa81612acf565b9050919050565b60006020820190508181036000830152612d1a81612af2565b9050919050565b60006020820190508181036000830152612d3a81612b15565b9050919050565b60006020820190508181036000830152612d5a81612b38565b9050919050565b60006020820190508181036000830152612d7a81612b5b565b9050919050565b60006020820190508181036000830152612d9a81612b7e565b9050919050565b60006020820190508181036000830152612dba81612ba1565b9050919050565b60006020820190508181036000830152612dda81612bc4565b9050919050565b60006020820190508181036000830152612dfa81612be7565b9050919050565b6000602082019050612e166000830184612c0a565b92915050565b6000612e26612e37565b9050612e32828261308e565b919050565b6000604051905090565b600067ffffffffffffffff821115612e5c57612e5b61311d565b5b612e658261314c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ec082613003565b9150612ecb83613003565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f0057612eff6130bf565b5b828201905092915050565b6000612f1682613003565b9150612f2183613003565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f5a57612f596130bf565b5b828202905092915050565b6000612f7082613003565b9150612f7b83613003565b925082821015612f8e57612f8d6130bf565b5b828203905092915050565b6000612fa482612fe3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561304757808201518184015260208101905061302c565b83811115613056576000848401525b50505050565b6000600282049050600182168061307457607f821691505b60208210811415613088576130876130ee565b5b50919050565b6130978261314c565b810181811067ffffffffffffffff821117156130b6576130b561311d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f436c6f776e733a204578636565647320746865206d617820796f752063616e2060008201527f6d696e7420696e207468652070726573616c6500000000000000000000000000602082015250565b7f436c6f776e733a20596f7520617265206e6f7420746865206f776e6572000000600082015250565b7f436c6f776e733a20596f7520616c7265616479206d696e7465642066726f6d2060008201527f7468652070726573616c65000000000000000000000000000000000000000000602082015250565b7f436c6f776e733a2050726573616c6520656e6465642100000000000000000000600082015250565b7f436c6f776e733a2056616c75652062656c6f7720707269636500000000000000600082015250565b7f436c6f776e733a204e6f742073616c652074696d652079657421000000000000600082015250565b7f436c6f776e733a20596f7520617265206e6f7420696e2074686520707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b7f436c6f776e733a204e6f7420656e6f756768206c65667420746f206d696e7400600082015250565b7f436c6f776e733a204578636565647320746865206d617820796f752063616e2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b61336f81612f99565b811461337a57600080fd5b50565b61338681612fab565b811461339157600080fd5b50565b61339d81612fb7565b81146133a857600080fd5b50565b6133b481613003565b81146133bf57600080fd5b50565b6133cb8161300d565b81146133d657600080fd5b5056fea2646970667358221220fdf756c1eab8d4a10600c3d7d0b99e1383312c26db558528dc3a4a0d8adba76264736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000006f7052c7f8fdde8d3381d0963756b6627ebff9cc000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f636c6f776e73717561642e6c6f6c2f6d6574612f00000000
-----Decoded View---------------
Arg [0] : _initialBaseURI (string): https://clownsquad.lol/meta/
Arg [1] : presaleContract (address): 0x6f7052c7f8FdDe8D3381D0963756B6627eBFF9Cc
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000006f7052c7f8fdde8d3381d0963756b6627ebff9cc
Arg [2] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [3] : 68747470733a2f2f636c6f776e73717561642e6c6f6c2f6d6574612f00000000
Deployed Bytecode Sourcemap
38102:6259:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12790:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17826:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19810:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19358:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38420:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38347:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11844:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20696:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38962:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38382:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38467:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39069:1236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38565:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20937:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38514:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17615:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38142:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13469:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41680:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41331:341;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44205:153;;;:::i;:::-;;41798:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17995;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20086:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21193:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18170:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40313:884;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38170:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41205:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43473:724;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20465:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12790:615;12875:4;13190:10;13175:25;;:11;:25;;;;:102;;;;13267:10;13252:25;;:11;:25;;;;13175:102;:179;;;;13344:10;13329:25;;:11;:25;;;;13175:179;13155:199;;12790:615;;;:::o;17826:100::-;17880:13;17913:5;17906:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17826:100;:::o;19810:204::-;19878:7;19903:16;19911:7;19903;:16::i;:::-;19898:64;;19928:34;;;;;;;;;;;;;;19898:64;19982:15;:24;19998:7;19982:24;;;;;;;;;;;;;;;;;;;;;19975:31;;19810:204;;;:::o;19358:386::-;19431:13;19447:16;19455:7;19447;:16::i;:::-;19431:32;;19503:5;19480:28;;:19;:17;:19::i;:::-;:28;;;19476:175;;19528:44;19545:5;19552:19;:17;:19::i;:::-;19528:16;:44::i;:::-;19523:128;;19600:35;;;;;;;;;;;;;;19523:128;19476:175;19690:2;19663:15;:24;19679:7;19663:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19728:7;19724:2;19708:28;;19717:5;19708:28;;;;;;;;;;;;19358:386;;;:::o;38420:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38347:31::-;;;;;;;;;;;;;:::o;11844:315::-;11897:7;12125:15;:13;:15::i;:::-;12110:12;;12094:13;;:28;:46;12087:53;;11844:315;:::o;20696:170::-;20830:28;20840:4;20846:2;20850:7;20830:9;:28::i;:::-;20696:170;;;:::o;38962:99::-;39011:7;39047:6;39038;;:15;;;;:::i;:::-;39031:22;;38962:99;;;:::o;38382:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38467:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;39069:1236::-;39175:3;;39163:8;39147:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:31;;39139:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39249:3;;39233:13;:11;:13::i;:::-;:19;39225:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39326:9;;39307:15;:28;;39299:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39394:1;39383:8;:12;:45;;;;;39423:5;39399:29;;:8;:20;39408:10;39399:20;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;39383:45;39379:919;;;39465:1;39453:8;:13;39445:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39543:17;39558:1;39549:8;:10;;;;:::i;:::-;39543:5;:17::i;:::-;39530:9;:30;;39522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39605:27;39615:2;39619:8;39605:27;;;;;;;;;;;;:9;:27::i;:::-;39670:4;39647:8;:20;39656:10;39647:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39716:4;39689:12;:24;39702:10;39689:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;39379:919;;;39754:1;39742:8;:13;:46;;;;;39783:5;39759:29;;:8;:20;39768:10;39759:20;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;39742:46;39738:560;;;39825:1;39813:8;:13;39805:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39882:27;39892:2;39896:8;39882:27;;;;;;;;;;;;:9;:27::i;:::-;39947:4;39924:8;:20;39933:10;39924:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39738:560;;;39997:4;39973:28;;:8;:20;39982:10;39973:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;:65;;;;;40033:5;40005:33;;:12;:24;40018:10;40005:24;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;39973:65;39969:329;;;40075:1;40063:8;:13;40055:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40153:15;40159:8;40153:5;:15::i;:::-;40140:9;:28;;40132:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40213:27;40223:2;40227:8;40213:27;;;;;;;;;;;;:9;:27::i;:::-;40282:4;40255:12;:24;40268:10;40255:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;39969:329;39738:560;39379:919;39069:1236;;:::o;38565:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;20937:185::-;21075:39;21092:4;21098:2;21102:7;21075:39;;;;;;;;;;;;:16;:39::i;:::-;20937:185;;;:::o;38514:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17615:144::-;17679:7;17722:27;17741:7;17722:18;:27::i;:::-;17699:52;;17615:144;;;:::o;38142:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13469:234::-;13533:7;13585:1;13557:24;13575:5;13557:17;:24::i;:::-;:29;13553:70;;;13595:28;;;;;;;;;;;;;;13553:70;8814:13;13641:18;:25;13660:5;13641:25;;;;;;;;;;;;;;;;:54;13634:61;;13469:234;;;:::o;41680:110::-;41744:4;41768:8;:14;41777:4;41768:14;;;;;;;;;;;;;;;;;;;;;;;;;41761:21;;41680:110;;;:::o;41331:341::-;41414:6;;;;;;;;;;;41400:20;;:10;:20;;;41392:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41501:3;;41489:8;41473:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:31;;41465:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41575:3;;41559:13;:11;:13::i;:::-;:19;41551:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41627:35;41637:10;41649:8;41627:35;;;;;;;;;;;;:9;:35::i;:::-;41331:341;:::o;44205:153::-;44272:10;44262:20;;:6;;;;;;;;;;;:20;;;44254:29;;;;;;44310:10;44302:24;;:47;44327:21;44302:47;;;;;;;;;;;;;;;;;;;;;;;44294:56;;;;;;44205:153::o;41798:104::-;41852:4;41876:12;:18;41889:4;41876:18;;;;;;;;;;;;;;;;;;;;;;;;;41869:25;;41798:104;;;:::o;17995:::-;18051:13;18084:7;18077:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17995:104;:::o;20086:308::-;20197:19;:17;:19::i;:::-;20185:31;;:8;:31;;;20181:61;;;20225:17;;;;;;;;;;;;;;20181:61;20307:8;20255:18;:39;20274:19;:17;:19::i;:::-;20255:39;;;;;;;;;;;;;;;:49;20295:8;20255:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;20367:8;20331:55;;20346:19;:17;:19::i;:::-;20331:55;;;20377:8;20331:55;;;;;;:::i;:::-;;;;;;;;20086:308;;:::o;21193:396::-;21360:28;21370:4;21376:2;21380:7;21360:9;:28::i;:::-;21421:1;21403:2;:14;;;:19;21399:183;;21442:56;21473:4;21479:2;21483:7;21492:5;21442:30;:56::i;:::-;21437:145;;21526:40;;;;;;;;;;;;;;21437:145;21399:183;21193:396;;;;:::o;18170:318::-;18243:13;18274:16;18282:7;18274;:16::i;:::-;18269:59;;18299:29;;;;;;;;;;;;;;18269:59;18341:21;18365:10;:8;:10::i;:::-;18341:34;;18418:1;18399:7;18393:21;:26;;:87;;;;;;;;;;;;;;;;;18446:7;18455:18;18465:7;18455:9;:18::i;:::-;18429:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18393:87;18386:94;;;18170:318;;;:::o;40313:884::-;40420:15;;40402;:33;:68;;;;;40458:12;;40439:15;:31;;40402:68;40394:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;40544:3;;40532:8;40516:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:31;;40508:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40618:3;;40602:13;:11;:13::i;:::-;:19;40594:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40688:1;40676:8;:13;40668:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40774:16;;;;;;;;;;;40761:42;;;40804:10;40761:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40749:66;;:8;:66;;40741:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;40947:1;40903:16;;;;;;;;;;;40890:42;;;40933:10;40890:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;40882:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;41043:5;41006:42;;:21;:33;41028:10;41006:33;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;40998:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;41109:27;41119:2;41123:8;41109:27;;;;;;;;;;;;:9;:27::i;:::-;41183:4;41147:21;:33;41169:10;41147:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40313:884;;:::o;38170:25::-;;;;:::o;41205:118::-;41264:4;41288:21;:27;41310:4;41288:27;;;;;;;;;;;;;;;;;;;;;;;;;41281:34;;41205:118;;;:::o;43473:724::-;43644:4;43690:2;43665:45;;;43711:19;:17;:19::i;:::-;43732:4;43738:7;43747:5;43665:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43661:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43965:1;43948:6;:13;:18;43944:235;;;43994:40;;;;;;;;;;;;;;43944:235;44137:6;44131:13;44122:6;44118:2;44114:15;44107:38;43661:529;43834:54;;;43824:64;;;:6;:64;;;;43817:71;;;43473:724;;;;;;:::o;20465:164::-;20562:4;20586:18;:25;20605:5;20586:25;;;;;;;;;;;;;;;:35;20612:8;20586:35;;;;;;;;;;;;;;;;;;;;;;;;;20579:42;;20465:164;;;;:::o;21844:273::-;21901:4;21957:7;21938:15;:13;:15::i;:::-;:26;;:66;;;;;21991:13;;21981:7;:23;21938:66;:152;;;;;22089:1;9584:8;22042:17;:26;22060:7;22042:26;;;;;;;;;;;;:43;:48;21938:152;21918:172;;21844:273;;;:::o;34535:105::-;34595:7;34622:10;34615:17;;34535:105;:::o;11368:92::-;11424:7;11368:92;:::o;25520:2654::-;25635:27;25665;25684:7;25665:18;:27::i;:::-;25635:57;;25750:4;25709:45;;25725:19;25709:45;;;25705:86;;25763:28;;;;;;;;;;;;;;25705:86;25804:23;25830:15;:24;25846:7;25830:24;;;;;;;;;;;;;;;;;;;;;25804:50;;25867:22;25916:4;25893:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;25937:43;25954:4;25960:19;:17;:19::i;:::-;25937:16;:43::i;:::-;25893:87;:142;;;;26016:19;:17;:19::i;:::-;25997:38;;:15;:38;;;25893:142;25867:169;;26054:17;26049:66;;26080:35;;;;;;;;;;;;;;26049:66;26155:1;26130:21;26148:2;26130:17;:21::i;:::-;:26;26126:62;;;26165:23;;;;;;;;;;;;;;26126:62;26201:43;26223:4;26229:2;26233:7;26242:1;26201:21;:43::i;:::-;26352:1;26314:34;26332:15;26314:17;:34::i;:::-;:39;26310:103;;26377:15;:24;26393:7;26377:24;;;;;;;;;;;;26370:31;;;;;;;;;;;26310:103;26780:18;:24;26799:4;26780:24;;;;;;;;;;;;;;;;26778:26;;;;;;;;;;;;26849:18;:22;26868:2;26849:22;;;;;;;;;;;;;;;;26847:24;;;;;;;;;;;9862:8;9468:3;27230:15;:41;;27188:21;27206:2;27188:17;:21::i;:::-;:84;:128;27142:17;:26;27160:7;27142:26;;;;;;;;;;;:174;;;;27486:1;9862:8;27436:19;:46;:51;27432:626;;;27508:19;27540:1;27530:7;:11;27508:33;;27697:1;27663:17;:30;27681:11;27663:30;;;;;;;;;;;;:35;27659:384;;;27801:13;;27786:11;:28;27782:242;;27981:19;27948:17;:30;27966:11;27948:30;;;;;;;;;;;:52;;;;27782:242;27659:384;27432:626;;28105:7;28101:2;28086:27;;28095:4;28086:27;;;;;;;;;;;;28124:42;28145:4;28151:2;28155:7;28164:1;28124:20;:42::i;:::-;25520:2654;;;;;;:::o;42289:692::-;42423:19;42429:2;42433:8;42423:5;:19::i;:::-;42502:1;42484:2;:14;;;:19;42480:483;;42524:11;42538:13;;42524:27;;42570:13;42592:8;42586:3;:14;42570:30;;42619:233;42650:62;42689:1;42693:2;42697:7;;;;;;42706:5;42650:30;:62::i;:::-;42645:167;;42748:40;;;;;;;;;;;;;;42645:167;42847:3;42839:5;:11;42619:233;;42934:3;42917:13;;:20;42913:34;;42939:8;;;42913:34;42480:483;;;42289:692;;;:::o;15130:1129::-;15197:7;15217:12;15232:7;15217:22;;15300:4;15281:15;:13;:15::i;:::-;:23;15277:915;;15334:13;;15327:4;:20;15323:869;;;15372:14;15389:17;:23;15407:4;15389:23;;;;;;;;;;;;15372:40;;15505:1;9584:8;15478:6;:23;:28;15474:699;;;15997:113;16014:1;16004:6;:11;15997:113;;;16057:17;:25;16075:6;;;;;;;16057:25;;;;;;;;;;;;16048:34;;15997:113;;;16143:6;16136:13;;;;;;15474:699;15323:869;;15277:915;16220:31;;;;;;;;;;;;;;15130:1129;;;;:::o;18919:148::-;18983:14;19044:5;19034:15;;19019:41;;;:::o;18740:94::-;18791:13;18817:9;;;;;;;;;;;;;;18740:94;:::o;34746:1960::-;34803:17;35222:3;35215:4;35209:11;35205:21;35198:28;;35313:3;35307:4;35300:17;35419:3;35875:5;36005:1;36000:3;35996:11;35989:18;;36142:2;36136:4;36132:13;36128:2;36124:22;36119:3;36111:36;36183:2;36177:4;36173:13;36165:21;;35767:697;36202:4;35767:697;;;36393:1;36388:3;36384:11;36377:18;;36444:2;36438:4;36434:13;36430:2;36426:22;36421:3;36413:36;36297:2;36291:4;36287:13;36279:21;;35767:697;;;35771:430;36503:3;36498;36494:13;36618:2;36613:3;36609:12;36602:19;;36681:6;36676:3;36669:19;34842:1857;;;;;:::o;33368:159::-;;;;;:::o;34186:158::-;;;;;:::o;23656:1610::-;23721:20;23744:13;;23721:36;;23797:1;23772:21;23790:2;23772:17;:21::i;:::-;:26;23768:58;;;23807:19;;;;;;;;;;;;;;23768:58;23853:1;23841:8;:13;23837:44;;;23863:18;;;;;;;;;;;;;;23837:44;23894:61;23924:1;23928:2;23932:12;23946:8;23894:21;:61::i;:::-;24498:1;8951:2;24469:1;:25;;24468:31;24456:8;:44;24430:18;:22;24449:2;24430:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;9727:3;24899:29;24926:1;24914:8;:13;24899:14;:29::i;:::-;:56;;9468:3;24836:15;:41;;24794:21;24812:2;24794:17;:21::i;:::-;:84;:162;24743:17;:31;24761:12;24743:31;;;;;;;;;;;:213;;;;24973:14;25002:119;25069:8;;;;;;25054:12;:23;25050:2;25029:49;;25046:1;25029:49;;;;;;;;;;;;25111:8;25102:6;:17;25002:119;;25168:8;25153:12;:23;25137:13;:39;;;;23656:1610;25198:60;25227:1;25231:2;25235:12;25249:8;25198:20;:60::i;:::-;23656:1610;;;:::o;19154:142::-;19212:14;19273:5;19263:15;;19248:41;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1220:139::-;1266:5;1304:6;1291:20;1282:29;;1320:33;1347:5;1320:33;:::i;:::-;1272:87;;;;:::o;1365:139::-;1420:5;1451:6;1445:13;1436:22;;1467:31;1492:5;1467:31;:::i;:::-;1426:78;;;;:::o;1510:262::-;1569:6;1618:2;1606:9;1597:7;1593:23;1589:32;1586:2;;;1634:1;1631;1624:12;1586:2;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1576:196;;;;:::o;1778:407::-;1846:6;1854;1903:2;1891:9;1882:7;1878:23;1874:32;1871:2;;;1919:1;1916;1909:12;1871:2;1962:1;1987:53;2032:7;2023:6;2012:9;2008:22;1987:53;:::i;:::-;1977:63;;1933:117;2089:2;2115:53;2160:7;2151:6;2140:9;2136:22;2115:53;:::i;:::-;2105:63;;2060:118;1861:324;;;;;:::o;2191:552::-;2268:6;2276;2284;2333:2;2321:9;2312:7;2308:23;2304:32;2301:2;;;2349:1;2346;2339:12;2301:2;2392:1;2417:53;2462:7;2453:6;2442:9;2438:22;2417:53;:::i;:::-;2407:63;;2363:117;2519:2;2545:53;2590:7;2581:6;2570:9;2566:22;2545:53;:::i;:::-;2535:63;;2490:118;2647:2;2673:53;2718:7;2709:6;2698:9;2694:22;2673:53;:::i;:::-;2663:63;;2618:118;2291:452;;;;;:::o;2749:809::-;2844:6;2852;2860;2868;2917:3;2905:9;2896:7;2892:23;2888:33;2885:2;;;2934:1;2931;2924:12;2885:2;2977:1;3002:53;3047:7;3038:6;3027:9;3023:22;3002:53;:::i;:::-;2992:63;;2948:117;3104:2;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3075:118;3232:2;3258:53;3303:7;3294:6;3283:9;3279:22;3258:53;:::i;:::-;3248:63;;3203:118;3388:2;3377:9;3373:18;3360:32;3419:18;3411:6;3408:30;3405:2;;;3451:1;3448;3441:12;3405:2;3479:62;3533:7;3524:6;3513:9;3509:22;3479:62;:::i;:::-;3469:72;;3331:220;2875:683;;;;;;;:::o;3564:401::-;3629:6;3637;3686:2;3674:9;3665:7;3661:23;3657:32;3654:2;;;3702:1;3699;3692:12;3654:2;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3872:2;3898:50;3940:7;3931:6;3920:9;3916:22;3898:50;:::i;:::-;3888:60;;3843:115;3644:321;;;;;:::o;3971:407::-;4039:6;4047;4096:2;4084:9;4075:7;4071:23;4067:32;4064:2;;;4112:1;4109;4102:12;4064:2;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4054:324;;;;;:::o;4384:260::-;4442:6;4491:2;4479:9;4470:7;4466:23;4462:32;4459:2;;;4507:1;4504;4497:12;4459:2;4550:1;4575:52;4619:7;4610:6;4599:9;4595:22;4575:52;:::i;:::-;4565:62;;4521:116;4449:195;;;;:::o;4650:282::-;4719:6;4768:2;4756:9;4747:7;4743:23;4739:32;4736:2;;;4784:1;4781;4774:12;4736:2;4827:1;4852:63;4907:7;4898:6;4887:9;4883:22;4852:63;:::i;:::-;4842:73;;4798:127;4726:206;;;;:::o;4938:262::-;4997:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:2;;;5062:1;5059;5052:12;5014:2;5105:1;5130:53;5175:7;5166:6;5155:9;5151:22;5130:53;:::i;:::-;5120:63;;5076:117;5004:196;;;;:::o;5206:280::-;5274:6;5323:2;5311:9;5302:7;5298:23;5294:32;5291:2;;;5339:1;5336;5329:12;5291:2;5382:1;5407:62;5461:7;5452:6;5441:9;5437:22;5407:62;:::i;:::-;5397:72;;5353:126;5281:205;;;;:::o;5492:118::-;5579:24;5597:5;5579:24;:::i;:::-;5574:3;5567:37;5557:53;;:::o;5616:109::-;5697:21;5712:5;5697:21;:::i;:::-;5692:3;5685:34;5675:50;;:::o;5731:360::-;5817:3;5845:38;5877:5;5845:38;:::i;:::-;5899:70;5962:6;5957:3;5899:70;:::i;:::-;5892:77;;5978:52;6023:6;6018:3;6011:4;6004:5;6000:16;5978:52;:::i;:::-;6055:29;6077:6;6055:29;:::i;:::-;6050:3;6046:39;6039:46;;5821:270;;;;;:::o;6097:364::-;6185:3;6213:39;6246:5;6213:39;:::i;:::-;6268:71;6332:6;6327:3;6268:71;:::i;:::-;6261:78;;6348:52;6393:6;6388:3;6381:4;6374:5;6370:16;6348:52;:::i;:::-;6425:29;6447:6;6425:29;:::i;:::-;6420:3;6416:39;6409:46;;6189:272;;;;;:::o;6467:377::-;6573:3;6601:39;6634:5;6601:39;:::i;:::-;6656:89;6738:6;6733:3;6656:89;:::i;:::-;6649:96;;6754:52;6799:6;6794:3;6787:4;6780:5;6776:16;6754:52;:::i;:::-;6831:6;6826:3;6822:16;6815:23;;6577:267;;;;;:::o;6850:366::-;6992:3;7013:67;7077:2;7072:3;7013:67;:::i;:::-;7006:74;;7089:93;7178:3;7089:93;:::i;:::-;7207:2;7202:3;7198:12;7191:19;;6996:220;;;:::o;7222:366::-;7364:3;7385:67;7449:2;7444:3;7385:67;:::i;:::-;7378:74;;7461:93;7550:3;7461:93;:::i;:::-;7579:2;7574:3;7570:12;7563:19;;7368:220;;;:::o;7594:366::-;7736:3;7757:67;7821:2;7816:3;7757:67;:::i;:::-;7750:74;;7833:93;7922:3;7833:93;:::i;:::-;7951:2;7946:3;7942:12;7935:19;;7740:220;;;:::o;7966:366::-;8108:3;8129:67;8193:2;8188:3;8129:67;:::i;:::-;8122:74;;8205:93;8294:3;8205:93;:::i;:::-;8323:2;8318:3;8314:12;8307:19;;8112:220;;;:::o;8338:366::-;8480:3;8501:67;8565:2;8560:3;8501:67;:::i;:::-;8494:74;;8577:93;8666:3;8577:93;:::i;:::-;8695:2;8690:3;8686:12;8679:19;;8484:220;;;:::o;8710:366::-;8852:3;8873:67;8937:2;8932:3;8873:67;:::i;:::-;8866:74;;8949:93;9038:3;8949:93;:::i;:::-;9067:2;9062:3;9058:12;9051:19;;8856:220;;;:::o;9082:366::-;9224:3;9245:67;9309:2;9304:3;9245:67;:::i;:::-;9238:74;;9321:93;9410:3;9321:93;:::i;:::-;9439:2;9434:3;9430:12;9423:19;;9228:220;;;:::o;9454:366::-;9596:3;9617:67;9681:2;9676:3;9617:67;:::i;:::-;9610:74;;9693:93;9782:3;9693:93;:::i;:::-;9811:2;9806:3;9802:12;9795:19;;9600:220;;;:::o;9826:366::-;9968:3;9989:67;10053:2;10048:3;9989:67;:::i;:::-;9982:74;;10065:93;10154:3;10065:93;:::i;:::-;10183:2;10178:3;10174:12;10167:19;;9972:220;;;:::o;10198:118::-;10285:24;10303:5;10285:24;:::i;:::-;10280:3;10273:37;10263:53;;:::o;10322:435::-;10502:3;10524:95;10615:3;10606:6;10524:95;:::i;:::-;10517:102;;10636:95;10727:3;10718:6;10636:95;:::i;:::-;10629:102;;10748:3;10741:10;;10506:251;;;;;:::o;10763:222::-;10856:4;10894:2;10883:9;10879:18;10871:26;;10907:71;10975:1;10964:9;10960:17;10951:6;10907:71;:::i;:::-;10861:124;;;;:::o;10991:640::-;11186:4;11224:3;11213:9;11209:19;11201:27;;11238:71;11306:1;11295:9;11291:17;11282:6;11238:71;:::i;:::-;11319:72;11387:2;11376:9;11372:18;11363:6;11319:72;:::i;:::-;11401;11469:2;11458:9;11454:18;11445:6;11401:72;:::i;:::-;11520:9;11514:4;11510:20;11505:2;11494:9;11490:18;11483:48;11548:76;11619:4;11610:6;11548:76;:::i;:::-;11540:84;;11191:440;;;;;;;:::o;11637:210::-;11724:4;11762:2;11751:9;11747:18;11739:26;;11775:65;11837:1;11826:9;11822:17;11813:6;11775:65;:::i;:::-;11729:118;;;;:::o;11853:313::-;11966:4;12004:2;11993:9;11989:18;11981:26;;12053:9;12047:4;12043:20;12039:1;12028:9;12024:17;12017:47;12081:78;12154:4;12145:6;12081:78;:::i;:::-;12073:86;;11971:195;;;;:::o;12172:419::-;12338:4;12376:2;12365:9;12361:18;12353:26;;12425:9;12419:4;12415:20;12411:1;12400:9;12396:17;12389:47;12453:131;12579:4;12453:131;:::i;:::-;12445:139;;12343:248;;;:::o;12597:419::-;12763:4;12801:2;12790:9;12786:18;12778:26;;12850:9;12844:4;12840:20;12836:1;12825:9;12821:17;12814:47;12878:131;13004:4;12878:131;:::i;:::-;12870:139;;12768:248;;;:::o;13022:419::-;13188:4;13226:2;13215:9;13211:18;13203:26;;13275:9;13269:4;13265:20;13261:1;13250:9;13246:17;13239:47;13303:131;13429:4;13303:131;:::i;:::-;13295:139;;13193:248;;;:::o;13447:419::-;13613:4;13651:2;13640:9;13636:18;13628:26;;13700:9;13694:4;13690:20;13686:1;13675:9;13671:17;13664:47;13728:131;13854:4;13728:131;:::i;:::-;13720:139;;13618:248;;;:::o;13872:419::-;14038:4;14076:2;14065:9;14061:18;14053:26;;14125:9;14119:4;14115:20;14111:1;14100:9;14096:17;14089:47;14153:131;14279:4;14153:131;:::i;:::-;14145:139;;14043:248;;;:::o;14297:419::-;14463:4;14501:2;14490:9;14486:18;14478:26;;14550:9;14544:4;14540:20;14536:1;14525:9;14521:17;14514:47;14578:131;14704:4;14578:131;:::i;:::-;14570:139;;14468:248;;;:::o;14722:419::-;14888:4;14926:2;14915:9;14911:18;14903:26;;14975:9;14969:4;14965:20;14961:1;14950:9;14946:17;14939:47;15003:131;15129:4;15003:131;:::i;:::-;14995:139;;14893:248;;;:::o;15147:419::-;15313:4;15351:2;15340:9;15336:18;15328:26;;15400:9;15394:4;15390:20;15386:1;15375:9;15371:17;15364:47;15428:131;15554:4;15428:131;:::i;:::-;15420:139;;15318:248;;;:::o;15572:419::-;15738:4;15776:2;15765:9;15761:18;15753:26;;15825:9;15819:4;15815:20;15811:1;15800:9;15796:17;15789:47;15853:131;15979:4;15853:131;:::i;:::-;15845:139;;15743:248;;;:::o;15997:222::-;16090:4;16128:2;16117:9;16113:18;16105:26;;16141:71;16209:1;16198:9;16194:17;16185:6;16141:71;:::i;:::-;16095:124;;;;:::o;16225:129::-;16259:6;16286:20;;:::i;:::-;16276:30;;16315:33;16343:4;16335:6;16315:33;:::i;:::-;16266:88;;;:::o;16360:75::-;16393:6;16426:2;16420:9;16410:19;;16400:35;:::o;16441:307::-;16502:4;16592:18;16584:6;16581:30;16578:2;;;16614:18;;:::i;:::-;16578:2;16652:29;16674:6;16652:29;:::i;:::-;16644:37;;16736:4;16730;16726:15;16718:23;;16507:241;;;:::o;16754:98::-;16805:6;16839:5;16833:12;16823:22;;16812:40;;;:::o;16858:99::-;16910:6;16944:5;16938:12;16928:22;;16917:40;;;:::o;16963:168::-;17046:11;17080:6;17075:3;17068:19;17120:4;17115:3;17111:14;17096:29;;17058:73;;;;:::o;17137:169::-;17221:11;17255:6;17250:3;17243:19;17295:4;17290:3;17286:14;17271:29;;17233:73;;;;:::o;17312:148::-;17414:11;17451:3;17436:18;;17426:34;;;;:::o;17466:305::-;17506:3;17525:20;17543:1;17525:20;:::i;:::-;17520:25;;17559:20;17577:1;17559:20;:::i;:::-;17554:25;;17713:1;17645:66;17641:74;17638:1;17635:81;17632:2;;;17719:18;;:::i;:::-;17632:2;17763:1;17760;17756:9;17749:16;;17510:261;;;;:::o;17777:348::-;17817:7;17840:20;17858:1;17840:20;:::i;:::-;17835:25;;17874:20;17892:1;17874:20;:::i;:::-;17869:25;;18062:1;17994:66;17990:74;17987:1;17984:81;17979:1;17972:9;17965:17;17961:105;17958:2;;;18069:18;;:::i;:::-;17958:2;18117:1;18114;18110:9;18099:20;;17825:300;;;;:::o;18131:191::-;18171:4;18191:20;18209:1;18191:20;:::i;:::-;18186:25;;18225:20;18243:1;18225:20;:::i;:::-;18220:25;;18264:1;18261;18258:8;18255:2;;;18269:18;;:::i;:::-;18255:2;18314:1;18311;18307:9;18299:17;;18176:146;;;;:::o;18328:96::-;18365:7;18394:24;18412:5;18394:24;:::i;:::-;18383:35;;18373:51;;;:::o;18430:90::-;18464:7;18507:5;18500:13;18493:21;18482:32;;18472:48;;;:::o;18526:149::-;18562:7;18602:66;18595:5;18591:78;18580:89;;18570:105;;;:::o;18681:126::-;18718:7;18758:42;18751:5;18747:54;18736:65;;18726:81;;;:::o;18813:77::-;18850:7;18879:5;18868:16;;18858:32;;;:::o;18896:86::-;18931:7;18971:4;18964:5;18960:16;18949:27;;18939:43;;;:::o;18988:154::-;19072:6;19067:3;19062;19049:30;19134:1;19125:6;19120:3;19116:16;19109:27;19039:103;;;:::o;19148:307::-;19216:1;19226:113;19240:6;19237:1;19234:13;19226:113;;;19325:1;19320:3;19316:11;19310:18;19306:1;19301:3;19297:11;19290:39;19262:2;19259:1;19255:10;19250:15;;19226:113;;;19357:6;19354:1;19351:13;19348:2;;;19437:1;19428:6;19423:3;19419:16;19412:27;19348:2;19197:258;;;;:::o;19461:320::-;19505:6;19542:1;19536:4;19532:12;19522:22;;19589:1;19583:4;19579:12;19610:18;19600:2;;19666:4;19658:6;19654:17;19644:27;;19600:2;19728;19720:6;19717:14;19697:18;19694:38;19691:2;;;19747:18;;:::i;:::-;19691:2;19512:269;;;;:::o;19787:281::-;19870:27;19892:4;19870:27;:::i;:::-;19862:6;19858:40;20000:6;19988:10;19985:22;19964:18;19952:10;19949:34;19946:62;19943:2;;;20011:18;;:::i;:::-;19943:2;20051:10;20047:2;20040:22;19830:238;;;:::o;20074:180::-;20122:77;20119:1;20112:88;20219:4;20216:1;20209:15;20243:4;20240:1;20233:15;20260:180;20308:77;20305:1;20298:88;20405:4;20402:1;20395:15;20429:4;20426:1;20419:15;20446:180;20494:77;20491:1;20484:88;20591:4;20588:1;20581:15;20615:4;20612:1;20605:15;20632:102;20673:6;20724:2;20720:7;20715:2;20708:5;20704:14;20700:28;20690:38;;20680:54;;;:::o;20740:238::-;20880:34;20876:1;20868:6;20864:14;20857:58;20949:21;20944:2;20936:6;20932:15;20925:46;20846:132;:::o;20984:179::-;21124:31;21120:1;21112:6;21108:14;21101:55;21090:73;:::o;21169:230::-;21309:34;21305:1;21297:6;21293:14;21286:58;21378:13;21373:2;21365:6;21361:15;21354:38;21275:124;:::o;21405:172::-;21545:24;21541:1;21533:6;21529:14;21522:48;21511:66;:::o;21583:175::-;21723:27;21719:1;21711:6;21707:14;21700:51;21689:69;:::o;21764:176::-;21904:28;21900:1;21892:6;21888:14;21881:52;21870:70;:::o;21946:221::-;22086:34;22082:1;22074:6;22070:14;22063:58;22155:4;22150:2;22142:6;22138:15;22131:29;22052:115;:::o;22173:181::-;22313:33;22309:1;22301:6;22297:14;22290:57;22279:75;:::o;22360:223::-;22500:34;22496:1;22488:6;22484:14;22477:58;22569:6;22564:2;22556:6;22552:15;22545:31;22466:117;:::o;22589:122::-;22662:24;22680:5;22662:24;:::i;:::-;22655:5;22652:35;22642:2;;22701:1;22698;22691:12;22642:2;22632:79;:::o;22717:116::-;22787:21;22802:5;22787:21;:::i;:::-;22780:5;22777:32;22767:2;;22823:1;22820;22813:12;22767:2;22757:76;:::o;22839:120::-;22911:23;22928:5;22911:23;:::i;:::-;22904:5;22901:34;22891:2;;22949:1;22946;22939:12;22891:2;22881:78;:::o;22965:122::-;23038:24;23056:5;23038:24;:::i;:::-;23031:5;23028:35;23018:2;;23077:1;23074;23067:12;23018:2;23008:79;:::o;23093:118::-;23164:22;23180:5;23164:22;:::i;:::-;23157:5;23154:33;23144:2;;23201:1;23198;23191:12;23144:2;23134:77;:::o
Swarm Source
ipfs://fdf756c1eab8d4a10600c3d7d0b99e1383312c26db558528dc3a4a0d8adba762
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.