Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,900 GM
Holders
1,433
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
12 GMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GMfrens
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-16 */ // Sources flattened with hardhat v2.9.3 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/interfaces/[email protected] // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; // File @openzeppelin/contracts/interfaces/[email protected] // OpenZeppelin Contracts v4.4.1 (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File contracts/utils/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // 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; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File contracts/utils/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // 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 virtual override 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 returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (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) if (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, _toString(tokenId))) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, 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 (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) 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 (to.code.length != 0) { 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 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) 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; 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 = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _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 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 = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { 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 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 ERC721A__IERC721Receiver(to).onERC721Received( _msgSenderERC721A(), from, tokenId, _data ) returns (bytes4 retval) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol unchecked { 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; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } } // File contracts/custom/GMfrens.sol pragma solidity ^0.8.4; contract GMfrens is IERC2981, ERC721A, Ownable { using Address for address; using Strings for uint256; uint256 public cost; uint32 public maxPerMint; uint32 public maxPerWallet; bool public open; bool public revealed; bool public presaleOpen; bool public referralOpen; uint256 public referralCap; address public reqToken; uint256 internal maxSupply; string internal baseUri; address internal recipient; uint256 internal recipientFee; string internal uriNotRevealed; bytes32 private merkleRoot; mapping(address => uint256) private referralMap; address private constant _Dev = 0x460Fd5059E7301680fA53E63bbBF7272E643e89C; mapping(address => uint256) private _shares; address[] private _payees; constructor( string memory _name, string memory _symbol, uint256 _maxSupply ) public ERC721A(_name, _symbol) { maxSupply = _maxSupply; revealed = false; _shares[_Dev] = 49; _shares[owner()] = 951; _payees.push(_Dev); _payees.push(owner()); } // ------ Dev Only ------ function setCommission(uint256 _val1) public { require(msg.sender == _Dev, "Invalid address"); uint256 diff = _shares[_Dev] - _val1; _shares[_Dev] = _val1; _shares[_payees[1]] += diff; } // ------ Owner Only ------ function updateSale( bool _open, uint256 _cost, uint32 _maxW, uint32 _maxM ) public onlyOwner { open = _open; cost = _cost; maxPerWallet = _maxW; maxPerMint = _maxM; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function updateReqToken(address _address) public onlyOwner { reqToken = _address; } function updatePresale(bool _open, bytes32 root) public onlyOwner { presaleOpen = _open; merkleRoot = root; } function updateReveal(bool _revealed, string memory _uri) public onlyOwner { revealed = _revealed; if (_revealed == false) { uriNotRevealed = _uri; } if (_revealed == true) { bytes memory b1 = bytes(baseUri); if (b1.length == 0) { baseUri = _uri; } } } function updateWithdrawSplit( address[] memory _addresses, uint256[] memory _fees ) public onlyOwner { for (uint256 i = 1; i < _payees.length; i++) { delete _shares[_payees[i]]; } _payees = new address[](_addresses.length + 1); _payees[0] = _Dev; for (uint256 i = 0; i < _addresses.length; i++) { _shares[_addresses[i]] = _fees[i]; _payees[i + 1] = _addresses[i]; } } function getWithdrawSplit() public view returns (address[] memory, uint256[] memory) { uint256[] memory values = new uint256[](_payees.length); for (uint256 i = 0; i < _payees.length; i++) { values[i] = _shares[_payees[i]]; } return (_payees, values); } function updateReferral(bool _open, uint256 _val) public onlyOwner { referralOpen = _open; referralCap = _val; } function updateRoyalties(address _recipient, uint256 _fee) public onlyOwner { recipient = _recipient; recipientFee = _fee; } function withdraw() public payable { uint256 balance = address(this).balance; require(balance > 0, "Zero balance"); for (uint256 i = 0; i < _payees.length; i++) { uint256 split = _shares[_payees[i]]; uint256 value = ((split * balance) / 1000); Address.sendValue(payable(_payees[i]), value); } } // ------ Mint! ------ function airdrop(address[] memory _recipients, uint256[] memory _amount) public onlyOwner { require(_recipients.length == _amount.length); for (uint256 i = 0; i < _amount.length; i++) { require( supply() + _amount[i] <= totalSupply(), "reached max supply" ); _safeMint(_recipients[i], _amount[i]); } } function mint(uint256 count) external payable preMintChecks(count) { require(open == true, "Mint not open"); _safeMint(msg.sender, count); } function presaleMint(uint32 count, bytes32[] calldata proof) external payable preMintChecks(count) { require(presaleOpen, "Presale not open"); require(merkleRoot != "", "Presale not ready"); require( MerkleProof.verify( proof, merkleRoot, keccak256(abi.encodePacked(msg.sender)) ), "Not a presale member" ); _safeMint(msg.sender, count); } function referralMint(uint32 count, address referrer) external payable preMintChecks(count) { require(referralOpen == true, "Referrals not open"); require(open == true, "Mint not open"); require(referralCap > 0, "Cap is set to zero"); require(_numberMinted(referrer) > 0, "Referrer has not minted"); require(msg.sender != referrer, "Cannot refer yourself"); _safeMint(msg.sender, count); referralMap[referrer] += 1; if (referralMap[referrer] % referralCap == 0) { if (supply() < totalSupply()) { _safeMint(referrer, 1); } } } // ------ Read ------ function supply() public view returns (uint256) { return _currentIndex - 1; } function totalSupply() public view override returns (uint256) { return maxSupply - _burnCounter; } function supportsInterface(bytes4 interfaceId) public view override(ERC721A, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) { return (recipient, (_salePrice * recipientFee) / 1000); } function affiliatesOf(address owner) public view virtual returns (uint256) { return referralMap[owner]; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Does not exist"); if (revealed == false) { return string( abi.encodePacked( uriNotRevealed, Strings.toString(_tokenId), ".json" ) ); } return string( abi.encodePacked(baseUri, Strings.toString(_tokenId), ".json") ); } // ------ Modifiers ------ modifier preMintChecks(uint256 count) { require(count > 0, "Mint at least one."); require(count <= maxPerMint, "Max mint reached."); require(supply() + count <= totalSupply(), "reached max supply"); require( _numberMinted(msg.sender) + count <= maxPerWallet, "can not mint this many" ); require(msg.value >= cost * count, "Not enough fund."); if (reqToken != address(0)) { ERC721A accessToken = ERC721A(reqToken); require( accessToken.balanceOf(msg.sender) > 0, "Access token not owned" ); } _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"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":"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"affiliatesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWithdrawSplit","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerMint","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"address","name":"referrer","type":"address"}],"name":"referralMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referralOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reqToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"uint256","name":"_val1","type":"uint256"}],"name":"setCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"},{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"updateReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateReqToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_uri","type":"string"}],"name":"updateReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint32","name":"_maxW","type":"uint32"},{"internalType":"uint32","name":"_maxM","type":"uint32"}],"name":"updateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"}],"name":"updateWithdrawSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003ae238038062003ae2833981016040819052620000349162000353565b8251839083906200004d906002906020850190620001fa565b50805162000063906003906020840190620001fa565b50506001600055506200007633620001a8565b600d819055600a805460ff60481b1916905573460fd5059e7301680fa53e63bbbf7272e643e89c60009081526014602081905260317f97e14843bcb52e469f69b929a6475681fc82e2504cc873ce324f65b7a071f5b5556103b791620000e46008546001600160a01b031690565b6001600160a01b03168152602081019190915260400160009081209190915560158054600181018255918190527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47590910180546001600160a01b03191673460fd5059e7301680fa53e63bbbf7272e643e89c1790556200016c6008546001600160a01b031690565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555062000416915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200020890620003c3565b90600052602060002090601f0160209004810192826200022c576000855562000277565b82601f106200024757805160ff191683800117855562000277565b8280016001018555821562000277579182015b82811115620002775782518255916020019190600101906200025a565b506200028592915062000289565b5090565b5b808211156200028557600081556001016200028a565b600082601f830112620002b1578081fd5b81516001600160401b0380821115620002ce57620002ce62000400565b604051601f8301601f19908116603f01168101908282118183101715620002f957620002f962000400565b8160405283815260209250868385880101111562000315578485fd5b8491505b8382101562000338578582018301518183018401529082019062000319565b838211156200034957848385830101525b9695505050505050565b60008060006060848603121562000368578283fd5b83516001600160401b03808211156200037f578485fd5b6200038d87838801620002a0565b94506020860151915080821115620003a3578384fd5b50620003b286828701620002a0565b925050604084015190509250925092565b600181811c90821680620003d857607f821691505b60208210811415620003fa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6136bc80620004266000396000f3fe60806040526004361061028c5760003560e01c80636c2f5acd11610164578063c7d12610116100c6578063e985e9c51161008a578063f5ca4dfd11610064578063f5ca4dfd146107c7578063fcfff16f146107ea578063fe25219a1461080b57600080fd5b8063e985e9c51461074b578063f179dca114610794578063f2fde38b146107a757600080fd5b8063c7d126101461069f578063c87b56dd146106bf578063d6c5b414146106df578063db31882b14610715578063dfdd9b9a1461073557600080fd5b806395d89b4111610128578063b88d4fde11610102578063b88d4fde1461063e578063be8e43ee1461065e578063bee6348a1461067e57600080fd5b806395d89b41146105f6578063a0712d681461060b578063a22cb4651461061e57600080fd5b80636c2f5acd1461056357806370a0823114610583578063715018a6146105a3578063828c12ce146105b85780638da5cb5b146105d857600080fd5b806323b872dd1161020d578063453c2310116101d15780636352211e116101ab5780636352211e1461050257806364bb106114610522578063672434821461054357600080fd5b8063453c23101461048a578063507e094f146104c457806351830227146104e157600080fd5b806323b872dd146103e35780632a55205a14610403578063355e6b43146104425780633ccfd60b1461046257806342842e0e1461046a57600080fd5b8063095ea7b311610254578063095ea7b3146103585780631012c3301461037857806313faede61461039857806318160ddd146103ae5780631d02161d146103c357600080fd5b806301ffc9a7146102915780630364d22a146102c6578063047fc9aa146102db57806306fdde03146102fe578063081812fc14610320575b600080fd5b34801561029d57600080fd5b506102b16102ac3660046131c0565b61082b565b60405190151581526020015b60405180910390f35b6102d96102d4366004613264565b610856565b005b3480156102e757600080fd5b506102f0610c4c565b6040519081526020016102bd565b34801561030a57600080fd5b50610313610c62565b6040516102bd9190613499565b34801561032c57600080fd5b5061034061033b3660046131f8565b610cf4565b6040516001600160a01b0390911681526020016102bd565b34801561036457600080fd5b506102d961037336600461301a565b610d38565b34801561038457600080fd5b506102d9610393366004612eea565b610e0b565b3480156103a457600080fd5b506102f060095481565b3480156103ba57600080fd5b506102f0610e57565b3480156103cf57600080fd5b506102d96103de366004613174565b610e69565b3480156103ef57600080fd5b506102d96103fe366004612f3d565b610ee7565b34801561040f57600080fd5b5061042361041e366004613228565b610ef7565b604080516001600160a01b0390931683526020830191909152016102bd565b34801561044e57600080fd5b506102d961045d3660046131f8565b610f31565b6102d961107f565b34801561047657600080fd5b506102d9610485366004612f3d565b611188565b34801561049657600080fd5b50600a546104af90640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102bd565b3480156104d057600080fd5b50600a546104af9063ffffffff1681565b3480156104ed57600080fd5b50600a546102b190600160481b900460ff1681565b34801561050e57600080fd5b5061034061051d3660046131f8565b6111a3565b34801561052e57600080fd5b50600a546102b190600160581b900460ff1681565b34801561054f57600080fd5b506102d961055e366004613043565b6111b5565b34801561056f57600080fd5b506102d961057e36600461301a565b6112e8565b34801561058f57600080fd5b506102f061059e366004612eea565b611338565b3480156105af57600080fd5b506102d9611387565b3480156105c457600080fd5b506102d96105d336600461311f565b6113bd565b3480156105e457600080fd5b506008546001600160a01b0316610340565b34801561060257600080fd5b506103136114da565b6102d96106193660046131f8565b6114e9565b34801561062a57600080fd5b506102d9610639366004612ff1565b6117c6565b34801561064a57600080fd5b506102d9610659366004612f78565b61185c565b34801561066a57600080fd5b506102d9610679366004613043565b6118a0565b34801561068a57600080fd5b50600a546102b190600160501b900460ff1681565b3480156106ab57600080fd5b50600c54610340906001600160a01b031681565b3480156106cb57600080fd5b506103136106da3660046131f8565b611b18565b3480156106eb57600080fd5b506102f06106fa366004612eea565b6001600160a01b031660009081526013602052604090205490565b34801561072157600080fd5b506102d9610730366004613104565b611bae565b34801561074157600080fd5b506102f0600b5481565b34801561075757600080fd5b506102b1610766366004612f0b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102d96107a2366004613249565b611c01565b3480156107b357600080fd5b506102d96107c2366004612eea565b6120ae565b3480156107d357600080fd5b506107dc612149565b6040516102bd929190613423565b3480156107f657600080fd5b50600a546102b190600160401b900460ff1681565b34801561081757600080fd5b506102d9610826366004613104565b6122a5565b60006001600160e01b0319821663152a902d60e11b14806108505750610850826122f9565b92915050565b8263ffffffff16600081116108a75760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064015b60405180910390fd5b600a5463ffffffff168111156108f35760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b6108fb610e57565b81610904610c4c565b61090e9190613536565b11156109515760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff168161096c33612347565b6109769190613536565b11156109bd5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b806009546109cb9190613562565b341015610a0d5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b031615610ae657600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190613210565b11610ae45760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160501b900460ff16610b325760405162461bcd60e51b815260206004820152601060248201526f283932b9b0b632903737ba1037b832b760811b604482015260640161089e565b601254610b755760405162461bcd60e51b815260206004820152601160248201527050726573616c65206e6f7420726561647960781b604482015260640161089e565b610bea838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120612373565b610c365760405162461bcd60e51b815260206004820152601460248201527f4e6f7420612070726573616c65206d656d626572000000000000000000000000604482015260640161089e565b610c46338563ffffffff16612389565b50505050565b60006001600054610c5d9190613581565b905090565b606060028054610c71906135c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9d906135c4565b8015610cea5780601f10610cbf57610100808354040283529160200191610cea565b820191906000526020600020905b815481529060010190602001808311610ccd57829003601f168201915b5050505050905090565b6000610cff826123a3565b610d1c576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610d43826111a3565b9050806001600160a01b0316836001600160a01b03161415610d785760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610daf57610d928133610766565b610daf576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610e355760405162461bcd60e51b815260040161089e906134ac565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600154600d54610c5d9190613581565b6008546001600160a01b03163314610e935760405162461bcd60e51b815260040161089e906134ac565b600a805460099490945568ffffffffff0000000019909316600160401b9415159490940267ffffffff0000000019169390931764010000000063ffffffff928316021763ffffffff19169216919091179055565b610ef28383836123dc565b505050565b600f5460105460009182916001600160a01b03909116906103e890610f1c9086613562565b610f26919061354e565b915091509250929050565b3373460fd5059e7301680fa53e63bbbf7272e643e89c14610f865760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161089e565b73460fd5059e7301680fa53e63bbbf7272e643e89c600090815260146020527f97e14843bcb52e469f69b929a6475681fc82e2504cc873ce324f65b7a071f5b554610fd2908390613581565b73460fd5059e7301680fa53e63bbbf7272e643e89c6000908152601460208190527f97e14843bcb52e469f69b929a6475681fc82e2504cc873ce324f65b7a071f5b5859055601580549394508493919291600190811061104257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909190611076908490613536565b90915550505050565b47806110bc5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b604482015260640161089e565b60005b60155481101561118457600060146000601584815481106110f057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400181205491506103e86111248584613562565b61112e919061354e565b905061116f6015848154811061115457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316826125da565b5050808061117c906135ff565b9150506110bf565b5050565b610ef28383836040518060200160405280600081525061185c565b60006111ae826126f3565b5192915050565b6008546001600160a01b031633146111df5760405162461bcd60e51b815260040161089e906134ac565b80518251146111ed57600080fd5b60005b8151811015610ef257611201610e57565b82828151811061122157634e487b7160e01b600052603260045260246000fd5b6020026020010151611231610c4c565b61123b9190613536565b111561127e5760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b6112d68382815181106112a157634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106112c957634e487b7160e01b600052603260045260246000fd5b6020026020010151612389565b806112e0816135ff565b9150506111f0565b6008546001600160a01b031633146113125760405162461bcd60e51b815260040161089e906134ac565b600f80546001600160a01b0319166001600160a01b039390931692909217909155601055565b60006001600160a01b038216611361576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146113b15760405162461bcd60e51b815260040161089e906134ac565b6113bb6000612817565b565b6008546001600160a01b031633146113e75760405162461bcd60e51b815260040161089e906134ac565b600a805469ff0000000000000000001916600160481b84151590810291909117909155611423578051611421906011906020840190612cf5565b505b60018215151415611184576000600e805461143d906135c4565b80601f0160208091040260200160405190810160405280929190818152602001828054611469906135c4565b80156114b65780601f1061148b576101008083540402835291602001916114b6565b820191906000526020600020905b81548152906001019060200180831161149957829003601f168201915b50505050509050805160001415610ef2578151610c4690600e906020850190612cf5565b606060038054610c71906135c4565b806000811161152f5760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161089e565b600a5463ffffffff1681111561157b5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b611583610e57565b8161158c610c4c565b6115969190613536565b11156115d95760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff16816115f433612347565b6115fe9190613536565b11156116455760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b806009546116539190613562565b3410156116955760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b03161561176e57600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156116ee57600080fd5b505afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117269190613210565b1161176c5760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160401b900460ff1615156001146117bc5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161089e565b6111843383612389565b6001600160a01b0382163314156117f05760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118678484846123dc565b6001600160a01b0383163b15610c465761188384848484612869565b610c46576040516368d2bf6b60e11b815260040160405180910390fd5b6008546001600160a01b031633146118ca5760405162461bcd60e51b815260040161089e906134ac565b60015b6015548110156119335760146000601583815481106118fc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120558061192b816135ff565b9150506118cd565b508151611941906001613536565b67ffffffffffffffff81111561196757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611990578160200160208202803683370190505b5080516119a591601591602090910190612d79565b5073460fd5059e7301680fa53e63bbbf7272e643e89c60156000815481106119dd57634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8251811015610ef257818181518110611a3057634e487b7160e01b600052603260045260246000fd5b602002602001015160146000858481518110611a5c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110611aa857634e487b7160e01b600052603260045260246000fd5b60200260200101516015826001611abf9190613536565b81548110611add57634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905580611b10816135ff565b915050611a07565b6060611b23826123a3565b611b605760405162461bcd60e51b815260206004820152600e60248201526d111bd95cc81b9bdd08195e1a5cdd60921b604482015260640161089e565b600a54600160481b900460ff16611ba3576011611b7c83612961565b604051602001611b8d92919061332d565b6040516020818303038152906040529050919050565b600e611b7c83612961565b6008546001600160a01b03163314611bd85760405162461bcd60e51b815260040161089e906134ac565b600a8054921515600160501b026aff000000000000000000001990931692909217909155601255565b8163ffffffff1660008111611c4d5760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161089e565b600a5463ffffffff16811115611c995760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b611ca1610e57565b81611caa610c4c565b611cb49190613536565b1115611cf75760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff1681611d1233612347565b611d1c9190613536565b1115611d635760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b80600954611d719190613562565b341015611db35760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b031615611e8c57600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e449190613210565b11611e8a5760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160581b900460ff161515600114611edf5760405162461bcd60e51b81526020600482015260126024820152712932b332b93930b639903737ba1037b832b760711b604482015260640161089e565b600a54600160401b900460ff161515600114611f2d5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161089e565b6000600b5411611f745760405162461bcd60e51b81526020600482015260126024820152714361702069732073657420746f207a65726f60701b604482015260640161089e565b6000611f7f83612347565b11611fcc5760405162461bcd60e51b815260206004820152601760248201527f526566657272657220686173206e6f74206d696e746564000000000000000000604482015260640161089e565b336001600160a01b03831614156120255760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420726566657220796f757273656c660000000000000000000000604482015260640161089e565b612035338463ffffffff16612389565b6001600160a01b038216600090815260136020526040812080546001929061205e908490613536565b9091555050600b546001600160a01b038316600090815260136020526040902054612089919061361a565b610ef257612095610e57565b61209d610c4c565b1015610ef257610ef2826001612389565b6008546001600160a01b031633146120d85760405162461bcd60e51b815260040161089e906134ac565b6001600160a01b03811661213d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089e565b61214681612817565b50565b606080600060158054905067ffffffffffffffff81111561217a57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156121a3578160200160208202803683370190505b50905060005b60155481101561223c5760146000601583815481106121d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061221f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280612234816135ff565b9150506121a9565b506015818180548060200260200160405190810160405280929190818152602001828054801561229557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612277575b5050505050915092509250509091565b6008546001600160a01b031633146122cf5760405162461bcd60e51b815260040161089e906134ac565b600a8054921515600160581b026bff00000000000000000000001990931692909217909155600b55565b60006301ffc9a760e01b6001600160e01b03198316148061232a57506380ac58cd60e01b6001600160e01b03198316145b806108505750506001600160e01b031916635b5e139f60e01b1490565b6001600160a01b0316600090815260056020526040902054600160401b900467ffffffffffffffff1690565b6000826123808584612a7b565b14949350505050565b611184828260405180602001604052806000815250612b35565b6000816001111580156123b7575060005482105b8015610850575050600090815260046020526040902054600160e01b900460ff161590565b60006123e7826126f3565b9050836001600160a01b031681600001516001600160a01b03161461241e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061243c575061243c8533610766565b8061245757503361244c84610cf4565b6001600160a01b0316145b90508061247757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661249e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b03888116845260058352818420805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898316808752848720805493841693831660019081018416949094179055898752600490955283862080546001600160e01b031916909517600160a01b429092169190910217845587018085529190932080549293919290911661258f57600054821461258f578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b8047101561262a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161089e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612677576040519150601f19603f3d011682016040523d82523d6000602084013e61267c565b606091505b5050905080610ef25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161089e565b604080516060810182526000808252602082018190529181019190915281806001116127fe576000548110156127fe57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906127fc5780516001600160a01b031615612792579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156127f7579392505050565b612792565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061289e9033908990889088906004016133e7565b602060405180830381600087803b1580156128b857600080fd5b505af19250505080156128e8575060408051601f3d908101601f191682019092526128e5918101906131dc565b60015b612943573d808015612916576040519150601f19603f3d011682016040523d82523d6000602084013e61291b565b606091505b50805161293b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060816129855750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129af5780612999816135ff565b91506129a89050600a8361354e565b9150612989565b60008167ffffffffffffffff8111156129d857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a02576020820181803683370190505b5090505b841561295957612a17600183613581565b9150612a24600a8661361a565b612a2f906030613536565b60f81b818381518110612a5257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612a74600a8661354e565b9450612a06565b600081815b8451811015612b2d576000858281518110612aab57634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311612aed576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612b1a565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612b25816135ff565b915050612a80565b509392505050565b6000546001600160a01b038416612b5e57604051622e076360e81b815260040160405180910390fd5b82612b7c5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b018116918217600160401b67ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15612ca0575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612c696000878480600101955087612869565b612c86576040516368d2bf6b60e11b815260040160405180910390fd5b808210612c1e578260005414612c9b57600080fd5b612ce5565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210612ca1575b506000908155610c469085838684565b828054612d01906135c4565b90600052602060002090601f016020900481019282612d235760008555612d69565b82601f10612d3c57805160ff1916838001178555612d69565b82800160010185558215612d69579182015b82811115612d69578251825591602001919060010190612d4e565b50612d75929150612dce565b5090565b828054828255906000526020600020908101928215612d69579160200282015b82811115612d6957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612d99565b5b80821115612d755760008155600101612dcf565b600067ffffffffffffffff831115612dfd57612dfd61365a565b612e10601f8401601f19166020016134e1565b9050828152838383011115612e2457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612e5257600080fd5b919050565b600082601f830112612e67578081fd5b81356020612e7c612e7783613512565b6134e1565b80838252828201915082860187848660051b8901011115612e9b578586fd5b855b85811015612eb957813584529284019290840190600101612e9d565b5090979650505050505050565b80358015158114612e5257600080fd5b803563ffffffff81168114612e5257600080fd5b600060208284031215612efb578081fd5b612f0482612e3b565b9392505050565b60008060408385031215612f1d578081fd5b612f2683612e3b565b9150612f3460208401612e3b565b90509250929050565b600080600060608486031215612f51578081fd5b612f5a84612e3b565b9250612f6860208501612e3b565b9150604084013590509250925092565b60008060008060808587031215612f8d578081fd5b612f9685612e3b565b9350612fa460208601612e3b565b925060408501359150606085013567ffffffffffffffff811115612fc6578182fd5b8501601f81018713612fd6578182fd5b612fe587823560208401612de3565b91505092959194509250565b60008060408385031215613003578182fd5b61300c83612e3b565b9150612f3460208401612ec6565b6000806040838503121561302c578182fd5b61303583612e3b565b946020939093013593505050565b60008060408385031215613055578182fd5b823567ffffffffffffffff8082111561306c578384fd5b818501915085601f83011261307f578384fd5b8135602061308f612e7783613512565b8083825282820191508286018a848660051b89010111156130ae578889fd5b8896505b848710156130d7576130c381612e3b565b8352600196909601959183019183016130b2565b50965050860135925050808211156130ed578283fd5b506130fa85828601612e57565b9150509250929050565b60008060408385031215613116578182fd5b61303583612ec6565b60008060408385031215613131578182fd5b61313a83612ec6565b9150602083013567ffffffffffffffff811115613155578182fd5b8301601f81018513613165578182fd5b6130fa85823560208401612de3565b60008060008060808587031215613189578182fd5b61319285612ec6565b9350602085013592506131a760408601612ed6565b91506131b560608601612ed6565b905092959194509250565b6000602082840312156131d1578081fd5b8135612f0481613670565b6000602082840312156131ed578081fd5b8151612f0481613670565b600060208284031215613209578081fd5b5035919050565b600060208284031215613221578081fd5b5051919050565b6000806040838503121561323a578182fd5b50508035926020909101359150565b6000806040838503121561325b578182fd5b612f2683612ed6565b600080600060408486031215613278578081fd5b61328184612ed6565b9250602084013567ffffffffffffffff8082111561329d578283fd5b818601915086601f8301126132b0578283fd5b8135818111156132be578384fd5b8760208260051b85010111156132d2578384fd5b6020830194508093505050509250925092565b600081518084526132fd816020860160208601613598565b601f01601f19169290920160200192915050565b60008151613323818560208601613598565b9290920192915050565b600080845482600182811c91508083168061334957607f831692505b602080841082141561336957634e487b7160e01b87526022600452602487fd5b81801561337d576001811461338e576133ba565b60ff198616895284890196506133ba565b60008b815260209020885b868110156133b25781548b820152908501908301613399565b505084890196505b5050505050506133de6133cd8286613311565b64173539b7b760d91b815260050190565b95945050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261341960808301846132e5565b9695505050505050565b604080825283519082018190526000906020906060840190828701845b828110156134655781516001600160a01b031684529284019290840190600101613440565b50505083810382850152845180825285830191830190845b81811015612eb95783518352928401929184019160010161347d565b602081526000612f0460208301846132e5565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561350a5761350a61365a565b604052919050565b600067ffffffffffffffff82111561352c5761352c61365a565b5060051b60200190565b600082198211156135495761354961362e565b500190565b60008261355d5761355d613644565b500490565b600081600019048311821515161561357c5761357c61362e565b500290565b6000828210156135935761359361362e565b500390565b60005b838110156135b357818101518382015260200161359b565b83811115610c465750506000910152565b600181811c908216806135d857607f821691505b602082108114156135f957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136135761361361362e565b5060010190565b60008261362957613629613644565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461214657600080fdfea2646970667358221220128d070ab1aed27ee7c9526a32a323ef75027169b119fcf356c2fd6ef71a08c064736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001af40000000000000000000000000000000000000000000000000000000000000008474d206672656e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002474d000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061028c5760003560e01c80636c2f5acd11610164578063c7d12610116100c6578063e985e9c51161008a578063f5ca4dfd11610064578063f5ca4dfd146107c7578063fcfff16f146107ea578063fe25219a1461080b57600080fd5b8063e985e9c51461074b578063f179dca114610794578063f2fde38b146107a757600080fd5b8063c7d126101461069f578063c87b56dd146106bf578063d6c5b414146106df578063db31882b14610715578063dfdd9b9a1461073557600080fd5b806395d89b4111610128578063b88d4fde11610102578063b88d4fde1461063e578063be8e43ee1461065e578063bee6348a1461067e57600080fd5b806395d89b41146105f6578063a0712d681461060b578063a22cb4651461061e57600080fd5b80636c2f5acd1461056357806370a0823114610583578063715018a6146105a3578063828c12ce146105b85780638da5cb5b146105d857600080fd5b806323b872dd1161020d578063453c2310116101d15780636352211e116101ab5780636352211e1461050257806364bb106114610522578063672434821461054357600080fd5b8063453c23101461048a578063507e094f146104c457806351830227146104e157600080fd5b806323b872dd146103e35780632a55205a14610403578063355e6b43146104425780633ccfd60b1461046257806342842e0e1461046a57600080fd5b8063095ea7b311610254578063095ea7b3146103585780631012c3301461037857806313faede61461039857806318160ddd146103ae5780631d02161d146103c357600080fd5b806301ffc9a7146102915780630364d22a146102c6578063047fc9aa146102db57806306fdde03146102fe578063081812fc14610320575b600080fd5b34801561029d57600080fd5b506102b16102ac3660046131c0565b61082b565b60405190151581526020015b60405180910390f35b6102d96102d4366004613264565b610856565b005b3480156102e757600080fd5b506102f0610c4c565b6040519081526020016102bd565b34801561030a57600080fd5b50610313610c62565b6040516102bd9190613499565b34801561032c57600080fd5b5061034061033b3660046131f8565b610cf4565b6040516001600160a01b0390911681526020016102bd565b34801561036457600080fd5b506102d961037336600461301a565b610d38565b34801561038457600080fd5b506102d9610393366004612eea565b610e0b565b3480156103a457600080fd5b506102f060095481565b3480156103ba57600080fd5b506102f0610e57565b3480156103cf57600080fd5b506102d96103de366004613174565b610e69565b3480156103ef57600080fd5b506102d96103fe366004612f3d565b610ee7565b34801561040f57600080fd5b5061042361041e366004613228565b610ef7565b604080516001600160a01b0390931683526020830191909152016102bd565b34801561044e57600080fd5b506102d961045d3660046131f8565b610f31565b6102d961107f565b34801561047657600080fd5b506102d9610485366004612f3d565b611188565b34801561049657600080fd5b50600a546104af90640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102bd565b3480156104d057600080fd5b50600a546104af9063ffffffff1681565b3480156104ed57600080fd5b50600a546102b190600160481b900460ff1681565b34801561050e57600080fd5b5061034061051d3660046131f8565b6111a3565b34801561052e57600080fd5b50600a546102b190600160581b900460ff1681565b34801561054f57600080fd5b506102d961055e366004613043565b6111b5565b34801561056f57600080fd5b506102d961057e36600461301a565b6112e8565b34801561058f57600080fd5b506102f061059e366004612eea565b611338565b3480156105af57600080fd5b506102d9611387565b3480156105c457600080fd5b506102d96105d336600461311f565b6113bd565b3480156105e457600080fd5b506008546001600160a01b0316610340565b34801561060257600080fd5b506103136114da565b6102d96106193660046131f8565b6114e9565b34801561062a57600080fd5b506102d9610639366004612ff1565b6117c6565b34801561064a57600080fd5b506102d9610659366004612f78565b61185c565b34801561066a57600080fd5b506102d9610679366004613043565b6118a0565b34801561068a57600080fd5b50600a546102b190600160501b900460ff1681565b3480156106ab57600080fd5b50600c54610340906001600160a01b031681565b3480156106cb57600080fd5b506103136106da3660046131f8565b611b18565b3480156106eb57600080fd5b506102f06106fa366004612eea565b6001600160a01b031660009081526013602052604090205490565b34801561072157600080fd5b506102d9610730366004613104565b611bae565b34801561074157600080fd5b506102f0600b5481565b34801561075757600080fd5b506102b1610766366004612f0b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102d96107a2366004613249565b611c01565b3480156107b357600080fd5b506102d96107c2366004612eea565b6120ae565b3480156107d357600080fd5b506107dc612149565b6040516102bd929190613423565b3480156107f657600080fd5b50600a546102b190600160401b900460ff1681565b34801561081757600080fd5b506102d9610826366004613104565b6122a5565b60006001600160e01b0319821663152a902d60e11b14806108505750610850826122f9565b92915050565b8263ffffffff16600081116108a75760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064015b60405180910390fd5b600a5463ffffffff168111156108f35760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b6108fb610e57565b81610904610c4c565b61090e9190613536565b11156109515760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff168161096c33612347565b6109769190613536565b11156109bd5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b806009546109cb9190613562565b341015610a0d5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b031615610ae657600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190613210565b11610ae45760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160501b900460ff16610b325760405162461bcd60e51b815260206004820152601060248201526f283932b9b0b632903737ba1037b832b760811b604482015260640161089e565b601254610b755760405162461bcd60e51b815260206004820152601160248201527050726573616c65206e6f7420726561647960781b604482015260640161089e565b610bea838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120612373565b610c365760405162461bcd60e51b815260206004820152601460248201527f4e6f7420612070726573616c65206d656d626572000000000000000000000000604482015260640161089e565b610c46338563ffffffff16612389565b50505050565b60006001600054610c5d9190613581565b905090565b606060028054610c71906135c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9d906135c4565b8015610cea5780601f10610cbf57610100808354040283529160200191610cea565b820191906000526020600020905b815481529060010190602001808311610ccd57829003601f168201915b5050505050905090565b6000610cff826123a3565b610d1c576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610d43826111a3565b9050806001600160a01b0316836001600160a01b03161415610d785760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610daf57610d928133610766565b610daf576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610e355760405162461bcd60e51b815260040161089e906134ac565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600154600d54610c5d9190613581565b6008546001600160a01b03163314610e935760405162461bcd60e51b815260040161089e906134ac565b600a805460099490945568ffffffffff0000000019909316600160401b9415159490940267ffffffff0000000019169390931764010000000063ffffffff928316021763ffffffff19169216919091179055565b610ef28383836123dc565b505050565b600f5460105460009182916001600160a01b03909116906103e890610f1c9086613562565b610f26919061354e565b915091509250929050565b3373460fd5059e7301680fa53e63bbbf7272e643e89c14610f865760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161089e565b73460fd5059e7301680fa53e63bbbf7272e643e89c600090815260146020527f97e14843bcb52e469f69b929a6475681fc82e2504cc873ce324f65b7a071f5b554610fd2908390613581565b73460fd5059e7301680fa53e63bbbf7272e643e89c6000908152601460208190527f97e14843bcb52e469f69b929a6475681fc82e2504cc873ce324f65b7a071f5b5859055601580549394508493919291600190811061104257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909190611076908490613536565b90915550505050565b47806110bc5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b604482015260640161089e565b60005b60155481101561118457600060146000601584815481106110f057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400181205491506103e86111248584613562565b61112e919061354e565b905061116f6015848154811061115457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316826125da565b5050808061117c906135ff565b9150506110bf565b5050565b610ef28383836040518060200160405280600081525061185c565b60006111ae826126f3565b5192915050565b6008546001600160a01b031633146111df5760405162461bcd60e51b815260040161089e906134ac565b80518251146111ed57600080fd5b60005b8151811015610ef257611201610e57565b82828151811061122157634e487b7160e01b600052603260045260246000fd5b6020026020010151611231610c4c565b61123b9190613536565b111561127e5760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b6112d68382815181106112a157634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106112c957634e487b7160e01b600052603260045260246000fd5b6020026020010151612389565b806112e0816135ff565b9150506111f0565b6008546001600160a01b031633146113125760405162461bcd60e51b815260040161089e906134ac565b600f80546001600160a01b0319166001600160a01b039390931692909217909155601055565b60006001600160a01b038216611361576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146113b15760405162461bcd60e51b815260040161089e906134ac565b6113bb6000612817565b565b6008546001600160a01b031633146113e75760405162461bcd60e51b815260040161089e906134ac565b600a805469ff0000000000000000001916600160481b84151590810291909117909155611423578051611421906011906020840190612cf5565b505b60018215151415611184576000600e805461143d906135c4565b80601f0160208091040260200160405190810160405280929190818152602001828054611469906135c4565b80156114b65780601f1061148b576101008083540402835291602001916114b6565b820191906000526020600020905b81548152906001019060200180831161149957829003601f168201915b50505050509050805160001415610ef2578151610c4690600e906020850190612cf5565b606060038054610c71906135c4565b806000811161152f5760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161089e565b600a5463ffffffff1681111561157b5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b611583610e57565b8161158c610c4c565b6115969190613536565b11156115d95760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff16816115f433612347565b6115fe9190613536565b11156116455760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b806009546116539190613562565b3410156116955760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b03161561176e57600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156116ee57600080fd5b505afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117269190613210565b1161176c5760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160401b900460ff1615156001146117bc5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161089e565b6111843383612389565b6001600160a01b0382163314156117f05760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118678484846123dc565b6001600160a01b0383163b15610c465761188384848484612869565b610c46576040516368d2bf6b60e11b815260040160405180910390fd5b6008546001600160a01b031633146118ca5760405162461bcd60e51b815260040161089e906134ac565b60015b6015548110156119335760146000601583815481106118fc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120558061192b816135ff565b9150506118cd565b508151611941906001613536565b67ffffffffffffffff81111561196757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611990578160200160208202803683370190505b5080516119a591601591602090910190612d79565b5073460fd5059e7301680fa53e63bbbf7272e643e89c60156000815481106119dd57634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8251811015610ef257818181518110611a3057634e487b7160e01b600052603260045260246000fd5b602002602001015160146000858481518110611a5c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110611aa857634e487b7160e01b600052603260045260246000fd5b60200260200101516015826001611abf9190613536565b81548110611add57634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905580611b10816135ff565b915050611a07565b6060611b23826123a3565b611b605760405162461bcd60e51b815260206004820152600e60248201526d111bd95cc81b9bdd08195e1a5cdd60921b604482015260640161089e565b600a54600160481b900460ff16611ba3576011611b7c83612961565b604051602001611b8d92919061332d565b6040516020818303038152906040529050919050565b600e611b7c83612961565b6008546001600160a01b03163314611bd85760405162461bcd60e51b815260040161089e906134ac565b600a8054921515600160501b026aff000000000000000000001990931692909217909155601255565b8163ffffffff1660008111611c4d5760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161089e565b600a5463ffffffff16811115611c995760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161089e565b611ca1610e57565b81611caa610c4c565b611cb49190613536565b1115611cf75760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b604482015260640161089e565b600a54640100000000900463ffffffff1681611d1233612347565b611d1c9190613536565b1115611d635760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b604482015260640161089e565b80600954611d719190613562565b341015611db35760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161089e565b600c546001600160a01b031615611e8c57600c546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e449190613210565b11611e8a5760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b604482015260640161089e565b505b600a54600160581b900460ff161515600114611edf5760405162461bcd60e51b81526020600482015260126024820152712932b332b93930b639903737ba1037b832b760711b604482015260640161089e565b600a54600160401b900460ff161515600114611f2d5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161089e565b6000600b5411611f745760405162461bcd60e51b81526020600482015260126024820152714361702069732073657420746f207a65726f60701b604482015260640161089e565b6000611f7f83612347565b11611fcc5760405162461bcd60e51b815260206004820152601760248201527f526566657272657220686173206e6f74206d696e746564000000000000000000604482015260640161089e565b336001600160a01b03831614156120255760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420726566657220796f757273656c660000000000000000000000604482015260640161089e565b612035338463ffffffff16612389565b6001600160a01b038216600090815260136020526040812080546001929061205e908490613536565b9091555050600b546001600160a01b038316600090815260136020526040902054612089919061361a565b610ef257612095610e57565b61209d610c4c565b1015610ef257610ef2826001612389565b6008546001600160a01b031633146120d85760405162461bcd60e51b815260040161089e906134ac565b6001600160a01b03811661213d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089e565b61214681612817565b50565b606080600060158054905067ffffffffffffffff81111561217a57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156121a3578160200160208202803683370190505b50905060005b60155481101561223c5760146000601583815481106121d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061221f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280612234816135ff565b9150506121a9565b506015818180548060200260200160405190810160405280929190818152602001828054801561229557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612277575b5050505050915092509250509091565b6008546001600160a01b031633146122cf5760405162461bcd60e51b815260040161089e906134ac565b600a8054921515600160581b026bff00000000000000000000001990931692909217909155600b55565b60006301ffc9a760e01b6001600160e01b03198316148061232a57506380ac58cd60e01b6001600160e01b03198316145b806108505750506001600160e01b031916635b5e139f60e01b1490565b6001600160a01b0316600090815260056020526040902054600160401b900467ffffffffffffffff1690565b6000826123808584612a7b565b14949350505050565b611184828260405180602001604052806000815250612b35565b6000816001111580156123b7575060005482105b8015610850575050600090815260046020526040902054600160e01b900460ff161590565b60006123e7826126f3565b9050836001600160a01b031681600001516001600160a01b03161461241e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061243c575061243c8533610766565b8061245757503361244c84610cf4565b6001600160a01b0316145b90508061247757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661249e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b03888116845260058352818420805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898316808752848720805493841693831660019081018416949094179055898752600490955283862080546001600160e01b031916909517600160a01b429092169190910217845587018085529190932080549293919290911661258f57600054821461258f578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b8047101561262a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161089e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612677576040519150601f19603f3d011682016040523d82523d6000602084013e61267c565b606091505b5050905080610ef25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161089e565b604080516060810182526000808252602082018190529181019190915281806001116127fe576000548110156127fe57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906127fc5780516001600160a01b031615612792579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156127f7579392505050565b612792565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061289e9033908990889088906004016133e7565b602060405180830381600087803b1580156128b857600080fd5b505af19250505080156128e8575060408051601f3d908101601f191682019092526128e5918101906131dc565b60015b612943573d808015612916576040519150601f19603f3d011682016040523d82523d6000602084013e61291b565b606091505b50805161293b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060816129855750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129af5780612999816135ff565b91506129a89050600a8361354e565b9150612989565b60008167ffffffffffffffff8111156129d857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a02576020820181803683370190505b5090505b841561295957612a17600183613581565b9150612a24600a8661361a565b612a2f906030613536565b60f81b818381518110612a5257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612a74600a8661354e565b9450612a06565b600081815b8451811015612b2d576000858281518110612aab57634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311612aed576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612b1a565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612b25816135ff565b915050612a80565b509392505050565b6000546001600160a01b038416612b5e57604051622e076360e81b815260040160405180910390fd5b82612b7c5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b018116918217600160401b67ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15612ca0575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612c696000878480600101955087612869565b612c86576040516368d2bf6b60e11b815260040160405180910390fd5b808210612c1e578260005414612c9b57600080fd5b612ce5565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210612ca1575b506000908155610c469085838684565b828054612d01906135c4565b90600052602060002090601f016020900481019282612d235760008555612d69565b82601f10612d3c57805160ff1916838001178555612d69565b82800160010185558215612d69579182015b82811115612d69578251825591602001919060010190612d4e565b50612d75929150612dce565b5090565b828054828255906000526020600020908101928215612d69579160200282015b82811115612d6957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612d99565b5b80821115612d755760008155600101612dcf565b600067ffffffffffffffff831115612dfd57612dfd61365a565b612e10601f8401601f19166020016134e1565b9050828152838383011115612e2457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612e5257600080fd5b919050565b600082601f830112612e67578081fd5b81356020612e7c612e7783613512565b6134e1565b80838252828201915082860187848660051b8901011115612e9b578586fd5b855b85811015612eb957813584529284019290840190600101612e9d565b5090979650505050505050565b80358015158114612e5257600080fd5b803563ffffffff81168114612e5257600080fd5b600060208284031215612efb578081fd5b612f0482612e3b565b9392505050565b60008060408385031215612f1d578081fd5b612f2683612e3b565b9150612f3460208401612e3b565b90509250929050565b600080600060608486031215612f51578081fd5b612f5a84612e3b565b9250612f6860208501612e3b565b9150604084013590509250925092565b60008060008060808587031215612f8d578081fd5b612f9685612e3b565b9350612fa460208601612e3b565b925060408501359150606085013567ffffffffffffffff811115612fc6578182fd5b8501601f81018713612fd6578182fd5b612fe587823560208401612de3565b91505092959194509250565b60008060408385031215613003578182fd5b61300c83612e3b565b9150612f3460208401612ec6565b6000806040838503121561302c578182fd5b61303583612e3b565b946020939093013593505050565b60008060408385031215613055578182fd5b823567ffffffffffffffff8082111561306c578384fd5b818501915085601f83011261307f578384fd5b8135602061308f612e7783613512565b8083825282820191508286018a848660051b89010111156130ae578889fd5b8896505b848710156130d7576130c381612e3b565b8352600196909601959183019183016130b2565b50965050860135925050808211156130ed578283fd5b506130fa85828601612e57565b9150509250929050565b60008060408385031215613116578182fd5b61303583612ec6565b60008060408385031215613131578182fd5b61313a83612ec6565b9150602083013567ffffffffffffffff811115613155578182fd5b8301601f81018513613165578182fd5b6130fa85823560208401612de3565b60008060008060808587031215613189578182fd5b61319285612ec6565b9350602085013592506131a760408601612ed6565b91506131b560608601612ed6565b905092959194509250565b6000602082840312156131d1578081fd5b8135612f0481613670565b6000602082840312156131ed578081fd5b8151612f0481613670565b600060208284031215613209578081fd5b5035919050565b600060208284031215613221578081fd5b5051919050565b6000806040838503121561323a578182fd5b50508035926020909101359150565b6000806040838503121561325b578182fd5b612f2683612ed6565b600080600060408486031215613278578081fd5b61328184612ed6565b9250602084013567ffffffffffffffff8082111561329d578283fd5b818601915086601f8301126132b0578283fd5b8135818111156132be578384fd5b8760208260051b85010111156132d2578384fd5b6020830194508093505050509250925092565b600081518084526132fd816020860160208601613598565b601f01601f19169290920160200192915050565b60008151613323818560208601613598565b9290920192915050565b600080845482600182811c91508083168061334957607f831692505b602080841082141561336957634e487b7160e01b87526022600452602487fd5b81801561337d576001811461338e576133ba565b60ff198616895284890196506133ba565b60008b815260209020885b868110156133b25781548b820152908501908301613399565b505084890196505b5050505050506133de6133cd8286613311565b64173539b7b760d91b815260050190565b95945050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261341960808301846132e5565b9695505050505050565b604080825283519082018190526000906020906060840190828701845b828110156134655781516001600160a01b031684529284019290840190600101613440565b50505083810382850152845180825285830191830190845b81811015612eb95783518352928401929184019160010161347d565b602081526000612f0460208301846132e5565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561350a5761350a61365a565b604052919050565b600067ffffffffffffffff82111561352c5761352c61365a565b5060051b60200190565b600082198211156135495761354961362e565b500190565b60008261355d5761355d613644565b500490565b600081600019048311821515161561357c5761357c61362e565b500290565b6000828210156135935761359361362e565b500390565b60005b838110156135b357818101518382015260200161359b565b83811115610c465750506000910152565b600181811c908216806135d857607f821691505b602082108114156135f957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136135761361361362e565b5060010190565b60008261362957613629613644565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461214657600080fdfea2646970667358221220128d070ab1aed27ee7c9526a32a323ef75027169b119fcf356c2fd6ef71a08c064736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001af40000000000000000000000000000000000000000000000000000000000000008474d206672656e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002474d000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): GM frens
Arg [1] : _symbol (string): GM
Arg [2] : _maxSupply (uint256): 6900
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001af4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 474d206672656e73000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 474d000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50819:8112:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56920:275;;;;;;;;;;-1:-1:-1;56920:275:0;;;;;:::i;:::-;;:::i;:::-;;;13617:14:1;;13610:22;13592:41;;13580:2;13565:18;56920:275:0;;;;;;;;55455:513;;;;;;:::i;:::-;;:::i;:::-;;56701:91;;;;;;;;;;;;;:::i;:::-;;;21460:25:1;;;21448:2;21433:18;56701:91:0;21415:76:1;33354:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35036:245::-;;;;;;;;;;-1:-1:-1;35036:245:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;11355:55:1;;;11337:74;;11325:2;11310:18;35036:245:0;11292:125:1;34517:453:0;;;;;;;;;;-1:-1:-1;34517:453:0;;;;;:::i;:::-;;:::i;52635:97::-;;;;;;;;;;-1:-1:-1;52635:97:0;;;;;:::i;:::-;;:::i;50939:19::-;;;;;;;;;;;;;;;;56800:112;;;;;;;;;;;;;:::i;52269:249::-;;;;;;;;;;-1:-1:-1;52269:249:0;;;;;:::i;:::-;;:::i;36045:170::-;;;;;;;;;;-1:-1:-1;36045:170:0;;;;;:::i;:::-;;:::i;57203:246::-;;;;;;;;;;-1:-1:-1;57203:246:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;12130:55:1;;;12112:74;;12217:2;12202:18;;12195:34;;;;12085:18;57203:246:0;12067:168:1;51999:227:0;;;;;;;;;;-1:-1:-1;51999:227:0;;;;;:::i;:::-;;:::i;54433:376::-;;;:::i;36286:185::-;;;;;;;;;;-1:-1:-1;36286:185:0;;;;;:::i;:::-;;:::i;50996:26::-;;;;;;;;;;-1:-1:-1;50996:26:0;;;;;;;;;;;;;;21670:10:1;21658:23;;;21640:42;;21628:2;21613:18;50996:26:0;21595:93:1;50965:24:0;;;;;;;;;;-1:-1:-1;50965:24:0;;;;;;;;51052:20;;;;;;;;;;-1:-1:-1;51052:20:0;;;;-1:-1:-1;;;51052:20:0;;;;;;33162:125;;;;;;;;;;-1:-1:-1;33162:125:0;;;;;:::i;:::-;;:::i;51109:24::-;;;;;;;;;;-1:-1:-1;51109:24:0;;;;-1:-1:-1;;;51109:24:0;;;;;;54845:431;;;;;;;;;;-1:-1:-1;54845:431:0;;;;;:::i;:::-;;:::i;54255:170::-;;;;;;;;;;-1:-1:-1;54255:170:0;;;;;:::i;:::-;;:::i;30487:206::-;;;;;;;;;;-1:-1:-1;30487:206:0;;;;;:::i;:::-;;:::i;2678:103::-;;;;;;;;;;;;;:::i;52880:375::-;;;;;;;;;;-1:-1:-1;52880:375:0;;;;;:::i;:::-;;:::i;2027:87::-;;;;;;;;;;-1:-1:-1;2100:6:0;;-1:-1:-1;;;;;2100:6:0;2027:87;;33523:104;;;;;;;;;;;;;:::i;55284:163::-;;;;;;:::i;:::-;;:::i;35353:340::-;;;;;;;;;;-1:-1:-1;35353:340:0;;;;;:::i;:::-;;:::i;36542:396::-;;;;;;;;;;-1:-1:-1;36542:396:0;;;;;:::i;:::-;;:::i;53263:490::-;;;;;;;;;;-1:-1:-1;53263:490:0;;;;;:::i;:::-;;:::i;51079:23::-;;;;;;;;;;-1:-1:-1;51079:23:0;;;;-1:-1:-1;;;51079:23:0;;;;;;51173;;;;;;;;;;-1:-1:-1;51173:23:0;;;;-1:-1:-1;;;;;51173:23:0;;;57584:619;;;;;;;;;;-1:-1:-1;57584:619:0;;;;;:::i;:::-;;:::i;57457:119::-;;;;;;;;;;-1:-1:-1;57457:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;57550:18:0;57523:7;57550:18;;;:11;:18;;;;;;;57457:119;52740:132;;;;;;;;;;-1:-1:-1;52740:132:0;;;;;:::i;:::-;;:::i;51140:26::-;;;;;;;;;;;;;;;;35764:214;;;;;;;;;;-1:-1:-1;35764:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;35935:25:0;;;35906:4;35935:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;35764:214;55976:690;;;;;;:::i;:::-;;:::i;2936:201::-;;;;;;;;;;-1:-1:-1;2936:201:0;;;;;:::i;:::-;;:::i;53761:343::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;51029:16::-;;;;;;;;;;-1:-1:-1;51029:16:0;;;;-1:-1:-1;;;51029:16:0;;;;;;54112:135;;;;;;;;;;-1:-1:-1;54112:135:0;;;;;:::i;:::-;;:::i;56920:275::-;57051:4;-1:-1:-1;;;;;;57093:41:0;;-1:-1:-1;;;57093:41:0;;:94;;;57151:36;57175:11;57151:23;:36::i;:::-;57073:114;56920:275;-1:-1:-1;;56920:275:0:o;55455:513::-;55574:5;58245:683;;58310:1;58302:5;:9;58294:40;;;;-1:-1:-1;;;58294:40:0;;21169:2:1;58294:40:0;;;21151:21:1;21208:2;21188:18;;;21181:30;-1:-1:-1;;;21227:18:1;;;21220:48;21285:18;;58294:40:0;;;;;;;;;58362:10;;;;58353:19;;;58345:49;;;;-1:-1:-1;;;58345:49:0;;20823:2:1;58345:49:0;;;20805:21:1;20862:2;20842:18;;;20835:30;-1:-1:-1;;;20881:18:1;;;20874:47;20938:18;;58345:49:0;20795:167:1;58345:49:0;58433:13;:11;:13::i;:::-;58424:5;58413:8;:6;:8::i;:::-;:16;;;;:::i;:::-;:33;;58405:64;;;;-1:-1:-1;;;58405:64:0;;17349:2:1;58405:64:0;;;17331:21:1;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:48;17465:18;;58405:64:0;17321:168:1;58405:64:0;58539:12;;;;;;;58530:5;58502:25;58516:10;58502:13;:25::i;:::-;:33;;;;:::i;:::-;:49;;58480:121;;;;-1:-1:-1;;;58480:121:0;;19786:2:1;58480:121:0;;;19768:21:1;19825:2;19805:18;;;19798:30;-1:-1:-1;;;19844:18:1;;;19837:52;19906:18;;58480:121:0;19758:172:1;58480:121:0;58640:5;58633:4;;:12;;;;:::i;:::-;58620:9;:25;;58612:54;;;;-1:-1:-1;;;58612:54:0;;20478:2:1;58612:54:0;;;20460:21:1;20517:2;20497:18;;;20490:30;-1:-1:-1;;;20536:18:1;;;20529:46;20592:18;;58612:54:0;20450:166:1;58612:54:0;58681:8;;-1:-1:-1;;;;;58681:8:0;:22;58677:230;;58750:8;;58800:33;;-1:-1:-1;;;58800:33:0;;58822:10;58800:33;;;11337:74:1;-1:-1:-1;;;;;58750:8:0;;;;58720:19;;58750:8;;58800:21;;11310:18:1;;58800:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;58774:121;;;;-1:-1:-1;;;58774:121:0;;16998:2:1;58774:121:0;;;16980:21:1;17037:2;17017:18;;;17010:30;-1:-1:-1;;;17056:18:1;;;17049:52;17118:18;;58774:121:0;16970:172:1;58774:121:0;58677:230;;55605:11:::1;::::0;-1:-1:-1;;;55605:11:0;::::1;;;55597:40;;;::::0;-1:-1:-1;;;55597:40:0;;19441:2:1;55597:40:0::1;::::0;::::1;19423:21:1::0;19480:2;19460:18;;;19453:30;-1:-1:-1;;;19499:18:1;;;19492:46;19555:18;;55597:40:0::1;19413:166:1::0;55597:40:0::1;55656:10;::::0;55648:46:::1;;;::::0;-1:-1:-1;;;55648:46:0;;14070:2:1;55648:46:0::1;::::0;::::1;14052:21:1::0;14109:2;14089:18;;;14082:30;-1:-1:-1;;;14128:18:1;;;14121:47;14185:18;;55648:46:0::1;14042:167:1::0;55648:46:0::1;55727:144;55764:5;;55727:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;55788:10:0::1;::::0;55827:28:::1;::::0;-1:-1:-1;;55844:10:0::1;9334:2:1::0;9330:15;9326:53;55827:28:0::1;::::0;::::1;9314:66:1::0;55788:10:0;;-1:-1:-1;9396:12:1;;;-1:-1:-1;55827:28:0::1;;;;;;;;;;;;55817:39;;;;;;55727:18;:144::i;:::-;55705:214;;;::::0;-1:-1:-1;;;55705:214:0;;15517:2:1;55705:214:0::1;::::0;::::1;15499:21:1::0;15556:2;15536:18;;;15529:30;15595:22;15575:18;;;15568:50;15635:18;;55705:214:0::1;15489:170:1::0;55705:214:0::1;55932:28;55942:10;55954:5;55932:28;;:9;:28::i;:::-;55455:513:::0;;;;:::o;56701:91::-;56740:7;56783:1;56767:13;;:17;;;;:::i;:::-;56760:24;;56701:91;:::o;33354:100::-;33408:13;33441:5;33434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33354:100;:::o;35036:245::-;35140:7;35170:16;35178:7;35170;:16::i;:::-;35165:64;;35195:34;;-1:-1:-1;;;35195:34:0;;;;;;;;;;;35165:64;-1:-1:-1;35249:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;35249:24:0;;35036:245::o;34517:453::-;34590:13;34606:24;34622:7;34606:15;:24::i;:::-;34590:40;;34651:5;-1:-1:-1;;;;;34645:11:0;:2;-1:-1:-1;;;;;34645:11:0;;34641:48;;;34665:24;;-1:-1:-1;;;34665:24:0;;;;;;;;;;;34641:48;49792:10;-1:-1:-1;;;;;34706:28:0;;;34702:175;;34754:44;34771:5;49792:10;35764:214;:::i;34754:44::-;34749:128;;34826:35;;-1:-1:-1;;;34826:35:0;;;;;;;;;;;34749:128;34889:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;34889:29:0;-1:-1:-1;;;;;34889:29:0;;;;;;;;;34934:28;;34889:24;;34934:28;;;;;;;34517:453;;;:::o;52635:97::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;52705:8:::1;:19:::0;;-1:-1:-1;;;;;;52705:19:0::1;-1:-1:-1::0;;;;;52705:19:0;;;::::1;::::0;;;::::1;::::0;;52635:97::o;56800:112::-;56853:7;56892:12;;56880:9;;:24;;;;:::i;52269:249::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;52415:4:::1;:12:::0;;52438:4:::1;:12:::0;;;;-1:-1:-1;;52461:20:0;;;-1:-1:-1;;;52415:12:0;::::1;;::::0;;;::::1;-1:-1:-1::0;;52461:20:0;;;;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;52492:18:0::1;::::0;::::1;::::0;;;::::1;::::0;;52269:249::o;36045:170::-;36179:28;36189:4;36195:2;36199:7;36179:9;:28::i;:::-;36045:170;;;:::o;57203:246::-;57395:9;;57420:12;;57330:16;;;;-1:-1:-1;;;;;57395:9:0;;;;57436:4;;57407:25;;:10;:25;:::i;:::-;57406:34;;;;:::i;:::-;57387:54;;;;57203:246;;;;;:::o;51999:227::-;52063:10;51491:42;52063:18;52055:46;;;;-1:-1:-1;;;52055:46:0;;14416:2:1;52055:46:0;;;14398:21:1;14455:2;14435:18;;;14428:30;-1:-1:-1;;;14474:18:1;;;14467:45;14529:18;;52055:46:0;14388:165:1;52055:46:0;51491:42;52112:12;52127:13;;;:7;:13;;;;:21;;52143:5;;52127:21;:::i;:::-;51491:42;52159:13;;;;:7;:13;;;;;:21;;;52199:7;:10;;52112:36;;-1:-1:-1;52112:36:0;;52159:7;;:13;52207:1;;52199:10;;;;-1:-1:-1;;;52199:10:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52199:10:0;52191:19;;;;;;;;;;;;:27;;:19;;52199:10;52191:27;;;;;:::i;:::-;;;;-1:-1:-1;;;;51999:227:0:o;54433:376::-;54497:21;54537:11;54529:36;;;;-1:-1:-1;;;54529:36:0;;20137:2:1;54529:36:0;;;20119:21:1;20176:2;20156:18;;;20149:30;-1:-1:-1;;;20195:18:1;;;20188:42;20247:18;;54529:36:0;20109:162:1;54529:36:0;54583:9;54578:224;54602:7;:14;54598:18;;54578:224;;;54638:13;54654:7;:19;54662:7;54670:1;54662:10;;;;;;-1:-1:-1;;;54662:10:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54662:10:0;54654:19;;;;;;;;;;;;;;-1:-1:-1;54725:4:0;54706:15;54714:7;54654:19;54706:15;:::i;:::-;54705:24;;;;:::i;:::-;54688:42;;54745:45;54771:7;54779:1;54771:10;;;;;;-1:-1:-1;;;54771:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54771:10:0;54784:5;54745:17;:45::i;:::-;54578:224;;54618:3;;;;;:::i;:::-;;;;54578:224;;;;54433:376;:::o;36286:185::-;36424:39;36441:4;36447:2;36451:7;36424:39;;;;;;;;;;;;:16;:39::i;33162:125::-;33226:7;33253:21;33266:7;33253:12;:21::i;:::-;:26;;33162:125;-1:-1:-1;;33162:125:0:o;54845:431::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;54999:7:::1;:14;54977:11;:18;:36;54969:45;;;::::0;::::1;;55032:9;55027:242;55051:7;:14;55047:1;:18;55027:242;;;55138:13;:11;:13::i;:::-;55124:7;55132:1;55124:10;;;;;;-1:-1:-1::0;;;55124:10:0::1;;;;;;;;;;;;;;;55113:8;:6;:8::i;:::-;:21;;;;:::i;:::-;:38;;55087:118;;;::::0;-1:-1:-1;;;55087:118:0;;17349:2:1;55087:118:0::1;::::0;::::1;17331:21:1::0;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:48;17465:18;;55087:118:0::1;17321:168:1::0;55087:118:0::1;55220:37;55230:11;55242:1;55230:14;;;;;;-1:-1:-1::0;;;55230:14:0::1;;;;;;;;;;;;;;;55246:7;55254:1;55246:10;;;;;;-1:-1:-1::0;;;55246:10:0::1;;;;;;;;;;;;;;;55220:9;:37::i;:::-;55067:3:::0;::::1;::::0;::::1;:::i;:::-;;;;55027:242;;54255:170:::0;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;54365:9:::1;:22:::0;;-1:-1:-1;;;;;;54365:22:0::1;-1:-1:-1::0;;;;;54365:22:0;;;::::1;::::0;;;::::1;::::0;;;54398:12:::1;:19:::0;54255:170::o;30487:206::-;30551:7;-1:-1:-1;;;;;30575:19:0;;30571:60;;30603:28;;-1:-1:-1;;;30603:28:0;;;;;;;;;;;30571:60;-1:-1:-1;;;;;;30657:19:0;;;;;:12;:19;;;;;:27;;;;30487:206::o;2678:103::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;2743:30:::1;2770:1;2743:18;:30::i;:::-;2678:103::o:0;52880:375::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;52966:8:::1;:20:::0;;-1:-1:-1;;52966:20:0::1;-1:-1:-1::0;;;52966:20:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;52999:72:::1;;53038:21:::0;;::::1;::::0;:14:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52999:72;53100:4;53087:17:::0;::::1;;;53083:165;;;53121:15;53145:7;53121:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53172:2;:9;53185:1;53172:14;53168:69;;;53207:14:::0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;33523:104::-:0;33579:13;33612:7;33605:14;;;;;:::i;55284:163::-;55344:5;58310:1;58302:5;:9;58294:40;;;;-1:-1:-1;;;58294:40:0;;21169:2:1;58294:40:0;;;21151:21:1;21208:2;21188:18;;;21181:30;-1:-1:-1;;;21227:18:1;;;21220:48;21285:18;;58294:40:0;21141:168:1;58294:40:0;58362:10;;;;58353:19;;;58345:49;;;;-1:-1:-1;;;58345:49:0;;20823:2:1;58345:49:0;;;20805:21:1;20862:2;20842:18;;;20835:30;-1:-1:-1;;;20881:18:1;;;20874:47;20938:18;;58345:49:0;20795:167:1;58345:49:0;58433:13;:11;:13::i;:::-;58424:5;58413:8;:6;:8::i;:::-;:16;;;;:::i;:::-;:33;;58405:64;;;;-1:-1:-1;;;58405:64:0;;17349:2:1;58405:64:0;;;17331:21:1;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:48;17465:18;;58405:64:0;17321:168:1;58405:64:0;58539:12;;;;;;;58530:5;58502:25;58516:10;58502:13;:25::i;:::-;:33;;;;:::i;:::-;:49;;58480:121;;;;-1:-1:-1;;;58480:121:0;;19786:2:1;58480:121:0;;;19768:21:1;19825:2;19805:18;;;19798:30;-1:-1:-1;;;19844:18:1;;;19837:52;19906:18;;58480:121:0;19758:172:1;58480:121:0;58640:5;58633:4;;:12;;;;:::i;:::-;58620:9;:25;;58612:54;;;;-1:-1:-1;;;58612:54:0;;20478:2:1;58612:54:0;;;20460:21:1;20517:2;20497:18;;;20490:30;-1:-1:-1;;;20536:18:1;;;20529:46;20592:18;;58612:54:0;20450:166:1;58612:54:0;58681:8;;-1:-1:-1;;;;;58681:8:0;:22;58677:230;;58750:8;;58800:33;;-1:-1:-1;;;58800:33:0;;58822:10;58800:33;;;11337:74:1;-1:-1:-1;;;;;58750:8:0;;;;58720:19;;58750:8;;58800:21;;11310:18:1;;58800:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;58774:121;;;;-1:-1:-1;;;58774:121:0;;16998:2:1;58774:121:0;;;16980:21:1;17037:2;17017:18;;;17010:30;-1:-1:-1;;;17056:18:1;;;17049:52;17118:18;;58774:121:0;16970:172:1;58774:121:0;58677:230;;55370:4:::1;::::0;-1:-1:-1;;;55370:4:0;::::1;;;:12;;55378:4;55370:12;55362:38;;;::::0;-1:-1:-1;;;55362:38:0;;19099:2:1;55362:38:0::1;::::0;::::1;19081:21:1::0;19138:2;19118:18;;;19111:30;-1:-1:-1;;;19157:18:1;;;19150:43;19210:18;;55362:38:0::1;19071:163:1::0;55362:38:0::1;55411:28;55421:10;55433:5;55411:9;:28::i;35353:340::-:0;-1:-1:-1;;;;;35484:31:0;;49792:10;35484:31;35480:61;;;35524:17;;-1:-1:-1;;;35524:17:0;;;;;;;;;;;35480:61;49792:10;35554:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;35554:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;35554:60:0;;;;;;;;;;35630:55;;13592:41:1;;;35554:49:0;;49792:10;35630:55;;13565:18:1;35630:55:0;;;;;;;35353:340;;:::o;36542:396::-;36709:28;36719:4;36725:2;36729:7;36709:9;:28::i;:::-;-1:-1:-1;;;;;36752:14:0;;;:19;36748:183;;36791:56;36822:4;36828:2;36832:7;36841:5;36791:30;:56::i;:::-;36786:145;;36875:40;;-1:-1:-1;;;36875:40:0;;;;;;;;;;;53263:490;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;53415:1:::1;53398:98;53422:7;:14:::0;53418:18;::::1;53398:98;;;53465:7;:19;53473:7;53481:1;53473:10;;;;;;-1:-1:-1::0;;;53473:10:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;53473:10:0::1;53465:19:::0;;;::::1;::::0;;;;;;;;53458:26;53438:3;::::1;::::0;::::1;:::i;:::-;;;;53398:98;;;-1:-1:-1::0;53530:17:0;;:21:::1;::::0;53550:1:::1;53530:21;:::i;:::-;53516:36;;;;;;-1:-1:-1::0;;;53516:36:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;53516:36:0::1;-1:-1:-1::0;53506:46:0;;::::1;::::0;:7:::1;::::0;:46:::1;::::0;;::::1;::::0;::::1;:::i;:::-;;51491:42;53563:7;53571:1;53563:10;;;;;;-1:-1:-1::0;;;53563:10:0::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;:17:::0;;-1:-1:-1;;;;;;53563:17:0::1;-1:-1:-1::0;;;;;53563:17:0;;;::::1;::::0;;;::::1;::::0;;;53593:153:::1;53617:10;:17;53613:1;:21;53593:153;;;53681:5;53687:1;53681:8;;;;;;-1:-1:-1::0;;;53681:8:0::1;;;;;;;;;;;;;;;53656:7;:22;53664:10;53675:1;53664:13;;;;;;-1:-1:-1::0;;;53664:13:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;53656:22:0::1;-1:-1:-1::0;;;;;53656:22:0::1;;;;;;;;;;;;:33;;;;53721:10;53732:1;53721:13;;;;;;-1:-1:-1::0;;;53721:13:0::1;;;;;;;;;;;;;;;53704:7;53712:1;53716;53712:5;;;;:::i;:::-;53704:14;;;;;;-1:-1:-1::0;;;53704:14:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:30:::0;;-1:-1:-1;;;;;;53704:30:0::1;-1:-1:-1::0;;;;;53704:30:0;;;::::1;::::0;;;::::1;::::0;;53636:3;::::1;::::0;::::1;:::i;:::-;;;;53593:153;;57584:619:::0;57686:13;57725:17;57733:8;57725:7;:17::i;:::-;57717:44;;;;-1:-1:-1;;;57717:44:0;;18756:2:1;57717:44:0;;;18738:21:1;18795:2;18775:18;;;18768:30;-1:-1:-1;;;18814:18:1;;;18807:44;18868:18;;57717:44:0;18728:164:1;57717:44:0;57776:8;;-1:-1:-1;;;57776:8:0;;;;57772:289;;57906:14;57947:26;57964:8;57947:16;:26::i;:::-;57863:167;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57810:239;;57584:619;;;:::o;57772:289::-;58135:7;58144:26;58161:8;58144:16;:26::i;52740:132::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;52817:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;52817:19:0::1;-1:-1:-1::0;;52817:19:0;;::::1;::::0;;;::::1;::::0;;;52847:10:::1;:17:::0;52740:132::o;55976:690::-;56088:5;58245:683;;58310:1;58302:5;:9;58294:40;;;;-1:-1:-1;;;58294:40:0;;21169:2:1;58294:40:0;;;21151:21:1;21208:2;21188:18;;;21181:30;-1:-1:-1;;;21227:18:1;;;21220:48;21285:18;;58294:40:0;21141:168:1;58294:40:0;58362:10;;;;58353:19;;;58345:49;;;;-1:-1:-1;;;58345:49:0;;20823:2:1;58345:49:0;;;20805:21:1;20862:2;20842:18;;;20835:30;-1:-1:-1;;;20881:18:1;;;20874:47;20938:18;;58345:49:0;20795:167:1;58345:49:0;58433:13;:11;:13::i;:::-;58424:5;58413:8;:6;:8::i;:::-;:16;;;;:::i;:::-;:33;;58405:64;;;;-1:-1:-1;;;58405:64:0;;17349:2:1;58405:64:0;;;17331:21:1;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:48;17465:18;;58405:64:0;17321:168:1;58405:64:0;58539:12;;;;;;;58530:5;58502:25;58516:10;58502:13;:25::i;:::-;:33;;;;:::i;:::-;:49;;58480:121;;;;-1:-1:-1;;;58480:121:0;;19786:2:1;58480:121:0;;;19768:21:1;19825:2;19805:18;;;19798:30;-1:-1:-1;;;19844:18:1;;;19837:52;19906:18;;58480:121:0;19758:172:1;58480:121:0;58640:5;58633:4;;:12;;;;:::i;:::-;58620:9;:25;;58612:54;;;;-1:-1:-1;;;58612:54:0;;20478:2:1;58612:54:0;;;20460:21:1;20517:2;20497:18;;;20490:30;-1:-1:-1;;;20536:18:1;;;20529:46;20592:18;;58612:54:0;20450:166:1;58612:54:0;58681:8;;-1:-1:-1;;;;;58681:8:0;:22;58677:230;;58750:8;;58800:33;;-1:-1:-1;;;58800:33:0;;58822:10;58800:33;;;11337:74:1;-1:-1:-1;;;;;58750:8:0;;;;58720:19;;58750:8;;58800:21;;11310:18:1;;58800:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;58774:121;;;;-1:-1:-1;;;58774:121:0;;16998:2:1;58774:121:0;;;16980:21:1;17037:2;17017:18;;;17010:30;-1:-1:-1;;;17056:18:1;;;17049:52;17118:18;;58774:121:0;16970:172:1;58774:121:0;58677:230;;56119:12:::1;::::0;-1:-1:-1;;;56119:12:0;::::1;;;:20;;56135:4;56119:20;56111:51;;;::::0;-1:-1:-1;;;56111:51:0;;15866:2:1;56111:51:0::1;::::0;::::1;15848:21:1::0;15905:2;15885:18;;;15878:30;-1:-1:-1;;;15924:18:1;;;15917:48;15982:18;;56111:51:0::1;15838:168:1::0;56111:51:0::1;56181:4;::::0;-1:-1:-1;;;56181:4:0;::::1;;;:12;;56189:4;56181:12;56173:38;;;::::0;-1:-1:-1;;;56173:38:0;;19099:2:1;56173:38:0::1;::::0;::::1;19081:21:1::0;19138:2;19118:18;;;19111:30;-1:-1:-1;;;19157:18:1;;;19150:43;19210:18;;56173:38:0::1;19071:163:1::0;56173:38:0::1;56244:1;56230:11;;:15;56222:46;;;::::0;-1:-1:-1;;;56222:46:0;;17696:2:1;56222:46:0::1;::::0;::::1;17678:21:1::0;17735:2;17715:18;;;17708:30;-1:-1:-1;;;17754:18:1;;;17747:48;17812:18;;56222:46:0::1;17668:168:1::0;56222:46:0::1;56313:1;56287:23;56301:8;56287:13;:23::i;:::-;:27;56279:63;;;::::0;-1:-1:-1;;;56279:63:0;;18043:2:1;56279:63:0::1;::::0;::::1;18025:21:1::0;18082:2;18062:18;;;18055:30;18121:25;18101:18;;;18094:53;18164:18;;56279:63:0::1;18015:173:1::0;56279:63:0::1;56361:10;-1:-1:-1::0;;;;;56361:22:0;::::1;;;56353:56;;;::::0;-1:-1:-1;;;56353:56:0;;14760:2:1;56353:56:0::1;::::0;::::1;14742:21:1::0;14799:2;14779:18;;;14772:30;14838:23;14818:18;;;14811:51;14879:18;;56353:56:0::1;14732:171:1::0;56353:56:0::1;56422:28;56432:10;56444:5;56422:28;;:9;:28::i;:::-;-1:-1:-1::0;;;;;56463:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:26;;56488:1:::1;::::0;56463:21;:26:::1;::::0;56488:1;;56463:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;56528:11:0::1;::::0;-1:-1:-1;;;;;56504:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:35:::1;::::0;56528:11;56504:35:::1;:::i;:::-;56500:159;;56576:13;:11;:13::i;:::-;56565:8;:6;:8::i;:::-;:24;56561:87;;;56610:22;56620:8;56630:1;56610:9;:22::i;2936:201::-:0;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3025:22:0;::::1;3017:73;;;::::0;-1:-1:-1;;;3017:73:0;;15110:2:1;3017:73:0::1;::::0;::::1;15092:21:1::0;15149:2;15129:18;;;15122:30;15188:34;15168:18;;;15161:62;-1:-1:-1;;;15239:18:1;;;15232:36;15285:19;;3017:73:0::1;15082:228:1::0;3017:73:0::1;3101:28;3120:8;3101:18;:28::i;:::-;2936:201:::0;:::o;53761:343::-;53837:16;53855;53889:23;53929:7;:14;;;;53915:29;;;;;;-1:-1:-1;;;53915:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53915:29:0;;53889:55;;53962:9;53957:103;53981:7;:14;53977:18;;53957:103;;;54029:7;:19;54037:7;54045:1;54037:10;;;;;;-1:-1:-1;;;54037:10:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54037:10:0;54029:19;;;;;;;;;;;;;54017:9;;:6;;54024:1;;54017:9;;;;-1:-1:-1;;;54017:9:0;;;;;;;;;;;;;;;;;;:31;53997:3;;;;:::i;:::-;;;;53957:103;;;;54080:7;54089:6;54072:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54072:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53761:343;;:::o;54112:135::-;2100:6;;-1:-1:-1;;;;;2100:6:0;49792:10;2247:23;2239:68;;;;-1:-1:-1;;;2239:68:0;;;;;;;:::i;:::-;54190:12:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;54190:20:0::1;-1:-1:-1::0;;54190:20:0;;::::1;::::0;;;::::1;::::0;;;:12:::1;54221:18:::0;54112:135::o;29758:665::-;29888:4;-1:-1:-1;;;;;;;;;30193:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;30270:25:0;;;30193:102;:179;;;-1:-1:-1;;;;;;;;30347:25:0;-1:-1:-1;;;30347:25:0;;29758:665::o;30775:137::-;-1:-1:-1;;;;;30871:19:0;30836:7;30871:19;;;:12;:19;;;;;:32;-1:-1:-1;;;30871:32:0;;;;;30775:137::o;14696:190::-;14821:4;14874;14845:25;14858:5;14865:4;14845:12;:25::i;:::-;:33;;14696:190;-1:-1:-1;;;;14696:190:0:o;37490:104::-;37559:27;37569:2;37573:8;37559:27;;;;;;;;;;;;:9;:27::i;37193:213::-;37250:4;37306:7;52618:1;37287:26;;:66;;;;;37340:13;;37330:7;:23;37287:66;:111;;;;-1:-1:-1;;37371:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;37371:27:0;;;;37370:28;;37193:213::o;41597:2148::-;41712:35;41750:21;41763:7;41750:12;:21::i;:::-;41712:59;;41810:4;-1:-1:-1;;;;;41788:26:0;:13;:18;;;-1:-1:-1;;;;;41788:26:0;;41784:67;;41823:28;;-1:-1:-1;;;41823:28:0;;;;;;;;;;;41784:67;41864:22;49792:10;-1:-1:-1;;;;;41890:27:0;;;;:87;;-1:-1:-1;41934:43:0;41951:4;49792:10;35764:214;:::i;41934:43::-;41890:147;;;-1:-1:-1;49792:10:0;41994:20;42006:7;41994:11;:20::i;:::-;-1:-1:-1;;;;;41994:43:0;;41890:147;41864:174;;42056:17;42051:66;;42082:35;;-1:-1:-1;;;42082:35:0;;;;;;;;;;;42051:66;-1:-1:-1;;;;;42132:16:0;;42128:52;;42157:23;;-1:-1:-1;;;42157:23:0;;;;;;;;;;;42128:52;42309:24;;;;:15;:24;;;;;;;;42302:31;;-1:-1:-1;;;;;;42302:31:0;;;-1:-1:-1;;;;;42629:18:0;;;;;:12;:18;;;;;:31;;-1:-1:-1;;42629:31:0;;;;;;;-1:-1:-1;;42629:31:0;;;;;;;42675:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;42675:29:0;;;;;;;;;;;42755:20;;;:11;:20;;;;;;42790:18;;-1:-1:-1;;;;;;42823:49:0;;;;-1:-1:-1;;;42856:15:0;42823:49;;;;;;;;;;43146:11;;43206:24;;;;;;;43249:13;;42755:20;;43146:11;;43206:24;;43249:13;43245:384;;43459:13;;43444:11;:28;43440:174;;43497:20;;43566:28;;;;43540:54;;-1:-1:-1;;;43540:54:0;-1:-1:-1;;;;;;43540:54:0;;;-1:-1:-1;;;;;43497:20:0;;43540:54;;;;43440:174;41597:2148;;;43676:7;43672:2;-1:-1:-1;;;;;43657:27:0;43666:4;-1:-1:-1;;;;;43657:27:0;;;;;;;;;;;41597:2148;;;;;:::o;5643:317::-;5758:6;5733:21;:31;;5725:73;;;;-1:-1:-1;;;5725:73:0;;16640:2:1;5725:73:0;;;16622:21:1;16679:2;16659:18;;;16652:30;16718:31;16698:18;;;16691:59;16767:18;;5725:73:0;16612:179:1;5725:73:0;5812:12;5830:9;-1:-1:-1;;;;;5830:14:0;5852:6;5830:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5811:52;;;5882:7;5874:78;;;;-1:-1:-1;;;5874:78:0;;16213:2:1;5874:78:0;;;16195:21:1;16252:2;16232:18;;;16225:30;16291:34;16271:18;;;16264:62;16362:28;16342:18;;;16335:56;16408:19;;5874:78:0;16185:248:1;31868:1232:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;32011:7:0;;52618:1;32060:23;32056:977;;32113:13;;32106:4;:20;32102:931;;;32151:31;32185:17;;;:11;:17;;;;;;;;;32151:51;;;;;;;;;-1:-1:-1;;;;;32151:51:0;;;;-1:-1:-1;;;32151:51:0;;;;;;;;;;;-1:-1:-1;;;32151:51:0;;;;;;;;;;;;;;32225:789;;32279:14;;-1:-1:-1;;;;;32279:28:0;;32275:109;;32347:9;31868:1232;-1:-1:-1;;;31868:1232:0:o;32275:109::-;-1:-1:-1;;;32750:6:0;32799:17;;;;:11;:17;;;;;;;;;32787:29;;;;;;;;;-1:-1:-1;;;;;32787:29:0;;;;;-1:-1:-1;;;32787:29:0;;;;;;;;;;;-1:-1:-1;;;32787:29:0;;;;;;;;;;;;;32851:28;32847:117;;32923:9;31868:1232;-1:-1:-1;;;31868:1232:0:o;32847:117::-;32706:285;;;32102:931;;33061:31;;-1:-1:-1;;;33061:31:0;;;;;;;;;;;3297:191;3390:6;;;-1:-1:-1;;;;;3407:17:0;;;-1:-1:-1;;;;;;3407:17:0;;;;;;;3440:40;;3390:6;;;3407:17;3390:6;;3440:40;;3371:16;;3440:40;3297:191;;:::o;47059:831::-;47256:171;;-1:-1:-1;;;47256:171:0;;47222:4;;-1:-1:-1;;;;;47256:45:0;;;;;:171;;49792:10;;47358:4;;47381:7;;47407:5;;47256:171;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47256:171:0;;;;;;;;-1:-1:-1;;47256:171:0;;;;;;;;;;;;:::i;:::-;;;47239:644;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47641:13:0;;47637:235;;47687:40;;-1:-1:-1;;;47687:40:0;;;;;;;;;;;47637:235;47830:6;47824:13;47815:6;47811:2;47807:15;47800:38;47239:644;-1:-1:-1;;;;;;47500:81:0;-1:-1:-1;;;47500:81:0;;-1:-1:-1;47239:644:0;47059:831;;;;;;:::o;12023:723::-;12079:13;12300:10;12296:53;;-1:-1:-1;;12327:10:0;;;;;;;;;;;;-1:-1:-1;;;12327:10:0;;;;;12023:723::o;12296:53::-;12374:5;12359:12;12415:78;12422:9;;12415:78;;12448:8;;;;:::i;:::-;;-1:-1:-1;12471:10:0;;-1:-1:-1;12479:2:0;12471:10;;:::i;:::-;;;12415:78;;;12503:19;12535:6;12525:17;;;;;;-1:-1:-1;;;12525:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12525:17:0;;12503:39;;12553:154;12560:10;;12553:154;;12587:11;12597:1;12587:11;;:::i;:::-;;-1:-1:-1;12656:10:0;12664:2;12656:5;:10;:::i;:::-;12643:24;;:2;:24;:::i;:::-;12630:39;;12613:6;12620;12613:14;;;;;;-1:-1:-1;;;12613:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;12613:56:0;;;;;;;;-1:-1:-1;12684:11:0;12693:2;12684:11;;:::i;:::-;;;12553:154;;15248:701;15331:7;15374:4;15331:7;15389:523;15413:5;:12;15409:1;:16;15389:523;;;15447:20;15470:5;15476:1;15470:8;;;;;;-1:-1:-1;;;15470:8:0;;;;;;;;;;;;;;;15447:31;;15513:12;15497;:28;15493:408;;15650:44;;;;;;9576:19:1;;;9611:12;;;9604:28;;;9648:12;;15650:44:0;;;;;;;;;;;;15640:55;;;;;;15625:70;;15493:408;;;15840:44;;;;;;9576:19:1;;;9611:12;;;9604:28;;;9648:12;;15840:44:0;;;;;;;;;;;;15830:55;;;;;;15815:70;;15493:408;-1:-1:-1;15427:3:0;;;;:::i;:::-;;;;15389:523;;;-1:-1:-1;15929:12:0;15248:701;-1:-1:-1;;;15248:701:0:o;37967:1944::-;38090:20;38113:13;-1:-1:-1;;;;;38141:16:0;;38137:48;;38166:19;;-1:-1:-1;;;38166:19:0;;;;;;;;;;;38137:48;38200:13;38196:44;;38222:18;;-1:-1:-1;;;38222:18:0;;;;;;;;;;;38196:44;-1:-1:-1;;;;;38591:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;38650:49:0;;38591:44;;;;;;;;38650:49;;;-1:-1:-1;;;;;38591:44:0;;;;;;38650:49;;;;;;;;;;;;;;;;38716:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;38766:66:0;;;-1:-1:-1;;;38816:15:0;38766:66;;;;;;;;;;;;;38716:25;;38913:23;;;;38957:14;:19;38953:826;;38997:504;39028:38;;39053:12;;-1:-1:-1;;;;;39028:38:0;;;39045:1;;39028:38;;39045:1;;39028:38;39120:212;39189:1;39222:2;39255:14;;;;;;39300:5;39120:30;:212::i;:::-;39089:365;;39390:40;;-1:-1:-1;;;39390:40:0;;;;;;;;;;;39089:365;39496:3;39481:12;:18;38997:504;;39582:12;39565:13;;:29;39561:43;;39596:8;;;39561:43;38953:826;;;39645:119;39676:40;;39701:14;;;;;-1:-1:-1;;;;;39676:40:0;;;39693:1;;39676:40;;39693:1;;39676:40;39759:3;39744:12;:18;39645:119;;38953:826;-1:-1:-1;39793:13:0;:28;;;39843:60;;39876:2;39880:12;39894:8;39843:60;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:196::-;493:20;;-1:-1:-1;;;;;542:54:1;;532:65;;522:2;;611:1;608;601:12;522:2;474:147;;;:::o;626:693::-;680:5;733:3;726:4;718:6;714:17;710:27;700:2;;755:5;748;741:20;700:2;795:6;782:20;821:4;845:60;861:43;901:2;861:43;:::i;:::-;845:60;:::i;:::-;927:3;951:2;946:3;939:15;979:2;974:3;970:12;963:19;;1014:2;1006:6;1002:15;1066:3;1061:2;1055;1052:1;1048:10;1040:6;1036:23;1032:32;1029:41;1026:2;;;1087:5;1080;1073:20;1026:2;1113:5;1127:163;1141:2;1138:1;1135:9;1127:163;;;1198:17;;1186:30;;1236:12;;;;1268;;;;1159:1;1152:9;1127:163;;;-1:-1:-1;1308:5:1;;690:629;-1:-1:-1;;;;;;;690:629:1:o;1324:160::-;1389:20;;1445:13;;1438:21;1428:32;;1418:2;;1474:1;1471;1464:12;1489:163;1556:20;;1616:10;1605:22;;1595:33;;1585:2;;1642:1;1639;1632:12;1657:196;1716:6;1769:2;1757:9;1748:7;1744:23;1740:32;1737:2;;;1790:6;1782;1775:22;1737:2;1818:29;1837:9;1818:29;:::i;:::-;1808:39;1727:126;-1:-1:-1;;;1727:126:1:o;1858:270::-;1926:6;1934;1987:2;1975:9;1966:7;1962:23;1958:32;1955:2;;;2008:6;2000;1993:22;1955:2;2036:29;2055:9;2036:29;:::i;:::-;2026:39;;2084:38;2118:2;2107:9;2103:18;2084:38;:::i;:::-;2074:48;;1945:183;;;;;:::o;2133:338::-;2210:6;2218;2226;2279:2;2267:9;2258:7;2254:23;2250:32;2247:2;;;2300:6;2292;2285:22;2247:2;2328:29;2347:9;2328:29;:::i;:::-;2318:39;;2376:38;2410:2;2399:9;2395:18;2376:38;:::i;:::-;2366:48;;2461:2;2450:9;2446:18;2433:32;2423:42;;2237:234;;;;;:::o;2476:696::-;2571:6;2579;2587;2595;2648:3;2636:9;2627:7;2623:23;2619:33;2616:2;;;2670:6;2662;2655:22;2616:2;2698:29;2717:9;2698:29;:::i;:::-;2688:39;;2746:38;2780:2;2769:9;2765:18;2746:38;:::i;:::-;2736:48;;2831:2;2820:9;2816:18;2803:32;2793:42;;2886:2;2875:9;2871:18;2858:32;2913:18;2905:6;2902:30;2899:2;;;2950:6;2942;2935:22;2899:2;2978:22;;3031:4;3023:13;;3019:27;-1:-1:-1;3009:2:1;;3065:6;3057;3050:22;3009:2;3093:73;3158:7;3153:2;3140:16;3135:2;3131;3127:11;3093:73;:::i;:::-;3083:83;;;2606:566;;;;;;;:::o;3177:264::-;3242:6;3250;3303:2;3291:9;3282:7;3278:23;3274:32;3271:2;;;3324:6;3316;3309:22;3271:2;3352:29;3371:9;3352:29;:::i;:::-;3342:39;;3400:35;3431:2;3420:9;3416:18;3400:35;:::i;3446:264::-;3514:6;3522;3575:2;3563:9;3554:7;3550:23;3546:32;3543:2;;;3596:6;3588;3581:22;3543:2;3624:29;3643:9;3624:29;:::i;:::-;3614:39;3700:2;3685:18;;;;3672:32;;-1:-1:-1;;;3533:177:1:o;3715:1212::-;3833:6;3841;3894:2;3882:9;3873:7;3869:23;3865:32;3862:2;;;3915:6;3907;3900:22;3862:2;3960:9;3947:23;3989:18;4030:2;4022:6;4019:14;4016:2;;;4051:6;4043;4036:22;4016:2;4094:6;4083:9;4079:22;4069:32;;4139:7;4132:4;4128:2;4124:13;4120:27;4110:2;;4166:6;4158;4151:22;4110:2;4207;4194:16;4229:4;4253:60;4269:43;4309:2;4269:43;:::i;4253:60::-;4335:3;4359:2;4354:3;4347:15;4387:2;4382:3;4378:12;4371:19;;4418:2;4414;4410:11;4466:7;4461:2;4455;4452:1;4448:10;4444:2;4440:19;4436:28;4433:41;4430:2;;;4492:6;4484;4477:22;4430:2;4519:6;4510:15;;4534:169;4548:2;4545:1;4542:9;4534:169;;;4605:23;4624:3;4605:23;:::i;:::-;4593:36;;4566:1;4559:9;;;;;4649:12;;;;4681;;4534:169;;;-1:-1:-1;4722:5:1;-1:-1:-1;;4765:18:1;;4752:32;;-1:-1:-1;;4796:16:1;;;4793:2;;;4830:6;4822;4815:22;4793:2;;4858:63;4913:7;4902:8;4891:9;4887:24;4858:63;:::i;:::-;4848:73;;;3852:1075;;;;;:::o;4932:258::-;4997:6;5005;5058:2;5046:9;5037:7;5033:23;5029:32;5026:2;;;5079:6;5071;5064:22;5026:2;5107:26;5123:9;5107:26;:::i;5195:548::-;5270:6;5278;5331:2;5319:9;5310:7;5306:23;5302:32;5299:2;;;5352:6;5344;5337:22;5299:2;5380:26;5396:9;5380:26;:::i;:::-;5370:36;;5457:2;5446:9;5442:18;5429:32;5484:18;5476:6;5473:30;5470:2;;;5521:6;5513;5506:22;5470:2;5549:22;;5602:4;5594:13;;5590:27;-1:-1:-1;5580:2:1;;5636:6;5628;5621:22;5580:2;5664:73;5729:7;5724:2;5711:16;5706:2;5702;5698:11;5664:73;:::i;6011:403::-;6092:6;6100;6108;6116;6169:3;6157:9;6148:7;6144:23;6140:33;6137:2;;;6191:6;6183;6176:22;6137:2;6219:26;6235:9;6219:26;:::i;:::-;6209:36;;6292:2;6281:9;6277:18;6264:32;6254:42;;6315:37;6348:2;6337:9;6333:18;6315:37;:::i;:::-;6305:47;;6371:37;6404:2;6393:9;6389:18;6371:37;:::i;:::-;6361:47;;6127:287;;;;;;;:::o;6419:255::-;6477:6;6530:2;6518:9;6509:7;6505:23;6501:32;6498:2;;;6551:6;6543;6536:22;6498:2;6595:9;6582:23;6614:30;6638:5;6614:30;:::i;6679:259::-;6748:6;6801:2;6789:9;6780:7;6776:23;6772:32;6769:2;;;6822:6;6814;6807:22;6769:2;6859:9;6853:16;6878:30;6902:5;6878:30;:::i;6943:190::-;7002:6;7055:2;7043:9;7034:7;7030:23;7026:32;7023:2;;;7076:6;7068;7061:22;7023:2;-1:-1:-1;7104:23:1;;7013:120;-1:-1:-1;7013:120:1:o;7138:194::-;7208:6;7261:2;7249:9;7240:7;7236:23;7232:32;7229:2;;;7282:6;7274;7267:22;7229:2;-1:-1:-1;7310:16:1;;7219:113;-1:-1:-1;7219:113:1:o;7337:258::-;7405:6;7413;7466:2;7454:9;7445:7;7441:23;7437:32;7434:2;;;7487:6;7479;7472:22;7434:2;-1:-1:-1;;7515:23:1;;;7585:2;7570:18;;;7557:32;;-1:-1:-1;7424:171:1:o;7600:268::-;7667:6;7675;7728:2;7716:9;7707:7;7703:23;7699:32;7696:2;;;7749:6;7741;7734:22;7696:2;7777:28;7795:9;7777:28;:::i;7873:737::-;7967:6;7975;7983;8036:2;8024:9;8015:7;8011:23;8007:32;8004:2;;;8057:6;8049;8042:22;8004:2;8085:28;8103:9;8085:28;:::i;:::-;8075:38;;8164:2;8153:9;8149:18;8136:32;8187:18;8228:2;8220:6;8217:14;8214:2;;;8249:6;8241;8234:22;8214:2;8292:6;8281:9;8277:22;8267:32;;8337:7;8330:4;8326:2;8322:13;8318:27;8308:2;;8364:6;8356;8349:22;8308:2;8409;8396:16;8435:2;8427:6;8424:14;8421:2;;;8456:6;8448;8441:22;8421:2;8514:7;8509:2;8499:6;8496:1;8492:14;8488:2;8484:23;8480:32;8477:45;8474:2;;;8540:6;8532;8525:22;8474:2;8576;8572;8568:11;8558:21;;8598:6;8588:16;;;;;7994:616;;;;;:::o;8615:257::-;8656:3;8694:5;8688:12;8721:6;8716:3;8709:19;8737:63;8793:6;8786:4;8781:3;8777:14;8770:4;8763:5;8759:16;8737:63;:::i;:::-;8854:2;8833:15;-1:-1:-1;;8829:29:1;8820:39;;;;8861:4;8816:50;;8664:208;-1:-1:-1;;8664:208:1:o;8877:185::-;8919:3;8957:5;8951:12;8972:52;9017:6;9012:3;9005:4;8998:5;8994:16;8972:52;:::i;:::-;9040:16;;;;;8927:135;-1:-1:-1;;8927:135:1:o;9671:1305::-;9948:3;9977;10012:6;10006:13;10042:3;10064:1;10092:9;10088:2;10084:18;10074:28;;10152:2;10141:9;10137:18;10174;10164:2;;10218:4;10210:6;10206:17;10196:27;;10164:2;10244;10292;10284:6;10281:14;10261:18;10258:38;10255:2;;;-1:-1:-1;;;10319:33:1;;10375:4;10372:1;10365:15;10405:4;10326:3;10393:17;10255:2;10436:18;10463:104;;;;10581:1;10576:322;;;;10429:469;;10463:104;-1:-1:-1;;10496:24:1;;10484:37;;10541:16;;;;-1:-1:-1;10463:104:1;;10576:322;22208:4;22227:17;;;22277:4;22261:21;;10671:3;10687:165;10701:6;10698:1;10695:13;10687:165;;;10779:14;;10766:11;;;10759:35;10822:16;;;;10716:10;;10687:165;;;10691:3;;10881:6;10876:3;10872:16;10865:23;;10429:469;;;;;;;10914:56;10939:30;10965:3;10957:6;10939:30;:::i;:::-;-1:-1:-1;;;9127:20:1;;9172:1;9163:11;;9117:63;10914:56;10907:63;9956:1020;-1:-1:-1;;;;;9956:1020:1:o;11422:511::-;11616:4;-1:-1:-1;;;;;11726:2:1;11718:6;11714:15;11703:9;11696:34;11778:2;11770:6;11766:15;11761:2;11750:9;11746:18;11739:43;;11818:6;11813:2;11802:9;11798:18;11791:34;11861:3;11856:2;11845:9;11841:18;11834:31;11882:45;11922:3;11911:9;11907:19;11899:6;11882:45;:::i;:::-;11874:53;11625:308;-1:-1:-1;;;;;;11625:308:1:o;12240:1207::-;12508:2;12520:21;;;12590:13;;12493:18;;;12612:22;;;12460:4;;12687;;12665:2;12650:18;;;12714:15;;;12460:4;12760:218;12774:6;12771:1;12768:13;12760:218;;;12839:13;;-1:-1:-1;;;;;12835:62:1;12823:75;;12918:12;;;;12953:15;;;;12796:1;12789:9;12760:218;;;-1:-1:-1;;;13014:19:1;;;12994:18;;;12987:47;13084:13;;13106:21;;;13182:15;;;;13145:12;;;13217:4;13230:189;13246:8;13241:3;13238:17;13230:189;;;13315:15;;13301:30;;13392:17;;;;13353:14;;;;13274:1;13265:11;13230:189;;13644:219;13793:2;13782:9;13775:21;13756:4;13813:44;13853:2;13842:9;13838:18;13830:6;13813:44;:::i;18193:356::-;18395:2;18377:21;;;18414:18;;;18407:30;18473:34;18468:2;18453:18;;18446:62;18540:2;18525:18;;18367:182::o;21693:275::-;21764:2;21758:9;21829:2;21810:13;;-1:-1:-1;;21806:27:1;21794:40;;21864:18;21849:34;;21885:22;;;21846:62;21843:2;;;21911:18;;:::i;:::-;21947:2;21940:22;21738:230;;-1:-1:-1;21738:230:1:o;21973:183::-;22033:4;22066:18;22058:6;22055:30;22052:2;;;22088:18;;:::i;:::-;-1:-1:-1;22133:1:1;22129:14;22145:4;22125:25;;22042:114::o;22293:128::-;22333:3;22364:1;22360:6;22357:1;22354:13;22351:2;;;22370:18;;:::i;:::-;-1:-1:-1;22406:9:1;;22341:80::o;22426:120::-;22466:1;22492;22482:2;;22497:18;;:::i;:::-;-1:-1:-1;22531:9:1;;22472:74::o;22551:168::-;22591:7;22657:1;22653;22649:6;22645:14;22642:1;22639:21;22634:1;22627:9;22620:17;22616:45;22613:2;;;22664:18;;:::i;:::-;-1:-1:-1;22704:9:1;;22603:116::o;22724:125::-;22764:4;22792:1;22789;22786:8;22783:2;;;22797:18;;:::i;:::-;-1:-1:-1;22834:9:1;;22773:76::o;22854:258::-;22926:1;22936:113;22950:6;22947:1;22944:13;22936:113;;;23026:11;;;23020:18;23007:11;;;23000:39;22972:2;22965:10;22936:113;;;23067:6;23064:1;23061:13;23058:2;;;-1:-1:-1;;23102:1:1;23084:16;;23077:27;22907:205::o;23117:380::-;23196:1;23192:12;;;;23239;;;23260:2;;23314:4;23306:6;23302:17;23292:27;;23260:2;23367;23359:6;23356:14;23336:18;23333:38;23330:2;;;23413:10;23408:3;23404:20;23401:1;23394:31;23448:4;23445:1;23438:15;23476:4;23473:1;23466:15;23330:2;;23172:325;;;:::o;23502:135::-;23541:3;-1:-1:-1;;23562:17:1;;23559:2;;;23582:18;;:::i;:::-;-1:-1:-1;23629:1:1;23618:13;;23549:88::o;23642:112::-;23674:1;23700;23690:2;;23705:18;;:::i;:::-;-1:-1:-1;23739:9:1;;23680:74::o;23759:127::-;23820:10;23815:3;23811:20;23808:1;23801:31;23851:4;23848:1;23841:15;23875:4;23872:1;23865:15;23891:127;23952:10;23947:3;23943:20;23940:1;23933:31;23983:4;23980:1;23973:15;24007:4;24004:1;23997:15;24023:127;24084:10;24079:3;24075:20;24072:1;24065:31;24115:4;24112:1;24105:15;24139:4;24136:1;24129:15;24155:131;-1:-1:-1;;;;;;24229:32:1;;24219:43;;24209:2;;24276:1;24273;24266:12
Swarm Source
ipfs://128d070ab1aed27ee7c9526a32a323ef75027169b119fcf356c2fd6ef71a08c0
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.