Overview
TokenID
5212
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
ERC721Proxy
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-09-17 */ // File: interfaces/LibEverLight.sol pragma solidity ^0.8.0; library LibEverLight { struct Configurations { uint256 _baseFee; // base fee for create character uint32 _incrPerNum; // the block number for increase fee uint256 _incrFee; // increase fee after increase block number uint32 _decrBlockNum; // the block number for decrease fee uint256 _decrFee; // decrease fee after decrease block number uint256 _latestCreateBlock; // the latest block number for create characters uint32 _totalDecrTimes; // total decrease times for nonone apply uint32 _totalCreateNum; // total number of create characters uint256 _currentTokenId; // current token id for nft creation uint32 _totalSuitNum; // total suit number uint32 _maxPosition; // max parts number for charater uint32 _luckyStonePrice; // price of lucky stone address _goverContract; // address of governance contract address _tokenContract; // address of token contract address[] _mapContracts; // addresses of map contracts } struct SuitInfo { string _name; // suit name uint32 _suitId; // suit id, 0 for non suit } struct PartsInfo { mapping(uint8 => mapping(uint8 => uint32)) _partsPowerList; // position -> (rare -> power) mapping(uint8 => mapping(uint8 => SuitInfo[])) _partsTypeList; // position -> (rare -> SuitInfo[]) mapping(uint8 => uint32) _partsCount; // position -> count mapping(uint8 => string) _rareColor; // rare -> color mapping(uint32 => address) _suitFlag; // check suit is exists mapping(uint256 => bool) _nameFlag; // parts name is exists } struct TokenInfo { uint256 _tokenId; // token id //address _owner; // owner of token uint8 _position; // parts position uint8 _rare; // rare level string _name; // parts name uint32 _suitId; // suit id, 0 for non suit uint32 _power; // parts power uint8 _level; // parts level bool _createFlag; // has created new parts uint256 _wearToken; // character token id which wear this token } struct Account { bool _creationFlag; // if the address has created character uint32 _luckyNum; // lucky number of current address } struct Character { uint256 _tokenId; // token id //address _owner; // owner of character uint32 _powerFactor; // power factor of character mapping(uint8 => uint256) _tokenList; // position -> tokenID uint32 _totalPower; // total power of parts list mapping(uint256 => string) _extraList; // } } // File: 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 _txOrigin() internal view virtual returns (address) { return tx.origin; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _timestamp() internal view virtual returns (uint) { return block.timestamp; } function _blockNum() internal view virtual returns (uint) { return block.number; } function _gasLeft() internal view virtual returns (uint) { return gasleft(); } function _value() internal view virtual returns (uint) { return msg.value; } function _gasPrice() internal view virtual returns (uint) { return tx.gasprice; } } 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: interfaces/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: ERC721.sol // File: interfaces/IEverLight.sol pragma solidity ^0.8.0; interface IEverLight { // event list event NewTokenType(address indexed creator, uint8 position, uint8 rare, string indexed name, uint256 suitId); // read function list function queryColorByRare(uint8 rare) external view returns (string memory color); /* function queryBaseInfo() external view returns (uint256 baseFee, uint32 incrPerNum, uint256 incrFee, uint32 decrBlockNum, uint256 decrFee, uint256 lastestCreateBlock, uint32 totalSuitNum);*/ function queryAccount(address owner) external view returns (LibEverLight.Account memory account); // returns the type for tokenId(1 charactor, 2 parts, 3 lucklyStone) function queryTokenType(uint256 tokenId) external view returns (uint8 tokenType); function queryCharacter(uint256 characterId) external view returns (uint256 tokenId, uint32 powerFactor, uint256[] memory tokenList, uint32 totalPower); function queryToken(uint256 tokenId) external view returns (LibEverLight.TokenInfo memory tokenInfo); function queryCharacterCount() external view returns (uint32 num); function queryLuckyStonePrice() external view returns (uint32 price); function queryMapInfo() external view returns (address[] memory addresses); function querySuitOwner(uint32 suitId) external view returns (address owner); function isNameExist(string memory name) external view returns (bool result); function queryCharacterExtra(uint256 characterId, uint256 extraKey) external view returns (string memory); // write function list function setCharacterExtra(uint256 characterId, uint256 extraKey, string memory extraValue) external; function mint() external payable; function wear(uint256 characterId, uint256[] memory tokenList) external; function takeOff(uint256 characterId, uint8[] memory positions) external; function upgradeToken(uint256 firstTokenId, uint256 secondTokenId) external; function upgradeWearToken(uint256 characterId, uint256 tokenId) external; function exchangeToken(uint32 mapId, uint256[] memory mapTokenList) external; function buyLuckyStone(uint8 count) external; function useLuckyStone(uint256[] memory tokenId) external; function newTokenType(uint256 tokenId, string memory name, uint32 suitId) external; } // File: utils/Base64.sol pragma solidity ^0.8.0; library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } // File: 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: interfaces/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: 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: 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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: interfaces/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: interfaces/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a 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 _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: ERC721Proxy.sol // eyJuYW1lIjoiME4xIC0gTWV0YWRhdGEiLCJkZXNjcmlwdGlvbiI6IlRoaXMgc2hvdWxkIE5PVCBiZSByZXZlYWxlZCBiZWZvcmUgYWxsIGFyZSBzb2xkLiBJbWFnZXMgY29udGFpbmVkIGJlbG93IiwiaW1hZ2VzIjoiMHg1MTZENTU0ODYxMzQ0QTc3NEI1MDY3NjY0ODcxNDM1ODMxNTQ3ODMyNTc2OTRBNTg2NDYzNEM2MzY1NTM3NDZGNTEzNjY1Nzg1NTU4Mzg1NDRBNkE0NjYxNjE1MSJ9 pragma solidity ^0.8.0; contract ERC721Proxy is ERC721Enumerable, Ownable { using Strings for uint256; IEverLight public everLightContract; string private _contractURI = ''; string private _tokenBaseURI = ''; modifier onlyEverLight() { require(address(everLightContract) == _msgSender(), "caller is not the everLight"); _; } constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function mintBy(address owner, uint256 tokenId) external onlyEverLight { require(!_exists(tokenId), 'tokenId exist already'); _safeMint(owner, tokenId); } function burnBy(uint256 tokenId) external onlyEverLight { require(_exists(tokenId), 'tokenId not exist'); _burn(tokenId); } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function setEverLightContract(address _everLightContract) external onlyOwner { require(_everLightContract != address(0), "addr invalid"); everLightContract = IEverLight(_everLightContract); } function setContractURI(string calldata URI) external onlyOwner { _contractURI = URI; } function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function contractURI() public view returns (string memory) { return _contractURI; } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory output) { require(_exists(tokenId), 'Token does not exist'); uint8 tokenType = everLightContract.queryTokenType(tokenId); if(tokenType == 1){ // for charactor output = tokenURIForCharacter(tokenId); } if(tokenType == 2){ // for parts output = tokenURIForParts(tokenId); } if(tokenType == 3){ // for luckyStone // .... output = tokenURIForParts(tokenId); } // string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Bag #', tokenId.toString(), '", "description": "The first fully autonomous decentralized NFT Metaverse game.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function tokenURIForCharacter(uint256 tokenId) internal view returns (string memory) { (, uint32 powerFactor, uint256[] memory tokenList, uint32 totalPower) = everLightContract.queryCharacter(tokenId); string[] memory parts = new string[](2 * tokenList.length + 3); parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; } </style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'; uint256 index = 1; uint256 yValue = 20; for(uint i = 0; i < tokenList.length; i++) { yValue = yValue + 20; parts[index] = pluck(tokenList[i], uint8(i)); index = index + 1; parts[index] = string(abi.encodePacked('</text><text x="10" y="',yValue.toString(),'" class="base">')); // '</text><text x="10" y="40" class="base">'; index++; } parts[index] = string(abi.encodePacked("totalPower:[", uint256(totalPower).toString(), "]")); index = index + 1; parts[index] = '</text></svg>'; string memory output = ""; uint n = 0; while(n < parts.length){ // 5 if(n % 2 == 0){ // 0, 2, 4, 6, 8 output = string(abi.encodePacked(output, parts[n], parts[n+1])); } n = n + 2; if(n == (parts.length - 1)){ output = string(abi.encodePacked(output, parts[n])); break; } if(n >= parts.length){ break; } } return output; } function tokenURIForParts(uint256 tokenId) internal view returns (string memory) { string[3] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; } </style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'; parts[1] = pluck(tokenId, 0); parts[2] = '</text></svg>'; return string(abi.encodePacked(parts[0], parts[1], parts[2])); } function pluck(uint256 tokenId, uint8 position) internal view returns (string memory output) { LibEverLight.TokenInfo memory tokenInfo = everLightContract.queryToken(tokenId); if(tokenInfo._tokenId == 0){ output = string(abi.encodePacked(uint256(position).toString(), ":?")); return output; } if(tokenInfo._position == 99){ output = string(abi.encodePacked(uint256(tokenInfo._position).toString(), ":", tokenInfo._name)); return output; } if(tokenInfo._createFlag) { output = string(abi.encodePacked(uint256(tokenInfo._position).toString(), ":", tokenInfo._name, "(+", uint256(tokenInfo._level).toString(), "E)[", uint256(tokenInfo._power).toString(), "]")); } else { output = string(abi.encodePacked(uint256(tokenInfo._position).toString(), ":", tokenInfo._name, "(+", uint256(tokenInfo._level).toString(), ")[", uint256(tokenInfo._power).toString(), "]")); } string memory color = everLightContract.queryColorByRare(tokenInfo._rare); if(bytes(color).length > 0) { output = string(abi.encodePacked('<a style="fill:', color, ';">', output, '</a>')); } return output; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnBy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"everLightContract","outputs":[{"internalType":"contract IEverLight","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintBy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_everLightContract","type":"address"}],"name":"setEverLightContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"output","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600c9162000117565b506040805160208101918290526000908190526200003c91600d9162000117565b503480156200004a57600080fd5b506040516200358c3803806200358c8339810160408190526200006d9162000268565b8151829082906200008690600090602085019062000117565b5080516200009c90600190602084019062000117565b505050620000b9620000b3620000c160201b60201c565b620000c5565b505062000322565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012590620002cf565b90600052602060002090601f01602090048101928262000149576000855562000194565b82601f106200016457805160ff191683800117855562000194565b8280016001018555821562000194579182015b828111156200019457825182559160200191906001019062000177565b50620001a2929150620001a6565b5090565b5b80821115620001a25760008155600101620001a7565b600082601f830112620001ce578081fd5b81516001600160401b0380821115620001eb57620001eb6200030c565b6040516020601f8401601f19168201810183811183821017156200021357620002136200030c565b60405283825285840181018710156200022a578485fd5b8492505b838310156200024d57858301810151828401820152918201916200022e565b838311156200025e57848185840101525b5095945050505050565b600080604083850312156200027b578182fd5b82516001600160401b038082111562000292578384fd5b620002a086838701620001bd565b93506020850151915080821115620002b6578283fd5b50620002c585828601620001bd565b9150509250929050565b600281046001821680620002e457607f821691505b602082108114156200030657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61325a80620003326000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063e8a3d48511610071578063e8a3d48514610355578063e985e9c51461035d578063f2fde38b14610370578063fa2f13ba14610383576101a9565b8063b88d4fde14610327578063c87b56dd1461033a578063dc95550c1461034d576101a9565b80638da5cb5b116100d35780638da5cb5b146102f1578063938e3d7b146102f957806395d89b411461030c578063a22cb46514610314576101a9565b806370a08231146102c3578063715018a6146102d65780637f4a838f146102de576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146102775780634f6ccce71461028a57806355f804b31461029d5780636352211e146102b0576101a9565b806323b872dd146102495780632f745c591461025c5780633ccfd60b1461026f576101a9565b806301ffc9a7146101ae57806306fdde03146101d7578063081812fc146101ec578063095ea7b31461020c578063101b8d5d1461022157806318160ddd14610234575b600080fd5b6101c16101bc3660046121f3565b610396565b6040516101ce919061296e565b60405180910390f35b6101df6103c3565b6040516101ce9190612979565b6101ff6101fa3660046123b7565b610455565b6040516101ce919061291d565b61021f61021a3660046121ca565b6104a1565b005b61021f61022f3660046123b7565b610539565b61023c61059f565b6040516101ce9190612f1f565b61021f6102573660046120bb565b6105a5565b61023c61026a3660046121ca565b6105dd565b61021f610632565b61021f6102853660046120bb565b6106a4565b61023c6102983660046123b7565b6106bf565b61021f6102ab36600461222b565b61071a565b6101ff6102be3660046123b7565b610765565b61023c6102d1366004612068565b61079a565b61021f6107de565b61021f6102ec3660046121ca565b610829565b6101ff61088e565b61021f61030736600461222b565b61089d565b6101df6108e8565b61021f610322366004612194565b6108f7565b61021f6103353660046120f6565b6109c5565b6101df6103483660046123b7565b610a04565b6101ff610b5d565b6101df610b6c565b6101c161036b366004612089565b610b7b565b61021f61037e366004612068565b610ba9565b61021f610391366004612068565b610c17565b60006001600160e01b0319821663780e9d6360e01b14806103bb57506103bb82610c9e565b90505b919050565b6060600080546103d290613016565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe90613016565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b5050505050905090565b600061046082610cde565b6104855760405162461bcd60e51b815260040161047c90612d77565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006104ac82610765565b9050806001600160a01b0316836001600160a01b031614156104e05760405162461bcd60e51b815260040161047c90612e41565b806001600160a01b03166104f2610cfb565b6001600160a01b0316148061050e575061050e8161036b610cfb565b61052a5760405162461bcd60e51b815260040161047c90612bec565b6105348383610cff565b505050565b610541610cfb565b600b546001600160a01b0390811691161461056e5760405162461bcd60e51b815260040161047c90612c49565b61057781610cde565b6105935760405162461bcd60e51b815260040161047c90612acc565b61059c81610d6d565b50565b60085490565b6105b66105b0610cfb565b82610e14565b6105d25760405162461bcd60e51b815260040161047c90612e82565b610534838383610e99565b60006105e88361079a565b82106106065760405162461bcd60e51b815260040161047c906129b2565b506001600160a01b03821660009081526006602090815260408083208484529091529020545b92915050565b61063a610cfb565b6001600160a01b031661064b61088e565b6001600160a01b0316146106715760405162461bcd60e51b815260040161047c90612dc3565b6040514790339082156108fc029083906000818181858888f193505050501580156106a0573d6000803e3d6000fd5b5050565b610534838383604051806020016040528060008152506109c5565b60006106c961059f565b82106106e75760405162461bcd60e51b815260040161047c90612ed3565b6008828154811061070857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610722610cfb565b6001600160a01b031661073361088e565b6001600160a01b0316146107595760405162461bcd60e51b815260040161047c90612dc3565b610534600d8383611f19565b6000818152600260205260408120546001600160a01b0316806103bb5760405162461bcd60e51b815260040161047c90612cca565b60006001600160a01b0382166107c25760405162461bcd60e51b815260040161047c90612c80565b506001600160a01b031660009081526003602052604090205490565b6107e6610cfb565b6001600160a01b03166107f761088e565b6001600160a01b03161461081d5760405162461bcd60e51b815260040161047c90612dc3565b6108276000610fc6565b565b610831610cfb565b600b546001600160a01b0390811691161461085e5760405162461bcd60e51b815260040161047c90612c49565b61086781610cde565b156108845760405162461bcd60e51b815260040161047c90612d13565b6106a08282611018565b600a546001600160a01b031690565b6108a5610cfb565b6001600160a01b03166108b661088e565b6001600160a01b0316146108dc5760405162461bcd60e51b815260040161047c90612dc3565b610534600c8383611f19565b6060600180546103d290613016565b6108ff610cfb565b6001600160a01b0316826001600160a01b031614156109305760405162461bcd60e51b815260040161047c90612b3b565b806005600061093d610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610981610cfb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109b9919061296e565b60405180910390a35050565b6109d66109d0610cfb565b83610e14565b6109f25760405162461bcd60e51b815260040161047c90612e82565b6109fe84848484611032565b50505050565b6060610a0f82610cde565b610a2b5760405162461bcd60e51b815260040161047c90612b72565b600b546040516383015eb360e01b81526000916001600160a01b0316906383015eb390610a5c908690600401612f1f565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac91906124a3565b90508060ff1660011415610ac657610ac383611065565b91505b8060ff1660021415610ade57610adb836114aa565b91505b8060ff1660031415610af657610af3836114aa565b91505b6000610b32610b0485611533565b610b0d8561164e565b604051602001610b1e9291906126e2565b60405160208183030381529060405261164e565b905080604051602001610b4591906127d0565b60405160208183030381529060405292505050919050565b600b546001600160a01b031681565b6060600c80546103d290613016565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610bb1610cfb565b6001600160a01b0316610bc261088e565b6001600160a01b031614610be85760405162461bcd60e51b815260040161047c90612dc3565b6001600160a01b038116610c0e5760405162461bcd60e51b815260040161047c90612a4f565b61059c81610fc6565b610c1f610cfb565b6001600160a01b0316610c3061088e565b6001600160a01b031614610c565760405162461bcd60e51b815260040161047c90612dc3565b6001600160a01b038116610c7c5760405162461bcd60e51b815260040161047c9061298c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480610ccf57506001600160e01b03198216635b5e139f60e01b145b806103bb57506103bb826117c2565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d3482610765565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d7882610765565b9050610d86816000846117db565b610d91600083610cff565b6001600160a01b0381166000908152600360205260408120805460019290610dba908490612fd3565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000610e1f82610cde565b610e3b5760405162461bcd60e51b815260040161047c90612ba0565b6000610e4683610765565b9050806001600160a01b0316846001600160a01b03161480610e815750836001600160a01b0316610e7684610455565b6001600160a01b0316145b80610e915750610e918185610b7b565b949350505050565b826001600160a01b0316610eac82610765565b6001600160a01b031614610ed25760405162461bcd60e51b815260040161047c90612df8565b6001600160a01b038216610ef85760405162461bcd60e51b815260040161047c90612af7565b610f038383836117db565b610f0e600082610cff565b6001600160a01b0383166000908152600360205260408120805460019290610f37908490612fd3565b90915550506001600160a01b0382166000908152600360205260408120805460019290610f65908490612f88565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106a0828260405180602001604052806000815250611864565b61103d848484610e99565b61104984848484611897565b6109fe5760405162461bcd60e51b815260040161047c906129fd565b600b5460405163dfe7f7e760e01b8152606091600091829182916001600160a01b039091169063dfe7f7e79061109f908890600401612f1f565b60006040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f391908101906123cf565b9350935093505060008251600261110a9190612fb4565b611115906003612f88565b67ffffffffffffffff81111561113b57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561116e57816020015b60608152602001906001900390816111595790505b50905060405180610120016040528060fe81526020016130e760fe9139816000815181106111ac57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526001601460005b85518110156112b1576111d2826014612f88565b91506112058682815181106111f757634e487b7160e01b600052603260045260246000fd5b6020026020010151826119b2565b84848151811061122557634e487b7160e01b600052603260045260246000fd5b602090810291909101015261123b836001612f88565b925061124682611533565b6040516020016112569190612815565b60405160208183030381529060405284848151811061128557634e487b7160e01b600052603260045260246000fd5b6020026020010181905250828061129b90613051565b93505080806112a990613051565b9150506111be565b506112c18463ffffffff16611533565b6040516020016112d191906128de565b60405160208183030381529060405283838151811061130057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152611316826001612f88565b91506040518060400160405280600d81526020016c1e17ba32bc3a1f1e17b9bb339f60991b81525083838151811061135e57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250600060405180602001604052806000815250905060005b845181101561149d5761139460028261306c565b61141957818582815181106113b957634e487b7160e01b600052603260045260246000fd5b6020026020010151868360016113cf9190612f88565b815181106113ed57634e487b7160e01b600052603260045260246000fd5b602002602001015160405160200161140793929190612518565b60405160208183030381529060405291505b611424816002612f88565b9050600185516114349190612fd3565b81141561148b578185828151811061145c57634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016114759291906124e9565b604051602081830303815290604052915061149d565b845181106114985761149d565b611380565b5098975050505050505050565b60606114b4611f9d565b60405180610120016040528060fe81526020016130e760fe913981526114db8360006119b2565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b8184015281850181905284519351915161151c949301612518565b604051602081830303815290604052915050919050565b60608161155857506040805180820190915260018152600360fc1b60208201526103be565b8160005b8115611582578061156c81613051565b915061157b9050600a83612fa0565b915061155c565b60008167ffffffffffffffff8111156115ab57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115d5576020820181803683370190505b5090505b8415610e91576115ea600183612fd3565b91506115f7600a8661306c565b611602906030612f88565b60f81b81838151811061162557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611647600a86612fa0565b94506115d9565b80516060908061166e5750506040805160208101909152600081526103be565b6000600361167d836002612f88565b6116879190612fa0565b611692906004612fb4565b905060006116a1826020612f88565b67ffffffffffffffff8111156116c757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116f1576020820181803683370190505b50905060006040518060600160405280604081526020016131e5604091399050600181016020830160005b8681101561177d576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161171c565b50600386066001811461179757600281146117a8576117b4565b613d3d60f01b6001198301526117b4565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b6117e6838383610534565b6001600160a01b038316611802576117fd81611c36565b611825565b816001600160a01b0316836001600160a01b031614611825576118258382611c7a565b6001600160a01b0382166118415761183c81611d17565b610534565b826001600160a01b0316826001600160a01b031614610534576105348282611df0565b61186e8383611e34565b61187b6000848484611897565b6105345760405162461bcd60e51b815260040161047c906129fd565b60006118ab846001600160a01b0316611f13565b156119a757836001600160a01b031663150b7a026118c7610cfb565b8786866040518563ffffffff1660e01b81526004016118e99493929190612931565b602060405180830381600087803b15801561190357600080fd5b505af1925050508015611933575060408051601f3d908101601f191682019092526119309181019061220f565b60015b61198d573d808015611961576040519150601f19603f3d011682016040523d82523d6000602084013e611966565b606091505b5080516119855760405162461bcd60e51b815260040161047c906129fd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e91565b506001949350505050565b600b546040516365f63c1b60e01b81526060916000916001600160a01b03909116906365f63c1b906119e8908790600401612f1f565b60006040518083038186803b158015611a0057600080fd5b505afa158015611a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a3c91908101906122cb565b8051909150611a7857611a518360ff16611533565b604051602001611a61919061255b565b60405160208183030381529060405291505061062c565b806020015160ff1660631415611aae57611a98816020015160ff16611533565b8160600151604051602001611a61929190612581565b8060e0015115611b1957611ac8816020015160ff16611533565b8160600151611add8360c0015160ff16611533565b611af08460a0015163ffffffff16611533565b604051602001611b03949392919061264f565b6040516020818303038152906040529150611b76565b611b29816020015160ff16611533565b8160600151611b3e8360c0015160ff16611533565b611b518460a0015163ffffffff16611533565b604051602001611b6494939291906125bd565b60405160208183030381529060405291505b600b5460408083015190516314a46ce560e31b81526000926001600160a01b03169163a523672891611bab9190600401612f28565b60006040518083038186803b158015611bc357600080fd5b505afa158015611bd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bff9190810190612298565b805190915015611c2e578083604051602001611c1c929190612873565b60405160208183030381529060405292505b505092915050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b60006001611c878461079a565b611c919190612fd3565b600083815260076020526040902054909150808214611ce4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d2990600190612fd3565b60008381526009602052604081205460088054939450909284908110611d5f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611d8e57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611dd457634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611dfb8361079a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e5a5760405162461bcd60e51b815260040161047c90612d42565b611e6381610cde565b15611e805760405162461bcd60e51b815260040161047c90612a95565b611e8c600083836117db565b6001600160a01b0382166000908152600360205260408120805460019290611eb5908490612f88565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611f2590613016565b90600052602060002090601f016020900481019282611f475760008555611f8d565b82601f10611f605782800160ff19823516178555611f8d565b82800160010185558215611f8d579182015b82811115611f8d578235825591602001919060010190611f72565b50611f99929150611fc4565b5090565b60405180606001604052806003905b6060815260200190600190039081611fac5790505090565b5b80821115611f995760008155600101611fc5565b80356001600160a01b03811681146103be57600080fd5b80516103be816130c2565b600082601f83011261200b578081fd5b815161201e61201982612f60565b612f36565b818152846020838601011115612032578283fd5b610e91826020830160208701612fea565b805163ffffffff811681146103be57600080fd5b805160ff811681146103be57600080fd5b600060208284031215612079578081fd5b61208282611fd9565b9392505050565b6000806040838503121561209b578081fd5b6120a483611fd9565b91506120b260208401611fd9565b90509250929050565b6000806000606084860312156120cf578081fd5b6120d884611fd9565b92506120e660208501611fd9565b9150604084013590509250925092565b6000806000806080858703121561210b578081fd5b61211485611fd9565b935061212260208601611fd9565b925060408501359150606085013567ffffffffffffffff811115612144578182fd5b8501601f81018713612154578182fd5b803561216261201982612f60565b818152886020838501011115612176578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156121a6578182fd5b6121af83611fd9565b915060208301356121bf816130c2565b809150509250929050565b600080604083850312156121dc578182fd5b6121e583611fd9565b946020939093013593505050565b600060208284031215612204578081fd5b8135612082816130d0565b600060208284031215612220578081fd5b8151612082816130d0565b6000806020838503121561223d578182fd5b823567ffffffffffffffff80821115612254578384fd5b818501915085601f830112612267578384fd5b813581811115612275578485fd5b866020828501011115612286578485fd5b60209290920196919550909350505050565b6000602082840312156122a9578081fd5b815167ffffffffffffffff8111156122bf578182fd5b610e9184828501611ffb565b6000602082840312156122dc578081fd5b815167ffffffffffffffff808211156122f3578283fd5b8184019150610120808387031215612309578384fd5b61231281612f36565b90508251815261232460208401612057565b602082015261233560408401612057565b604082015260608301518281111561234b578485fd5b61235787828601611ffb565b60608301525061236960808401612043565b608082015261237a60a08401612043565b60a082015261238b60c08401612057565b60c082015261239c60e08401611ff0565b60e08201526101009283015192810192909252509392505050565b6000602082840312156123c8578081fd5b5035919050565b600080600080608085870312156123e4578182fd5b8451935060206123f5818701612043565b9350604086015167ffffffffffffffff80821115612411578485fd5b818801915088601f830112612424578485fd5b815181811115612436576124366130ac565b8381029150612446848301612f36565b8181528481019084860184860187018d1015612460578889fd5b8895505b83861015612482578051835260019590950194918601918601612464565b5080975050505050505061249860608601612043565b905092959194509250565b6000602082840312156124b4578081fd5b61208282612057565b600081518084526124d5816020860160208601612fea565b601f01601f19169290920160200192915050565b600083516124fb818460208801612fea565b83519083019061250f818360208801612fea565b01949350505050565b6000845161252a818460208901612fea565b84519083019061253e818360208901612fea565b8451910190612551818360208801612fea565b0195945050505050565b6000825161256d818460208701612fea565b613a3f60f01b920191825250600201919050565b60008351612593818460208801612fea565b601d60f91b90830190815283516125b1816001840160208801612fea565b01600101949350505050565b600085516125cf818460208a01612fea565b601d60f91b90830190815285516125ed816001840160208a01612fea565b61282b60f01b600192909101918201528451612610816003840160208901612fea565b61295b60f01b600392909101918201528351612633816005840160208801612fea565b605d60f81b600592909101918201526006019695505050505050565b60008551612661818460208a01612fea565b601d60f91b908301908152855161267f816001840160208a01612fea565b61282b60f01b6001929091019182015284516126a2816003840160208901612fea565b6245295b60e81b6003929091019182015283516126c6816006840160208801612fea565b605d60f81b600692909101918201526007019695505050505050565b6e7b226e616d65223a2022426167202360881b8152825160009061270d81600f850160208801612fea565b7f222c20226465736372697074696f6e223a20225468652066697273742066756c600f918401918201527f6c79206175746f6e6f6d6f757320646563656e7472616c697a6564204e465420602f8201527f4d65746176657273652067616d652e222c2022696d616765223a202264617461604f820152750e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60521b606f82015283516127b5816085840160208801612fea565b61227d60f01b60859290910191820152608701949350505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161280881601d850160208701612fea565b91909101601d0192915050565b60007f3c2f746578743e3c7465787420783d2231302220793d220000000000000000008252825161284d816017850160208701612fea565b6e111031b630b9b99e913130b9b2911f60891b6017939091019283015250602601919050565b6e1e309039ba3cb6329e913334b6361d60891b8152825160009061289e81600f850160208801612fea565b621d911f60e91b600f9184019182015283516128c1816012840160208801612fea565b631e17b09f60e11b60129290910191820152601601949350505050565b60006b746f74616c506f7765723a5b60a01b8252825161290581600c850160208701612fea565b605d60f81b600c939091019283015250600d01919050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612964908301846124bd565b9695505050505050565b901515815260200190565b60006020825261208260208301846124bd565b6020808252600c908201526b1859191c881a5b9d985b1a5960a21b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601190820152701d1bdad95b9259081b9bdd08195e1a5cdd607a1b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252601b908201527f63616c6c6572206973206e6f742074686520657665724c696768740000000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260159082015274746f6b656e496420657869737420616c726561647960581b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f5857612f586130ac565b604052919050565b600067ffffffffffffffff821115612f7a57612f7a6130ac565b50601f01601f191660200190565b60008219821115612f9b57612f9b613080565b500190565b600082612faf57612faf613096565b500490565b6000816000190483118215151615612fce57612fce613080565b500290565b600082821015612fe557612fe5613080565b500390565b60005b83811015613005578181015183820152602001612fed565b838111156109fe5750506000910152565b60028104600182168061302a57607f821691505b6020821081141561304b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561306557613065613080565b5060010190565b60008261307b5761307b613096565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461059c57600080fd5b6001600160e01b03198116811461059c57600080fdfe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d203c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122006496738c0ddd7d8512c9d6a2b9aa0a55deb9e43d1a0f8a81467a915e34c360864736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e457665724c6967687420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004454c575400000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063e8a3d48511610071578063e8a3d48514610355578063e985e9c51461035d578063f2fde38b14610370578063fa2f13ba14610383576101a9565b8063b88d4fde14610327578063c87b56dd1461033a578063dc95550c1461034d576101a9565b80638da5cb5b116100d35780638da5cb5b146102f1578063938e3d7b146102f957806395d89b411461030c578063a22cb46514610314576101a9565b806370a08231146102c3578063715018a6146102d65780637f4a838f146102de576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146102775780634f6ccce71461028a57806355f804b31461029d5780636352211e146102b0576101a9565b806323b872dd146102495780632f745c591461025c5780633ccfd60b1461026f576101a9565b806301ffc9a7146101ae57806306fdde03146101d7578063081812fc146101ec578063095ea7b31461020c578063101b8d5d1461022157806318160ddd14610234575b600080fd5b6101c16101bc3660046121f3565b610396565b6040516101ce919061296e565b60405180910390f35b6101df6103c3565b6040516101ce9190612979565b6101ff6101fa3660046123b7565b610455565b6040516101ce919061291d565b61021f61021a3660046121ca565b6104a1565b005b61021f61022f3660046123b7565b610539565b61023c61059f565b6040516101ce9190612f1f565b61021f6102573660046120bb565b6105a5565b61023c61026a3660046121ca565b6105dd565b61021f610632565b61021f6102853660046120bb565b6106a4565b61023c6102983660046123b7565b6106bf565b61021f6102ab36600461222b565b61071a565b6101ff6102be3660046123b7565b610765565b61023c6102d1366004612068565b61079a565b61021f6107de565b61021f6102ec3660046121ca565b610829565b6101ff61088e565b61021f61030736600461222b565b61089d565b6101df6108e8565b61021f610322366004612194565b6108f7565b61021f6103353660046120f6565b6109c5565b6101df6103483660046123b7565b610a04565b6101ff610b5d565b6101df610b6c565b6101c161036b366004612089565b610b7b565b61021f61037e366004612068565b610ba9565b61021f610391366004612068565b610c17565b60006001600160e01b0319821663780e9d6360e01b14806103bb57506103bb82610c9e565b90505b919050565b6060600080546103d290613016565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe90613016565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b5050505050905090565b600061046082610cde565b6104855760405162461bcd60e51b815260040161047c90612d77565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006104ac82610765565b9050806001600160a01b0316836001600160a01b031614156104e05760405162461bcd60e51b815260040161047c90612e41565b806001600160a01b03166104f2610cfb565b6001600160a01b0316148061050e575061050e8161036b610cfb565b61052a5760405162461bcd60e51b815260040161047c90612bec565b6105348383610cff565b505050565b610541610cfb565b600b546001600160a01b0390811691161461056e5760405162461bcd60e51b815260040161047c90612c49565b61057781610cde565b6105935760405162461bcd60e51b815260040161047c90612acc565b61059c81610d6d565b50565b60085490565b6105b66105b0610cfb565b82610e14565b6105d25760405162461bcd60e51b815260040161047c90612e82565b610534838383610e99565b60006105e88361079a565b82106106065760405162461bcd60e51b815260040161047c906129b2565b506001600160a01b03821660009081526006602090815260408083208484529091529020545b92915050565b61063a610cfb565b6001600160a01b031661064b61088e565b6001600160a01b0316146106715760405162461bcd60e51b815260040161047c90612dc3565b6040514790339082156108fc029083906000818181858888f193505050501580156106a0573d6000803e3d6000fd5b5050565b610534838383604051806020016040528060008152506109c5565b60006106c961059f565b82106106e75760405162461bcd60e51b815260040161047c90612ed3565b6008828154811061070857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610722610cfb565b6001600160a01b031661073361088e565b6001600160a01b0316146107595760405162461bcd60e51b815260040161047c90612dc3565b610534600d8383611f19565b6000818152600260205260408120546001600160a01b0316806103bb5760405162461bcd60e51b815260040161047c90612cca565b60006001600160a01b0382166107c25760405162461bcd60e51b815260040161047c90612c80565b506001600160a01b031660009081526003602052604090205490565b6107e6610cfb565b6001600160a01b03166107f761088e565b6001600160a01b03161461081d5760405162461bcd60e51b815260040161047c90612dc3565b6108276000610fc6565b565b610831610cfb565b600b546001600160a01b0390811691161461085e5760405162461bcd60e51b815260040161047c90612c49565b61086781610cde565b156108845760405162461bcd60e51b815260040161047c90612d13565b6106a08282611018565b600a546001600160a01b031690565b6108a5610cfb565b6001600160a01b03166108b661088e565b6001600160a01b0316146108dc5760405162461bcd60e51b815260040161047c90612dc3565b610534600c8383611f19565b6060600180546103d290613016565b6108ff610cfb565b6001600160a01b0316826001600160a01b031614156109305760405162461bcd60e51b815260040161047c90612b3b565b806005600061093d610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610981610cfb565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109b9919061296e565b60405180910390a35050565b6109d66109d0610cfb565b83610e14565b6109f25760405162461bcd60e51b815260040161047c90612e82565b6109fe84848484611032565b50505050565b6060610a0f82610cde565b610a2b5760405162461bcd60e51b815260040161047c90612b72565b600b546040516383015eb360e01b81526000916001600160a01b0316906383015eb390610a5c908690600401612f1f565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac91906124a3565b90508060ff1660011415610ac657610ac383611065565b91505b8060ff1660021415610ade57610adb836114aa565b91505b8060ff1660031415610af657610af3836114aa565b91505b6000610b32610b0485611533565b610b0d8561164e565b604051602001610b1e9291906126e2565b60405160208183030381529060405261164e565b905080604051602001610b4591906127d0565b60405160208183030381529060405292505050919050565b600b546001600160a01b031681565b6060600c80546103d290613016565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610bb1610cfb565b6001600160a01b0316610bc261088e565b6001600160a01b031614610be85760405162461bcd60e51b815260040161047c90612dc3565b6001600160a01b038116610c0e5760405162461bcd60e51b815260040161047c90612a4f565b61059c81610fc6565b610c1f610cfb565b6001600160a01b0316610c3061088e565b6001600160a01b031614610c565760405162461bcd60e51b815260040161047c90612dc3565b6001600160a01b038116610c7c5760405162461bcd60e51b815260040161047c9061298c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480610ccf57506001600160e01b03198216635b5e139f60e01b145b806103bb57506103bb826117c2565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d3482610765565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d7882610765565b9050610d86816000846117db565b610d91600083610cff565b6001600160a01b0381166000908152600360205260408120805460019290610dba908490612fd3565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000610e1f82610cde565b610e3b5760405162461bcd60e51b815260040161047c90612ba0565b6000610e4683610765565b9050806001600160a01b0316846001600160a01b03161480610e815750836001600160a01b0316610e7684610455565b6001600160a01b0316145b80610e915750610e918185610b7b565b949350505050565b826001600160a01b0316610eac82610765565b6001600160a01b031614610ed25760405162461bcd60e51b815260040161047c90612df8565b6001600160a01b038216610ef85760405162461bcd60e51b815260040161047c90612af7565b610f038383836117db565b610f0e600082610cff565b6001600160a01b0383166000908152600360205260408120805460019290610f37908490612fd3565b90915550506001600160a01b0382166000908152600360205260408120805460019290610f65908490612f88565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106a0828260405180602001604052806000815250611864565b61103d848484610e99565b61104984848484611897565b6109fe5760405162461bcd60e51b815260040161047c906129fd565b600b5460405163dfe7f7e760e01b8152606091600091829182916001600160a01b039091169063dfe7f7e79061109f908890600401612f1f565b60006040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f391908101906123cf565b9350935093505060008251600261110a9190612fb4565b611115906003612f88565b67ffffffffffffffff81111561113b57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561116e57816020015b60608152602001906001900390816111595790505b50905060405180610120016040528060fe81526020016130e760fe9139816000815181106111ac57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526001601460005b85518110156112b1576111d2826014612f88565b91506112058682815181106111f757634e487b7160e01b600052603260045260246000fd5b6020026020010151826119b2565b84848151811061122557634e487b7160e01b600052603260045260246000fd5b602090810291909101015261123b836001612f88565b925061124682611533565b6040516020016112569190612815565b60405160208183030381529060405284848151811061128557634e487b7160e01b600052603260045260246000fd5b6020026020010181905250828061129b90613051565b93505080806112a990613051565b9150506111be565b506112c18463ffffffff16611533565b6040516020016112d191906128de565b60405160208183030381529060405283838151811061130057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152611316826001612f88565b91506040518060400160405280600d81526020016c1e17ba32bc3a1f1e17b9bb339f60991b81525083838151811061135e57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250600060405180602001604052806000815250905060005b845181101561149d5761139460028261306c565b61141957818582815181106113b957634e487b7160e01b600052603260045260246000fd5b6020026020010151868360016113cf9190612f88565b815181106113ed57634e487b7160e01b600052603260045260246000fd5b602002602001015160405160200161140793929190612518565b60405160208183030381529060405291505b611424816002612f88565b9050600185516114349190612fd3565b81141561148b578185828151811061145c57634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016114759291906124e9565b604051602081830303815290604052915061149d565b845181106114985761149d565b611380565b5098975050505050505050565b60606114b4611f9d565b60405180610120016040528060fe81526020016130e760fe913981526114db8360006119b2565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b8184015281850181905284519351915161151c949301612518565b604051602081830303815290604052915050919050565b60608161155857506040805180820190915260018152600360fc1b60208201526103be565b8160005b8115611582578061156c81613051565b915061157b9050600a83612fa0565b915061155c565b60008167ffffffffffffffff8111156115ab57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115d5576020820181803683370190505b5090505b8415610e91576115ea600183612fd3565b91506115f7600a8661306c565b611602906030612f88565b60f81b81838151811061162557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611647600a86612fa0565b94506115d9565b80516060908061166e5750506040805160208101909152600081526103be565b6000600361167d836002612f88565b6116879190612fa0565b611692906004612fb4565b905060006116a1826020612f88565b67ffffffffffffffff8111156116c757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116f1576020820181803683370190505b50905060006040518060600160405280604081526020016131e5604091399050600181016020830160005b8681101561177d576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161171c565b50600386066001811461179757600281146117a8576117b4565b613d3d60f01b6001198301526117b4565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b6117e6838383610534565b6001600160a01b038316611802576117fd81611c36565b611825565b816001600160a01b0316836001600160a01b031614611825576118258382611c7a565b6001600160a01b0382166118415761183c81611d17565b610534565b826001600160a01b0316826001600160a01b031614610534576105348282611df0565b61186e8383611e34565b61187b6000848484611897565b6105345760405162461bcd60e51b815260040161047c906129fd565b60006118ab846001600160a01b0316611f13565b156119a757836001600160a01b031663150b7a026118c7610cfb565b8786866040518563ffffffff1660e01b81526004016118e99493929190612931565b602060405180830381600087803b15801561190357600080fd5b505af1925050508015611933575060408051601f3d908101601f191682019092526119309181019061220f565b60015b61198d573d808015611961576040519150601f19603f3d011682016040523d82523d6000602084013e611966565b606091505b5080516119855760405162461bcd60e51b815260040161047c906129fd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e91565b506001949350505050565b600b546040516365f63c1b60e01b81526060916000916001600160a01b03909116906365f63c1b906119e8908790600401612f1f565b60006040518083038186803b158015611a0057600080fd5b505afa158015611a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a3c91908101906122cb565b8051909150611a7857611a518360ff16611533565b604051602001611a61919061255b565b60405160208183030381529060405291505061062c565b806020015160ff1660631415611aae57611a98816020015160ff16611533565b8160600151604051602001611a61929190612581565b8060e0015115611b1957611ac8816020015160ff16611533565b8160600151611add8360c0015160ff16611533565b611af08460a0015163ffffffff16611533565b604051602001611b03949392919061264f565b6040516020818303038152906040529150611b76565b611b29816020015160ff16611533565b8160600151611b3e8360c0015160ff16611533565b611b518460a0015163ffffffff16611533565b604051602001611b6494939291906125bd565b60405160208183030381529060405291505b600b5460408083015190516314a46ce560e31b81526000926001600160a01b03169163a523672891611bab9190600401612f28565b60006040518083038186803b158015611bc357600080fd5b505afa158015611bd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bff9190810190612298565b805190915015611c2e578083604051602001611c1c929190612873565b60405160208183030381529060405292505b505092915050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b60006001611c878461079a565b611c919190612fd3565b600083815260076020526040902054909150808214611ce4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d2990600190612fd3565b60008381526009602052604081205460088054939450909284908110611d5f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611d8e57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611dd457634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611dfb8361079a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e5a5760405162461bcd60e51b815260040161047c90612d42565b611e6381610cde565b15611e805760405162461bcd60e51b815260040161047c90612a95565b611e8c600083836117db565b6001600160a01b0382166000908152600360205260408120805460019290611eb5908490612f88565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611f2590613016565b90600052602060002090601f016020900481019282611f475760008555611f8d565b82601f10611f605782800160ff19823516178555611f8d565b82800160010185558215611f8d579182015b82811115611f8d578235825591602001919060010190611f72565b50611f99929150611fc4565b5090565b60405180606001604052806003905b6060815260200190600190039081611fac5790505090565b5b80821115611f995760008155600101611fc5565b80356001600160a01b03811681146103be57600080fd5b80516103be816130c2565b600082601f83011261200b578081fd5b815161201e61201982612f60565b612f36565b818152846020838601011115612032578283fd5b610e91826020830160208701612fea565b805163ffffffff811681146103be57600080fd5b805160ff811681146103be57600080fd5b600060208284031215612079578081fd5b61208282611fd9565b9392505050565b6000806040838503121561209b578081fd5b6120a483611fd9565b91506120b260208401611fd9565b90509250929050565b6000806000606084860312156120cf578081fd5b6120d884611fd9565b92506120e660208501611fd9565b9150604084013590509250925092565b6000806000806080858703121561210b578081fd5b61211485611fd9565b935061212260208601611fd9565b925060408501359150606085013567ffffffffffffffff811115612144578182fd5b8501601f81018713612154578182fd5b803561216261201982612f60565b818152886020838501011115612176578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156121a6578182fd5b6121af83611fd9565b915060208301356121bf816130c2565b809150509250929050565b600080604083850312156121dc578182fd5b6121e583611fd9565b946020939093013593505050565b600060208284031215612204578081fd5b8135612082816130d0565b600060208284031215612220578081fd5b8151612082816130d0565b6000806020838503121561223d578182fd5b823567ffffffffffffffff80821115612254578384fd5b818501915085601f830112612267578384fd5b813581811115612275578485fd5b866020828501011115612286578485fd5b60209290920196919550909350505050565b6000602082840312156122a9578081fd5b815167ffffffffffffffff8111156122bf578182fd5b610e9184828501611ffb565b6000602082840312156122dc578081fd5b815167ffffffffffffffff808211156122f3578283fd5b8184019150610120808387031215612309578384fd5b61231281612f36565b90508251815261232460208401612057565b602082015261233560408401612057565b604082015260608301518281111561234b578485fd5b61235787828601611ffb565b60608301525061236960808401612043565b608082015261237a60a08401612043565b60a082015261238b60c08401612057565b60c082015261239c60e08401611ff0565b60e08201526101009283015192810192909252509392505050565b6000602082840312156123c8578081fd5b5035919050565b600080600080608085870312156123e4578182fd5b8451935060206123f5818701612043565b9350604086015167ffffffffffffffff80821115612411578485fd5b818801915088601f830112612424578485fd5b815181811115612436576124366130ac565b8381029150612446848301612f36565b8181528481019084860184860187018d1015612460578889fd5b8895505b83861015612482578051835260019590950194918601918601612464565b5080975050505050505061249860608601612043565b905092959194509250565b6000602082840312156124b4578081fd5b61208282612057565b600081518084526124d5816020860160208601612fea565b601f01601f19169290920160200192915050565b600083516124fb818460208801612fea565b83519083019061250f818360208801612fea565b01949350505050565b6000845161252a818460208901612fea565b84519083019061253e818360208901612fea565b8451910190612551818360208801612fea565b0195945050505050565b6000825161256d818460208701612fea565b613a3f60f01b920191825250600201919050565b60008351612593818460208801612fea565b601d60f91b90830190815283516125b1816001840160208801612fea565b01600101949350505050565b600085516125cf818460208a01612fea565b601d60f91b90830190815285516125ed816001840160208a01612fea565b61282b60f01b600192909101918201528451612610816003840160208901612fea565b61295b60f01b600392909101918201528351612633816005840160208801612fea565b605d60f81b600592909101918201526006019695505050505050565b60008551612661818460208a01612fea565b601d60f91b908301908152855161267f816001840160208a01612fea565b61282b60f01b6001929091019182015284516126a2816003840160208901612fea565b6245295b60e81b6003929091019182015283516126c6816006840160208801612fea565b605d60f81b600692909101918201526007019695505050505050565b6e7b226e616d65223a2022426167202360881b8152825160009061270d81600f850160208801612fea565b7f222c20226465736372697074696f6e223a20225468652066697273742066756c600f918401918201527f6c79206175746f6e6f6d6f757320646563656e7472616c697a6564204e465420602f8201527f4d65746176657273652067616d652e222c2022696d616765223a202264617461604f820152750e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60521b606f82015283516127b5816085840160208801612fea565b61227d60f01b60859290910191820152608701949350505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161280881601d850160208701612fea565b91909101601d0192915050565b60007f3c2f746578743e3c7465787420783d2231302220793d220000000000000000008252825161284d816017850160208701612fea565b6e111031b630b9b99e913130b9b2911f60891b6017939091019283015250602601919050565b6e1e309039ba3cb6329e913334b6361d60891b8152825160009061289e81600f850160208801612fea565b621d911f60e91b600f9184019182015283516128c1816012840160208801612fea565b631e17b09f60e11b60129290910191820152601601949350505050565b60006b746f74616c506f7765723a5b60a01b8252825161290581600c850160208701612fea565b605d60f81b600c939091019283015250600d01919050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612964908301846124bd565b9695505050505050565b901515815260200190565b60006020825261208260208301846124bd565b6020808252600c908201526b1859191c881a5b9d985b1a5960a21b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601190820152701d1bdad95b9259081b9bdd08195e1a5cdd607a1b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252601b908201527f63616c6c6572206973206e6f742074686520657665724c696768740000000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260159082015274746f6b656e496420657869737420616c726561647960581b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f5857612f586130ac565b604052919050565b600067ffffffffffffffff821115612f7a57612f7a6130ac565b50601f01601f191660200190565b60008219821115612f9b57612f9b613080565b500190565b600082612faf57612faf613096565b500490565b6000816000190483118215151615612fce57612fce613080565b500290565b600082821015612fe557612fe5613080565b500390565b60005b83811015613005578181015183820152602001612fed565b838111156109fe5750506000910152565b60028104600182168061302a57607f821691505b6020821081141561304b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561306557613065613080565b5060010190565b60008261307b5761307b613096565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461059c57600080fd5b6001600160e01b03198116811461059c57600080fdfe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d203c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122006496738c0ddd7d8512c9d6a2b9aa0a55deb9e43d1a0f8a81467a915e34c360864736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e457665724c6967687420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004454c575400000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): EverLight Club
Arg [1] : symbol (string): ELWT
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [3] : 457665724c6967687420436c7562000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 454c575400000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51196:5597:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44686:224;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32624:100;;;:::i;:::-;;;;;;;:::i;34183:221::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33706:411::-;;;;;;:::i;:::-;;:::i;:::-;;51820:137;;;;;;:::i;:::-;;:::i;45326:113::-;;;:::i;:::-;;;;;;;:::i;35073:339::-;;;;;;:::i;:::-;;:::i;44994:256::-;;;;;;:::i;:::-;;:::i;51963:137::-;;;:::i;35483:185::-;;;;;;:::i;:::-;;:::i;45516:233::-;;;;;;:::i;:::-;;:::i;52417:92::-;;;;;;:::i;:::-;;:::i;32318:239::-;;;;;;:::i;:::-;;:::i;32048:208::-;;;;;;:::i;:::-;;:::i;16334:94::-;;;:::i;51646:168::-;;;;;;:::i;:::-;;:::i;15683:87::-;;;:::i;52316:95::-;;;;;;:::i;:::-;;:::i;32793:104::-;;;:::i;34476:295::-;;;;;;:::i;:::-;;:::i;35739:328::-;;;;;;:::i;:::-;;:::i;52612:893::-;;;;;;:::i;:::-;;:::i;51283:35::-;;;:::i;52515:91::-;;;:::i;34842:164::-;;;;;;:::i;:::-;;:::i;16583:192::-;;;;;;:::i;:::-;;:::i;52106:204::-;;;;;;:::i;:::-;;:::i;44686:224::-;44788:4;-1:-1:-1;;;;;;44812:50:0;;-1:-1:-1;;;44812:50:0;;:90;;;44866:36;44890:11;44866:23;:36::i;:::-;44805:97;;44686:224;;;;:::o;32624:100::-;32678:13;32711:5;32704:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32624:100;:::o;34183:221::-;34259:7;34287:16;34295:7;34287;:16::i;:::-;34279:73;;;;-1:-1:-1;;;34279:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;34372:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34372:24:0;;34183:221::o;33706:411::-;33787:13;33803:23;33818:7;33803:14;:23::i;:::-;33787:39;;33851:5;-1:-1:-1;;;;;33845:11:0;:2;-1:-1:-1;;;;;33845:11:0;;;33837:57;;;;-1:-1:-1;;;33837:57:0;;;;;;;:::i;:::-;33945:5;-1:-1:-1;;;;;33929:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;33929:21:0;;:62;;;;33954:37;33971:5;33978:12;:10;:12::i;33954:37::-;33907:168;;;;-1:-1:-1;;;33907:168:0;;;;;;;:::i;:::-;34088:21;34097:2;34101:7;34088:8;:21::i;:::-;33706:411;;;:::o;51820:137::-;51492:12;:10;:12::i;:::-;51470:17;;-1:-1:-1;;;;;51470:17:0;;;51462:42;;;51454:82;;;;-1:-1:-1;;;51454:82:0;;;;;;;:::i;:::-;51891:16:::1;51899:7;51891;:16::i;:::-;51883:46;;;;-1:-1:-1::0;;;51883:46:0::1;;;;;;;:::i;:::-;51937:14;51943:7;51937:5;:14::i;:::-;51820:137:::0;:::o;45326:113::-;45414:10;:17;45326:113;:::o;35073:339::-;35268:41;35287:12;:10;:12::i;:::-;35301:7;35268:18;:41::i;:::-;35260:103;;;;-1:-1:-1;;;35260:103:0;;;;;;;:::i;:::-;35376:28;35386:4;35392:2;35396:7;35376:9;:28::i;44994:256::-;45091:7;45127:23;45144:5;45127:16;:23::i;:::-;45119:5;:31;45111:87;;;;-1:-1:-1;;;45111:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;45216:19:0;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;44994:256;;;;;:::o;51963:137::-;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;52057:37:::1;::::0;52027:21:::1;::::0;52065:10:::1;::::0;52057:37;::::1;;;::::0;52027:21;;52009:15:::1;52057:37:::0;52009:15;52057:37;52027:21;52065:10;52057:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15974:1;51963:137::o:0;35483:185::-;35621:39;35638:4;35644:2;35648:7;35621:39;;;;;;;;;;;;:16;:39::i;45516:233::-;45591:7;45627:30;:28;:30::i;:::-;45619:5;:38;45611:95;;;;-1:-1:-1;;;45611:95:0;;;;;;;:::i;:::-;45724:10;45735:5;45724:17;;;;;;-1:-1:-1;;;45724:17:0;;;;;;;;;;;;;;;;;45717:24;;45516:233;;;:::o;52417:92::-;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;52484:19:::1;:13;52500:3:::0;;52484:19:::1;:::i;32318:239::-:0;32390:7;32426:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32426:16:0;32461:19;32453:73;;;;-1:-1:-1;;;32453:73:0;;;;;;;:::i;32048:208::-;32120:7;-1:-1:-1;;;;;32148:19:0;;32140:74;;;;-1:-1:-1;;;32140:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;32232:16:0;;;;;:9;:16;;;;;;;32048:208::o;16334:94::-;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;16399:21:::1;16417:1;16399:9;:21::i;:::-;16334:94::o:0;51646:168::-;51492:12;:10;:12::i;:::-;51470:17;;-1:-1:-1;;;;;51470:17:0;;;51462:42;;;51454:82;;;;-1:-1:-1;;;51454:82:0;;;;;;;:::i;:::-;51733:16:::1;51741:7;51733;:16::i;:::-;51732:17;51724:51;;;;-1:-1:-1::0;;;51724:51:0::1;;;;;;;:::i;:::-;51783:25;51793:5;51800:7;51783:9;:25::i;15683:87::-:0;15756:6;;-1:-1:-1;;;;;15756:6:0;15683:87;:::o;52316:95::-;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;52387:18:::1;:12;52402:3:::0;;52387:18:::1;:::i;32793:104::-:0;32849:13;32882:7;32875:14;;;;;:::i;34476:295::-;34591:12;:10;:12::i;:::-;-1:-1:-1;;;;;34579:24:0;:8;-1:-1:-1;;;;;34579:24:0;;;34571:62;;;;-1:-1:-1;;;34571:62:0;;;;;;;:::i;:::-;34691:8;34646:18;:32;34665:12;:10;:12::i;:::-;-1:-1:-1;;;;;34646:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;34646:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;34646:53:0;;;;;;;;;;;34730:12;:10;:12::i;:::-;-1:-1:-1;;;;;34715:48:0;;34754:8;34715:48;;;;;;:::i;:::-;;;;;;;;34476:295;;:::o;35739:328::-;35914:41;35933:12;:10;:12::i;:::-;35947:7;35914:18;:41::i;:::-;35906:103;;;;-1:-1:-1;;;35906:103:0;;;;;;;:::i;:::-;36020:39;36034:4;36040:2;36044:7;36053:5;36020:13;:39::i;:::-;35739:328;;;;:::o;52612:893::-;52685:20;52722:16;52730:7;52722;:16::i;:::-;52714:49;;;;-1:-1:-1;;;52714:49:0;;;;;;;:::i;:::-;52788:17;;:41;;-1:-1:-1;;;52788:41:0;;52770:15;;-1:-1:-1;;;;;52788:17:0;;:32;;:41;;52821:7;;52788:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52770:59;;52839:9;:14;;52852:1;52839:14;52836:90;;;52889:29;52910:7;52889:20;:29::i;:::-;52880:38;;52836:90;52935:9;:14;;52948:1;52935:14;52932:82;;;52981:25;52998:7;52981:16;:25::i;:::-;52972:34;;52932:82;53023:9;:14;;53036:1;53023:14;53020:102;;;53089:25;53106:7;53089:16;:25::i;:::-;53080:34;;53020:102;53136:18;53157:243;53220:18;:7;:16;:18::i;:::-;53362:28;53382:6;53362:13;:28::i;:::-;53184:213;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53157:13;:243::i;:::-;53136:264;;53473:4;53423:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;53407:72;;53486:13;;52612:893;;;:::o;51283:35::-;;;-1:-1:-1;;;;;51283:35:0;;:::o;52515:91::-;52559:13;52588:12;52581:19;;;;;:::i;34842:164::-;-1:-1:-1;;;;;34963:25:0;;;34939:4;34963:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34842:164::o;16583:192::-;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16672:22:0;::::1;16664:73;;;;-1:-1:-1::0;;;16664:73:0::1;;;;;;;:::i;:::-;16748:19;16758:8;16748:9;:19::i;52106:204::-:0;15914:12;:10;:12::i;:::-;-1:-1:-1;;;;;15903:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15903:23:0;;15895:68;;;;-1:-1:-1;;;15895:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52198:32:0;::::1;52190:57;;;;-1:-1:-1::0;;;52190:57:0::1;;;;;;;:::i;:::-;52254:17;:50:::0;;-1:-1:-1;;;;;;52254:50:0::1;-1:-1:-1::0;;;;;52254:50:0;;;::::1;::::0;;;::::1;::::0;;52106:204::o;31679:305::-;31781:4;-1:-1:-1;;;;;;31818:40:0;;-1:-1:-1;;;31818:40:0;;:105;;-1:-1:-1;;;;;;;31875:48:0;;-1:-1:-1;;;31875:48:0;31818:105;:158;;;;31940:36;31964:11;31940:23;:36::i;37577:127::-;37642:4;37666:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37666:16:0;:30;;;37577:127::o;4059:98::-;4139:10;4059:98;:::o;41559:174::-;41634:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;41634:29:0;-1:-1:-1;;;;;41634:29:0;;;;;;;;:24;;41688:23;41634:24;41688:14;:23::i;:::-;-1:-1:-1;;;;;41679:46:0;;;;;;;;;;;41559:174;;:::o;40166:360::-;40226:13;40242:23;40257:7;40242:14;:23::i;:::-;40226:39;;40278:48;40299:5;40314:1;40318:7;40278:20;:48::i;:::-;40367:29;40384:1;40388:7;40367:8;:29::i;:::-;-1:-1:-1;;;;;40409:16:0;;;;;;:9;:16;;;;;:21;;40429:1;;40409:16;:21;;40429:1;;40409:21;:::i;:::-;;;;-1:-1:-1;;40448:16:0;;;;:7;:16;;;;;;40441:23;;-1:-1:-1;;;;;;40441:23:0;;;40482:36;40456:7;;40448:16;-1:-1:-1;;;;;40482:36:0;;;;;40448:16;;40482:36;40166:360;;:::o;37871:348::-;37964:4;37989:16;37997:7;37989;:16::i;:::-;37981:73;;;;-1:-1:-1;;;37981:73:0;;;;;;;:::i;:::-;38065:13;38081:23;38096:7;38081:14;:23::i;:::-;38065:39;;38134:5;-1:-1:-1;;;;;38123:16:0;:7;-1:-1:-1;;;;;38123:16:0;;:51;;;;38167:7;-1:-1:-1;;;;;38143:31:0;:20;38155:7;38143:11;:20::i;:::-;-1:-1:-1;;;;;38143:31:0;;38123:51;:87;;;;38178:32;38195:5;38202:7;38178:16;:32::i;:::-;38115:96;37871:348;-1:-1:-1;;;;37871:348:0:o;40863:578::-;41022:4;-1:-1:-1;;;;;40995:31:0;:23;41010:7;40995:14;:23::i;:::-;-1:-1:-1;;;;;40995:31:0;;40987:85;;;;-1:-1:-1;;;40987:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41091:16:0;;41083:65;;;;-1:-1:-1;;;41083:65:0;;;;;;;:::i;:::-;41161:39;41182:4;41188:2;41192:7;41161:20;:39::i;:::-;41265:29;41282:1;41286:7;41265:8;:29::i;:::-;-1:-1:-1;;;;;41307:15:0;;;;;;:9;:15;;;;;:20;;41326:1;;41307:15;:20;;41326:1;;41307:20;:::i;:::-;;;;-1:-1:-1;;;;;;;41338:13:0;;;;;;:9;:13;;;;;:18;;41355:1;;41338:13;:18;;41355:1;;41338:18;:::i;:::-;;;;-1:-1:-1;;41367:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41367:21:0;-1:-1:-1;;;;;41367:21:0;;;;;;;;;41406:27;;41367:16;;41406:27;;;;;;;40863:578;;;:::o;16783:173::-;16858:6;;;-1:-1:-1;;;;;16875:17:0;;;-1:-1:-1;;;;;;16875:17:0;;;;;;;16908:40;;16858:6;;;16875:17;16858:6;;16908:40;;16839:16;;16908:40;16783:173;;:::o;38561:110::-;38637:26;38647:2;38651:7;38637:26;;;;;;;;;;;;:9;:26::i;36949:315::-;37106:28;37116:4;37122:2;37126:7;37106:9;:28::i;:::-;37153:48;37176:4;37182:2;37186:7;37195:5;37153:22;:48::i;:::-;37145:111;;;;-1:-1:-1;;;37145:111:0;;;;;;;:::i;53511:1549::-;53681:17;;:41;;-1:-1:-1;;;53681:41:0;;53581:13;;53612:18;;;;;;-1:-1:-1;;;;;53681:17:0;;;;:32;;:41;;53714:7;;53681:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53681:41:0;;;;;;;;;;;;:::i;:::-;53609:113;;;;;;;53729:21;53770:9;:16;53766:1;:20;;;;:::i;:::-;:24;;53789:1;53766:24;:::i;:::-;53753:38;;;;;;-1:-1:-1;;;53753:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53729:62;;53798:267;;;;;;;;;;;;;;;;;:5;53804:1;53798:8;;;;;;-1:-1:-1;;;53798:8:0;;;;;;;;;;;;;;;;;;:267;54094:1;54119:2;54078:13;54128:333;54148:9;:16;54144:1;:20;54128:333;;;54189:11;:6;54198:2;54189:11;:::i;:::-;54180:20;;54224:29;54230:9;54240:1;54230:12;;;;;;-1:-1:-1;;;54230:12:0;;;;;;;;;;;;;;;54250:1;54224:5;:29::i;:::-;54209:5;54215;54209:12;;;;;;-1:-1:-1;;;54209:12:0;;;;;;;;;;;;;;;;;;:44;54270:9;:5;54278:1;54270:9;:::i;:::-;54262:17;;54353;:6;:15;:17::i;:::-;54310:79;;;;;;;;:::i;:::-;;;;;;;;;;;;;54288:5;54294;54288:12;;;;;;-1:-1:-1;;;54288:12:0;;;;;;;;;;;;;;:102;;;;54446:7;;;;;:::i;:::-;;;;54166:3;;;;;:::i;:::-;;;;54128:333;;;;54522:30;54530:10;54522:19;;:28;:30::i;:::-;54489:69;;;;;;;;:::i;:::-;;;;;;;;;;;;;54467:5;54473;54467:12;;;;;;-1:-1:-1;;;54467:12:0;;;;;;;;;;;;;;;;;;:92;54574:9;:5;54582:1;54574:9;:::i;:::-;54566:17;;54590:30;;;;;;;;;;;;;-1:-1:-1;;;54590:30:0;;;:5;54596;54590:12;;;;;;-1:-1:-1;;;54590:12:0;;;;;;;;;;;;;;:30;;;;54629:20;:25;;;;;;;;;;;;;;54661:6;54678:357;54688:5;:12;54684:1;:16;54678:357;;;54719:5;54723:1;54719;:5;:::i;:::-;54716:115;;54791:6;54799:5;54805:1;54799:8;;;;;;-1:-1:-1;;;54799:8:0;;;;;;;;;;;;;;;54809:5;54815:1;54817;54815:3;;;;:::i;:::-;54809:10;;;;;;-1:-1:-1;;;54809:10:0;;;;;;;;;;;;;;;54774:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54758:63;;54716:115;54843:5;:1;54847;54843:5;:::i;:::-;54839:9;;54881:1;54866:5;:12;:16;;;;:::i;:::-;54860:1;:23;54857:115;;;54928:6;54936:5;54942:1;54936:8;;;;;;-1:-1:-1;;;54936:8:0;;;;;;;;;;;;;;;54911:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54895:51;;54957:5;;54857:115;54988:5;:12;54983:1;:17;54980:47;;55012:5;;54980:47;54678:357;;;-1:-1:-1;55048:6:0;53511:1549;-1:-1:-1;;;;;;;;53511:1549:0:o;55066:530::-;55132:13;55154:22;;:::i;:::-;55183:267;;;;;;;;;;;;;;;;;;;55468:17;55474:7;55189:1;55468:5;:17::i;:::-;55457:8;;;;:28;;;55492:26;;;;;;;;;;;-1:-1:-1;;;55492:26:0;;;;:8;;;:26;;;55560:8;;55570;;55543:46;;;;55560:8;55543:46;;:::i;:::-;;;;;;;;;;;;;55529:61;;;55066:530;;;:::o;19136:723::-;19192:13;19413:10;19409:53;;-1:-1:-1;19440:10:0;;;;;;;;;;;;-1:-1:-1;;;19440:10:0;;;;;;19409:53;19487:5;19472:12;19528:78;19535:9;;19528:78;;19561:8;;;;:::i;:::-;;-1:-1:-1;19584:10:0;;-1:-1:-1;19592:2:0;19584:10;;:::i;:::-;;;19528:78;;;19616:19;19648:6;19638:17;;;;;;-1:-1:-1;;;19638:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19638:17:0;;19616:39;;19666:154;19673:10;;19666:154;;19700:11;19710:1;19700:11;;:::i;:::-;;-1:-1:-1;19769:10:0;19777:2;19769:5;:10;:::i;:::-;19756:24;;:2;:24;:::i;:::-;19743:39;;19726:6;19733;19726:14;;;;;;-1:-1:-1;;;19726:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;19726:56:0;;;;;;;;-1:-1:-1;19797:11:0;19806:2;19797:11;;:::i;:::-;;;19666:154;;13104:1607;13202:11;;13162:13;;13228:8;13224:23;;-1:-1:-1;;13238:9:0;;;;;;;;;-1:-1:-1;13238:9:0;;;;13224:23;13299:18;13337:1;13326:7;:3;13332:1;13326:7;:::i;:::-;13325:13;;;;:::i;:::-;13320:19;;:1;:19;:::i;:::-;13299:40;-1:-1:-1;13397:19:0;13429:15;13299:40;13442:2;13429:15;:::i;:::-;13419:26;;;;;;-1:-1:-1;;;13419:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13419:26:0;;13397:48;;13458:18;13479:5;;;;;;;;;;;;;;;;;13458:26;;13548:1;13541:5;13537:13;13593:2;13585:6;13581:15;13644:1;13612:777;13667:3;13664:1;13661:10;13612:777;;;13722:1;13765:12;;;;;13759:19;13860:4;13848:2;13844:14;;;;;13826:40;;13820:47;13969:2;13965:14;;;13961:25;;13947:40;;13941:47;14098:1;14094:13;;;14090:24;;14076:39;;14070:46;14218:16;;;;14204:31;;14198:38;13896:1;13892:11;;;13990:4;13937:58;;;13928:68;14021:11;;14066:57;;;14057:67;;;;14149:11;;14194:49;;14185:59;14273:3;14269:13;14302:22;;14372:1;14357:17;;;;13715:9;13612:777;;;13616:44;14421:1;14416:3;14412:11;14442:1;14437:84;;;;14540:1;14535:82;;;;14405:212;;14437:84;-1:-1:-1;;;;;14470:17:0;;14463:43;14437:84;;14535:82;-1:-1:-1;;;;;14568:17:0;;14561:41;14405:212;-1:-1:-1;;;14633:26:0;;;;13104:1607;-1:-1:-1;;;;13104:1607:0:o;18687:157::-;-1:-1:-1;;;;;;18796:40:0;;-1:-1:-1;;;18796:40:0;18687:157;;;:::o;46362:589::-;46506:45;46533:4;46539:2;46543:7;46506:26;:45::i;:::-;-1:-1:-1;;;;;46568:18:0;;46564:187;;46603:40;46635:7;46603:31;:40::i;:::-;46564:187;;;46673:2;-1:-1:-1;;;;;46665:10:0;:4;-1:-1:-1;;;;;46665:10:0;;46661:90;;46692:47;46725:4;46731:7;46692:32;:47::i;:::-;-1:-1:-1;;;;;46765:16:0;;46761:183;;46798:45;46835:7;46798:36;:45::i;:::-;46761:183;;;46871:4;-1:-1:-1;;;;;46865:10:0;:2;-1:-1:-1;;;;;46865:10:0;;46861:83;;46892:40;46920:2;46924:7;46892:27;:40::i;38898:321::-;39028:18;39034:2;39038:7;39028:5;:18::i;:::-;39079:54;39110:1;39114:2;39118:7;39127:5;39079:22;:54::i;:::-;39057:154;;;;-1:-1:-1;;;39057:154:0;;;;;;;:::i;42298:803::-;42453:4;42474:15;:2;-1:-1:-1;;;;;42474:13:0;;:15::i;:::-;42470:624;;;42526:2;-1:-1:-1;;;;;42510:36:0;;42547:12;:10;:12::i;:::-;42561:4;42567:7;42576:5;42510:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42510:72:0;;;;;;;;-1:-1:-1;;42510:72:0;;;;;;;;;;;;:::i;:::-;;;42506:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42756:13:0;;42752:272;;42799:60;;-1:-1:-1;;;42799:60:0;;;;;;;:::i;42752:272::-;42974:6;42968:13;42959:6;42955:2;42951:15;42944:38;42506:533;-1:-1:-1;;;;;;42633:55:0;-1:-1:-1;;;42633:55:0;;-1:-1:-1;42626:62:0;;42470:624;-1:-1:-1;43078:4:0;42298:803;;;;;;:::o;55602:1186::-;55744:17;;:37;;-1:-1:-1;;;55744:37:0;;55673:20;;55702:39;;-1:-1:-1;;;;;55744:17:0;;;;:28;;:37;;55773:7;;55744:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55744:37:0;;;;;;;;;;;;:::i;:::-;55791:18;;55702:79;;-1:-1:-1;55788:135:0;;55857:28;55865:8;55857:17;;:26;:28::i;:::-;55840:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;55824:69;;55902:13;;;55788:135;55932:9;:19;;;:25;;55955:2;55932:25;55929:164;;;56000:39;56008:9;:19;;;56000:28;;:37;:39::i;:::-;56046:9;:15;;;55983:79;;;;;;;;;:::i;55929:164::-;56102:9;:21;;;56099:445;;;56167:39;56175:9;:19;;;56167:28;;:37;:39::i;:::-;56213:9;:15;;;56236:36;56244:9;:16;;;56236:25;;:34;:36::i;:::-;56281;56289:9;:16;;;56281:25;;:34;:36::i;:::-;56150:173;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56134:190;;56099:445;;;56380:39;56388:9;:19;;;56380:28;;:37;:39::i;:::-;56426:9;:15;;;56449:36;56457:9;:16;;;56449:25;;:34;:36::i;:::-;56493;56501:9;:16;;;56493:25;;:34;:36::i;:::-;56363:172;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56347:189;;56099:445;56578:17;;56613:15;;;;;56578:51;;-1:-1:-1;;;56578:51:0;;56556:19;;-1:-1:-1;;;;;56578:17:0;;:34;;:51;;56613:15;56578:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56578:51:0;;;;;;;;;;;;:::i;:::-;56639:19;;56556:73;;-1:-1:-1;56639:23:0;56636:127;;56725:5;56739:6;56689:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56673:82;;56636:127;56769:13;;55602:1186;;;;:::o;47674:164::-;47778:10;:17;;47751:24;;;;:15;:24;;;;;:44;;;47806:24;;;;;;;;;;;;47674:164::o;48465:988::-;48731:22;48781:1;48756:22;48773:4;48756:16;:22::i;:::-;:26;;;;:::i;:::-;48793:18;48814:26;;;:17;:26;;;;;;48731:51;;-1:-1:-1;48947:28:0;;;48943:328;;-1:-1:-1;;;;;49014:18:0;;48992:19;49014:18;;;:12;:18;;;;;;;;:34;;;;;;;;;49065:30;;;;;;:44;;;49182:30;;:17;:30;;;;;:43;;;48943:328;-1:-1:-1;49367:26:0;;;;:17;:26;;;;;;;;49360:33;;;-1:-1:-1;;;;;49411:18:0;;;;;:12;:18;;;;;:34;;;;;;;49404:41;48465:988::o;49748:1079::-;50026:10;:17;50001:22;;50026:21;;50046:1;;50026:21;:::i;:::-;50058:18;50079:24;;;:15;:24;;;;;;50452:10;:26;;50001:46;;-1:-1:-1;50079:24:0;;50001:46;;50452:26;;;;-1:-1:-1;;;50452:26:0;;;;;;;;;;;;;;;;;50430:48;;50516:11;50491:10;50502;50491:22;;;;;;-1:-1:-1;;;50491:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;50596:28;;;:15;:28;;;;;;;:41;;;50768:24;;;;;50761:31;50803:10;:16;;;;;-1:-1:-1;;;50803:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;49748:1079;;;;:::o;47252:221::-;47337:14;47354:20;47371:2;47354:16;:20::i;:::-;-1:-1:-1;;;;;47385:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;47430:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;47252:221:0:o;39555:382::-;-1:-1:-1;;;;;39635:16:0;;39627:61;;;;-1:-1:-1;;;39627:61:0;;;;;;;:::i;:::-;39708:16;39716:7;39708;:16::i;:::-;39707:17;39699:58;;;;-1:-1:-1;;;39699:58:0;;;;;;;:::i;:::-;39770:45;39799:1;39803:2;39807:7;39770:20;:45::i;:::-;-1:-1:-1;;;;;39828:13:0;;;;;;:9;:13;;;;;:18;;39845:1;;39828:13;:18;;39845:1;;39828:18;:::i;:::-;;;;-1:-1:-1;;39857:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39857:21:0;-1:-1:-1;;;;;39857:21:0;;;;;;;;39896:33;;39857:16;;;39896:33;;39857:16;;39896:33;39555:382;;:::o;21637:387::-;21960:20;22008:8;;;21637:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:136;272:13;;294:30;272:13;294:30;:::i;335:448::-;;444:3;437:4;429:6;425:17;421:27;411:2;;466:5;459;452:20;411:2;499:6;493:13;530:49;545:33;575:2;545:33;:::i;:::-;530:49;:::i;:::-;604:2;595:7;588:19;650:3;643:4;638:2;630:6;626:15;622:26;619:35;616:2;;;671:5;664;657:20;616:2;688:64;749:2;742:4;733:7;729:18;722:4;714:6;710:17;688:64;:::i;788:169::-;868:13;;921:10;910:22;;900:33;;890:2;;947:1;944;937:12;962:162;1041:13;;1094:4;1083:16;;1073:27;;1063:2;;1114:1;1111;1104:12;1129:198;;1241:2;1229:9;1220:7;1216:23;1212:32;1209:2;;;1262:6;1254;1247:22;1209:2;1290:31;1311:9;1290:31;:::i;:::-;1280:41;1199:128;-1:-1:-1;;;1199:128:1:o;1332:274::-;;;1461:2;1449:9;1440:7;1436:23;1432:32;1429:2;;;1482:6;1474;1467:22;1429:2;1510:31;1531:9;1510:31;:::i;:::-;1500:41;;1560:40;1596:2;1585:9;1581:18;1560:40;:::i;:::-;1550:50;;1419:187;;;;;:::o;1611:342::-;;;;1757:2;1745:9;1736:7;1732:23;1728:32;1725:2;;;1778:6;1770;1763:22;1725:2;1806:31;1827:9;1806:31;:::i;:::-;1796:41;;1856:40;1892:2;1881:9;1877:18;1856:40;:::i;:::-;1846:50;;1943:2;1932:9;1928:18;1915:32;1905:42;;1715:238;;;;;:::o;1958:938::-;;;;;2130:3;2118:9;2109:7;2105:23;2101:33;2098:2;;;2152:6;2144;2137:22;2098:2;2180:31;2201:9;2180:31;:::i;:::-;2170:41;;2230:40;2266:2;2255:9;2251:18;2230:40;:::i;:::-;2220:50;;2317:2;2306:9;2302:18;2289:32;2279:42;;2372:2;2361:9;2357:18;2344:32;2399:18;2391:6;2388:30;2385:2;;;2436:6;2428;2421:22;2385:2;2464:22;;2517:4;2509:13;;2505:27;-1:-1:-1;2495:2:1;;2551:6;2543;2536:22;2495:2;2592;2579:16;2617:49;2632:33;2662:2;2632:33;:::i;2617:49::-;2689:2;2682:5;2675:17;2729:7;2724:2;2719;2715;2711:11;2707:20;2704:33;2701:2;;;2755:6;2747;2740:22;2701:2;2815;2810;2806;2802:11;2797:2;2790:5;2786:14;2773:45;2838:14;;;2854:2;2834:23;2827:39;;;;-1:-1:-1;2088:808:1;;;;-1:-1:-1;2088:808:1;-1:-1:-1;2088:808:1:o;2901:329::-;;;3027:2;3015:9;3006:7;3002:23;2998:32;2995:2;;;3048:6;3040;3033:22;2995:2;3076:31;3097:9;3076:31;:::i;:::-;3066:41;;3157:2;3146:9;3142:18;3129:32;3170:30;3194:5;3170:30;:::i;:::-;3219:5;3209:15;;;2985:245;;;;;:::o;3235:266::-;;;3364:2;3352:9;3343:7;3339:23;3335:32;3332:2;;;3385:6;3377;3370:22;3332:2;3413:31;3434:9;3413:31;:::i;:::-;3403:41;3491:2;3476:18;;;;3463:32;;-1:-1:-1;;;3322:179:1:o;3506:257::-;;3617:2;3605:9;3596:7;3592:23;3588:32;3585:2;;;3638:6;3630;3623:22;3585:2;3682:9;3669:23;3701:32;3727:5;3701:32;:::i;3768:261::-;;3890:2;3878:9;3869:7;3865:23;3861:32;3858:2;;;3911:6;3903;3896:22;3858:2;3948:9;3942:16;3967:32;3993:5;3967:32;:::i;4034:642::-;;;4166:2;4154:9;4145:7;4141:23;4137:32;4134:2;;;4187:6;4179;4172:22;4134:2;4232:9;4219:23;4261:18;4302:2;4294:6;4291:14;4288:2;;;4323:6;4315;4308:22;4288:2;4366:6;4355:9;4351:22;4341:32;;4411:7;4404:4;4400:2;4396:13;4392:27;4382:2;;4438:6;4430;4423:22;4382:2;4483;4470:16;4509:2;4501:6;4498:14;4495:2;;;4530:6;4522;4515:22;4495:2;4580:7;4575:2;4566:6;4562:2;4558:15;4554:24;4551:37;4548:2;;;4606:6;4598;4591:22;4548:2;4642;4634:11;;;;;4664:6;;-1:-1:-1;4124:552:1;;-1:-1:-1;;;;4124:552:1:o;4681:359::-;;4814:2;4802:9;4793:7;4789:23;4785:32;4782:2;;;4835:6;4827;4820:22;4782:2;4873:9;4867:16;4906:18;4898:6;4895:30;4892:2;;;4943:6;4935;4928:22;4892:2;4971:63;5026:7;5017:6;5006:9;5002:22;4971:63;:::i;5045:1261::-;;5193:2;5181:9;5172:7;5168:23;5164:32;5161:2;;;5214:6;5206;5199:22;5161:2;5252:9;5246:16;5281:18;5322:2;5314:6;5311:14;5308:2;;;5343:6;5335;5328:22;5308:2;5386:6;5375:9;5371:22;5361:32;;5412:6;5452:2;5447;5438:7;5434:16;5430:25;5427:2;;;5473:6;5465;5458:22;5427:2;5504:18;5519:2;5504:18;:::i;:::-;5491:31;;5551:2;5545:9;5538:5;5531:24;5587:42;5625:2;5621;5617:11;5587:42;:::i;:::-;5582:2;5575:5;5571:14;5564:66;5662:42;5700:2;5696;5692:11;5662:42;:::i;:::-;5657:2;5650:5;5646:14;5639:66;5744:2;5740;5736:11;5730:18;5773:2;5763:8;5760:16;5757:2;;;5794:6;5786;5779:22;5757:2;5835:58;5885:7;5874:8;5870:2;5866:17;5835:58;:::i;:::-;5830:2;5823:5;5819:14;5812:82;;5927:44;5966:3;5962:2;5958:12;5927:44;:::i;:::-;5921:3;5914:5;5910:15;5903:69;6005:44;6044:3;6040:2;6036:12;6005:44;:::i;:::-;5999:3;5992:5;5988:15;5981:69;6083:43;6121:3;6117:2;6113:12;6083:43;:::i;:::-;6077:3;6070:5;6066:15;6059:68;6160:42;6197:3;6193:2;6189:12;6160:42;:::i;:::-;6154:3;6143:15;;6136:67;6222:3;6263:11;;;6257:18;6241:14;;;6234:42;;;;-1:-1:-1;6147:5:1;5151:1155;-1:-1:-1;;;5151:1155:1:o;6311:190::-;;6423:2;6411:9;6402:7;6398:23;6394:32;6391:2;;;6444:6;6436;6429:22;6391:2;-1:-1:-1;6472:23:1;;6381:120;-1:-1:-1;6381:120:1:o;6506:1224::-;;;;;6703:3;6691:9;6682:7;6678:23;6674:33;6671:2;;;6725:6;6717;6710:22;6671:2;6759:9;6753:16;6743:26;;6788:2;6809:50;6855:2;6844:9;6840:18;6809:50;:::i;:::-;6799:60;;6903:2;6892:9;6888:18;6882:25;6926:18;6967:2;6959:6;6956:14;6953:2;;;6988:6;6980;6973:22;6953:2;7031:6;7020:9;7016:22;7006:32;;7076:7;7069:4;7065:2;7061:13;7057:27;7047:2;;7103:6;7095;7088:22;7047:2;7137;7131:9;7159:2;7155;7152:10;7149:2;;;7165:18;;:::i;:::-;7212:2;7208;7204:11;7194:21;;7235:27;7258:2;7254;7250:11;7235:27;:::i;:::-;7296:15;;;7327:12;;;;7359:11;;;7389;;;7385:20;;7382:33;-1:-1:-1;7379:2:1;;;7433:6;7425;7418:22;7379:2;7460:6;7451:15;;7475:156;7489:2;7486:1;7483:9;7475:156;;;7546:10;;7534:23;;7507:1;7500:9;;;;;7577:12;;;;7609;;7475:156;;;7479:3;7650:5;7640:15;;;;;;;;7674:50;7720:2;7709:9;7705:18;7674:50;:::i;:::-;7664:60;;6661:1069;;;;;;;:::o;7735:216::-;;7856:2;7844:9;7835:7;7831:23;7827:32;7824:2;;;7877:6;7869;7862:22;7824:2;7905:40;7935:9;7905:40;:::i;7956:259::-;;8037:5;8031:12;8064:6;8059:3;8052:19;8080:63;8136:6;8129:4;8124:3;8120:14;8113:4;8106:5;8102:16;8080:63;:::i;:::-;8197:2;8176:15;-1:-1:-1;;8172:29:1;8163:39;;;;8204:4;8159:50;;8007:208;-1:-1:-1;;8007:208:1:o;8220:470::-;;8437:6;8431:13;8453:53;8499:6;8494:3;8487:4;8479:6;8475:17;8453:53;:::i;:::-;8569:13;;8528:16;;;;8591:57;8569:13;8528:16;8625:4;8613:17;;8591:57;:::i;:::-;8664:20;;8407:283;-1:-1:-1;;;;8407:283:1:o;8695:664::-;;8960:6;8954:13;8976:53;9022:6;9017:3;9010:4;9002:6;8998:17;8976:53;:::i;:::-;9092:13;;9051:16;;;;9114:57;9092:13;9051:16;9148:4;9136:17;;9114:57;:::i;:::-;9238:13;;9193:20;;;9260:57;9238:13;9193:20;9294:4;9282:17;;9260:57;:::i;:::-;9333:20;;8930:429;-1:-1:-1;;;;;8930:429:1:o;9364:440::-;;9634:6;9628:13;9650:53;9696:6;9691:3;9684:4;9676:6;9672:17;9650:53;:::i;:::-;-1:-1:-1;;;9725:16:1;;9750:19;;;-1:-1:-1;9796:1:1;9785:13;;9604:200;-1:-1:-1;9604:200:1:o;9809:614::-;;10127:6;10121:13;10143:53;10189:6;10184:3;10177:4;10169:6;10165:17;10143:53;:::i;:::-;-1:-1:-1;;;10218:16:1;;;10243:18;;;10286:13;;10308:65;10286:13;10360:1;10349:13;;10342:4;10330:17;;10308:65;:::i;:::-;10393:20;10415:1;10389:28;;10097:326;-1:-1:-1;;;;10097:326:1:o;10428:1422::-;;11145:6;11139:13;11161:53;11207:6;11202:3;11195:4;11187:6;11183:17;11161:53;:::i;:::-;-1:-1:-1;;;11236:16:1;;;11261:18;;;11304:13;;11326:65;11304:13;11378:1;11367:13;;11360:4;11348:17;;11326:65;:::i;:::-;-1:-1:-1;;;11454:1:1;11410:20;;;;11446:10;;;11439:24;11488:13;;11510:62;11488:13;11559:1;11551:10;;11544:4;11532:17;;11510:62;:::i;:::-;-1:-1:-1;;;11632:1:1;11591:17;;;;11624:10;;;11617:24;11666:13;;11688:62;11666:13;11737:1;11729:10;;11722:4;11710:17;;11688:62;:::i;:::-;-1:-1:-1;;;11810:1:1;11769:17;;;;11802:10;;;11795:23;11842:1;11834:10;;11115:735;-1:-1:-1;;;;;;11115:735:1:o;11855:1423::-;;12572:6;12566:13;12588:53;12634:6;12629:3;12622:4;12614:6;12610:17;12588:53;:::i;:::-;-1:-1:-1;;;12663:16:1;;;12688:18;;;12731:13;;12753:65;12731:13;12805:1;12794:13;;12787:4;12775:17;;12753:65;:::i;:::-;-1:-1:-1;;;12881:1:1;12837:20;;;;12873:10;;;12866:24;12915:13;;12937:62;12915:13;12986:1;12978:10;;12971:4;12959:17;;12937:62;:::i;:::-;-1:-1:-1;;;13059:1:1;13018:17;;;;13051:10;;;13044:25;13094:13;;13116:62;13094:13;13165:1;13157:10;;13150:4;13138:17;;13116:62;:::i;:::-;-1:-1:-1;;;13238:1:1;13197:17;;;;13230:10;;;13223:23;13270:1;13262:10;;12542:736;-1:-1:-1;;;;;;12542:736:1:o;13283:1234::-;-1:-1:-1;;;13783:55:1;;13861:13;;13283:1234;;13883:62;13861:13;13933:2;13924:12;;13917:4;13905:17;;13883:62;:::i;:::-;14009:66;14004:2;13964:16;;;13996:11;;;13989:87;14105:34;14100:2;14092:11;;14085:55;14169:66;14164:2;14156:11;;14149:87;-1:-1:-1;;;14260:3:1;14252:12;;14245:46;14316:13;;14338:64;14316:13;14387:3;14379:12;;14372:4;14360:17;;14338:64;:::i;:::-;-1:-1:-1;;;14462:3:1;14421:17;;;;14454:12;;;14447:36;14507:3;14499:12;;13773:744;-1:-1:-1;;;;13773:744:1:o;14522:448::-;;14784:31;14779:3;14772:44;14845:6;14839:13;14861:62;14916:6;14911:2;14906:3;14902:12;14895:4;14887:6;14883:17;14861:62;:::i;:::-;14943:16;;;;14961:2;14939:25;;14762:208;-1:-1:-1;;14762:208:1:o;14975:677::-;;15338:66;15333:3;15326:79;15434:6;15428:13;15450:62;15505:6;15500:2;15495:3;15491:12;15484:4;15476:6;15472:17;15450:62;:::i;:::-;-1:-1:-1;;;15571:2:1;15531:16;;;;15563:11;;;15556:63;-1:-1:-1;15643:2:1;15635:11;;15316:336;-1:-1:-1;15316:336:1:o;15657:959::-;-1:-1:-1;;;16157:55:1;;16235:13;;15657:959;;16257:62;16235:13;16307:2;16298:12;;16291:4;16279:17;;16257:62;:::i;:::-;-1:-1:-1;;;16378:2:1;16338:16;;;16370:11;;;16363:38;16426:13;;16448:63;16426:13;16497:2;16489:11;;16482:4;16470:17;;16448:63;:::i;:::-;-1:-1:-1;;;16571:2:1;16530:17;;;;16563:11;;;16556:27;16607:2;16599:11;;16147:469;-1:-1:-1;;;;16147:469:1:o;16621:586::-;;-1:-1:-1;;;16979:3:1;16972:27;17028:6;17022:13;17044:62;17099:6;17094:2;17089:3;17085:12;17078:4;17070:6;17066:17;17044:62;:::i;:::-;-1:-1:-1;;;17165:2:1;17125:16;;;;17157:11;;;17150:24;-1:-1:-1;17198:2:1;17190:11;;16962:245;-1:-1:-1;16962:245:1:o;17212:203::-;-1:-1:-1;;;;;17376:32:1;;;;17358:51;;17346:2;17331:18;;17313:102::o;17420:490::-;-1:-1:-1;;;;;17689:15:1;;;17671:34;;17741:15;;17736:2;17721:18;;17714:43;17788:2;17773:18;;17766:34;;;17836:3;17831:2;17816:18;;17809:31;;;17420:490;;17857:47;;17884:19;;17876:6;17857:47;:::i;:::-;17849:55;17623:287;-1:-1:-1;;;;;;17623:287:1:o;17915:187::-;18080:14;;18073:22;18055:41;;18043:2;18028:18;;18010:92::o;18333:221::-;;18482:2;18471:9;18464:21;18502:46;18544:2;18533:9;18529:18;18521:6;18502:46;:::i;18559:336::-;18761:2;18743:21;;;18800:2;18780:18;;;18773:30;-1:-1:-1;;;18834:2:1;18819:18;;18812:42;18886:2;18871:18;;18733:162::o;18900:407::-;19102:2;19084:21;;;19141:2;19121:18;;;19114:30;19180:34;19175:2;19160:18;;19153:62;-1:-1:-1;;;19246:2:1;19231:18;;19224:41;19297:3;19282:19;;19074:233::o;19312:414::-;19514:2;19496:21;;;19553:2;19533:18;;;19526:30;19592:34;19587:2;19572:18;;19565:62;-1:-1:-1;;;19658:2:1;19643:18;;19636:48;19716:3;19701:19;;19486:240::o;19731:402::-;19933:2;19915:21;;;19972:2;19952:18;;;19945:30;20011:34;20006:2;19991:18;;19984:62;-1:-1:-1;;;20077:2:1;20062:18;;20055:36;20123:3;20108:19;;19905:228::o;20138:352::-;20340:2;20322:21;;;20379:2;20359:18;;;20352:30;20418;20413:2;20398:18;;20391:58;20481:2;20466:18;;20312:178::o;20495:341::-;20697:2;20679:21;;;20736:2;20716:18;;;20709:30;-1:-1:-1;;;20770:2:1;20755:18;;20748:47;20827:2;20812:18;;20669:167::o;20841:400::-;21043:2;21025:21;;;21082:2;21062:18;;;21055:30;21121:34;21116:2;21101:18;;21094:62;-1:-1:-1;;;21187:2:1;21172:18;;21165:34;21231:3;21216:19;;21015:226::o;21246:349::-;21448:2;21430:21;;;21487:2;21467:18;;;21460:30;21526:27;21521:2;21506:18;;21499:55;21586:2;21571:18;;21420:175::o;21600:344::-;21802:2;21784:21;;;21841:2;21821:18;;;21814:30;-1:-1:-1;;;21875:2:1;21860:18;;21853:50;21935:2;21920:18;;21774:170::o;21949:408::-;22151:2;22133:21;;;22190:2;22170:18;;;22163:30;22229:34;22224:2;22209:18;;22202:62;-1:-1:-1;;;22295:2:1;22280:18;;22273:42;22347:3;22332:19;;22123:234::o;22362:420::-;22564:2;22546:21;;;22603:2;22583:18;;;22576:30;22642:34;22637:2;22622:18;;22615:62;22713:26;22708:2;22693:18;;22686:54;22772:3;22757:19;;22536:246::o;22787:351::-;22989:2;22971:21;;;23028:2;23008:18;;;23001:30;23067:29;23062:2;23047:18;;23040:57;23129:2;23114:18;;22961:177::o;23143:406::-;23345:2;23327:21;;;23384:2;23364:18;;;23357:30;23423:34;23418:2;23403:18;;23396:62;-1:-1:-1;;;23489:2:1;23474:18;;23467:40;23539:3;23524:19;;23317:232::o;23554:405::-;23756:2;23738:21;;;23795:2;23775:18;;;23768:30;23834:34;23829:2;23814:18;;23807:62;-1:-1:-1;;;23900:2:1;23885:18;;23878:39;23949:3;23934:19;;23728:231::o;23964:345::-;24166:2;24148:21;;;24205:2;24185:18;;;24178:30;-1:-1:-1;;;24239:2:1;24224:18;;24217:51;24300:2;24285:18;;24138:171::o;24314:356::-;24516:2;24498:21;;;24535:18;;;24528:30;24594:34;24589:2;24574:18;;24567:62;24661:2;24646:18;;24488:182::o;24675:408::-;24877:2;24859:21;;;24916:2;24896:18;;;24889:30;24955:34;24950:2;24935:18;;24928:62;-1:-1:-1;;;25021:2:1;25006:18;;24999:42;25073:3;25058:19;;24849:234::o;25088:356::-;25290:2;25272:21;;;25309:18;;;25302:30;25368:34;25363:2;25348:18;;25341:62;25435:2;25420:18;;25262:182::o;25449:405::-;25651:2;25633:21;;;25690:2;25670:18;;;25663:30;25729:34;25724:2;25709:18;;25702:62;-1:-1:-1;;;25795:2:1;25780:18;;25773:39;25844:3;25829:19;;25623:231::o;25859:397::-;26061:2;26043:21;;;26100:2;26080:18;;;26073:30;26139:34;26134:2;26119:18;;26112:62;-1:-1:-1;;;26205:2:1;26190:18;;26183:31;26246:3;26231:19;;26033:223::o;26261:413::-;26463:2;26445:21;;;26502:2;26482:18;;;26475:30;26541:34;26536:2;26521:18;;26514:62;-1:-1:-1;;;26607:2:1;26592:18;;26585:47;26664:3;26649:19;;26435:239::o;26679:408::-;26881:2;26863:21;;;26920:2;26900:18;;;26893:30;26959:34;26954:2;26939:18;;26932:62;-1:-1:-1;;;27025:2:1;27010:18;;27003:42;27077:3;27062:19;;26853:234::o;27092:177::-;27238:25;;;27226:2;27211:18;;27193:76::o;27274:184::-;27446:4;27434:17;;;;27416:36;;27404:2;27389:18;;27371:87::o;27463:251::-;27533:2;27527:9;27563:17;;;27610:18;27595:34;;27631:22;;;27592:62;27589:2;;;27657:18;;:::i;:::-;27693:2;27686:22;27507:207;;-1:-1:-1;27507:207:1:o;27719:190::-;;27802:18;27794:6;27791:30;27788:2;;;27824:18;;:::i;:::-;-1:-1:-1;27892:2:1;27869:17;-1:-1:-1;;27865:31:1;27898:4;27861:42;;27778:131::o;27914:128::-;;27985:1;27981:6;27978:1;27975:13;27972:2;;;27991:18;;:::i;:::-;-1:-1:-1;28027:9:1;;27962:80::o;28047:120::-;;28113:1;28103:2;;28118:18;;:::i;:::-;-1:-1:-1;28152:9:1;;28093:74::o;28172:168::-;;28278:1;28274;28270:6;28266:14;28263:1;28260:21;28255:1;28248:9;28241:17;28237:45;28234:2;;;28285:18;;:::i;:::-;-1:-1:-1;28325:9:1;;28224:116::o;28345:125::-;;28413:1;28410;28407:8;28404:2;;;28418:18;;:::i;:::-;-1:-1:-1;28455:9:1;;28394:76::o;28475:258::-;28547:1;28557:113;28571:6;28568:1;28565:13;28557:113;;;28647:11;;;28641:18;28628:11;;;28621:39;28593:2;28586:10;28557:113;;;28688:6;28685:1;28682:13;28679:2;;;-1:-1:-1;;28723:1:1;28705:16;;28698:27;28528:205::o;28738:380::-;28823:1;28813:12;;28870:1;28860:12;;;28881:2;;28935:4;28927:6;28923:17;28913:27;;28881:2;28988;28980:6;28977:14;28957:18;28954:38;28951:2;;;29034:10;29029:3;29025:20;29022:1;29015:31;29069:4;29066:1;29059:15;29097:4;29094:1;29087:15;28951:2;;28793:325;;;:::o;29123:135::-;;-1:-1:-1;;29183:17:1;;29180:2;;;29203:18;;:::i;:::-;-1:-1:-1;29250:1:1;29239:13;;29170:88::o;29263:112::-;;29321:1;29311:2;;29326:18;;:::i;:::-;-1:-1:-1;29360:9:1;;29301:74::o;29380:127::-;29441:10;29436:3;29432:20;29429:1;29422:31;29472:4;29469:1;29462:15;29496:4;29493:1;29486:15;29512:127;29573:10;29568:3;29564:20;29561:1;29554:31;29604:4;29601:1;29594:15;29628:4;29625:1;29618:15;29644:127;29705:10;29700:3;29696:20;29693:1;29686:31;29736:4;29733:1;29726:15;29760:4;29757:1;29750:15;29776:120;29864:5;29857:13;29850:21;29843:5;29840:32;29830:2;;29886:1;29883;29876:12;29901:133;-1:-1:-1;;;;;;29977:32:1;;29967:43;;29957:2;;30024:1;30021;30014:12
Swarm Source
ipfs://06496738c0ddd7d8512c9d6a2b9aa0a55deb9e43d1a0f8a81467a915e34c3608
Loading...
Loading
[ 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.