ERC-721
Overview
Max Total Supply
88 FLY
Holders
24
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 FLYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
FlyMan
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "./Ownable.sol"; import "./ERC2981.sol"; import "./Address.sol"; import "./Strings.sol"; import "./ERC721AQueryable.sol"; enum Stage { NotStarted, Claim, Sale } contract FlyMan is ERC2981, ERC721AQueryable, Ownable { using Address for address payable; using Strings for uint256; address public constant BLACKHOLE = 0x000000000000000000000000000000000000dEaD; IERC721 public immutable _fly; uint256 public _price; uint32 public immutable _maxSupply; uint32 public immutable _holderSupply; uint32 public immutable _teamSupply; uint32 public immutable _walletLimit; uint32 public _teamMinted; uint32 public _holderClaimed; string public _metadataURI; string public _notRevealedUri = "ipfs://QmUQNKQ5RN9s7FDBzeeu3N7DxaAoHB8jr1caDueKpofhZ9"; Stage public _stage = Stage.NotStarted; bool public _revealed = false; struct Status { uint256 price; uint32 maxSupply; uint32 publicSupply; uint32 walletLimit; uint32 publicMinted; uint32 userMinted; bool soldout; Stage stage; } constructor( address fly, uint256 price, uint32 maxSupply, uint32 holderSupply, uint32 teamSupply, uint32 walletLimit ) ERC721A("FLY MAN", "FLY") { require(fly != address(0)); require(maxSupply >= holderSupply + teamSupply); _fly = IERC721(fly); _price = price; _maxSupply = maxSupply; _holderSupply = holderSupply; _teamSupply = teamSupply; _walletLimit = walletLimit; setFeeNumerator(750); } function claim(uint256[] memory tokenIds) external { require(_stage == Stage.Claim); require(tokenIds.length > 0 && tokenIds.length % 2 == 0); uint32 pairs = uint32(tokenIds.length / 2); require(pairs + _holderClaimed <= _holderSupply); for (uint256 i = 0; i < tokenIds.length; i++) { _fly.transferFrom(msg.sender, BLACKHOLE, tokenIds[i]); unchecked { i++; } } _setAux(msg.sender, _getAux(msg.sender) + pairs); _safeMint(msg.sender, pairs); } function mint(uint32 amount) external payable { require(_stage == Stage.Sale); require(amount + _publicMinted() <= _publicSupply()); require(amount + uint32(_numberMinted(msg.sender)) - uint32(_getAux(msg.sender)) <= _walletLimit); require(msg.value == amount * _price); _safeMint(msg.sender, amount); } function _publicMinted() public view returns (uint32) { return uint32(_totalMinted()) - _teamMinted; } function _publicSupply() public view returns (uint32) { return _maxSupply - _teamSupply; } function _status(address minter) external view returns (Status memory) { uint32 publicSupply = _publicSupply(); uint32 publicMinted = _publicMinted(); return Status({ price: _price, maxSupply: _maxSupply, publicSupply: publicSupply, walletLimit: _walletLimit, publicMinted: publicMinted, soldout: publicMinted >= publicSupply, userMinted: uint32(_numberMinted(minter)) - uint32(_getAux(msg.sender)), stage: _stage }); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); if ( _revealed == false ) { return _notRevealedUri; } string memory baseURI = _metadataURI; return string(abi.encodePacked(baseURI, tokenId.toString(), ".json")); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC2981, ERC721A) returns (bool) { return interfaceId == type(IERC2981).interfaceId || interfaceId == type(IERC721).interfaceId || super.supportsInterface(interfaceId); } function devMint(address to, uint32 amount) external onlyOwner { _teamMinted += amount; require(_teamMinted <= _teamSupply); _safeMint(to, amount); } function setFeeNumerator(uint96 feeNumerator) public onlyOwner { _setDefaultRoyalty(owner(), feeNumerator); } function setStage(Stage stage) external onlyOwner { _stage = stage; } function setPrice(uint256 price) external onlyOwner { _price = price; } function setMetadataURI(string memory uri) external onlyOwner { _metadataURI = uri; } function setNotRevealedURI( string memory notRevealedURI ) public onlyOwner { _notRevealedUri = notRevealedURI; } function setRevealed(bool revealed) public onlyOwner { _revealed = revealed; } function withdraw() external onlyOwner { payable(msg.sender).sendValue(address(this).balance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; import "./IERC2981.sol"; import "./ERC165.sol"; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `tokenId` must be already minted. * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } }
// SPDX-License-Identifier: MIT // Creator: Chiru Labs pragma solidity ^0.8.4; import './IERC721.sol'; import './IERC721Receiver.sol'; import './IERC721Metadata.sol'; import './Address.sol'; import './Context.sol'; import './Strings.sol'; import './ERC165.sol'; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @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 Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. 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; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _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 _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * 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 See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary 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 { _addressData[owner].aux = aux; } /** * 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) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // 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. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @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 == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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.isContract() && !_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 && !_ownerships[tokenId].burned; } 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. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @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. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(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 { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is 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 { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } 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 Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @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 ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert 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 {} }
// SPDX-License-Identifier: MIT // Creator: Chiru Labs pragma solidity ^0.8.4; import './ERC721A.sol'; error InvalidQueryRange(); /** * @title ERC721A Queryable * @dev ERC721A subclass with convenience query functions. */ abstract contract ERC721AQueryable is ERC721A { /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) public view returns (TokenOwnership memory) { TokenOwnership memory ownership; if (tokenId < _startTokenId() || tokenId >= _currentIndex) { return ownership; } ownership = _ownerships[tokenId]; if (ownership.burned) { return ownership; } return _ownershipOf(tokenId); } /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory) { unchecked { uint256 tokenIdsLength = tokenIds.length; TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength); for (uint256 i; i != tokenIdsLength; ++i) { ownerships[i] = explicitOwnershipOf(tokenIds[i]); } return ownerships; } } /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory) { unchecked { if (start >= stop) revert InvalidQueryRange(); uint256 tokenIdsIdx; uint256 stopLimit = _currentIndex; // Set `start = max(start, _startTokenId())`. if (start < _startTokenId()) { start = _startTokenId(); } // Set `stop = min(stop, _currentIndex)`. if (stop > stopLimit) { stop = stopLimit; } uint256 tokenIdsMaxLength = balanceOf(owner); // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`, // to cater for cases where `balanceOf(owner)` is too big. if (start < stop) { uint256 rangeLength = stop - start; if (rangeLength < tokenIdsMaxLength) { tokenIdsMaxLength = rangeLength; } } else { tokenIdsMaxLength = 0; } uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength); if (tokenIdsMaxLength == 0) { return tokenIds; } // We need to call `explicitOwnershipOf(start)`, // because the slot at `start` may not be initialized. TokenOwnership memory ownership = explicitOwnershipOf(start); address currOwnershipAddr; // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`. // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range. if (!ownership.burned) { currOwnershipAddr = ownership.addr; } for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } // Downsize the array to fit. assembly { mstore(tokenIds, tokenIdsIdx) } return tokenIds; } } /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory) { unchecked { uint256 tokenIdsIdx; address currOwnershipAddr; uint256 tokenIdsLength = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenIdsLength); TokenOwnership memory ownership; for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } return tokenIds; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be payed in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"fly","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint32","name":"maxSupply","type":"uint32"},{"internalType":"uint32","name":"holderSupply","type":"uint32"},{"internalType":"uint32","name":"teamSupply","type":"uint32"},{"internalType":"uint32","name":"walletLimit","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BLACKHOLE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fly","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_holderClaimed","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_holderSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_metadataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicMinted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stage","outputs":[{"internalType":"enum Stage","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"_status","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint32","name":"maxSupply","type":"uint32"},{"internalType":"uint32","name":"publicSupply","type":"uint32"},{"internalType":"uint32","name":"walletLimit","type":"uint32"},{"internalType":"uint32","name":"publicMinted","type":"uint32"},{"internalType":"uint32","name":"userMinted","type":"uint32"},{"internalType":"bool","name":"soldout","type":"bool"},{"internalType":"enum Stage","name":"stage","type":"uint8"}],"internalType":"struct FlyMan.Status","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamMinted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"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":"uint32","name":"amount","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"revealed","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Stage","name":"stage","type":"uint8"}],"name":"setStage","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101806040526035610120818152906200352b6101403980516200002c91600e9160209091019062000330565b50600f805461ffff191690553480156200004557600080fd5b5060405162003560380380620035608339810160408190526200006891620003f0565b604080518082018252600781526623262c9026a0a760c91b602080830191825283518085019094526003845262464c5960e81b908401528151919291620000b29160049162000330565b508051620000c890600590602084019062000330565b5050600060025550620000db336200015c565b6001600160a01b038616620000ef57600080fd5b620000fb828462000476565b63ffffffff168463ffffffff1610156200011457600080fd5b6001600160a01b038616608052600b85905563ffffffff80851660a05283811660c05282811660e052811661010052620001506102ee620001ae565b505050505050620004ea565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200020e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6200022c62000225600a546001600160a01b031690565b826200022f565b50565b6127106001600160601b03821611156200029f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840162000205565b6001600160a01b038216620002f75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000205565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b8280546200033e90620004ad565b90600052602060002090601f016020900481019282620003625760008555620003ad565b82601f106200037d57805160ff1916838001178555620003ad565b82800160010185558215620003ad579182015b82811115620003ad57825182559160200191906001019062000390565b50620003bb929150620003bf565b5090565b5b80821115620003bb5760008155600101620003c0565b805163ffffffff81168114620003eb57600080fd5b919050565b60008060008060008060c087890312156200040a57600080fd5b86516001600160a01b03811681146200042257600080fd5b602088015190965094506200043a60408801620003d6565b93506200044a60608801620003d6565b92506200045a60808801620003d6565b91506200046a60a08801620003d6565b90509295509295509295565b600063ffffffff808316818516808303821115620004a457634e487b7160e01b600052601160045260246000fd5b01949350505050565b600181811c90821680620004c257607f821691505b60208210811415620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051612fc462000567600039600081816103a40152818161145b01526115f70152600081816102df01528181610b4a015261194c01526000818161085c0152610e1b01526000818161045801528181611423015261196d0152600081816107be0152610e700152612fc46000f3fe6080604052600436106102935760003560e01c80637c0171411161015a578063c61c3f76116100c1578063dd48f07d1161007a578063dd48f07d1461087e578063e0a808531461089b578063e985e9c5146108bb578063f2c4ce1e146108db578063f2fde38b146108fb578063f9f5274c1461091b57600080fd5b8063c61c3f76146107ac578063c87b56dd146107e0578063ccd5f6a214610800578063ce3cd99714610815578063d4a6762314610835578063daefeade1461084a57600080fd5b80639a7cfa4f116101135780639a7cfa4f146106ea578063a22cb46514610717578063a71bbebe14610737578063aa0739071461074a578063b88d4fde1461075f578063c23dc68f1461077f57600080fd5b80637c017141146106255780638462151c1461064a5780638da5cb5b1461067757806391b7f5ed1461069557806395d89b41146106b557806399a2557a146106ca57600080fd5b806323b872dd116101fe578063653a819e116101b7578063653a819e146105715780636ba4c138146105915780636ebeac85146105b157806370a08231146105d0578063715018a6146105f0578063750521f51461060557600080fd5b806323b872dd146104905780632a55205a146104b05780633ccfd60b146104ef57806342842e0e146105045780635bbb2177146105245780636352211e1461055157600080fd5b806316396b631161025057806316396b63146103c657806317a5aced146103ed57806318160ddd1461040d5780631cd3a4ac1461043057806322f4596f14610446578063235b6ea11461047a57600080fd5b806301ffc9a7146102985780630517431e146102cd57806306fdde0314610316578063081812fc14610338578063095ea7b3146103705780630e2351e214610392575b600080fd5b3480156102a457600080fd5b506102b86102b33660046126ed565b610930565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016102c4565b34801561032257600080fd5b5061032b610976565b6040516102c49190612762565b34801561034457600080fd5b50610358610353366004612775565b610a08565b6040516001600160a01b0390911681526020016102c4565b34801561037c57600080fd5b5061039061038b3660046127aa565b610a4c565b005b34801561039e57600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d257600080fd5b50600f546103e09060ff1681565b6040516102c4919061280c565b3480156103f957600080fd5b5061039061040836600461282e565b610ada565b34801561041957600080fd5b50600354600254035b6040519081526020016102c4565b34801561043c57600080fd5b5061035861dead81565b34801561045257600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b34801561048657600080fd5b50610422600b5481565b34801561049c57600080fd5b506103906104ab366004612861565b610b8e565b3480156104bc57600080fd5b506104d06104cb36600461289d565b610b99565b604080516001600160a01b0390931683526020830191909152016102c4565b3480156104fb57600080fd5b50610390610c45565b34801561051057600080fd5b5061039061051f366004612861565b610c7b565b34801561053057600080fd5b5061054461053f366004612905565b610c96565b6040516102c491906129aa565b34801561055d57600080fd5b5061035861056c366004612775565b610d5c565b34801561057d57600080fd5b5061039061058c366004612a14565b610d6e565b34801561059d57600080fd5b506103906105ac366004612905565b610db6565b3480156105bd57600080fd5b50600f546102b890610100900460ff1681565b3480156105dc57600080fd5b506104226105eb366004612a3d565b610fac565b3480156105fc57600080fd5b50610390610ffa565b34801561061157600080fd5b50610390610620366004612aaf565b61102e565b34801561063157600080fd5b50600c5461030190640100000000900463ffffffff1681565b34801561065657600080fd5b5061066a610665366004612a3d565b61106b565b6040516102c49190612af7565b34801561068357600080fd5b50600a546001600160a01b0316610358565b3480156106a157600080fd5b506103906106b0366004612775565b6111b8565b3480156106c157600080fd5b5061032b6111e7565b3480156106d657600080fd5b5061066a6106e5366004612b2f565b6111f6565b3480156106f657600080fd5b5061070a610705366004612a3d565b6113b0565b6040516102c49190612b62565b34801561072357600080fd5b50610390610732366004612be8565b61150b565b610390610745366004612c12565b6115a1565b34801561075657600080fd5b50610301611698565b34801561076b57600080fd5b5061039061077a366004612c2d565b6116bc565b34801561078b57600080fd5b5061079f61079a366004612775565b61170d565b6040516102c49190612ca8565b3480156107b857600080fd5b506103587f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ec57600080fd5b5061032b6107fb366004612775565b6117bb565b34801561080c57600080fd5b50610301611945565b34801561082157600080fd5b50610390610830366004612cdd565b611991565b34801561084157600080fd5b5061032b6119e2565b34801561085657600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b34801561088a57600080fd5b50600c546103019063ffffffff1681565b3480156108a757600080fd5b506103906108b6366004612cfe565b611a70565b3480156108c757600080fd5b506102b86108d6366004612d19565b611ab4565b3480156108e757600080fd5b506103906108f6366004612aaf565b611ae2565b34801561090757600080fd5b50610390610916366004612a3d565b611b1f565b34801561092757600080fd5b5061032b611bb7565b60006001600160e01b0319821663152a902d60e11b148061096157506001600160e01b031982166380ac58cd60e01b145b80610970575061097082611bc4565b92915050565b60606004805461098590612d43565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190612d43565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b6000610a1382611c04565b610a30576040516333d1c03960e21b815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b6000610a5782610d5c565b9050806001600160a01b0316836001600160a01b03161415610a8c5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610aac5750610aaa8133611ab4565b155b15610aca576040516367d9dca160e11b815260040160405180910390fd5b610ad5838383611c30565b505050565b600a546001600160a01b03163314610b0d5760405162461bcd60e51b8152600401610b0490612d7e565b60405180910390fd5b600c8054829190600090610b2890849063ffffffff16612dc9565b82546101009290920a63ffffffff818102199093169183160217909155600c547f00000000000000000000000000000000000000000000000000000000000000008216911611159050610b7a57600080fd5b610b8a828263ffffffff16611c8c565b5050565b610ad5838383611ca6565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c0e5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610c2d906001600160601b031687612df1565b610c379190612e26565b915196919550909350505050565b600a546001600160a01b03163314610c6f5760405162461bcd60e51b8152600401610b0490612d7e565b610c793347611e94565b565b610ad5838383604051806020016040528060008152506116bc565b80516060906000816001600160401b03811115610cb557610cb56128bf565b604051908082528060200260200182016040528015610d0057816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610cd35790505b50905060005b828114610d5457610d2f858281518110610d2257610d22612e3a565b602002602001015161170d565b828281518110610d4157610d41612e3a565b6020908102919091010152600101610d06565b509392505050565b6000610d6782611fad565b5192915050565b600a546001600160a01b03163314610d985760405162461bcd60e51b8152600401610b0490612d7e565b610db3610dad600a546001600160a01b031690565b826120c7565b50565b6001600f5460ff166002811115610dcf57610dcf6127d4565b14610dd957600080fd5b60008151118015610df5575060028151610df39190612e50565b155b610dfe57600080fd5b600060028251610e0e9190612e26565b600c5490915063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000811691610e51916401000000009091041683612dc9565b63ffffffff161115610e6257600080fd5b60005b8251811015610f3e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd3361dead868581518110610eb357610eb3612e3a565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505060019092019150819050610f3681612e64565b915050610e65565b50610f9c338263ffffffff16610f53336121c4565b610f5d9190612e7f565b6001600160a01b03909116600090815260076020526040902080546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b610b8a338263ffffffff16611c8c565b60006001600160a01b038216610fd5576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600760205260409020546001600160401b031690565b600a546001600160a01b031633146110245760405162461bcd60e51b8152600401610b0490612d7e565b610c7960006121ef565b600a546001600160a01b031633146110585760405162461bcd60e51b8152600401610b0490612d7e565b8051610b8a90600d90602084019061263e565b6060600080600061107b85610fac565b90506000816001600160401b03811115611097576110976128bf565b6040519080825280602002602001820160405280156110c0578160200160208202803683370190505b5090506110e6604080516060810182526000808252602082018190529181019190915290565b60005b8386146111ac57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252925061114f576111a4565b81516001600160a01b03161561116457815194505b876001600160a01b0316856001600160a01b031614156111a4578083878060010198508151811061119757611197612e3a565b6020026020010181815250505b6001016110e9565b50909695505050505050565b600a546001600160a01b031633146111e25760405162461bcd60e51b8152600401610b0490612d7e565b600b55565b60606005805461098590612d43565b606081831061121857604051631960ccad60e11b815260040160405180910390fd5b6002546000908084111561122a578093505b600061123587610fac565b905084861015611254578585038181101561124e578091505b50611258565b5060005b6000816001600160401b03811115611272576112726128bf565b60405190808252806020026020018201604052801561129b578160200160208202803683370190505b509050816112ae5793506113a992505050565b60006112b98861170d565b9050600081604001516112ca575080515b885b8881141580156112dc5750848714155b1561139d57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252935061134057611395565b82516001600160a01b03161561135557825191505b8a6001600160a01b0316826001600160a01b03161415611395578084888060010199508151811061138857611388612e3a565b6020026020010181815250505b6001016112cc565b50505092835250909150505b9392505050565b6113f56040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082015290565b60006113ff611945565b9050600061140b611698565b9050604051806101000160405280600b5481526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff1681526020018363ffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff1681526020018263ffffffff16815260200161149a336121c4565b6001600160a01b038716600090815260076020526040902054600160401b90046001600160401b03166114cd9190612ea1565b63ffffffff908116825284811690841610156020820152600f5460409091019060ff166002811115611501576115016127d4565b9052949350505050565b6001600160a01b0382163314156115355760405163b06307db60e01b815260040160405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600f5460ff1660028111156115ba576115ba6127d4565b146115c457600080fd5b6115cc611945565b63ffffffff166115da611698565b6115e49083612dc9565b63ffffffff1611156115f557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16611625336121c4565b33600090815260076020526040902054600160401b90046001600160401b031661164f9084612dc9565b6116599190612ea1565b63ffffffff16111561166a57600080fd5b600b5461167d9063ffffffff8316612df1565b341461168857600080fd5b610db3338263ffffffff16611c8c565b600c5460009063ffffffff166116ad60025490565b6116b79190612ea1565b905090565b6116c7848484611ca6565b6001600160a01b0383163b151580156116e957506116e784848484612241565b155b15611707576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051606080820183526000808352602080840182905283850182905284519283018552818352820181905292810183905290915060025483106117525792915050565b50600082815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252906117b25792915050565b6113a983611fad565b60606117c682611c04565b6117e357604051630a14c4b560e41b815260040160405180910390fd5b600f54610100900460ff1661188457600e80546117ff90612d43565b80601f016020809104026020016040519081016040528092919081815260200182805461182b90612d43565b80156118785780601f1061184d57610100808354040283529160200191611878565b820191906000526020600020905b81548152906001019060200180831161185b57829003601f168201915b50505050509050919050565b6000600d805461189390612d43565b80601f01602080910402602001604051908101604052809291908181526020018280546118bf90612d43565b801561190c5780601f106118e15761010080835404028352916020019161190c565b820191906000526020600020905b8154815290600101906020018083116118ef57829003601f168201915b505050505090508061191d84612339565b60405160200161192e929190612ec6565b604051602081830303815290604052915050919050565b60006116b77f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612ea1565b600a546001600160a01b031633146119bb5760405162461bcd60e51b8152600401610b0490612d7e565b600f805482919060ff191660018360028111156119da576119da6127d4565b021790555050565b600d80546119ef90612d43565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1b90612d43565b8015611a685780601f10611a3d57610100808354040283529160200191611a68565b820191906000526020600020905b815481529060010190602001808311611a4b57829003601f168201915b505050505081565b600a546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610b0490612d7e565b600f80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b03163314611b0c5760405162461bcd60e51b8152600401610b0490612d7e565b8051610b8a90600e90602084019061263e565b600a546001600160a01b03163314611b495760405162461bcd60e51b8152600401610b0490612d7e565b6001600160a01b038116611bae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b04565b610db3816121ef565b600e80546119ef90612d43565b60006001600160e01b031982166380ac58cd60e01b1480611bf557506001600160e01b03198216635b5e139f60e01b145b80610970575061097082612436565b600060025482108015610970575050600090815260066020526040902054600160e01b900460ff161590565b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610b8a82826040518060200160405280600081525061246b565b6000611cb182611fad565b9050836001600160a01b031681600001516001600160a01b031614611ce85760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611d065750611d068533611ab4565b80611d21575033611d1684610a08565b6001600160a01b0316145b905080611d4157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611d6857604051633a954ecd60e21b815260040160405180910390fd5b611d7460008487611c30565b6001600160a01b038581166000908152600760209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600690945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611e48576002548214611e4857805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b80471015611ee45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b04565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f31576040519150601f19603f3d011682016040523d82523d6000602084013e611f36565b606091505b5050905080610ad55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b04565b6040805160608101825260008082526020820181905291810191909152816002548110156120ae57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906120ac5780516001600160a01b031615612043579392505050565b5060001901600081815260066020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff16151592810192909252156120a7579392505050565b612043565b505b604051636f96cda160e11b815260040160405180910390fd5b6127106001600160601b03821611156121355760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610b04565b6001600160a01b03821661218b5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b04565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b6001600160a01b0316600090815260076020526040902054600160c01b90046001600160401b031690565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612276903390899088908890600401612f05565b602060405180830381600087803b15801561229057600080fd5b505af19250505080156122c0575060408051601f3d908101601f191682019092526122bd91810190612f42565b60015b61231b573d8080156122ee576040519150601f19603f3d011682016040523d82523d6000602084013e6122f3565b606091505b508051612313576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60608161235d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612387578061237181612e64565b91506123809050600a83612e26565b9150612361565b6000816001600160401b038111156123a1576123a16128bf565b6040519080825280601f01601f1916602001820160405280156123cb576020820181803683370190505b5090505b8415612331576123e0600183612f5f565b91506123ed600a86612e50565b6123f8906030612f76565b60f81b81838151811061240d5761240d612e3a565b60200101906001600160f81b031916908160001a90535061242f600a86612e26565b94506123cf565b60006001600160e01b0319821663152a902d60e11b148061097057506301ffc9a760e01b6001600160e01b0319831614610970565b610ad583838360016002546001600160a01b03851661249c57604051622e076360e81b815260040160405180910390fd5b836124ba5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260076020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600690925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561256657506001600160a01b0387163b15155b156125ef575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125b76000888480600101955088612241565b6125d4576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561256c5782600254146125ea57600080fd5b612635565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156125f0575b50600255611e8d565b82805461264a90612d43565b90600052602060002090601f01602090048101928261266c57600085556126b2565b82601f1061268557805160ff19168380011785556126b2565b828001600101855582156126b2579182015b828111156126b2578251825591602001919060010190612697565b506126be9291506126c2565b5090565b5b808211156126be57600081556001016126c3565b6001600160e01b031981168114610db357600080fd5b6000602082840312156126ff57600080fd5b81356113a9816126d7565b60005b8381101561272557818101518382015260200161270d565b838111156117075750506000910152565b6000815180845261274e81602086016020860161270a565b601f01601f19169290920160200192915050565b6020815260006113a96020830184612736565b60006020828403121561278757600080fd5b5035919050565b80356001600160a01b03811681146127a557600080fd5b919050565b600080604083850312156127bd57600080fd5b6127c68361278e565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061280857634e487b7160e01b600052602160045260246000fd5b9052565b6020810161097082846127ea565b803563ffffffff811681146127a557600080fd5b6000806040838503121561284157600080fd5b61284a8361278e565b91506128586020840161281a565b90509250929050565b60008060006060848603121561287657600080fd5b61287f8461278e565b925061288d6020850161278e565b9150604084013590509250925092565b600080604083850312156128b057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156128fd576128fd6128bf565b604052919050565b6000602080838503121561291857600080fd5b82356001600160401b038082111561292f57600080fd5b818501915085601f83011261294357600080fd5b813581811115612955576129556128bf565b8060051b91506129668483016128d5565b818152918301840191848101908884111561298057600080fd5b938501935b8385101561299e57843582529385019390850190612985565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111ac57612a0183855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b92840192606092909201916001016129c6565b600060208284031215612a2657600080fd5b81356001600160601b03811681146113a957600080fd5b600060208284031215612a4f57600080fd5b6113a98261278e565b60006001600160401b03831115612a7157612a716128bf565b612a84601f8401601f19166020016128d5565b9050828152838383011115612a9857600080fd5b828260208301376000602084830101529392505050565b600060208284031215612ac157600080fd5b81356001600160401b03811115612ad757600080fd5b8201601f81018413612ae857600080fd5b61233184823560208401612a58565b6020808252825182820181905260009190848201906040850190845b818110156111ac57835183529284019291840191600101612b13565b600080600060608486031215612b4457600080fd5b612b4d8461278e565b95602085013595506040909401359392505050565b60006101008201905082518252602083015163ffffffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a0850152505060c0830151151560c083015260e0830151612bd160e08401826127ea565b5092915050565b803580151581146127a557600080fd5b60008060408385031215612bfb57600080fd5b612c048361278e565b915061285860208401612bd8565b600060208284031215612c2457600080fd5b6113a98261281a565b60008060008060808587031215612c4357600080fd5b612c4c8561278e565b9350612c5a6020860161278e565b92506040850135915060608501356001600160401b03811115612c7c57600080fd5b8501601f81018713612c8d57600080fd5b612c9c87823560208401612a58565b91505092959194509250565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610970565b600060208284031215612cef57600080fd5b8135600381106113a957600080fd5b600060208284031215612d1057600080fd5b6113a982612bd8565b60008060408385031215612d2c57600080fd5b612d358361278e565b91506128586020840161278e565b600181811c90821680612d5757607f821691505b60208210811415612d7857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115612de857612de8612db3565b01949350505050565b6000816000190483118215151615612e0b57612e0b612db3565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612e3557612e35612e10565b500490565b634e487b7160e01b600052603260045260246000fd5b600082612e5f57612e5f612e10565b500690565b6000600019821415612e7857612e78612db3565b5060010190565b60006001600160401b03808316818516808303821115612de857612de8612db3565b600063ffffffff83811690831681811015612ebe57612ebe612db3565b039392505050565b60008351612ed881846020880161270a565b835190830190612eec81836020880161270a565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f3890830184612736565b9695505050505050565b600060208284031215612f5457600080fd5b81516113a9816126d7565b600082821015612f7157612f71612db3565b500390565b60008219821115612f8957612f89612db3565b50019056fea26469706673582212207adda817daaa9a18dbfb727347454d4492ecb9ee1c39042d838fc74ce03b13cc64736f6c63430008090033697066733a2f2f516d55514e4b5135524e3973374644427a656575334e37447861416f4842386a723163614475654b706f66685a39000000000000000000000000c79728346734679fcef39a39fd1a71c216ddeb5700000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x6080604052600436106102935760003560e01c80637c0171411161015a578063c61c3f76116100c1578063dd48f07d1161007a578063dd48f07d1461087e578063e0a808531461089b578063e985e9c5146108bb578063f2c4ce1e146108db578063f2fde38b146108fb578063f9f5274c1461091b57600080fd5b8063c61c3f76146107ac578063c87b56dd146107e0578063ccd5f6a214610800578063ce3cd99714610815578063d4a6762314610835578063daefeade1461084a57600080fd5b80639a7cfa4f116101135780639a7cfa4f146106ea578063a22cb46514610717578063a71bbebe14610737578063aa0739071461074a578063b88d4fde1461075f578063c23dc68f1461077f57600080fd5b80637c017141146106255780638462151c1461064a5780638da5cb5b1461067757806391b7f5ed1461069557806395d89b41146106b557806399a2557a146106ca57600080fd5b806323b872dd116101fe578063653a819e116101b7578063653a819e146105715780636ba4c138146105915780636ebeac85146105b157806370a08231146105d0578063715018a6146105f0578063750521f51461060557600080fd5b806323b872dd146104905780632a55205a146104b05780633ccfd60b146104ef57806342842e0e146105045780635bbb2177146105245780636352211e1461055157600080fd5b806316396b631161025057806316396b63146103c657806317a5aced146103ed57806318160ddd1461040d5780631cd3a4ac1461043057806322f4596f14610446578063235b6ea11461047a57600080fd5b806301ffc9a7146102985780630517431e146102cd57806306fdde0314610316578063081812fc14610338578063095ea7b3146103705780630e2351e214610392575b600080fd5b3480156102a457600080fd5b506102b86102b33660046126ed565b610930565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506103017f00000000000000000000000000000000000000000000000000000000000003e881565b60405163ffffffff90911681526020016102c4565b34801561032257600080fd5b5061032b610976565b6040516102c49190612762565b34801561034457600080fd5b50610358610353366004612775565b610a08565b6040516001600160a01b0390911681526020016102c4565b34801561037c57600080fd5b5061039061038b3660046127aa565b610a4c565b005b34801561039e57600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000a81565b3480156103d257600080fd5b50600f546103e09060ff1681565b6040516102c4919061280c565b3480156103f957600080fd5b5061039061040836600461282e565b610ada565b34801561041957600080fd5b50600354600254035b6040519081526020016102c4565b34801561043c57600080fd5b5061035861dead81565b34801561045257600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000271081565b34801561048657600080fd5b50610422600b5481565b34801561049c57600080fd5b506103906104ab366004612861565b610b8e565b3480156104bc57600080fd5b506104d06104cb36600461289d565b610b99565b604080516001600160a01b0390931683526020830191909152016102c4565b3480156104fb57600080fd5b50610390610c45565b34801561051057600080fd5b5061039061051f366004612861565b610c7b565b34801561053057600080fd5b5061054461053f366004612905565b610c96565b6040516102c491906129aa565b34801561055d57600080fd5b5061035861056c366004612775565b610d5c565b34801561057d57600080fd5b5061039061058c366004612a14565b610d6e565b34801561059d57600080fd5b506103906105ac366004612905565b610db6565b3480156105bd57600080fd5b50600f546102b890610100900460ff1681565b3480156105dc57600080fd5b506104226105eb366004612a3d565b610fac565b3480156105fc57600080fd5b50610390610ffa565b34801561061157600080fd5b50610390610620366004612aaf565b61102e565b34801561063157600080fd5b50600c5461030190640100000000900463ffffffff1681565b34801561065657600080fd5b5061066a610665366004612a3d565b61106b565b6040516102c49190612af7565b34801561068357600080fd5b50600a546001600160a01b0316610358565b3480156106a157600080fd5b506103906106b0366004612775565b6111b8565b3480156106c157600080fd5b5061032b6111e7565b3480156106d657600080fd5b5061066a6106e5366004612b2f565b6111f6565b3480156106f657600080fd5b5061070a610705366004612a3d565b6113b0565b6040516102c49190612b62565b34801561072357600080fd5b50610390610732366004612be8565b61150b565b610390610745366004612c12565b6115a1565b34801561075657600080fd5b50610301611698565b34801561076b57600080fd5b5061039061077a366004612c2d565b6116bc565b34801561078b57600080fd5b5061079f61079a366004612775565b61170d565b6040516102c49190612ca8565b3480156107b857600080fd5b506103587f000000000000000000000000c79728346734679fcef39a39fd1a71c216ddeb5781565b3480156107ec57600080fd5b5061032b6107fb366004612775565b6117bb565b34801561080c57600080fd5b50610301611945565b34801561082157600080fd5b50610390610830366004612cdd565b611991565b34801561084157600080fd5b5061032b6119e2565b34801561085657600080fd5b506103017f00000000000000000000000000000000000000000000000000000000000003b581565b34801561088a57600080fd5b50600c546103019063ffffffff1681565b3480156108a757600080fd5b506103906108b6366004612cfe565b611a70565b3480156108c757600080fd5b506102b86108d6366004612d19565b611ab4565b3480156108e757600080fd5b506103906108f6366004612aaf565b611ae2565b34801561090757600080fd5b50610390610916366004612a3d565b611b1f565b34801561092757600080fd5b5061032b611bb7565b60006001600160e01b0319821663152a902d60e11b148061096157506001600160e01b031982166380ac58cd60e01b145b80610970575061097082611bc4565b92915050565b60606004805461098590612d43565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190612d43565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b6000610a1382611c04565b610a30576040516333d1c03960e21b815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b6000610a5782610d5c565b9050806001600160a01b0316836001600160a01b03161415610a8c5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610aac5750610aaa8133611ab4565b155b15610aca576040516367d9dca160e11b815260040160405180910390fd5b610ad5838383611c30565b505050565b600a546001600160a01b03163314610b0d5760405162461bcd60e51b8152600401610b0490612d7e565b60405180910390fd5b600c8054829190600090610b2890849063ffffffff16612dc9565b82546101009290920a63ffffffff818102199093169183160217909155600c547f00000000000000000000000000000000000000000000000000000000000003e88216911611159050610b7a57600080fd5b610b8a828263ffffffff16611c8c565b5050565b610ad5838383611ca6565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c0e5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610c2d906001600160601b031687612df1565b610c379190612e26565b915196919550909350505050565b600a546001600160a01b03163314610c6f5760405162461bcd60e51b8152600401610b0490612d7e565b610c793347611e94565b565b610ad5838383604051806020016040528060008152506116bc565b80516060906000816001600160401b03811115610cb557610cb56128bf565b604051908082528060200260200182016040528015610d0057816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610cd35790505b50905060005b828114610d5457610d2f858281518110610d2257610d22612e3a565b602002602001015161170d565b828281518110610d4157610d41612e3a565b6020908102919091010152600101610d06565b509392505050565b6000610d6782611fad565b5192915050565b600a546001600160a01b03163314610d985760405162461bcd60e51b8152600401610b0490612d7e565b610db3610dad600a546001600160a01b031690565b826120c7565b50565b6001600f5460ff166002811115610dcf57610dcf6127d4565b14610dd957600080fd5b60008151118015610df5575060028151610df39190612e50565b155b610dfe57600080fd5b600060028251610e0e9190612e26565b600c5490915063ffffffff7f00000000000000000000000000000000000000000000000000000000000003b5811691610e51916401000000009091041683612dc9565b63ffffffff161115610e6257600080fd5b60005b8251811015610f3e577f000000000000000000000000c79728346734679fcef39a39fd1a71c216ddeb576001600160a01b03166323b872dd3361dead868581518110610eb357610eb3612e3a565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505060019092019150819050610f3681612e64565b915050610e65565b50610f9c338263ffffffff16610f53336121c4565b610f5d9190612e7f565b6001600160a01b03909116600090815260076020526040902080546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b610b8a338263ffffffff16611c8c565b60006001600160a01b038216610fd5576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600760205260409020546001600160401b031690565b600a546001600160a01b031633146110245760405162461bcd60e51b8152600401610b0490612d7e565b610c7960006121ef565b600a546001600160a01b031633146110585760405162461bcd60e51b8152600401610b0490612d7e565b8051610b8a90600d90602084019061263e565b6060600080600061107b85610fac565b90506000816001600160401b03811115611097576110976128bf565b6040519080825280602002602001820160405280156110c0578160200160208202803683370190505b5090506110e6604080516060810182526000808252602082018190529181019190915290565b60005b8386146111ac57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252925061114f576111a4565b81516001600160a01b03161561116457815194505b876001600160a01b0316856001600160a01b031614156111a4578083878060010198508151811061119757611197612e3a565b6020026020010181815250505b6001016110e9565b50909695505050505050565b600a546001600160a01b031633146111e25760405162461bcd60e51b8152600401610b0490612d7e565b600b55565b60606005805461098590612d43565b606081831061121857604051631960ccad60e11b815260040160405180910390fd5b6002546000908084111561122a578093505b600061123587610fac565b905084861015611254578585038181101561124e578091505b50611258565b5060005b6000816001600160401b03811115611272576112726128bf565b60405190808252806020026020018201604052801561129b578160200160208202803683370190505b509050816112ae5793506113a992505050565b60006112b98861170d565b9050600081604001516112ca575080515b885b8881141580156112dc5750848714155b1561139d57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252935061134057611395565b82516001600160a01b03161561135557825191505b8a6001600160a01b0316826001600160a01b03161415611395578084888060010199508151811061138857611388612e3a565b6020026020010181815250505b6001016112cc565b50505092835250909150505b9392505050565b6113f56040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082015290565b60006113ff611945565b9050600061140b611698565b9050604051806101000160405280600b5481526020017f000000000000000000000000000000000000000000000000000000000000271063ffffffff1681526020018363ffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000a63ffffffff1681526020018263ffffffff16815260200161149a336121c4565b6001600160a01b038716600090815260076020526040902054600160401b90046001600160401b03166114cd9190612ea1565b63ffffffff908116825284811690841610156020820152600f5460409091019060ff166002811115611501576115016127d4565b9052949350505050565b6001600160a01b0382163314156115355760405163b06307db60e01b815260040160405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600f5460ff1660028111156115ba576115ba6127d4565b146115c457600080fd5b6115cc611945565b63ffffffff166115da611698565b6115e49083612dc9565b63ffffffff1611156115f557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000a63ffffffff16611625336121c4565b33600090815260076020526040902054600160401b90046001600160401b031661164f9084612dc9565b6116599190612ea1565b63ffffffff16111561166a57600080fd5b600b5461167d9063ffffffff8316612df1565b341461168857600080fd5b610db3338263ffffffff16611c8c565b600c5460009063ffffffff166116ad60025490565b6116b79190612ea1565b905090565b6116c7848484611ca6565b6001600160a01b0383163b151580156116e957506116e784848484612241565b155b15611707576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051606080820183526000808352602080840182905283850182905284519283018552818352820181905292810183905290915060025483106117525792915050565b50600082815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252906117b25792915050565b6113a983611fad565b60606117c682611c04565b6117e357604051630a14c4b560e41b815260040160405180910390fd5b600f54610100900460ff1661188457600e80546117ff90612d43565b80601f016020809104026020016040519081016040528092919081815260200182805461182b90612d43565b80156118785780601f1061184d57610100808354040283529160200191611878565b820191906000526020600020905b81548152906001019060200180831161185b57829003601f168201915b50505050509050919050565b6000600d805461189390612d43565b80601f01602080910402602001604051908101604052809291908181526020018280546118bf90612d43565b801561190c5780601f106118e15761010080835404028352916020019161190c565b820191906000526020600020905b8154815290600101906020018083116118ef57829003601f168201915b505050505090508061191d84612339565b60405160200161192e929190612ec6565b604051602081830303815290604052915050919050565b60006116b77f00000000000000000000000000000000000000000000000000000000000003e87f0000000000000000000000000000000000000000000000000000000000002710612ea1565b600a546001600160a01b031633146119bb5760405162461bcd60e51b8152600401610b0490612d7e565b600f805482919060ff191660018360028111156119da576119da6127d4565b021790555050565b600d80546119ef90612d43565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1b90612d43565b8015611a685780601f10611a3d57610100808354040283529160200191611a68565b820191906000526020600020905b815481529060010190602001808311611a4b57829003601f168201915b505050505081565b600a546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610b0490612d7e565b600f80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b03163314611b0c5760405162461bcd60e51b8152600401610b0490612d7e565b8051610b8a90600e90602084019061263e565b600a546001600160a01b03163314611b495760405162461bcd60e51b8152600401610b0490612d7e565b6001600160a01b038116611bae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b04565b610db3816121ef565b600e80546119ef90612d43565b60006001600160e01b031982166380ac58cd60e01b1480611bf557506001600160e01b03198216635b5e139f60e01b145b80610970575061097082612436565b600060025482108015610970575050600090815260066020526040902054600160e01b900460ff161590565b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610b8a82826040518060200160405280600081525061246b565b6000611cb182611fad565b9050836001600160a01b031681600001516001600160a01b031614611ce85760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611d065750611d068533611ab4565b80611d21575033611d1684610a08565b6001600160a01b0316145b905080611d4157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611d6857604051633a954ecd60e21b815260040160405180910390fd5b611d7460008487611c30565b6001600160a01b038581166000908152600760209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600690945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611e48576002548214611e4857805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b80471015611ee45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b04565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f31576040519150601f19603f3d011682016040523d82523d6000602084013e611f36565b606091505b5050905080610ad55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b04565b6040805160608101825260008082526020820181905291810191909152816002548110156120ae57600081815260066020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906120ac5780516001600160a01b031615612043579392505050565b5060001901600081815260066020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff16151592810192909252156120a7579392505050565b612043565b505b604051636f96cda160e11b815260040160405180910390fd5b6127106001600160601b03821611156121355760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610b04565b6001600160a01b03821661218b5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b04565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b6001600160a01b0316600090815260076020526040902054600160c01b90046001600160401b031690565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612276903390899088908890600401612f05565b602060405180830381600087803b15801561229057600080fd5b505af19250505080156122c0575060408051601f3d908101601f191682019092526122bd91810190612f42565b60015b61231b573d8080156122ee576040519150601f19603f3d011682016040523d82523d6000602084013e6122f3565b606091505b508051612313576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60608161235d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612387578061237181612e64565b91506123809050600a83612e26565b9150612361565b6000816001600160401b038111156123a1576123a16128bf565b6040519080825280601f01601f1916602001820160405280156123cb576020820181803683370190505b5090505b8415612331576123e0600183612f5f565b91506123ed600a86612e50565b6123f8906030612f76565b60f81b81838151811061240d5761240d612e3a565b60200101906001600160f81b031916908160001a90535061242f600a86612e26565b94506123cf565b60006001600160e01b0319821663152a902d60e11b148061097057506301ffc9a760e01b6001600160e01b0319831614610970565b610ad583838360016002546001600160a01b03851661249c57604051622e076360e81b815260040160405180910390fd5b836124ba5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260076020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600690925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561256657506001600160a01b0387163b15155b156125ef575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125b76000888480600101955088612241565b6125d4576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561256c5782600254146125ea57600080fd5b612635565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156125f0575b50600255611e8d565b82805461264a90612d43565b90600052602060002090601f01602090048101928261266c57600085556126b2565b82601f1061268557805160ff19168380011785556126b2565b828001600101855582156126b2579182015b828111156126b2578251825591602001919060010190612697565b506126be9291506126c2565b5090565b5b808211156126be57600081556001016126c3565b6001600160e01b031981168114610db357600080fd5b6000602082840312156126ff57600080fd5b81356113a9816126d7565b60005b8381101561272557818101518382015260200161270d565b838111156117075750506000910152565b6000815180845261274e81602086016020860161270a565b601f01601f19169290920160200192915050565b6020815260006113a96020830184612736565b60006020828403121561278757600080fd5b5035919050565b80356001600160a01b03811681146127a557600080fd5b919050565b600080604083850312156127bd57600080fd5b6127c68361278e565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061280857634e487b7160e01b600052602160045260246000fd5b9052565b6020810161097082846127ea565b803563ffffffff811681146127a557600080fd5b6000806040838503121561284157600080fd5b61284a8361278e565b91506128586020840161281a565b90509250929050565b60008060006060848603121561287657600080fd5b61287f8461278e565b925061288d6020850161278e565b9150604084013590509250925092565b600080604083850312156128b057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156128fd576128fd6128bf565b604052919050565b6000602080838503121561291857600080fd5b82356001600160401b038082111561292f57600080fd5b818501915085601f83011261294357600080fd5b813581811115612955576129556128bf565b8060051b91506129668483016128d5565b818152918301840191848101908884111561298057600080fd5b938501935b8385101561299e57843582529385019390850190612985565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111ac57612a0183855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b92840192606092909201916001016129c6565b600060208284031215612a2657600080fd5b81356001600160601b03811681146113a957600080fd5b600060208284031215612a4f57600080fd5b6113a98261278e565b60006001600160401b03831115612a7157612a716128bf565b612a84601f8401601f19166020016128d5565b9050828152838383011115612a9857600080fd5b828260208301376000602084830101529392505050565b600060208284031215612ac157600080fd5b81356001600160401b03811115612ad757600080fd5b8201601f81018413612ae857600080fd5b61233184823560208401612a58565b6020808252825182820181905260009190848201906040850190845b818110156111ac57835183529284019291840191600101612b13565b600080600060608486031215612b4457600080fd5b612b4d8461278e565b95602085013595506040909401359392505050565b60006101008201905082518252602083015163ffffffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a0850152505060c0830151151560c083015260e0830151612bd160e08401826127ea565b5092915050565b803580151581146127a557600080fd5b60008060408385031215612bfb57600080fd5b612c048361278e565b915061285860208401612bd8565b600060208284031215612c2457600080fd5b6113a98261281a565b60008060008060808587031215612c4357600080fd5b612c4c8561278e565b9350612c5a6020860161278e565b92506040850135915060608501356001600160401b03811115612c7c57600080fd5b8501601f81018713612c8d57600080fd5b612c9c87823560208401612a58565b91505092959194509250565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610970565b600060208284031215612cef57600080fd5b8135600381106113a957600080fd5b600060208284031215612d1057600080fd5b6113a982612bd8565b60008060408385031215612d2c57600080fd5b612d358361278e565b91506128586020840161278e565b600181811c90821680612d5757607f821691505b60208210811415612d7857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115612de857612de8612db3565b01949350505050565b6000816000190483118215151615612e0b57612e0b612db3565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612e3557612e35612e10565b500490565b634e487b7160e01b600052603260045260246000fd5b600082612e5f57612e5f612e10565b500690565b6000600019821415612e7857612e78612db3565b5060010190565b60006001600160401b03808316818516808303821115612de857612de8612db3565b600063ffffffff83811690831681811015612ebe57612ebe612db3565b039392505050565b60008351612ed881846020880161270a565b835190830190612eec81836020880161270a565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f3890830184612736565b9695505050505050565b600060208284031215612f5457600080fd5b81516113a9816126d7565b600082821015612f7157612f71612db3565b500390565b60008219821115612f8957612f89612db3565b50019056fea26469706673582212207adda817daaa9a18dbfb727347454d4492ecb9ee1c39042d838fc74ce03b13cc64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c79728346734679fcef39a39fd1a71c216ddeb5700000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : fly (address): 0xC79728346734679FcEF39a39FD1a71c216dDEB57
Arg [1] : price (uint256): 1000000000000000
Arg [2] : maxSupply (uint32): 10000
Arg [3] : holderSupply (uint32): 949
Arg [4] : teamSupply (uint32): 1000
Arg [5] : walletLimit (uint32): 10
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c79728346734679fcef39a39fd1a71c216ddeb57
Arg [1] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [3] : 00000000000000000000000000000000000000000000000000000000000003b5
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
239:4787:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3799:294;;;;;;;;;;-1:-1:-1;3799:294:6;;;;;:::i;:::-;;:::i;:::-;;;565:14:14;;558:22;540:41;;528:2;513:18;3799:294:6;;;;;;;;601:35;;;;;;;;;;;;;;;;;;766:10:14;754:23;;;736:42;;724:2;709:18;601:35:6;592:192:14;7337:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8793:200::-;;;;;;;;;;-1:-1:-1;8793:200:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1889:32:14;;;1871:51;;1859:2;1844:18;8793:200:4;1725:203:14;8370:362:4;;;;;;;;;;-1:-1:-1;8370:362:4;;;;;:::i;:::-;;:::i;:::-;;642:36:6;;;;;;;;;;;;;;;875:38;;;;;;;;;;-1:-1:-1;875:38:6;;;;;;;;;;;;;;;:::i;4099:177::-;;;;;;;;;;-1:-1:-1;4099:177:6;;;;;:::i;:::-;;:::i;3580:297:4:-;;;;;;;;;;-1:-1:-1;3830:12:4;;3814:13;;:28;3580:297;;;3522:25:14;;;3510:2;3495:18;3580:297:4;3376:177:14;370:78:6;;;;;;;;;;;;406:42;370:78;;518:34;;;;;;;;;;;;;;;491:21;;;;;;;;;;;;;;;;9632:164:4;;;;;;;;;;-1:-1:-1;9632:164:4;;;;;:::i;:::-;;:::i;1632:478:3:-;;;;;;;;;;-1:-1:-1;1632:478:3;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4336:32:14;;;4318:51;;4400:2;4385:18;;4378:34;;;;4291:18;1632:478:3;4144:274:14;4915:108:6;;;;;;;;;;;;;:::i;9862:179:4:-;;;;;;;;;;-1:-1:-1;9862:179:4;;;;;:::i;:::-;;:::i;1437:450:5:-;;;;;;;;;;-1:-1:-1;1437:450:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7152:123:4:-;;;;;;;;;;-1:-1:-1;7152:123:4;;;;;:::i;:::-;;:::i;4282:121:6:-;;;;;;;;;;-1:-1:-1;4282:121:6;;;;;:::i;:::-;;:::i;1716:562::-;;;;;;;;;;-1:-1:-1;1716:562:6;;;;;:::i;:::-;;:::i;919:29::-;;;;;;;;;;-1:-1:-1;919:29:6;;;;;;;;;;;4668:203:4;;;;;;;;;;-1:-1:-1;4668:203:4;;;;;:::i;:::-;;:::i;1661:101:12:-;;;;;;;;;;;;;:::i;4585:97:6:-;;;;;;;;;;-1:-1:-1;4585:97:6;;;;;:::i;:::-;;:::i;716:28::-;;;;;;;;;;-1:-1:-1;716:28:6;;;;;;;;;;;5139:861:5;;;;;;;;;;-1:-1:-1;5139:861:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1029:85:12:-;;;;;;;;;;-1:-1:-1;1101:6:12;;-1:-1:-1;;;;;1101:6:12;1029:85;;4496:83:6;;;;;;;;;;-1:-1:-1;4496:83:6;;;;;:::i;:::-;;:::i;7499:102:4:-;;;;;;;;;;;;;:::i;2263:2439:5:-;;;;;;;;;;-1:-1:-1;2263:2439:5;;;;;:::i;:::-;;:::i;2865:551:6:-;;;;;;;;;;-1:-1:-1;2865:551:6;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9060:282:4:-;;;;;;;;;;-1:-1:-1;9060:282:4;;;;;:::i;:::-;;:::i;2284:347:6:-;;;;;;:::i;:::-;;:::i;2637:114::-;;;;;;;;;;;;;:::i;10107:359:4:-;;;;;;;;;;-1:-1:-1;10107:359:4;;;;;:::i;:::-;;:::i;885:399:5:-;;;;;;;;;;-1:-1:-1;885:399:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;455:29:6:-;;;;;;;;;;;;;;;3422:371;;;;;;;;;;-1:-1:-1;3422:371:6;;;;;:::i;:::-;;:::i;2757:102::-;;;;;;;;;;;;;:::i;4409:81::-;;;;;;;;;;-1:-1:-1;4409:81:6;;;;;:::i;:::-;;:::i;750:26::-;;;;;;;;;;;;;:::i;558:37::-;;;;;;;;;;;;;;;685:25;;;;;;;;;;-1:-1:-1;685:25:6;;;;;;;;4819:90;;;;;;;;;;-1:-1:-1;4819:90:6;;;;;:::i;:::-;;:::i;9408:162:4:-;;;;;;;;;;-1:-1:-1;9408:162:4;;;;;:::i;:::-;;:::i;4688:125:6:-;;;;;;;;;;-1:-1:-1;4688:125:6;;;;;:::i;:::-;;:::i;1911:198:12:-;;;;;;;;;;-1:-1:-1;1911:198:12;;;;;:::i;:::-;;:::i;782:87:6:-;;;;;;;;;;;;;:::i;3799:294::-;3902:4;-1:-1:-1;;;;;;3937:41:6;;-1:-1:-1;;;3937:41:6;;:97;;-1:-1:-1;;;;;;;3994:40:6;;-1:-1:-1;;;3994:40:6;3937:97;:149;;;;4050:36;4074:11;4050:23;:36::i;:::-;3918:168;3799:294;-1:-1:-1;;3799:294:6:o;7337:98:4:-;7391:13;7423:5;7416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7337:98;:::o;8793:200::-;8861:7;8885:16;8893:7;8885;:16::i;:::-;8880:64;;8910:34;;-1:-1:-1;;;8910:34:4;;;;;;;;;;;8880:64;-1:-1:-1;8962:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;8962:24:4;;8793:200::o;8370:362::-;8442:13;8458:24;8474:7;8458:15;:24::i;:::-;8442:40;;8502:5;-1:-1:-1;;;;;8496:11:4;:2;-1:-1:-1;;;;;8496:11:4;;8492:48;;;8516:24;;-1:-1:-1;;;8516:24:4;;;;;;;;;;;8492:48;719:10:1;-1:-1:-1;;;;;8555:21:4;;;;;;:63;;-1:-1:-1;8581:37:4;8598:5;719:10:1;9408:162:4;:::i;8581:37::-;8580:38;8555:63;8551:136;;;8641:35;;-1:-1:-1;;;8641:35:4;;;;;;;;;;;8551:136;8697:28;8706:2;8710:7;8719:5;8697:8;:28::i;:::-;8432:300;8370:362;;:::o;4099:177:6:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;;;;;;;;;4172:11:6::1;:21:::0;;4187:6;;4172:11;::::1;::::0;:21:::1;::::0;4187:6;;4172:21:::1;;;:::i;:::-;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;4211:11:::1;::::0;4226::::1;4211:26:::0;::::1;:11:::0;::::1;:26;;::::0;-1:-1:-1;4203:35:6::1;;;::::0;::::1;;4248:21;4258:2;4262:6;4248:21;;:9;:21::i;:::-;4099:177:::0;;:::o;9632:164:4:-;9761:28;9771:4;9777:2;9781:7;9761:9;:28::i;1632:478:3:-;1771:7;1832:27;;;:17;:27;;;;;;;;1803:56;;;;;;;;;-1:-1:-1;;;;;1803:56:3;;;;;-1:-1:-1;;;1803:56:3;;;-1:-1:-1;;;;;1803:56:3;;;;;;;;1771:7;;1870:90;;-1:-1:-1;1920:29:3;;;;;;;;;-1:-1:-1;1920:29:3;-1:-1:-1;;;;;1920:29:3;;;;-1:-1:-1;;;1920:29:3;;-1:-1:-1;;;;;1920:29:3;;;;;1870:90;2008:23;;;;1970:21;;2468:5;;1995:36;;-1:-1:-1;;;;;1995:36:3;:10;:36;:::i;:::-;1994:58;;;;:::i;:::-;2071:16;;;;;-1:-1:-1;1632:478:3;;-1:-1:-1;;;;1632:478:3:o;4915:108:6:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4964:52:6::1;4972:10;4994:21;4964:29;:52::i;:::-;4915:108::o:0;9862:179:4:-;9995:39;10012:4;10018:2;10022:7;9995:39;;;;;;;;;;;;:16;:39::i;1437:450:5:-;1601:15;;1517:23;;1576:22;1601:15;-1:-1:-1;;;;;1667:36:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;1667:36:5;;-1:-1:-1;;1667:36:5;;;;;;;;;;;;1630:73;;1722:9;1717:123;1738:14;1733:1;:19;1717:123;;1793:32;1813:8;1822:1;1813:11;;;;;;;;:::i;:::-;;;;;;;1793:19;:32::i;:::-;1777:10;1788:1;1777:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;1754:3;;1717:123;;;-1:-1:-1;1860:10:5;1437:450;-1:-1:-1;;;1437:450:5:o;7152:123:4:-;7216:7;7242:21;7255:7;7242:12;:21::i;:::-;:26;;7152:123;-1:-1:-1;;7152:123:4:o;4282:121:6:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4355:41:6::1;4374:7;1101:6:12::0;;-1:-1:-1;;;;;1101:6:12;;1029:85;4374:7:6::1;4383:12;4355:18;:41::i;:::-;4282:121:::0;:::o;1716:562::-;1795:11;1785:6;;;;:21;;;;;;;;:::i;:::-;;1777:30;;;;;;1843:1;1825:8;:15;:19;:47;;;;;1866:1;1848:8;:15;:19;;;;:::i;:::-;:24;1825:47;1817:56;;;;;;1883:12;1923:1;1905:8;:15;:19;;;;:::i;:::-;1951:14;;1883:42;;-1:-1:-1;1943:39:6;1969:13;1943:39;;;:22;;1951:14;;;;;1883:42;1943:22;:::i;:::-;:39;;;;1935:48;;;;;;1998:9;1993:183;2017:8;:15;2013:1;:19;1993:183;;;2053:4;-1:-1:-1;;;;;2053:17:6;;2071:10;406:42;2094:8;2103:1;2094:11;;;;;;;;:::i;:::-;;;;;;;;;;;2053:53;;-1:-1:-1;;;;;;2053:53:6;;;;;;;-1:-1:-1;;;;;14534:15:14;;;2053:53:6;;;14516:34:14;14586:15;;;;14566:18;;;14559:43;14618:18;;;14611:34;14451:18;;2053:53:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2148:3:6;;;;;-1:-1:-1;2148:3:6;;-1:-1:-1;2034:3:6;2148;2034;:::i;:::-;;;;1993:183;;;;2185:48;2193:10;2227:5;2205:27;;:19;2213:10;2205:7;:19::i;:::-;:27;;;;:::i;:::-;-1:-1:-1;;;;;5779:19:4;;;;;;;:12;:19;;;;;:29;;-1:-1:-1;;;;;5779:29:4;;;-1:-1:-1;;;5779:29:4;-1:-1:-1;;;;;5779:29:4;;;;;;;;;5716:99;2185:48:6;2243:28;2253:10;2265:5;2243:28;;:9;:28::i;4668:203:4:-;4732:7;-1:-1:-1;;;;;4755:19:4;;4751:60;;4783:28;;-1:-1:-1;;;4783:28:4;;;;;;;;;;;4751:60;-1:-1:-1;;;;;;4836:19:4;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;4836:27:4;;4668:203::o;1661:101:12:-;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;4585:97:6:-:0;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4657:18:6;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;5139:861:5:-:0;5200:16;5252:19;5285:25;5324:22;5349:16;5359:5;5349:9;:16::i;:::-;5324:41;;5379:25;5421:14;-1:-1:-1;;;;;5407:29:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5407:29:5;;5379:57;;5450:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;5450:31:5;5500:9;5495:460;5544:14;5529:11;:29;5495:460;;5595:14;;;;:11;:14;;;;;;;;;5583:26;;;;;;;;;-1:-1:-1;;;;;5583:26:5;;;;-1:-1:-1;;;5583:26:5;;-1:-1:-1;;;;;5583:26:5;;;;;;;;-1:-1:-1;;;5583:26:5;;;;;;;;;;;;;;;;-1:-1:-1;5627:71:5;;5671:8;;5627:71;5719:14;;-1:-1:-1;;;;;5719:28:5;;5715:109;;5791:14;;;-1:-1:-1;5715:109:5;5866:5;-1:-1:-1;;;;;5845:26:5;:17;-1:-1:-1;;;;;5845:26:5;;5841:100;;;5921:1;5895:8;5904:13;;;;;;5895:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;5841:100;5560:3;;5495:460;;;-1:-1:-1;5975:8:5;;5139:861;-1:-1:-1;;;;;;5139:861:5:o;4496:83:6:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4558:6:6::1;:14:::0;4496:83::o;7499:102:4:-;7555:13;7587:7;7580:14;;;;;:::i;2263:2439:5:-;2385:16;2450:4;2441:5;:13;2437:45;;2463:19;;-1:-1:-1;;;2463:19:5;;;;;;;;;;;2437:45;2549:13;;2496:19;;2797:9;2790:4;:16;2786:71;;;2833:9;2826:16;;2786:71;2870:25;2898:16;2908:5;2898:9;:16::i;:::-;2870:44;;3089:4;3081:5;:12;3077:271;;;3135:12;;;3169:31;;;3165:109;;;3244:11;3224:31;;3165:109;3095:193;3077:271;;;-1:-1:-1;3332:1:5;3077:271;3361:25;3403:17;-1:-1:-1;;;;;3389:32:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3389:32:5;-1:-1:-1;3361:60:5;-1:-1:-1;3439:22:5;3435:76;;3488:8;-1:-1:-1;3481:15:5;;-1:-1:-1;;;3481:15:5;3435:76;3652:31;3686:26;3706:5;3686:19;:26::i;:::-;3652:60;;3726:25;3968:9;:16;;;3963:90;;-1:-1:-1;4024:14:5;;3963:90;4083:5;4066:466;4095:4;4090:1;:9;;:45;;;;;4118:17;4103:11;:32;;4090:45;4066:466;;;4172:14;;;;:11;:14;;;;;;;;;4160:26;;;;;;;;;-1:-1:-1;;;;;4160:26:5;;;;-1:-1:-1;;;4160:26:5;;-1:-1:-1;;;;;4160:26:5;;;;;;;;-1:-1:-1;;;4160:26:5;;;;;;;;;;;;;;;;-1:-1:-1;4204:71:5;;4248:8;;4204:71;4296:14;;-1:-1:-1;;;;;4296:28:5;;4292:109;;4368:14;;;-1:-1:-1;4292:109:5;4443:5;-1:-1:-1;;;;;4422:26:5;:17;-1:-1:-1;;;;;4422:26:5;;4418:100;;;4498:1;4472:8;4481:13;;;;;;4472:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;4418:100;4137:3;;4066:466;;;-1:-1:-1;;;4614:29:5;;;-1:-1:-1;4621:8:5;;-1:-1:-1;;2263:2439:5;;;;;;:::o;2865:551:6:-;2921:13;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2921:13:6;2946:19;2968:15;:13;:15::i;:::-;2946:37;;2993:19;3015:15;:13;:15::i;:::-;2993:37;;3047:362;;;;;;;;3075:6;;3047:362;;;;3106:10;3047:362;;;;;;3144:12;3047:362;;;;;;3183:12;3047:362;;;;;;3223:12;3047:362;;;;;;3351:19;3359:10;3351:7;:19::i;:::-;-1:-1:-1;;;;;5043:19:4;;5009:7;5043:19;;;:12;:19;;;;;:32;-1:-1:-1;;;5043:32:4;;-1:-1:-1;;;;;5043:32:4;3312:59:6;;;;:::i;:::-;3047:362;;;;;;3258:28;;;;;;;;3047:362;;;;3392:6;;3047:362;;;;;3392:6;;3047:362;;;;;;;;:::i;:::-;;;3040:369;2865:551;-1:-1:-1;;;;2865:551:6:o;9060:282:4:-;-1:-1:-1;;;;;9158:24:4;;719:10:1;9158:24:4;9154:54;;;9191:17;;-1:-1:-1;;;9191:17:4;;;;;;;;;;;9154:54;719:10:1;9219:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;9219:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;9219:53:4;;;;;;;;;;9287:48;;540:41:14;;;9219:42:4;;719:10:1;9287:48:4;;513:18:14;9287:48:4;;;;;;;9060:282;;:::o;2284:347:6:-;2358:10;2348:6;;;;:20;;;;;;;;:::i;:::-;;2340:29;;;;;;2415:15;:13;:15::i;:::-;2387:43;;2396:15;:13;:15::i;:::-;2387:24;;:6;:24;:::i;:::-;:43;;;;2379:52;;;;;;2525:12;2449:88;;2501:19;2509:10;2501:7;:19::i;:::-;2479:10;5009:7:4;5043:19;;;:12;:19;;;;;:32;-1:-1:-1;;;5043:32:4;;-1:-1:-1;;;;;5043:32:4;2449:42:6;;:6;:42;:::i;:::-;:72;;;;:::i;:::-;:88;;;;2441:97;;;;;;2578:6;;2569:15;;;;;;:::i;:::-;2556:9;:28;2548:37;;;;;;2595:29;2605:10;2617:6;2595:29;;:9;:29::i;2637:114::-;2733:11;;2683:6;;2733:11;;2715:14;4194:13:4;;;3965:277;2715:14:6;2708:36;;;;:::i;:::-;2701:43;;2637:114;:::o;10107:359:4:-;10268:28;10278:4;10284:2;10288:7;10268:9;:28::i;:::-;-1:-1:-1;;;;;10310:13:4;;1465:19:0;:23;;10310:76:4;;;;;10330:56;10361:4;10367:2;10371:7;10380:5;10330:30;:56::i;:::-;10329:57;10310:76;10306:154;;;10409:40;;-1:-1:-1;;;10409:40:4;;;;;;;;;;;10306:154;10107:359;;;;:::o;885:399:5:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:53:5;1070:13;;1059:7;:24;1026:100;;1106:9;885:399;-1:-1:-1;;885:399:5:o;1026:100::-;-1:-1:-1;1147:20:5;;;;:11;:20;;;;;;;;;1135:32;;;;;;;;;-1:-1:-1;;;;;1135:32:5;;;;-1:-1:-1;;;1135:32:5;;-1:-1:-1;;;;;1135:32:5;;;;;;;;-1:-1:-1;;;1135:32:5;;;;;;;;;;;;;;;;1177:63;;1220:9;885:399;-1:-1:-1;;885:399:5:o;1177:63::-;1256:21;1269:7;1256:12;:21::i;3422:371:6:-;3495:13;3525:16;3533:7;3525;:16::i;:::-;3520:59;;3550:29;;-1:-1:-1;;;3550:29:6;;;;;;;;;;;3520:59;3594:9;;;;;;;3589:73;;3636:15;3629:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3422:371;;;:::o;3589:73::-;3671:21;3695:12;3671:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3748:7;3757:18;:7;:16;:18::i;:::-;3731:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3717:69;;;3422:371;;;:::o;2757:102::-;2803:6;2828:24;2841:11;2828:10;:24;:::i;4409:81::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4469:6:6::1;:14:::0;;4478:5;;4469:6;-1:-1:-1;;4469:14:6::1;::::0;4478:5;4469:14:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;4409:81:::0;:::o;750:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4819:90::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4882:9:6::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;4882:20:6;;::::1;::::0;;;::::1;::::0;;4819:90::o;9408:162:4:-;-1:-1:-1;;;;;9528:25:4;;;9505:4;9528:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;9408:162::o;4688:125:6:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4774:32:6;;::::1;::::0;:15:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;1911:198:12:-:0;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:12;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:12;;16107:2:14;1991:73:12::1;::::0;::::1;16089:21:14::0;16146:2;16126:18;;;16119:30;16185:34;16165:18;;;16158:62;-1:-1:-1;;;16236:18:14;;;16229:36;16282:19;;1991:73:12::1;15905:402:14::0;1991:73:12::1;2074:28;2093:8;2074:18;:28::i;782:87:6:-:0;;;;;;;:::i;4309:300:4:-;4411:4;-1:-1:-1;;;;;;4446:40:4;;-1:-1:-1;;;4446:40:4;;:104;;-1:-1:-1;;;;;;;4502:48:4;;-1:-1:-1;;;4502:48:4;4446:104;:156;;;;4566:36;4590:11;4566:23;:36::i;10712:172::-;10769:4;10832:13;;10822:7;:23;10792:85;;;;-1:-1:-1;;10850:20:4;;;;:11;:20;;;;;:27;-1:-1:-1;;;10850:27:4;;;;10849:28;;10712:172::o;18652:189::-;18762:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;18762:29:4;-1:-1:-1;;;;;18762:29:4;;;;;;;;;18806:28;;18762:24;;18806:28;;;;;;;18652:189;;;:::o;10890:102::-;10958:27;10968:2;10972:8;10958:27;;;;;;;;;;;;:9;:27::i;13722:2082::-;13832:35;13870:21;13883:7;13870:12;:21::i;:::-;13832:59;;13928:4;-1:-1:-1;;;;;13906:26:4;:13;:18;;;-1:-1:-1;;;;;13906:26:4;;13902:67;;13941:28;;-1:-1:-1;;;13941:28:4;;;;;;;;;;;13902:67;13980:22;719:10:1;-1:-1:-1;;;;;14006:20:4;;;;:72;;-1:-1:-1;14042:36:4;14059:4;719:10:1;9408:162:4;:::i;14042:36::-;14006:124;;;-1:-1:-1;719:10:1;14094:20:4;14106:7;14094:11;:20::i;:::-;-1:-1:-1;;;;;14094:36:4;;14006:124;13980:151;;14147:17;14142:66;;14173:35;;-1:-1:-1;;;14173:35:4;;;;;;;;;;;14142:66;-1:-1:-1;;;;;14222:16:4;;14218:52;;14247:23;;-1:-1:-1;;;14247:23:4;;;;;;;;;;;14218:52;14386:35;14403:1;14407:7;14416:4;14386:8;:35::i;:::-;-1:-1:-1;;;;;14711:18:4;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;14711:31:4;;;-1:-1:-1;;;;;14711:31:4;;;-1:-1:-1;;14711:31:4;;;;;;;14756:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;14756:29:4;;;;;;;;;;;14834:20;;;:11;:20;;;;;;14868:18;;-1:-1:-1;;;;;;14900:49:4;;;;-1:-1:-1;;;14933:15:4;14900:49;;;;;;;;;;15219:11;;15278:24;;;;;15320:13;;14834:20;;15278:24;;15320:13;15316:377;;15527:13;;15512:11;:28;15508:171;;15564:20;;15632:28;;;;-1:-1:-1;;;;;15606:54:4;-1:-1:-1;;;15606:54:4;-1:-1:-1;;;;;;15606:54:4;;;-1:-1:-1;;;;;15564:20:4;;15606:54;;;;15508:171;14687:1016;;;15737:7;15733:2;-1:-1:-1;;;;;15718:27:4;15727:4;-1:-1:-1;;;;;15718:27:4;;;;;;;;;;;15755:42;13822:1982;;13722:2082;;;:::o;2412:312:0:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:0;;16514:2:14;2493:73:0;;;16496:21:14;16553:2;16533:18;;;16526:30;16592:31;16572:18;;;16565:59;16641:18;;2493:73:0;16312:353:14;2493:73:0;2578:12;2596:9;-1:-1:-1;;;;;2596:14:0;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:0;;17082:2:14;2639:78:0;;;17064:21:14;17121:2;17101:18;;;17094:30;17160:34;17140:18;;;17133:62;17231:28;17211:18;;;17204:56;17277:19;;2639:78:0;16880:422:14;6011:1084:4;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;6121:7:4;6201:13;;6194:4;:20;6163:868;;;6234:31;6268:17;;;:11;:17;;;;;;;;;6234:51;;;;;;;;;-1:-1:-1;;;;;6234:51:4;;;;-1:-1:-1;;;6234:51:4;;-1:-1:-1;;;;;6234:51:4;;;;;;;;-1:-1:-1;;;6234:51:4;;;;;;;;;;;;;;6303:714;;6352:14;;-1:-1:-1;;;;;6352:28:4;;6348:99;;6415:9;6011:1084;-1:-1:-1;;;6011:1084:4:o;6348:99::-;-1:-1:-1;;;6783:6:4;6827:17;;;;:11;:17;;;;;;;;;6815:29;;;;;;;;;-1:-1:-1;;;;;6815:29:4;;;;;-1:-1:-1;;;6815:29:4;;-1:-1:-1;;;;;6815:29:4;;;;;;;;-1:-1:-1;;;6815:29:4;;;;;;;;;;;;;6874:28;6870:107;;6941:9;6011:1084;-1:-1:-1;;;6011:1084:4:o;6870:107::-;6744:255;;;6216:815;6163:868;7057:31;;-1:-1:-1;;;7057:31:4;;;;;;;;;;;2741:327:3;2468:5;-1:-1:-1;;;;;2843:33:3;;;;2835:88;;;;-1:-1:-1;;;2835:88:3;;17509:2:14;2835:88:3;;;17491:21:14;17548:2;17528:18;;;17521:30;17587:34;17567:18;;;17560:62;-1:-1:-1;;;17638:18:14;;;17631:40;17688:19;;2835:88:3;17307:406:14;2835:88:3;-1:-1:-1;;;;;2941:22:3;;2933:60;;;;-1:-1:-1;;;2933:60:3;;17920:2:14;2933:60:3;;;17902:21:14;17959:2;17939:18;;;17932:30;17998:27;17978:18;;;17971:55;18043:18;;2933:60:3;17718:349:14;2933:60:3;3026:35;;;;;;;;;-1:-1:-1;;;;;3026:35:3;;;;;;-1:-1:-1;;;;;3026:35:3;;;;;;;;;;-1:-1:-1;;;3004:57:3;;;;-1:-1:-1;3004:57:3;2741:327::o;5424:110:4:-;-1:-1:-1;;;;;5504:19:4;5479:6;5504:19;;;:12;:19;;;;;:23;-1:-1:-1;;;5504:23:4;;-1:-1:-1;;;;;5504:23:4;;5424:110::o;2263:187:12:-;2355:6;;;-1:-1:-1;;;;;2371:17:12;;;-1:-1:-1;;;;;;2371:17:12;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;19322:650:4:-;19500:72;;-1:-1:-1;;;19500:72:4;;19480:4;;-1:-1:-1;;;;;19500:36:4;;;;;:72;;719:10:1;;19551:4:4;;19557:7;;19566:5;;19500:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19500:72:4;;;;;;;;-1:-1:-1;;19500:72:4;;;;;;;;;;;;:::i;:::-;;;19496:470;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19731:13:4;;19727:229;;19776:40;;-1:-1:-1;;;19776:40:4;;;;;;;;;;;19727:229;19916:6;19910:13;19901:6;19897:2;19893:15;19886:38;19496:470;-1:-1:-1;;;;;;19618:55:4;-1:-1:-1;;;19618:55:4;;-1:-1:-1;19496:470:4;19322:650;;;;;;:::o;328:703:13:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:13;;;;;;;;;;;;-1:-1:-1;;;627:10:13;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:13;;-1:-1:-1;773:2:13;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;-1:-1:-1;;;;;817:17:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:13;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:13;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:13;;;;;;;;-1:-1:-1;972:11:13;981:2;972:11;;:::i;:::-;;;844:150;;1369:213:3;1471:4;-1:-1:-1;;;;;;1494:41:3;;-1:-1:-1;;;1494:41:3;;:81;;-1:-1:-1;;;;;;;;;;937:40:2;;;1539:36:3;829:155:2;11343:157:4;11461:32;11467:2;11471:8;11481:5;11488:4;11903:13;;-1:-1:-1;;;;;11930:16:4;;11926:48;;11955:19;;-1:-1:-1;;;11955:19:4;;;;;;;;;;;11926:48;11988:13;11984:44;;12010:18;;-1:-1:-1;;;12010:18:4;;;;;;;;;;;11984:44;-1:-1:-1;;;;;12371:16:4;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;12429:49:4;;-1:-1:-1;;;;;12371:44:4;;;;;;;12429:49;;;-1:-1:-1;;;;;12371:44:4;;;;;;12429:49;;;;;;;;;;;;;;;;12493:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;12542:66:4;;;;-1:-1:-1;;;12592:15:4;12542:66;;;;;;;;;;12493:25;12686:23;;;12728:4;:23;;;;-1:-1:-1;;;;;;12736:13:4;;1465:19:0;:23;;12736:15:4;12724:628;;;12771:309;12801:38;;12826:12;;-1:-1:-1;;;;;12801:38:4;;;12818:1;;12801:38;;12818:1;;12801:38;12866:69;12905:1;12909:2;12913:14;;;;;;12929:5;12866:30;:69::i;:::-;12861:172;;12970:40;;-1:-1:-1;;;12970:40:4;;;;;;;;;;;12861:172;13075:3;13059:12;:19;;12771:309;;13159:12;13142:13;;:29;13138:43;;13173:8;;;13138:43;12724:628;;;13220:118;13250:40;;13275:14;;;;;-1:-1:-1;;;;;13250:40:4;;;13267:1;;13250:40;;13267:1;;13250:40;13333:3;13317:12;:19;;13220:118;;12724:628;-1:-1:-1;13365:13:4;:28;13413:60;10107:359;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:14;-1:-1:-1;;;;;;88:32:14;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;789:258::-;861:1;871:113;885:6;882:1;879:13;871:113;;;961:11;;;955:18;942:11;;;935:39;907:2;900:10;871:113;;;1002:6;999:1;996:13;993:48;;;-1:-1:-1;;1037:1:14;1019:16;;1012:27;789:258::o;1052:::-;1094:3;1132:5;1126:12;1159:6;1154:3;1147:19;1175:63;1231:6;1224:4;1219:3;1215:14;1208:4;1201:5;1197:16;1175:63;:::i;:::-;1292:2;1271:15;-1:-1:-1;;1267:29:14;1258:39;;;;1299:4;1254:50;;1052:258;-1:-1:-1;;1052:258:14:o;1315:220::-;1464:2;1453:9;1446:21;1427:4;1484:45;1525:2;1514:9;1510:18;1502:6;1484:45;:::i;1540:180::-;1599:6;1652:2;1640:9;1631:7;1627:23;1623:32;1620:52;;;1668:1;1665;1658:12;1620:52;-1:-1:-1;1691:23:14;;1540:180;-1:-1:-1;1540:180:14:o;1933:173::-;2001:20;;-1:-1:-1;;;;;2050:31:14;;2040:42;;2030:70;;2096:1;2093;2086:12;2030:70;1933:173;;;:::o;2111:254::-;2179:6;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:52;;;2256:1;2253;2246:12;2208:52;2279:29;2298:9;2279:29;:::i;:::-;2269:39;2355:2;2340:18;;;;2327:32;;-1:-1:-1;;;2111:254:14:o;2370:127::-;2431:10;2426:3;2422:20;2419:1;2412:31;2462:4;2459:1;2452:15;2486:4;2483:1;2476:15;2502:233;2579:1;2572:5;2569:12;2559:143;;2624:10;2619:3;2615:20;2612:1;2605:31;2659:4;2656:1;2649:15;2687:4;2684:1;2677:15;2559:143;2711:18;;2502:233::o;2740:200::-;2882:2;2867:18;;2894:40;2871:9;2916:6;2894:40;:::i;2945:163::-;3012:20;;3072:10;3061:22;;3051:33;;3041:61;;3098:1;3095;3088:12;3113:258;3180:6;3188;3241:2;3229:9;3220:7;3216:23;3212:32;3209:52;;;3257:1;3254;3247:12;3209:52;3280:29;3299:9;3280:29;:::i;:::-;3270:39;;3328:37;3361:2;3350:9;3346:18;3328:37;:::i;:::-;3318:47;;3113:258;;;;;:::o;3558:328::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:52;;;3720:1;3717;3710:12;3672:52;3743:29;3762:9;3743:29;:::i;:::-;3733:39;;3791:38;3825:2;3814:9;3810:18;3791:38;:::i;:::-;3781:48;;3876:2;3865:9;3861:18;3848:32;3838:42;;3558:328;;;;;:::o;3891:248::-;3959:6;3967;4020:2;4008:9;3999:7;3995:23;3991:32;3988:52;;;4036:1;4033;4026:12;3988:52;-1:-1:-1;;4059:23:14;;;4129:2;4114:18;;;4101:32;;-1:-1:-1;3891:248:14:o;4423:127::-;4484:10;4479:3;4475:20;4472:1;4465:31;4515:4;4512:1;4505:15;4539:4;4536:1;4529:15;4555:275;4626:2;4620:9;4691:2;4672:13;;-1:-1:-1;;4668:27:14;4656:40;;-1:-1:-1;;;;;4711:34:14;;4747:22;;;4708:62;4705:88;;;4773:18;;:::i;:::-;4809:2;4802:22;4555:275;;-1:-1:-1;4555:275:14:o;4835:946::-;4919:6;4950:2;4993;4981:9;4972:7;4968:23;4964:32;4961:52;;;5009:1;5006;4999:12;4961:52;5049:9;5036:23;-1:-1:-1;;;;;5119:2:14;5111:6;5108:14;5105:34;;;5135:1;5132;5125:12;5105:34;5173:6;5162:9;5158:22;5148:32;;5218:7;5211:4;5207:2;5203:13;5199:27;5189:55;;5240:1;5237;5230:12;5189:55;5276:2;5263:16;5298:2;5294;5291:10;5288:36;;;5304:18;;:::i;:::-;5350:2;5347:1;5343:10;5333:20;;5373:28;5397:2;5393;5389:11;5373:28;:::i;:::-;5435:15;;;5505:11;;;5501:20;;;5466:12;;;;5533:19;;;5530:39;;;5565:1;5562;5555:12;5530:39;5589:11;;;;5609:142;5625:6;5620:3;5617:15;5609:142;;;5691:17;;5679:30;;5642:12;;;;5729;;;;5609:142;;;5770:5;4835:946;-1:-1:-1;;;;;;;;4835:946:14:o;6069:722::-;6302:2;6354:21;;;6424:13;;6327:18;;;6446:22;;;6273:4;;6302:2;6525:15;;;;6499:2;6484:18;;;6273:4;6568:197;6582:6;6579:1;6576:13;6568:197;;;6631:52;6679:3;6670:6;6664:13;5870:12;;-1:-1:-1;;;;;5866:38:14;5854:51;;5958:4;5947:16;;;5941:23;-1:-1:-1;;;;;5937:48:14;5921:14;;;5914:72;6049:4;6038:16;;;6032:23;6025:31;6018:39;6002:14;;5995:63;5786:278;6631:52;6740:15;;;;6712:4;6703:14;;;;;6604:1;6597:9;6568:197;;6796:292;6854:6;6907:2;6895:9;6886:7;6882:23;6878:32;6875:52;;;6923:1;6920;6913:12;6875:52;6962:9;6949:23;-1:-1:-1;;;;;7005:5:14;7001:38;6994:5;6991:49;6981:77;;7054:1;7051;7044:12;7093:186;7152:6;7205:2;7193:9;7184:7;7180:23;7176:32;7173:52;;;7221:1;7218;7211:12;7173:52;7244:29;7263:9;7244:29;:::i;7284:407::-;7349:5;-1:-1:-1;;;;;7375:6:14;7372:30;7369:56;;;7405:18;;:::i;:::-;7443:57;7488:2;7467:15;;-1:-1:-1;;7463:29:14;7494:4;7459:40;7443:57;:::i;:::-;7434:66;;7523:6;7516:5;7509:21;7563:3;7554:6;7549:3;7545:16;7542:25;7539:45;;;7580:1;7577;7570:12;7539:45;7629:6;7624:3;7617:4;7610:5;7606:16;7593:43;7683:1;7676:4;7667:6;7660:5;7656:18;7652:29;7645:40;7284:407;;;;;:::o;7696:451::-;7765:6;7818:2;7806:9;7797:7;7793:23;7789:32;7786:52;;;7834:1;7831;7824:12;7786:52;7874:9;7861:23;-1:-1:-1;;;;;7899:6:14;7896:30;7893:50;;;7939:1;7936;7929:12;7893:50;7962:22;;8015:4;8007:13;;8003:27;-1:-1:-1;7993:55:14;;8044:1;8041;8034:12;7993:55;8067:74;8133:7;8128:2;8115:16;8110:2;8106;8102:11;8067:74;:::i;8152:632::-;8323:2;8375:21;;;8445:13;;8348:18;;;8467:22;;;8294:4;;8323:2;8546:15;;;;8520:2;8505:18;;;8294:4;8589:169;8603:6;8600:1;8597:13;8589:169;;;8664:13;;8652:26;;8733:15;;;;8698:12;;;;8625:1;8618:9;8589:169;;8789:322;8866:6;8874;8882;8935:2;8923:9;8914:7;8910:23;8906:32;8903:52;;;8951:1;8948;8941:12;8903:52;8974:29;8993:9;8974:29;:::i;:::-;8964:39;9050:2;9035:18;;9022:32;;-1:-1:-1;9101:2:14;9086:18;;;9073:32;;8789:322;-1:-1:-1;;;8789:322:14:o;9116:865::-;9256:4;9298:3;9287:9;9283:19;9275:27;;9335:6;9329:13;9318:9;9311:32;9390:4;9382:6;9378:17;9372:24;9415:10;9481:2;9467:12;9463:21;9456:4;9445:9;9441:20;9434:51;9553:2;9545:4;9537:6;9533:17;9527:24;9523:33;9516:4;9505:9;9501:20;9494:63;9625:2;9617:4;9609:6;9605:17;9599:24;9595:33;9588:4;9577:9;9573:20;9566:63;9697:2;9689:4;9681:6;9677:17;9671:24;9667:33;9660:4;9649:9;9645:20;9638:63;9769:2;9761:4;9753:6;9749:17;9743:24;9739:33;9732:4;9721:9;9717:20;9710:63;;;9843:4;9835:6;9831:17;9825:24;9818:32;9811:40;9804:4;9793:9;9789:20;9782:70;9901:4;9893:6;9889:17;9883:24;9916:59;9969:4;9958:9;9954:20;9938:14;9916:59;:::i;:::-;;9116:865;;;;:::o;9986:160::-;10051:20;;10107:13;;10100:21;10090:32;;10080:60;;10136:1;10133;10126:12;10151:254;10216:6;10224;10277:2;10265:9;10256:7;10252:23;10248:32;10245:52;;;10293:1;10290;10283:12;10245:52;10316:29;10335:9;10316:29;:::i;:::-;10306:39;;10364:35;10395:2;10384:9;10380:18;10364:35;:::i;10410:184::-;10468:6;10521:2;10509:9;10500:7;10496:23;10492:32;10489:52;;;10537:1;10534;10527:12;10489:52;10560:28;10578:9;10560:28;:::i;10599:667::-;10694:6;10702;10710;10718;10771:3;10759:9;10750:7;10746:23;10742:33;10739:53;;;10788:1;10785;10778:12;10739:53;10811:29;10830:9;10811:29;:::i;:::-;10801:39;;10859:38;10893:2;10882:9;10878:18;10859:38;:::i;:::-;10849:48;;10944:2;10933:9;10929:18;10916:32;10906:42;;10999:2;10988:9;10984:18;10971:32;-1:-1:-1;;;;;11018:6:14;11015:30;11012:50;;;11058:1;11055;11048:12;11012:50;11081:22;;11134:4;11126:13;;11122:27;-1:-1:-1;11112:55:14;;11163:1;11160;11153:12;11112:55;11186:74;11252:7;11247:2;11234:16;11229:2;11225;11221:11;11186:74;:::i;:::-;11176:84;;;10599:667;;;;;;;:::o;11271:265::-;5870:12;;-1:-1:-1;;;;;5866:38:14;5854:51;;5958:4;5947:16;;;5941:23;-1:-1:-1;;;;;5937:48:14;5921:14;;;5914:72;6049:4;6038:16;;;6032:23;6025:31;6018:39;6002:14;;;5995:63;11467:2;11452:18;;11479:51;5786:278;11765:266;11834:6;11887:2;11875:9;11866:7;11862:23;11858:32;11855:52;;;11903:1;11900;11893:12;11855:52;11942:9;11929:23;11981:1;11974:5;11971:12;11961:40;;11997:1;11994;11987:12;12036:180;12092:6;12145:2;12133:9;12124:7;12120:23;12116:32;12113:52;;;12161:1;12158;12151:12;12113:52;12184:26;12200:9;12184:26;:::i;12221:260::-;12289:6;12297;12350:2;12338:9;12329:7;12325:23;12321:32;12318:52;;;12366:1;12363;12356:12;12318:52;12389:29;12408:9;12389:29;:::i;:::-;12379:39;;12437:38;12471:2;12460:9;12456:18;12437:38;:::i;12486:380::-;12565:1;12561:12;;;;12608;;;12629:61;;12683:4;12675:6;12671:17;12661:27;;12629:61;12736:2;12728:6;12725:14;12705:18;12702:38;12699:161;;;12782:10;12777:3;12773:20;12770:1;12763:31;12817:4;12814:1;12807:15;12845:4;12842:1;12835:15;12699:161;;12486:380;;;:::o;12871:356::-;13073:2;13055:21;;;13092:18;;;13085:30;13151:34;13146:2;13131:18;;13124:62;13218:2;13203:18;;12871:356::o;13232:127::-;13293:10;13288:3;13284:20;13281:1;13274:31;13324:4;13321:1;13314:15;13348:4;13345:1;13338:15;13364:228;13403:3;13431:10;13468:2;13465:1;13461:10;13498:2;13495:1;13491:10;13529:3;13525:2;13521:12;13516:3;13513:21;13510:47;;;13537:18;;:::i;:::-;13573:13;;13364:228;-1:-1:-1;;;;13364:228:14:o;13597:168::-;13637:7;13703:1;13699;13695:6;13691:14;13688:1;13685:21;13680:1;13673:9;13666:17;13662:45;13659:71;;;13710:18;;:::i;:::-;-1:-1:-1;13750:9:14;;13597:168::o;13770:127::-;13831:10;13826:3;13822:20;13819:1;13812:31;13862:4;13859:1;13852:15;13886:4;13883:1;13876:15;13902:120;13942:1;13968;13958:35;;13973:18;;:::i;:::-;-1:-1:-1;14007:9:14;;13902:120::o;14027:127::-;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14159:112;14191:1;14217;14207:35;;14222:18;;:::i;:::-;-1:-1:-1;14256:9:14;;14159:112::o;14656:135::-;14695:3;-1:-1:-1;;14716:17:14;;14713:43;;;14736:18;;:::i;:::-;-1:-1:-1;14783:1:14;14772:13;;14656:135::o;14796:236::-;14835:3;-1:-1:-1;;;;;14908:2:14;14905:1;14901:10;14938:2;14935:1;14931:10;14969:3;14965:2;14961:12;14956:3;14953:21;14950:47;;;14977:18;;:::i;15037:221::-;15076:4;15105:10;15165;;;;15135;;15187:12;;;15184:38;;;15202:18;;:::i;:::-;15239:13;;15037:221;-1:-1:-1;;;15037:221:14:o;15263:637::-;15543:3;15581:6;15575:13;15597:53;15643:6;15638:3;15631:4;15623:6;15619:17;15597:53;:::i;:::-;15713:13;;15672:16;;;;15735:57;15713:13;15672:16;15769:4;15757:17;;15735:57;:::i;:::-;-1:-1:-1;;;15814:20:14;;15843:22;;;15892:1;15881:13;;15263:637;-1:-1:-1;;;;15263:637:14:o;18072:489::-;-1:-1:-1;;;;;18341:15:14;;;18323:34;;18393:15;;18388:2;18373:18;;18366:43;18440:2;18425:18;;18418:34;;;18488:3;18483:2;18468:18;;18461:31;;;18266:4;;18509:46;;18535:19;;18527:6;18509:46;:::i;:::-;18501:54;18072:489;-1:-1:-1;;;;;;18072:489:14:o;18566:249::-;18635:6;18688:2;18676:9;18667:7;18663:23;18659:32;18656:52;;;18704:1;18701;18694:12;18656:52;18736:9;18730:16;18755:30;18779:5;18755:30;:::i;18820:125::-;18860:4;18888:1;18885;18882:8;18879:34;;;18893:18;;:::i;:::-;-1:-1:-1;18930:9:14;;18820:125::o;18950:128::-;18990:3;19021:1;19017:6;19014:1;19011:13;19008:39;;;19027:18;;:::i;:::-;-1:-1:-1;19063:9:14;;18950:128::o
Swarm Source
ipfs://7adda817daaa9a18dbfb727347454d4492ecb9ee1c39042d838fc74ce03b13cc
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.