Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
StoreSkyRocketNFT
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-11 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.12; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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); } /** * @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; } } /** * @dev String operations. * Enhanced Strings library by SkyRocket * Added concatenation */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev * Added by SkyRocket * Concatenation for string types **/ function append(string memory a, string memory b, string memory c, string memory d, string memory e) internal pure returns (string memory) { return string(abi.encodePacked(a, b, c, d, e)); } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev * Convert address to string **/ function addressToAsciiString(address x) internal pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2 * i] = char(hi); s[2 * i + 1] = char(lo); } return string(s); } function char(bytes1 b) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success,) = recipient.call{value : amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value : value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } modifier isAdmin() { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Account is not in the admin list"); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } /** * @dev * Interface to access the SkyRocketNFTFactory **/ abstract contract ISkyRocketNFTFactory { /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external virtual; /** * @dev * Returns the balance of the number of NFTs based on the NFTId **/ function balanceOf(address _owner, uint256 _nftId) external view virtual returns (uint256); /** * @dev * Returns the balance of a list of addresses **/ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view virtual returns (uint256[] memory); /** * @dev * Mint the NFT **/ function mint(address _to, uint256 _nftId, uint256 _quantity, bytes calldata _data) external virtual; /** * @dev * Check if the NFT is mintable **/ function isMintable(uint256 _nftId) external view virtual returns (bool); /** * @dev * Transfer the NFT _from _to **/ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external virtual; /** * @dev * Safe transfer a batch of NFTs _from _to **/ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external virtual; /** * @dev * Get max supply for token NFT id **/ function maxSupply(uint256 _nftId) external view virtual returns (uint256); /** * @dev Total amount of tokens in with a given NFT id. */ function totalSupply(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Get the Tier based on the NFT Id **/ function getTierByNFTId(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Burn the NFT **/ function burn(address account, uint256 id, uint256 value) external virtual; /** * @dev Get the total owned NFTs by the address **/ function getTotalOwnedNFTs(address _address) external view virtual returns (uint256); /** * @dev Get array of all owned NFTs by the address **/ function getOwnedNFTs(address _address) external view virtual returns (uint256[] memory); /** * @dev Get DNA by NFT Id **/ function getDNAByNFTId(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Get the Tier Name based on the NFT Id **/ function getTierNameByNFTId(uint256 _nftId) public view virtual returns (string memory); /** * @dev Mint the token to the _receiver address, although you can specify a quantity it is suggested to mint only 1 * Only Admins are allowed to mint tokens **/ function mint(address _receiver, bytes calldata _data) external virtual; } contract StoreSkyRocketNFT is ERC1155Holder, AccessControl { using SafeMath for uint256; ISkyRocketNFTFactory public skyRocketNFTFactory; address private devWallet; // NFT Price in WEI uint256 public nftPrice = 5_000_000_000_000_000_000; // 0.1 ETH uint256 public totalNFTsBought = 0; uint256 public totalETHReceived = 0; uint256 public totalNFTsBurned = 0; uint256 public totalETHSent = 0; event BoughtNFT(address owner, uint256 nftPrice); event WithdrawNFT(address admin, address receiver, uint256 nftId, uint256 amount); event UpdateNFTPrice(address admin, uint256 oldNFTPrice, uint256 newNFTPrice); event UpdateDevWallet(address admin, address oldDevWallet, address newDevWallet); event UpdateSkyRocketNFTInterface(address admin, ISkyRocketNFTFactory oldSkyRocketNFTFactory, ISkyRocketNFTFactory newSkyRocketNFTFactory); constructor(ISkyRocketNFTFactory _skyRocketNFTFactory, address _devWallet) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); skyRocketNFTFactory = _skyRocketNFTFactory; devWallet = _devWallet; } // Needed for compiling function supportsInterface(bytes4 _interfaceId) public view virtual override(ERC1155Receiver, AccessControl) returns (bool) { return super.supportsInterface(_interfaceId); } // Getters and Setters /** * @dev Update the ISkyRocketNFTFactory address **/ function setSkyRocketNFTInterface(ISkyRocketNFTFactory _skyRocketNFTFactory) external isAdmin { ISkyRocketNFTFactory _oldSkyRocketNFTFactory = _skyRocketNFTFactory; skyRocketNFTFactory = _skyRocketNFTFactory; emit UpdateSkyRocketNFTInterface(msg.sender, _oldSkyRocketNFTFactory, skyRocketNFTFactory); } /** * @dev Replace the dev wallet **/ function setDevWalletAddress(address _devWallet) external isAdmin { address _oldDevWallet = devWallet; devWallet = _devWallet; emit UpdateDevWallet(msg.sender, _oldDevWallet, _devWallet); } /** * @dev Update or Set the NFT Price * Setting the NFT price to 0 will mean that this NFT does not have a price **/ function setNFTPrice(uint256 _nftPrice) external isAdmin { uint256 _oldNFTPrice = nftPrice; nftPrice = _nftPrice; emit UpdateNFTPrice(msg.sender, _oldNFTPrice, _nftPrice); } /** * @dev Get the Balance of the wallet **/ function getBalance(address _wallet) public view returns(uint256 _balance) { return _wallet.balance; } // Checks // BusinessLogic /** * @dev Buy the Tier NFT, provide the NFT ID. **/ function buySkyRocketNFT() public payable { require(msg.value == nftPrice, Strings.append("Incorrect amount of ETH sent ", Strings.toString(msg.value), "", "", "")); require(msg.sender.balance >= nftPrice, Strings.append("You need more ETH in your wallet", Strings.toString(msg.sender.balance), Strings.toString(nftPrice), "", "")); // Send 50% of the ETH to the dev wallet, keep 50% in the contract uint256 _half = nftPrice.div(2); Address.sendValue(payable(devWallet), _half); totalETHReceived = totalETHReceived + nftPrice; totalNFTsBought = totalNFTsBought + 1; skyRocketNFTFactory.mint(msg.sender, ""); emit BoughtNFT(msg.sender, nftPrice); } /** * @dev Withdraw the ETH from the contract **/ function withdrawETH() external isAdmin { uint256 _balance = getBalance(address(this)); Address.sendValue(payable(devWallet), _balance); } /** * @dev Sell NFT **/ function sellSkyRocketNFT(uint256 _nftId) public payable { require(skyRocketNFTFactory.balanceOf(msg.sender, _nftId) >= 1, "You do not own this NFT"); skyRocketNFTFactory.burn(msg.sender, _nftId, 1); // Send 50% of the ETH to the dev wallet, keep 50% in the contract uint256 _half = nftPrice.div(2); Address.sendValue(payable(msg.sender), _half); totalETHSent = totalETHSent + _half; totalNFTsBurned = totalNFTsBurned + 1; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"_skyRocketNFTFactory","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftPrice","type":"uint256"}],"name":"BoughtNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"address","name":"oldDevWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"UpdateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldNFTPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newNFTPrice","type":"uint256"}],"name":"UpdateNFTPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"contract ISkyRocketNFTFactory","name":"oldSkyRocketNFTFactory","type":"address"},{"indexed":false,"internalType":"contract ISkyRocketNFTFactory","name":"newSkyRocketNFTFactory","type":"address"}],"name":"UpdateSkyRocketNFTInterface","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawNFT","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySkyRocketNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"sellSkyRocketNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftPrice","type":"uint256"}],"name":"setNFTPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"_skyRocketNFTFactory","type":"address"}],"name":"setSkyRocketNFTInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skyRocketNFTFactory","outputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTsBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTsBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052674563918244f4000060035560006004556000600555600060065560006007553480156200003157600080fd5b5060405162002baa38038062002baa83398181016040528101906200005791906200031e565b6200006c6000801b33620000f660201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000365565b6200010882826200010c60201b60201c565b5050565b6200011e8282620001fd60201b60201c565b620001f957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200019e6200026760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002a18262000274565b9050919050565b6000620002b58262000294565b9050919050565b620002c781620002a8565b8114620002d357600080fd5b50565b600081519050620002e781620002bc565b92915050565b620002f88162000294565b81146200030457600080fd5b50565b6000815190506200031881620002ed565b92915050565b600080604083850312156200033857620003376200026f565b5b60006200034885828601620002d6565b92505060206200035b8582860162000307565b9150509250929050565b61283580620003756000396000f3fe6080604052600436106101355760003560e01c806381530b68116100ab578063d4f22d581161006f578063d4f22d5814610419578063d547741f14610444578063e086e5ec1461046d578063f23a6e6114610484578063f8b2cb4f146104c1578063fd9721dd146104fe57610135565b806381530b681461032057806391d1485414610349578063a217fddf14610386578063bc197c81146103b1578063c8e79969146103ee57610135565b80632f2ff15d116100fd5780632f2ff15d1461022457806336568abe1461024d5780633c65a5761461027657806368903aec1461029f5780636e1682a0146102ca5780637ef295a7146102f557610135565b806301ffc9a71461013a5780630d39fc8114610177578063120a0612146101a257806312f4e990146101cb578063248a9ca3146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906117e0565b610508565b60405161016e9190611828565b60405180910390f35b34801561018357600080fd5b5061018c61051a565b604051610199919061185c565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c491906118d5565b610520565b005b6101e560048036038101906101e0919061192e565b61061a565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611991565b6107dc565b60405161021b91906119cd565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906119e8565b6107fb565b005b34801561025957600080fd5b50610274600480360381019061026f91906119e8565b610824565b005b34801561028257600080fd5b5061029d60048036038101906102989190611a66565b6108a7565b005b3480156102ab57600080fd5b506102b46109a1565b6040516102c1919061185c565b60405180910390f35b3480156102d657600080fd5b506102df6109a7565b6040516102ec919061185c565b60405180910390f35b34801561030157600080fd5b5061030a6109ad565b604051610317919061185c565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061192e565b6109b3565b005b34801561035557600080fd5b50610370600480360381019061036b91906119e8565b610a53565b60405161037d9190611828565b60405180910390f35b34801561039257600080fd5b5061039b610abd565b6040516103a891906119cd565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190611ca1565b610ac4565b6040516103e59190611d7f565b60405180910390f35b3480156103fa57600080fd5b50610403610ad9565b6040516104109190611df9565b60405180910390f35b34801561042557600080fd5b5061042e610aff565b60405161043b919061185c565b60405180910390f35b34801561045057600080fd5b5061046b600480360381019061046691906119e8565b610b05565b005b34801561047957600080fd5b50610482610b2e565b005b34801561049057600080fd5b506104ab60048036038101906104a69190611e14565b610bbd565b6040516104b89190611d7f565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906118d5565b610bd2565b6040516104f5919061185c565b60405180910390f35b610506610bf3565b005b600061051382610ed5565b9050919050565b60035481565b6105346000801b61052f610f4f565b610a53565b610573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056a90611f08565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f352e3bdcd5e23f20d7c40122d64642fb8c5340e13aa92b6e3fce124ad2ddbb3533828460405161060e93929190611f37565b60405180910390a15050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b8152600401610677929190611f6e565b602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611fac565b10156106f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f090612025565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f5298aca338360016040518463ffffffff1660e01b815260040161075993929190612080565b600060405180830381600087803b15801561077357600080fd5b505af1158015610787573d6000803e3d6000fd5b5050505060006107a36002600354610f5790919063ffffffff16565b90506107af3382610f6d565b806007546107bd91906120e6565b60078190555060016006546107d291906120e6565b6006819055505050565b6000806000838152602001908152602001600020600101549050919050565b610804826107dc565b61081581610810610f4f565b611061565b61081f83836110fe565b505050565b61082c610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906121ae565b60405180910390fd5b6108a382826111de565b5050565b6108bb6000801b6108b6610f4f565b610a53565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190611f08565b60405180910390fd5b600081905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f89932538a1996e752650f41d181b0197a9507bb7fdd3d309efca90fee17c3c5d3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610995939291906121ce565b60405180910390a15050565b60075481565b60055481565b60065481565b6109c76000801b6109c2610f4f565b610a53565b610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90611f08565b60405180910390fd5b60006003549050816003819055507f24a76590cf41a0f4c3a0cdc96c2c0784776857c096ba88a0ed4f6d53c7668dd6338284604051610a4793929190612205565b60405180910390a15050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b600063bc197c8160e01b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b610b0e826107dc565b610b1f81610b1a610f4f565b611061565b610b2983836111de565b505050565b610b426000801b610b3d610f4f565b610a53565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890611f08565b60405180910390fd5b6000610b8c30610bd2565b9050610bba600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610f6d565b50565b600063f23a6e6160e01b905095945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b6003543414610c6f6040518060400160405280601d81526020017f496e636f727265637420616d6f756e74206f66204554482073656e7420000000815250610c3a346112bf565b60405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061141f565b90610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca791906122b3565b60405180910390fd5b506003543373ffffffffffffffffffffffffffffffffffffffff16311015610d576040518060400160405280602081526020017f596f75206e656564206d6f72652045544820696e20796f75722077616c6c6574815250610d273373ffffffffffffffffffffffffffffffffffffffff16316112bf565b610d326003546112bf565b604051806020016040528060008152506040518060200160405280600081525061141f565b90610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f91906122b3565b60405180910390fd5b506000610db16002600354610f5790919063ffffffff16565b9050610ddf600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610f6d565b600354600554610def91906120e6565b6005819055506001600454610e0491906120e6565b600481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b510391f336040518263ffffffff1660e01b8152600401610e65919061230c565b600060405180830381600087803b158015610e7f57600080fd5b505af1158015610e93573d6000803e3d6000fd5b505050507f98cc0dcb37970d6ccb77508e214da5eb06dca04b81cf934ab6352701b4c996ff33600354604051610eca929190611f6e565b60405180910390a150565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f485750610f4782611454565b5b9050919050565b600033905090565b60008183610f659190612369565b905092915050565b80471015610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906123e6565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610fd690612434565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090508061105c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611053906124bb565b60405180910390fd5b505050565b61106b8282610a53565b6110fa576110908173ffffffffffffffffffffffffffffffffffffffff1660146114ce565b61109e8360001c60206114ce565b6040516020016110af9291906125af565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f191906122b3565b60405180910390fd5b5050565b6111088282610a53565b6111da57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061117f610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111e88282610a53565b156112bb57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611260610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606060008203611306576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061141a565b600082905060005b60008214611338578080611321906125e9565b915050600a826113319190612369565b915061130e565b60008167ffffffffffffffff81111561135457611353611aa9565b5b6040519080825280601f01601f1916602001820160405280156113865781602001600182028036833780820191505090505b5090505b600085146114135760018261139f9190612631565b9150600a856113ae9190612665565b60306113ba91906120e6565b60f81b8183815181106113d0576113cf612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561140c9190612369565b945061138a565b8093505050505b919050565b6060858585858560405160200161143a9594939291906126c5565b604051602081830303815290604052905095945050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114c757506114c68261170a565b5b9050919050565b6060600060028360026114e19190612710565b6114eb91906120e6565b67ffffffffffffffff81111561150457611503611aa9565b5b6040519080825280601f01601f1916602001820160405280156115365781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061156e5761156d612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106115d2576115d1612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026116129190612710565b61161c91906120e6565b90505b60018111156116bc577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061165e5761165d612696565b5b1a60f81b82828151811061167557611674612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806116b59061276a565b905061161f565b5060008414611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f7906127df565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117bd81611788565b81146117c857600080fd5b50565b6000813590506117da816117b4565b92915050565b6000602082840312156117f6576117f561177e565b5b6000611804848285016117cb565b91505092915050565b60008115159050919050565b6118228161180d565b82525050565b600060208201905061183d6000830184611819565b92915050565b6000819050919050565b61185681611843565b82525050565b6000602082019050611871600083018461184d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118a282611877565b9050919050565b6118b281611897565b81146118bd57600080fd5b50565b6000813590506118cf816118a9565b92915050565b6000602082840312156118eb576118ea61177e565b5b60006118f9848285016118c0565b91505092915050565b61190b81611843565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000602082840312156119445761194361177e565b5b600061195284828501611919565b91505092915050565b6000819050919050565b61196e8161195b565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000602082840312156119a7576119a661177e565b5b60006119b58482850161197c565b91505092915050565b6119c78161195b565b82525050565b60006020820190506119e260008301846119be565b92915050565b600080604083850312156119ff576119fe61177e565b5b6000611a0d8582860161197c565b9250506020611a1e858286016118c0565b9150509250929050565b6000611a3382611897565b9050919050565b611a4381611a28565b8114611a4e57600080fd5b50565b600081359050611a6081611a3a565b92915050565b600060208284031215611a7c57611a7b61177e565b5b6000611a8a84828501611a51565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ae182611a98565b810181811067ffffffffffffffff82111715611b0057611aff611aa9565b5b80604052505050565b6000611b13611774565b9050611b1f8282611ad8565b919050565b600067ffffffffffffffff821115611b3f57611b3e611aa9565b5b602082029050602081019050919050565b600080fd5b6000611b68611b6384611b24565b611b09565b90508083825260208201905060208402830185811115611b8b57611b8a611b50565b5b835b81811015611bb45780611ba08882611919565b845260208401935050602081019050611b8d565b5050509392505050565b600082601f830112611bd357611bd2611a93565b5b8135611be3848260208601611b55565b91505092915050565b600080fd5b600067ffffffffffffffff821115611c0c57611c0b611aa9565b5b611c1582611a98565b9050602081019050919050565b82818337600083830152505050565b6000611c44611c3f84611bf1565b611b09565b905082815260208101848484011115611c6057611c5f611bec565b5b611c6b848285611c22565b509392505050565b600082601f830112611c8857611c87611a93565b5b8135611c98848260208601611c31565b91505092915050565b600080600080600060a08688031215611cbd57611cbc61177e565b5b6000611ccb888289016118c0565b9550506020611cdc888289016118c0565b945050604086013567ffffffffffffffff811115611cfd57611cfc611783565b5b611d0988828901611bbe565b935050606086013567ffffffffffffffff811115611d2a57611d29611783565b5b611d3688828901611bbe565b925050608086013567ffffffffffffffff811115611d5757611d56611783565b5b611d6388828901611c73565b9150509295509295909350565b611d7981611788565b82525050565b6000602082019050611d946000830184611d70565b92915050565b6000819050919050565b6000611dbf611dba611db584611877565b611d9a565b611877565b9050919050565b6000611dd182611da4565b9050919050565b6000611de382611dc6565b9050919050565b611df381611dd8565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600080600080600060a08688031215611e3057611e2f61177e565b5b6000611e3e888289016118c0565b9550506020611e4f888289016118c0565b9450506040611e6088828901611919565b9350506060611e7188828901611919565b925050608086013567ffffffffffffffff811115611e9257611e91611783565b5b611e9e88828901611c73565b9150509295509295909350565b600082825260208201905092915050565b7f4163636f756e74206973206e6f7420696e207468652061646d696e206c697374600082015250565b6000611ef2602083611eab565b9150611efd82611ebc565b602082019050919050565b60006020820190508181036000830152611f2181611ee5565b9050919050565b611f3181611897565b82525050565b6000606082019050611f4c6000830186611f28565b611f596020830185611f28565b611f666040830184611f28565b949350505050565b6000604082019050611f836000830185611f28565b611f90602083018461184d565b9392505050565b600081519050611fa681611902565b92915050565b600060208284031215611fc257611fc161177e565b5b6000611fd084828501611f97565b91505092915050565b7f596f7520646f206e6f74206f776e2074686973204e4654000000000000000000600082015250565b600061200f601783611eab565b915061201a82611fd9565b602082019050919050565b6000602082019050818103600083015261203e81612002565b9050919050565b6000819050919050565b600061206a61206561206084612045565b611d9a565b611843565b9050919050565b61207a8161204f565b82525050565b60006060820190506120956000830186611f28565b6120a2602083018561184d565b6120af6040830184612071565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120f182611843565b91506120fc83611843565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612131576121306120b7565b5b828201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612198602f83611eab565b91506121a38261213c565b604082019050919050565b600060208201905081810360008301526121c78161218b565b9050919050565b60006060820190506121e36000830186611f28565b6121f06020830185611dea565b6121fd6040830184611dea565b949350505050565b600060608201905061221a6000830186611f28565b612227602083018561184d565b612234604083018461184d565b949350505050565b600081519050919050565b60005b8381101561226557808201518184015260208101905061224a565b83811115612274576000848401525b50505050565b60006122858261223c565b61228f8185611eab565b935061229f818560208601612247565b6122a881611a98565b840191505092915050565b600060208201905081810360008301526122cd818461227a565b905092915050565b600082825260208201905092915050565b50565b60006122f66000836122d5565b9150612301826122e6565b600082019050919050565b60006040820190506123216000830184611f28565b8181036020830152612332816122e9565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237482611843565b915061237f83611843565b92508261238f5761238e61233a565b5b828204905092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006123d0601d83611eab565b91506123db8261239a565b602082019050919050565b600060208201905081810360008301526123ff816123c3565b9050919050565b600081905092915050565b600061241e600083612406565b9150612429826122e6565b600082019050919050565b600061243f82612411565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006124a5603a83611eab565b91506124b082612449565b604082019050919050565b600060208201905081810360008301526124d481612498565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061251c6017836124db565b9150612527826124e6565b601782019050919050565b600061253d8261223c565b61254781856124db565b9350612557818560208601612247565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006125996011836124db565b91506125a482612563565b601182019050919050565b60006125ba8261250f565b91506125c68285612532565b91506125d18261258c565b91506125dd8284612532565b91508190509392505050565b60006125f482611843565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612626576126256120b7565b5b600182019050919050565b600061263c82611843565b915061264783611843565b92508282101561265a576126596120b7565b5b828203905092915050565b600061267082611843565b915061267b83611843565b92508261268b5761268a61233a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006126d18288612532565b91506126dd8287612532565b91506126e98286612532565b91506126f58285612532565b91506127018284612532565b91508190509695505050505050565b600061271b82611843565b915061272683611843565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275f5761275e6120b7565b5b828202905092915050565b600061277582611843565b915060008203612788576127876120b7565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006127c9602083611eab565b91506127d482612793565b602082019050919050565b600060208201905081810360008301526127f8816127bc565b905091905056fea2646970667358221220ecc01d42479e6fbfde8dcf34e95c36f59d18226820969c9979101480bf0868d964736f6c634300080e003300000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f300000000000000000000000034f02fb92d186325bc8cce353677a75b416d3d9f
Deployed Bytecode
0x6080604052600436106101355760003560e01c806381530b68116100ab578063d4f22d581161006f578063d4f22d5814610419578063d547741f14610444578063e086e5ec1461046d578063f23a6e6114610484578063f8b2cb4f146104c1578063fd9721dd146104fe57610135565b806381530b681461032057806391d1485414610349578063a217fddf14610386578063bc197c81146103b1578063c8e79969146103ee57610135565b80632f2ff15d116100fd5780632f2ff15d1461022457806336568abe1461024d5780633c65a5761461027657806368903aec1461029f5780636e1682a0146102ca5780637ef295a7146102f557610135565b806301ffc9a71461013a5780630d39fc8114610177578063120a0612146101a257806312f4e990146101cb578063248a9ca3146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906117e0565b610508565b60405161016e9190611828565b60405180910390f35b34801561018357600080fd5b5061018c61051a565b604051610199919061185c565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c491906118d5565b610520565b005b6101e560048036038101906101e0919061192e565b61061a565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611991565b6107dc565b60405161021b91906119cd565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906119e8565b6107fb565b005b34801561025957600080fd5b50610274600480360381019061026f91906119e8565b610824565b005b34801561028257600080fd5b5061029d60048036038101906102989190611a66565b6108a7565b005b3480156102ab57600080fd5b506102b46109a1565b6040516102c1919061185c565b60405180910390f35b3480156102d657600080fd5b506102df6109a7565b6040516102ec919061185c565b60405180910390f35b34801561030157600080fd5b5061030a6109ad565b604051610317919061185c565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061192e565b6109b3565b005b34801561035557600080fd5b50610370600480360381019061036b91906119e8565b610a53565b60405161037d9190611828565b60405180910390f35b34801561039257600080fd5b5061039b610abd565b6040516103a891906119cd565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190611ca1565b610ac4565b6040516103e59190611d7f565b60405180910390f35b3480156103fa57600080fd5b50610403610ad9565b6040516104109190611df9565b60405180910390f35b34801561042557600080fd5b5061042e610aff565b60405161043b919061185c565b60405180910390f35b34801561045057600080fd5b5061046b600480360381019061046691906119e8565b610b05565b005b34801561047957600080fd5b50610482610b2e565b005b34801561049057600080fd5b506104ab60048036038101906104a69190611e14565b610bbd565b6040516104b89190611d7f565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906118d5565b610bd2565b6040516104f5919061185c565b60405180910390f35b610506610bf3565b005b600061051382610ed5565b9050919050565b60035481565b6105346000801b61052f610f4f565b610a53565b610573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056a90611f08565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f352e3bdcd5e23f20d7c40122d64642fb8c5340e13aa92b6e3fce124ad2ddbb3533828460405161060e93929190611f37565b60405180910390a15050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b8152600401610677929190611f6e565b602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611fac565b10156106f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f090612025565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f5298aca338360016040518463ffffffff1660e01b815260040161075993929190612080565b600060405180830381600087803b15801561077357600080fd5b505af1158015610787573d6000803e3d6000fd5b5050505060006107a36002600354610f5790919063ffffffff16565b90506107af3382610f6d565b806007546107bd91906120e6565b60078190555060016006546107d291906120e6565b6006819055505050565b6000806000838152602001908152602001600020600101549050919050565b610804826107dc565b61081581610810610f4f565b611061565b61081f83836110fe565b505050565b61082c610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906121ae565b60405180910390fd5b6108a382826111de565b5050565b6108bb6000801b6108b6610f4f565b610a53565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190611f08565b60405180910390fd5b600081905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f89932538a1996e752650f41d181b0197a9507bb7fdd3d309efca90fee17c3c5d3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610995939291906121ce565b60405180910390a15050565b60075481565b60055481565b60065481565b6109c76000801b6109c2610f4f565b610a53565b610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90611f08565b60405180910390fd5b60006003549050816003819055507f24a76590cf41a0f4c3a0cdc96c2c0784776857c096ba88a0ed4f6d53c7668dd6338284604051610a4793929190612205565b60405180910390a15050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b600063bc197c8160e01b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b610b0e826107dc565b610b1f81610b1a610f4f565b611061565b610b2983836111de565b505050565b610b426000801b610b3d610f4f565b610a53565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890611f08565b60405180910390fd5b6000610b8c30610bd2565b9050610bba600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610f6d565b50565b600063f23a6e6160e01b905095945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b6003543414610c6f6040518060400160405280601d81526020017f496e636f727265637420616d6f756e74206f66204554482073656e7420000000815250610c3a346112bf565b60405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061141f565b90610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca791906122b3565b60405180910390fd5b506003543373ffffffffffffffffffffffffffffffffffffffff16311015610d576040518060400160405280602081526020017f596f75206e656564206d6f72652045544820696e20796f75722077616c6c6574815250610d273373ffffffffffffffffffffffffffffffffffffffff16316112bf565b610d326003546112bf565b604051806020016040528060008152506040518060200160405280600081525061141f565b90610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f91906122b3565b60405180910390fd5b506000610db16002600354610f5790919063ffffffff16565b9050610ddf600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610f6d565b600354600554610def91906120e6565b6005819055506001600454610e0491906120e6565b600481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b510391f336040518263ffffffff1660e01b8152600401610e65919061230c565b600060405180830381600087803b158015610e7f57600080fd5b505af1158015610e93573d6000803e3d6000fd5b505050507f98cc0dcb37970d6ccb77508e214da5eb06dca04b81cf934ab6352701b4c996ff33600354604051610eca929190611f6e565b60405180910390a150565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f485750610f4782611454565b5b9050919050565b600033905090565b60008183610f659190612369565b905092915050565b80471015610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906123e6565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610fd690612434565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090508061105c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611053906124bb565b60405180910390fd5b505050565b61106b8282610a53565b6110fa576110908173ffffffffffffffffffffffffffffffffffffffff1660146114ce565b61109e8360001c60206114ce565b6040516020016110af9291906125af565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f191906122b3565b60405180910390fd5b5050565b6111088282610a53565b6111da57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061117f610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111e88282610a53565b156112bb57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611260610f4f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606060008203611306576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061141a565b600082905060005b60008214611338578080611321906125e9565b915050600a826113319190612369565b915061130e565b60008167ffffffffffffffff81111561135457611353611aa9565b5b6040519080825280601f01601f1916602001820160405280156113865781602001600182028036833780820191505090505b5090505b600085146114135760018261139f9190612631565b9150600a856113ae9190612665565b60306113ba91906120e6565b60f81b8183815181106113d0576113cf612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561140c9190612369565b945061138a565b8093505050505b919050565b6060858585858560405160200161143a9594939291906126c5565b604051602081830303815290604052905095945050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114c757506114c68261170a565b5b9050919050565b6060600060028360026114e19190612710565b6114eb91906120e6565b67ffffffffffffffff81111561150457611503611aa9565b5b6040519080825280601f01601f1916602001820160405280156115365781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061156e5761156d612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106115d2576115d1612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026116129190612710565b61161c91906120e6565b90505b60018111156116bc577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061165e5761165d612696565b5b1a60f81b82828151811061167557611674612696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806116b59061276a565b905061161f565b5060008414611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f7906127df565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117bd81611788565b81146117c857600080fd5b50565b6000813590506117da816117b4565b92915050565b6000602082840312156117f6576117f561177e565b5b6000611804848285016117cb565b91505092915050565b60008115159050919050565b6118228161180d565b82525050565b600060208201905061183d6000830184611819565b92915050565b6000819050919050565b61185681611843565b82525050565b6000602082019050611871600083018461184d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118a282611877565b9050919050565b6118b281611897565b81146118bd57600080fd5b50565b6000813590506118cf816118a9565b92915050565b6000602082840312156118eb576118ea61177e565b5b60006118f9848285016118c0565b91505092915050565b61190b81611843565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000602082840312156119445761194361177e565b5b600061195284828501611919565b91505092915050565b6000819050919050565b61196e8161195b565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000602082840312156119a7576119a661177e565b5b60006119b58482850161197c565b91505092915050565b6119c78161195b565b82525050565b60006020820190506119e260008301846119be565b92915050565b600080604083850312156119ff576119fe61177e565b5b6000611a0d8582860161197c565b9250506020611a1e858286016118c0565b9150509250929050565b6000611a3382611897565b9050919050565b611a4381611a28565b8114611a4e57600080fd5b50565b600081359050611a6081611a3a565b92915050565b600060208284031215611a7c57611a7b61177e565b5b6000611a8a84828501611a51565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ae182611a98565b810181811067ffffffffffffffff82111715611b0057611aff611aa9565b5b80604052505050565b6000611b13611774565b9050611b1f8282611ad8565b919050565b600067ffffffffffffffff821115611b3f57611b3e611aa9565b5b602082029050602081019050919050565b600080fd5b6000611b68611b6384611b24565b611b09565b90508083825260208201905060208402830185811115611b8b57611b8a611b50565b5b835b81811015611bb45780611ba08882611919565b845260208401935050602081019050611b8d565b5050509392505050565b600082601f830112611bd357611bd2611a93565b5b8135611be3848260208601611b55565b91505092915050565b600080fd5b600067ffffffffffffffff821115611c0c57611c0b611aa9565b5b611c1582611a98565b9050602081019050919050565b82818337600083830152505050565b6000611c44611c3f84611bf1565b611b09565b905082815260208101848484011115611c6057611c5f611bec565b5b611c6b848285611c22565b509392505050565b600082601f830112611c8857611c87611a93565b5b8135611c98848260208601611c31565b91505092915050565b600080600080600060a08688031215611cbd57611cbc61177e565b5b6000611ccb888289016118c0565b9550506020611cdc888289016118c0565b945050604086013567ffffffffffffffff811115611cfd57611cfc611783565b5b611d0988828901611bbe565b935050606086013567ffffffffffffffff811115611d2a57611d29611783565b5b611d3688828901611bbe565b925050608086013567ffffffffffffffff811115611d5757611d56611783565b5b611d6388828901611c73565b9150509295509295909350565b611d7981611788565b82525050565b6000602082019050611d946000830184611d70565b92915050565b6000819050919050565b6000611dbf611dba611db584611877565b611d9a565b611877565b9050919050565b6000611dd182611da4565b9050919050565b6000611de382611dc6565b9050919050565b611df381611dd8565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600080600080600060a08688031215611e3057611e2f61177e565b5b6000611e3e888289016118c0565b9550506020611e4f888289016118c0565b9450506040611e6088828901611919565b9350506060611e7188828901611919565b925050608086013567ffffffffffffffff811115611e9257611e91611783565b5b611e9e88828901611c73565b9150509295509295909350565b600082825260208201905092915050565b7f4163636f756e74206973206e6f7420696e207468652061646d696e206c697374600082015250565b6000611ef2602083611eab565b9150611efd82611ebc565b602082019050919050565b60006020820190508181036000830152611f2181611ee5565b9050919050565b611f3181611897565b82525050565b6000606082019050611f4c6000830186611f28565b611f596020830185611f28565b611f666040830184611f28565b949350505050565b6000604082019050611f836000830185611f28565b611f90602083018461184d565b9392505050565b600081519050611fa681611902565b92915050565b600060208284031215611fc257611fc161177e565b5b6000611fd084828501611f97565b91505092915050565b7f596f7520646f206e6f74206f776e2074686973204e4654000000000000000000600082015250565b600061200f601783611eab565b915061201a82611fd9565b602082019050919050565b6000602082019050818103600083015261203e81612002565b9050919050565b6000819050919050565b600061206a61206561206084612045565b611d9a565b611843565b9050919050565b61207a8161204f565b82525050565b60006060820190506120956000830186611f28565b6120a2602083018561184d565b6120af6040830184612071565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120f182611843565b91506120fc83611843565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612131576121306120b7565b5b828201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612198602f83611eab565b91506121a38261213c565b604082019050919050565b600060208201905081810360008301526121c78161218b565b9050919050565b60006060820190506121e36000830186611f28565b6121f06020830185611dea565b6121fd6040830184611dea565b949350505050565b600060608201905061221a6000830186611f28565b612227602083018561184d565b612234604083018461184d565b949350505050565b600081519050919050565b60005b8381101561226557808201518184015260208101905061224a565b83811115612274576000848401525b50505050565b60006122858261223c565b61228f8185611eab565b935061229f818560208601612247565b6122a881611a98565b840191505092915050565b600060208201905081810360008301526122cd818461227a565b905092915050565b600082825260208201905092915050565b50565b60006122f66000836122d5565b9150612301826122e6565b600082019050919050565b60006040820190506123216000830184611f28565b8181036020830152612332816122e9565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237482611843565b915061237f83611843565b92508261238f5761238e61233a565b5b828204905092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006123d0601d83611eab565b91506123db8261239a565b602082019050919050565b600060208201905081810360008301526123ff816123c3565b9050919050565b600081905092915050565b600061241e600083612406565b9150612429826122e6565b600082019050919050565b600061243f82612411565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006124a5603a83611eab565b91506124b082612449565b604082019050919050565b600060208201905081810360008301526124d481612498565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061251c6017836124db565b9150612527826124e6565b601782019050919050565b600061253d8261223c565b61254781856124db565b9350612557818560208601612247565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006125996011836124db565b91506125a482612563565b601182019050919050565b60006125ba8261250f565b91506125c68285612532565b91506125d18261258c565b91506125dd8284612532565b91508190509392505050565b60006125f482611843565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612626576126256120b7565b5b600182019050919050565b600061263c82611843565b915061264783611843565b92508282101561265a576126596120b7565b5b828203905092915050565b600061267082611843565b915061267b83611843565b92508261268b5761268a61233a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006126d18288612532565b91506126dd8287612532565b91506126e98286612532565b91506126f58285612532565b91506127018284612532565b91508190509695505050505050565b600061271b82611843565b915061272683611843565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275f5761275e6120b7565b5b828202905092915050565b600061277582611843565b915060008203612788576127876120b7565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006127c9602083611eab565b91506127d482612793565b602082019050919050565b600060208201905081810360008301526127f8816127bc565b905091905056fea2646970667358221220ecc01d42479e6fbfde8dcf34e95c36f59d18226820969c9979101480bf0868d964736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f300000000000000000000000034f02fb92d186325bc8cce353677a75b416d3d9f
-----Decoded View---------------
Arg [0] : _skyRocketNFTFactory (address): 0x08bEE8a6884946f63a7b427aC42555C8CE4918f3
Arg [1] : _devWallet (address): 0x34F02Fb92D186325Bc8cce353677A75B416d3D9F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f3
Arg [1] : 00000000000000000000000034f02fb92d186325bc8cce353677a75b416d3d9f
Deployed Bytecode Sourcemap
35580:4273:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36759:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35797:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37451:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39352:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25922:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26307:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27355:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37052:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35995:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35910:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35954:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37822:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24835:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22669:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32197:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35682:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35869:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26699:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39144:161;;;;;;;;;;;;;:::i;:::-;;31962:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38099:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38330:741;;;:::i;:::-;;36759:187;36877:4;36901:37;36925:12;36901:23;:37::i;:::-;36894:44;;36759:187;;;:::o;35797:51::-;;;;:::o;37451:225::-;24369:41;22714:4;24377:18;;24397:12;:10;:12::i;:::-;24369:7;:41::i;:::-;24361:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;37528:21:::1;37552:9;;;;;;;;;;;37528:33;;37586:10;37574:9;;:22;;;;;;;;;;;;;;;;;;37614:54;37630:10;37642:13;37657:10;37614:54;;;;;;;;:::i;:::-;;;;;;;;37517:159;37451:225:::0;:::o;39352:498::-;39481:1;39428:19;;;;;;;;;;;:29;;;39458:10;39470:6;39428:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;39420:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39523:19;;;;;;;;;;;:24;;;39548:10;39560:6;39568:1;39523:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39659:13;39675:15;39688:1;39675:8;;:12;;:15;;;;:::i;:::-;39659:31;;39701:45;39727:10;39740:5;39701:17;:45::i;:::-;39789:5;39774:12;;:20;;;;:::i;:::-;39759:12;:35;;;;39841:1;39823:15;;:19;;;;:::i;:::-;39805:15;:37;;;;39409:441;39352:498;:::o;25922:123::-;25988:7;26015:6;:12;26022:4;26015:12;;;;;;;;;;;:22;;;26008:29;;25922:123;;;:::o;26307:147::-;26390:18;26403:4;26390:12;:18::i;:::-;24273:30;24284:4;24290:12;:10;:12::i;:::-;24273:10;:30::i;:::-;26421:25:::1;26432:4;26438:7;26421:10;:25::i;:::-;26307:147:::0;;;:::o;27355:218::-;27462:12;:10;:12::i;:::-;27451:23;;:7;:23;;;27443:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27539:26;27551:4;27557:7;27539:11;:26::i;:::-;27355:218;;:::o;37052:338::-;24369:41;22714:4;24377:18;;24397:12;:10;:12::i;:::-;24369:7;:41::i;:::-;24361:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;37157:44:::1;37204:20;37157:67;;37259:20;37237:19;;:42;;;;;;;;;;;;;;;;;;37297:85;37325:10;37337:23;37362:19;;;;;;;;;;;37297:85;;;;;;;;:::i;:::-;;;;;;;;37146:244;37052:338:::0;:::o;35995:31::-;;;;:::o;35910:35::-;;;;:::o;35954:34::-;;;;:::o;37822:209::-;24369:41;22714:4;24377:18;;24397:12;:10;:12::i;:::-;24369:7;:41::i;:::-;24361:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;37890:20:::1;37913:8;;37890:31;;37945:9;37934:8;:20;;;;37972:51;37987:10;37999:12;38013:9;37972:51;;;;;;;;:::i;:::-;;;;;;;;37879:152;37822:209:::0;:::o;24835:139::-;24913:4;24937:6;:12;24944:4;24937:12;;;;;;;;;;;:20;;:29;24958:7;24937:29;;;;;;;;;;;;;;;;;;;;;;;;;24930:36;;24835:139;;;;:::o;22669:49::-;22714:4;22669:49;;;:::o;32197:255::-;32382:6;32408:36;;;32401:43;;32197:255;;;;;;;:::o;35682:47::-;;;;;;;;;;;;;:::o;35869:34::-;;;;:::o;26699:149::-;26783:18;26796:4;26783:12;:18::i;:::-;24273:30;24284:4;24290:12;:10;:12::i;:::-;24273:10;:30::i;:::-;26814:26:::1;26826:4;26832:7;26814:11;:26::i;:::-;26699:149:::0;;;:::o;39144:161::-;24369:41;22714:4;24377:18;;24397:12;:10;:12::i;:::-;24369:7;:41::i;:::-;24361:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39195:16:::1;39214:25;39233:4;39214:10;:25::i;:::-;39195:44;;39250:47;39276:9;;;;;;;;;;;39288:8;39250:17;:47::i;:::-;39184:121;39144:161::o:0;31962:227::-;32124:6;32150:31;;;32143:38;;31962:227;;;;;;;:::o;38099:116::-;38156:16;38192:7;:15;;;38185:22;;38099:116;;;:::o;38330:741::-;38404:8;;38391:9;:21;38414:88;;;;;;;;;;;;;;;;;;38462:27;38479:9;38462:16;:27::i;:::-;38414:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:88::i;:::-;38383:120;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38544:8;;38522:10;:18;;;:30;;38554:124;;;;;;;;;;;;;;;;;;38605:36;38622:10;:18;;;38605:16;:36::i;:::-;38643:26;38660:8;;38643:16;:26::i;:::-;38554:124;;;;;;;;;;;;;;;;;;;;;;;;:14;:124::i;:::-;38514:165;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38768:13;38784:15;38797:1;38784:8;;:12;;:15;;;;:::i;:::-;38768:31;;38810:44;38836:9;;;;;;;;;;;38848:5;38810:17;:44::i;:::-;38905:8;;38886:16;;:27;;;;:::i;:::-;38867:16;:46;;;;38960:1;38942:15;;:19;;;;:::i;:::-;38924:15;:37;;;;38974:19;;;;;;;;;;;:24;;;38999:10;38974:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39032:31;39042:10;39054:8;;39032:31;;;;;;;:::i;:::-;;;;;;;;38372:699;38330:741::o;24539:204::-;24624:4;24663:32;24648:47;;;:11;:47;;;;:87;;;;24699:36;24723:11;24699:23;:36::i;:::-;24648:87;24641:94;;24539:204;;;:::o;603:98::-;656:7;683:10;676:17;;603:98;:::o;4643:::-;4701:7;4732:1;4728;:5;;;;:::i;:::-;4721:12;;4643:98;;;;:::o;14367:317::-;14482:6;14457:21;:31;;14449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14536:12;14553:9;:14;;14576:6;14553:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14535:52;;;14606:7;14598:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:246;14367:317;;:::o;25264:469::-;25345:22;25353:4;25359:7;25345;:22::i;:::-;25340:386;;25521:41;25549:7;25521:41;;25559:2;25521:19;:41::i;:::-;25627:38;25655:4;25647:13;;25662:2;25627:19;:38::i;:::-;25434:250;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25384:330;;;;;;;;;;;:::i;:::-;;;;;;;;25340:386;25264:469;;:::o;28659:229::-;28734:22;28742:4;28748:7;28734;:22::i;:::-;28729:152;;28805:4;28773:6;:12;28780:4;28773:12;;;;;;;;;;;:20;;:29;28794:7;28773:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28856:12;:10;:12::i;:::-;28829:40;;28847:7;28829:40;;28841:4;28829:40;;;;;;;;;;28729:152;28659:229;;:::o;28896:230::-;28971:22;28979:4;28985:7;28971;:22::i;:::-;28967:152;;;29042:5;29010:6;:12;29017:4;29010:12;;;;;;;;;;;:20;;:29;29031:7;29010:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29094:12;:10;:12::i;:::-;29067:40;;29085:7;29067:40;;29079:4;29067:40;;;;;;;;;;28967:152;28896:230;;:::o;9885:723::-;9941:13;10171:1;10162:5;:10;10158:53;;10189:10;;;;;;;;;;;;;;;;;;;;;10158:53;10221:12;10236:5;10221:20;;10252:14;10277:78;10292:1;10284:4;:9;10277:78;;10310:8;;;;;:::i;:::-;;;;10341:2;10333:10;;;;;:::i;:::-;;;10277:78;;;10365:19;10397:6;10387:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10365:39;;10415:154;10431:1;10422:5;:10;10415:154;;10459:1;10449:11;;;;;:::i;:::-;;;10526:2;10518:5;:10;;;;:::i;:::-;10505:2;:24;;;;:::i;:::-;10492:39;;10475:6;10482;10475:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;10555:2;10546:11;;;;;:::i;:::-;;;10415:154;;;10593:6;10579:21;;;;;9885:723;;;;:::o;9575:204::-;9699:13;9756:1;9759;9762;9765;9768;9739:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9725:46;;9575:204;;;;;;;:::o;31640:223::-;31742:4;31781:34;31766:49;;;:11;:49;;;;:89;;;;31819:36;31843:11;31819:23;:36::i;:::-;31766:89;31759:96;;31640:223;;;:::o;11186:451::-;11261:13;11287:19;11332:1;11323:6;11319:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;11309:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11287:47;;11345:15;:6;11352:1;11345:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;11371;:6;11378:1;11371:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;11402:9;11427:1;11418:6;11414:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;11402:26;;11397:135;11434:1;11430;:5;11397:135;;;11469:12;11490:3;11482:5;:11;11469:25;;;;;;;:::i;:::-;;;;;11457:6;11464:1;11457:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;11519:1;11509:11;;;;;11437:3;;;;:::i;:::-;;;11397:135;;;;11559:1;11550:5;:10;11542:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11622:6;11608:21;;;11186:451;;;;:::o;9123:157::-;9208:4;9247:25;9232:40;;;:11;:40;;;;9225:47;;9123:157;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:126::-;1990:7;2030:42;2023:5;2019:54;2008:65;;1953:126;;;:::o;2085:96::-;2122:7;2151:24;2169:5;2151:24;:::i;:::-;2140:35;;2085:96;;;:::o;2187:122::-;2260:24;2278:5;2260:24;:::i;:::-;2253:5;2250:35;2240:63;;2299:1;2296;2289:12;2240:63;2187:122;:::o;2315:139::-;2361:5;2399:6;2386:20;2377:29;;2415:33;2442:5;2415:33;:::i;:::-;2315:139;;;;:::o;2460:329::-;2519:6;2568:2;2556:9;2547:7;2543:23;2539:32;2536:119;;;2574:79;;:::i;:::-;2536:119;2694:1;2719:53;2764:7;2755:6;2744:9;2740:22;2719:53;:::i;:::-;2709:63;;2665:117;2460:329;;;;:::o;2795:122::-;2868:24;2886:5;2868:24;:::i;:::-;2861:5;2858:35;2848:63;;2907:1;2904;2897:12;2848:63;2795:122;:::o;2923:139::-;2969:5;3007:6;2994:20;2985:29;;3023:33;3050:5;3023:33;:::i;:::-;2923:139;;;;:::o;3068:329::-;3127:6;3176:2;3164:9;3155:7;3151:23;3147:32;3144:119;;;3182:79;;:::i;:::-;3144:119;3302:1;3327:53;3372:7;3363:6;3352:9;3348:22;3327:53;:::i;:::-;3317:63;;3273:117;3068:329;;;;:::o;3403:77::-;3440:7;3469:5;3458:16;;3403:77;;;:::o;3486:122::-;3559:24;3577:5;3559:24;:::i;:::-;3552:5;3549:35;3539:63;;3598:1;3595;3588:12;3539:63;3486:122;:::o;3614:139::-;3660:5;3698:6;3685:20;3676:29;;3714:33;3741:5;3714:33;:::i;:::-;3614:139;;;;:::o;3759:329::-;3818:6;3867:2;3855:9;3846:7;3842:23;3838:32;3835:119;;;3873:79;;:::i;:::-;3835:119;3993:1;4018:53;4063:7;4054:6;4043:9;4039:22;4018:53;:::i;:::-;4008:63;;3964:117;3759:329;;;;:::o;4094:118::-;4181:24;4199:5;4181:24;:::i;:::-;4176:3;4169:37;4094:118;;:::o;4218:222::-;4311:4;4349:2;4338:9;4334:18;4326:26;;4362:71;4430:1;4419:9;4415:17;4406:6;4362:71;:::i;:::-;4218:222;;;;:::o;4446:474::-;4514:6;4522;4571:2;4559:9;4550:7;4546:23;4542:32;4539:119;;;4577:79;;:::i;:::-;4539:119;4697:1;4722:53;4767:7;4758:6;4747:9;4743:22;4722:53;:::i;:::-;4712:63;;4668:117;4824:2;4850:53;4895:7;4886:6;4875:9;4871:22;4850:53;:::i;:::-;4840:63;;4795:118;4446:474;;;;;:::o;4926:125::-;4992:7;5021:24;5039:5;5021:24;:::i;:::-;5010:35;;4926:125;;;:::o;5057:180::-;5159:53;5206:5;5159:53;:::i;:::-;5152:5;5149:64;5139:92;;5227:1;5224;5217:12;5139:92;5057:180;:::o;5243:197::-;5318:5;5356:6;5343:20;5334:29;;5372:62;5428:5;5372:62;:::i;:::-;5243:197;;;;:::o;5446:387::-;5534:6;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:82;5808:7;5799:6;5788:9;5784:22;5734:82;:::i;:::-;5724:92;;5680:146;5446:387;;;;:::o;5839:117::-;5948:1;5945;5938:12;5962:102;6003:6;6054:2;6050:7;6045:2;6038:5;6034:14;6030:28;6020:38;;5962:102;;;:::o;6070:180::-;6118:77;6115:1;6108:88;6215:4;6212:1;6205:15;6239:4;6236:1;6229:15;6256:281;6339:27;6361:4;6339:27;:::i;:::-;6331:6;6327:40;6469:6;6457:10;6454:22;6433:18;6421:10;6418:34;6415:62;6412:88;;;6480:18;;:::i;:::-;6412:88;6520:10;6516:2;6509:22;6299:238;6256:281;;:::o;6543:129::-;6577:6;6604:20;;:::i;:::-;6594:30;;6633:33;6661:4;6653:6;6633:33;:::i;:::-;6543:129;;;:::o;6678:311::-;6755:4;6845:18;6837:6;6834:30;6831:56;;;6867:18;;:::i;:::-;6831:56;6917:4;6909:6;6905:17;6897:25;;6977:4;6971;6967:15;6959:23;;6678:311;;;:::o;6995:117::-;7104:1;7101;7094:12;7135:710;7231:5;7256:81;7272:64;7329:6;7272:64;:::i;:::-;7256:81;:::i;:::-;7247:90;;7357:5;7386:6;7379:5;7372:21;7420:4;7413:5;7409:16;7402:23;;7473:4;7465:6;7461:17;7453:6;7449:30;7502:3;7494:6;7491:15;7488:122;;;7521:79;;:::i;:::-;7488:122;7636:6;7619:220;7653:6;7648:3;7645:15;7619:220;;;7728:3;7757:37;7790:3;7778:10;7757:37;:::i;:::-;7752:3;7745:50;7824:4;7819:3;7815:14;7808:21;;7695:144;7679:4;7674:3;7670:14;7663:21;;7619:220;;;7623:21;7237:608;;7135:710;;;;;:::o;7868:370::-;7939:5;7988:3;7981:4;7973:6;7969:17;7965:27;7955:122;;7996:79;;:::i;:::-;7955:122;8113:6;8100:20;8138:94;8228:3;8220:6;8213:4;8205:6;8201:17;8138:94;:::i;:::-;8129:103;;7945:293;7868:370;;;;:::o;8244:117::-;8353:1;8350;8343:12;8367:307;8428:4;8518:18;8510:6;8507:30;8504:56;;;8540:18;;:::i;:::-;8504:56;8578:29;8600:6;8578:29;:::i;:::-;8570:37;;8662:4;8656;8652:15;8644:23;;8367:307;;;:::o;8680:154::-;8764:6;8759:3;8754;8741:30;8826:1;8817:6;8812:3;8808:16;8801:27;8680:154;;;:::o;8840:410::-;8917:5;8942:65;8958:48;8999:6;8958:48;:::i;:::-;8942:65;:::i;:::-;8933:74;;9030:6;9023:5;9016:21;9068:4;9061:5;9057:16;9106:3;9097:6;9092:3;9088:16;9085:25;9082:112;;;9113:79;;:::i;:::-;9082:112;9203:41;9237:6;9232:3;9227;9203:41;:::i;:::-;8923:327;8840:410;;;;;:::o;9269:338::-;9324:5;9373:3;9366:4;9358:6;9354:17;9350:27;9340:122;;9381:79;;:::i;:::-;9340:122;9498:6;9485:20;9523:78;9597:3;9589:6;9582:4;9574:6;9570:17;9523:78;:::i;:::-;9514:87;;9330:277;9269:338;;;;:::o;9613:1509::-;9767:6;9775;9783;9791;9799;9848:3;9836:9;9827:7;9823:23;9819:33;9816:120;;;9855:79;;:::i;:::-;9816:120;9975:1;10000:53;10045:7;10036:6;10025:9;10021:22;10000:53;:::i;:::-;9990:63;;9946:117;10102:2;10128:53;10173:7;10164:6;10153:9;10149:22;10128:53;:::i;:::-;10118:63;;10073:118;10258:2;10247:9;10243:18;10230:32;10289:18;10281:6;10278:30;10275:117;;;10311:79;;:::i;:::-;10275:117;10416:78;10486:7;10477:6;10466:9;10462:22;10416:78;:::i;:::-;10406:88;;10201:303;10571:2;10560:9;10556:18;10543:32;10602:18;10594:6;10591:30;10588:117;;;10624:79;;:::i;:::-;10588:117;10729:78;10799:7;10790:6;10779:9;10775:22;10729:78;:::i;:::-;10719:88;;10514:303;10884:3;10873:9;10869:19;10856:33;10916:18;10908:6;10905:30;10902:117;;;10938:79;;:::i;:::-;10902:117;11043:62;11097:7;11088:6;11077:9;11073:22;11043:62;:::i;:::-;11033:72;;10827:288;9613:1509;;;;;;;;:::o;11128:115::-;11213:23;11230:5;11213:23;:::i;:::-;11208:3;11201:36;11128:115;;:::o;11249:218::-;11340:4;11378:2;11367:9;11363:18;11355:26;;11391:69;11457:1;11446:9;11442:17;11433:6;11391:69;:::i;:::-;11249:218;;;;:::o;11473:60::-;11501:3;11522:5;11515:12;;11473:60;;;:::o;11539:142::-;11589:9;11622:53;11640:34;11649:24;11667:5;11649:24;:::i;:::-;11640:34;:::i;:::-;11622:53;:::i;:::-;11609:66;;11539:142;;;:::o;11687:126::-;11737:9;11770:37;11801:5;11770:37;:::i;:::-;11757:50;;11687:126;;;:::o;11819:155::-;11898:9;11931:37;11962:5;11931:37;:::i;:::-;11918:50;;11819:155;;;:::o;11980:189::-;12096:66;12156:5;12096:66;:::i;:::-;12091:3;12084:79;11980:189;;:::o;12175:280::-;12297:4;12335:2;12324:9;12320:18;12312:26;;12348:100;12445:1;12434:9;12430:17;12421:6;12348:100;:::i;:::-;12175:280;;;;:::o;12461:1089::-;12565:6;12573;12581;12589;12597;12646:3;12634:9;12625:7;12621:23;12617:33;12614:120;;;12653:79;;:::i;:::-;12614:120;12773:1;12798:53;12843:7;12834:6;12823:9;12819:22;12798:53;:::i;:::-;12788:63;;12744:117;12900:2;12926:53;12971:7;12962:6;12951:9;12947:22;12926:53;:::i;:::-;12916:63;;12871:118;13028:2;13054:53;13099:7;13090:6;13079:9;13075:22;13054:53;:::i;:::-;13044:63;;12999:118;13156:2;13182:53;13227:7;13218:6;13207:9;13203:22;13182:53;:::i;:::-;13172:63;;13127:118;13312:3;13301:9;13297:19;13284:33;13344:18;13336:6;13333:30;13330:117;;;13366:79;;:::i;:::-;13330:117;13471:62;13525:7;13516:6;13505:9;13501:22;13471:62;:::i;:::-;13461:72;;13255:288;12461:1089;;;;;;;;:::o;13556:169::-;13640:11;13674:6;13669:3;13662:19;13714:4;13709:3;13705:14;13690:29;;13556:169;;;;:::o;13731:182::-;13871:34;13867:1;13859:6;13855:14;13848:58;13731:182;:::o;13919:366::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:419::-;14457:4;14495:2;14484:9;14480:18;14472:26;;14544:9;14538:4;14534:20;14530:1;14519:9;14515:17;14508:47;14572:131;14698:4;14572:131;:::i;:::-;14564:139;;14291:419;;;:::o;14716:118::-;14803:24;14821:5;14803:24;:::i;:::-;14798:3;14791:37;14716:118;;:::o;14840:442::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15040:71;15108:1;15097:9;15093:17;15084:6;15040:71;:::i;:::-;15121:72;15189:2;15178:9;15174:18;15165:6;15121:72;:::i;:::-;15203;15271:2;15260:9;15256:18;15247:6;15203:72;:::i;:::-;14840:442;;;;;;:::o;15288:332::-;15409:4;15447:2;15436:9;15432:18;15424:26;;15460:71;15528:1;15517:9;15513:17;15504:6;15460:71;:::i;:::-;15541:72;15609:2;15598:9;15594:18;15585:6;15541:72;:::i;:::-;15288:332;;;;;:::o;15626:143::-;15683:5;15714:6;15708:13;15699:22;;15730:33;15757:5;15730:33;:::i;:::-;15626:143;;;;:::o;15775:351::-;15845:6;15894:2;15882:9;15873:7;15869:23;15865:32;15862:119;;;15900:79;;:::i;:::-;15862:119;16020:1;16045:64;16101:7;16092:6;16081:9;16077:22;16045:64;:::i;:::-;16035:74;;15991:128;15775:351;;;;:::o;16132:173::-;16272:25;16268:1;16260:6;16256:14;16249:49;16132:173;:::o;16311:366::-;16453:3;16474:67;16538:2;16533:3;16474:67;:::i;:::-;16467:74;;16550:93;16639:3;16550:93;:::i;:::-;16668:2;16663:3;16659:12;16652:19;;16311:366;;;:::o;16683:419::-;16849:4;16887:2;16876:9;16872:18;16864:26;;16936:9;16930:4;16926:20;16922:1;16911:9;16907:17;16900:47;16964:131;17090:4;16964:131;:::i;:::-;16956:139;;16683:419;;;:::o;17108:85::-;17153:7;17182:5;17171:16;;17108:85;;;:::o;17199:158::-;17257:9;17290:61;17308:42;17317:32;17343:5;17317:32;:::i;:::-;17308:42;:::i;:::-;17290:61;:::i;:::-;17277:74;;17199:158;;;:::o;17363:147::-;17458:45;17497:5;17458:45;:::i;:::-;17453:3;17446:58;17363:147;;:::o;17516:458::-;17673:4;17711:2;17700:9;17696:18;17688:26;;17724:71;17792:1;17781:9;17777:17;17768:6;17724:71;:::i;:::-;17805:72;17873:2;17862:9;17858:18;17849:6;17805:72;:::i;:::-;17887:80;17963:2;17952:9;17948:18;17939:6;17887:80;:::i;:::-;17516:458;;;;;;:::o;17980:180::-;18028:77;18025:1;18018:88;18125:4;18122:1;18115:15;18149:4;18146:1;18139:15;18166:305;18206:3;18225:20;18243:1;18225:20;:::i;:::-;18220:25;;18259:20;18277:1;18259:20;:::i;:::-;18254:25;;18413:1;18345:66;18341:74;18338:1;18335:81;18332:107;;;18419:18;;:::i;:::-;18332:107;18463:1;18460;18456:9;18449:16;;18166:305;;;;:::o;18477:234::-;18617:34;18613:1;18605:6;18601:14;18594:58;18686:17;18681:2;18673:6;18669:15;18662:42;18477:234;:::o;18717:366::-;18859:3;18880:67;18944:2;18939:3;18880:67;:::i;:::-;18873:74;;18956:93;19045:3;18956:93;:::i;:::-;19074:2;19069:3;19065:12;19058:19;;18717:366;;;:::o;19089:419::-;19255:4;19293:2;19282:9;19278:18;19270:26;;19342:9;19336:4;19332:20;19328:1;19317:9;19313:17;19306:47;19370:131;19496:4;19370:131;:::i;:::-;19362:139;;19089:419;;;:::o;19514:558::-;19721:4;19759:2;19748:9;19744:18;19736:26;;19772:71;19840:1;19829:9;19825:17;19816:6;19772:71;:::i;:::-;19853:101;19950:2;19939:9;19935:18;19926:6;19853:101;:::i;:::-;19964;20061:2;20050:9;20046:18;20037:6;19964:101;:::i;:::-;19514:558;;;;;;:::o;20078:442::-;20227:4;20265:2;20254:9;20250:18;20242:26;;20278:71;20346:1;20335:9;20331:17;20322:6;20278:71;:::i;:::-;20359:72;20427:2;20416:9;20412:18;20403:6;20359:72;:::i;:::-;20441;20509:2;20498:9;20494:18;20485:6;20441:72;:::i;:::-;20078:442;;;;;;:::o;20526:99::-;20578:6;20612:5;20606:12;20596:22;;20526:99;;;:::o;20631:307::-;20699:1;20709:113;20723:6;20720:1;20717:13;20709:113;;;20808:1;20803:3;20799:11;20793:18;20789:1;20784:3;20780:11;20773:39;20745:2;20742:1;20738:10;20733:15;;20709:113;;;20840:6;20837:1;20834:13;20831:101;;;20920:1;20911:6;20906:3;20902:16;20895:27;20831:101;20680:258;20631:307;;;:::o;20944:364::-;21032:3;21060:39;21093:5;21060:39;:::i;:::-;21115:71;21179:6;21174:3;21115:71;:::i;:::-;21108:78;;21195:52;21240:6;21235:3;21228:4;21221:5;21217:16;21195:52;:::i;:::-;21272:29;21294:6;21272:29;:::i;:::-;21267:3;21263:39;21256:46;;21036:272;20944:364;;;;:::o;21314:313::-;21427:4;21465:2;21454:9;21450:18;21442:26;;21514:9;21508:4;21504:20;21500:1;21489:9;21485:17;21478:47;21542:78;21615:4;21606:6;21542:78;:::i;:::-;21534:86;;21314:313;;;;:::o;21633:168::-;21716:11;21750:6;21745:3;21738:19;21790:4;21785:3;21781:14;21766:29;;21633:168;;;;:::o;21807:114::-;;:::o;21927:362::-;22068:3;22089:65;22152:1;22147:3;22089:65;:::i;:::-;22082:72;;22163:93;22252:3;22163:93;:::i;:::-;22281:1;22276:3;22272:11;22265:18;;21927:362;;;:::o;22295:527::-;22488:4;22526:2;22515:9;22511:18;22503:26;;22539:71;22607:1;22596:9;22592:17;22583:6;22539:71;:::i;:::-;22657:9;22651:4;22647:20;22642:2;22631:9;22627:18;22620:48;22685:130;22810:4;22685:130;:::i;:::-;22677:138;;22295:527;;;;:::o;22828:180::-;22876:77;22873:1;22866:88;22973:4;22970:1;22963:15;22997:4;22994:1;22987:15;23014:185;23054:1;23071:20;23089:1;23071:20;:::i;:::-;23066:25;;23105:20;23123:1;23105:20;:::i;:::-;23100:25;;23144:1;23134:35;;23149:18;;:::i;:::-;23134:35;23191:1;23188;23184:9;23179:14;;23014:185;;;;:::o;23205:179::-;23345:31;23341:1;23333:6;23329:14;23322:55;23205:179;:::o;23390:366::-;23532:3;23553:67;23617:2;23612:3;23553:67;:::i;:::-;23546:74;;23629:93;23718:3;23629:93;:::i;:::-;23747:2;23742:3;23738:12;23731:19;;23390:366;;;:::o;23762:419::-;23928:4;23966:2;23955:9;23951:18;23943:26;;24015:9;24009:4;24005:20;24001:1;23990:9;23986:17;23979:47;24043:131;24169:4;24043:131;:::i;:::-;24035:139;;23762:419;;;:::o;24187:147::-;24288:11;24325:3;24310:18;;24187:147;;;;:::o;24340:398::-;24499:3;24520:83;24601:1;24596:3;24520:83;:::i;:::-;24513:90;;24612:93;24701:3;24612:93;:::i;:::-;24730:1;24725:3;24721:11;24714:18;;24340:398;;;:::o;24744:379::-;24928:3;24950:147;25093:3;24950:147;:::i;:::-;24943:154;;25114:3;25107:10;;24744:379;;;:::o;25129:245::-;25269:34;25265:1;25257:6;25253:14;25246:58;25338:28;25333:2;25325:6;25321:15;25314:53;25129:245;:::o;25380:366::-;25522:3;25543:67;25607:2;25602:3;25543:67;:::i;:::-;25536:74;;25619:93;25708:3;25619:93;:::i;:::-;25737:2;25732:3;25728:12;25721:19;;25380:366;;;:::o;25752:419::-;25918:4;25956:2;25945:9;25941:18;25933:26;;26005:9;25999:4;25995:20;25991:1;25980:9;25976:17;25969:47;26033:131;26159:4;26033:131;:::i;:::-;26025:139;;25752:419;;;:::o;26177:148::-;26279:11;26316:3;26301:18;;26177:148;;;;:::o;26331:173::-;26471:25;26467:1;26459:6;26455:14;26448:49;26331:173;:::o;26510:402::-;26670:3;26691:85;26773:2;26768:3;26691:85;:::i;:::-;26684:92;;26785:93;26874:3;26785:93;:::i;:::-;26903:2;26898:3;26894:12;26887:19;;26510:402;;;:::o;26918:377::-;27024:3;27052:39;27085:5;27052:39;:::i;:::-;27107:89;27189:6;27184:3;27107:89;:::i;:::-;27100:96;;27205:52;27250:6;27245:3;27238:4;27231:5;27227:16;27205:52;:::i;:::-;27282:6;27277:3;27273:16;27266:23;;27028:267;26918:377;;;;:::o;27301:167::-;27441:19;27437:1;27429:6;27425:14;27418:43;27301:167;:::o;27474:402::-;27634:3;27655:85;27737:2;27732:3;27655:85;:::i;:::-;27648:92;;27749:93;27838:3;27749:93;:::i;:::-;27867:2;27862:3;27858:12;27851:19;;27474:402;;;:::o;27882:967::-;28264:3;28286:148;28430:3;28286:148;:::i;:::-;28279:155;;28451:95;28542:3;28533:6;28451:95;:::i;:::-;28444:102;;28563:148;28707:3;28563:148;:::i;:::-;28556:155;;28728:95;28819:3;28810:6;28728:95;:::i;:::-;28721:102;;28840:3;28833:10;;27882:967;;;;;:::o;28855:233::-;28894:3;28917:24;28935:5;28917:24;:::i;:::-;28908:33;;28963:66;28956:5;28953:77;28950:103;;29033:18;;:::i;:::-;28950:103;29080:1;29073:5;29069:13;29062:20;;28855:233;;;:::o;29094:191::-;29134:4;29154:20;29172:1;29154:20;:::i;:::-;29149:25;;29188:20;29206:1;29188:20;:::i;:::-;29183:25;;29227:1;29224;29221:8;29218:34;;;29232:18;;:::i;:::-;29218:34;29277:1;29274;29270:9;29262:17;;29094:191;;;;:::o;29291:176::-;29323:1;29340:20;29358:1;29340:20;:::i;:::-;29335:25;;29374:20;29392:1;29374:20;:::i;:::-;29369:25;;29413:1;29403:35;;29418:18;;:::i;:::-;29403:35;29459:1;29456;29452:9;29447:14;;29291:176;;;;:::o;29473:180::-;29521:77;29518:1;29511:88;29618:4;29615:1;29608:15;29642:4;29639:1;29632:15;29659:915;29983:3;30005:95;30096:3;30087:6;30005:95;:::i;:::-;29998:102;;30117:95;30208:3;30199:6;30117:95;:::i;:::-;30110:102;;30229:95;30320:3;30311:6;30229:95;:::i;:::-;30222:102;;30341:95;30432:3;30423:6;30341:95;:::i;:::-;30334:102;;30453:95;30544:3;30535:6;30453:95;:::i;:::-;30446:102;;30565:3;30558:10;;29659:915;;;;;;;;:::o;30580:348::-;30620:7;30643:20;30661:1;30643:20;:::i;:::-;30638:25;;30677:20;30695:1;30677:20;:::i;:::-;30672:25;;30865:1;30797:66;30793:74;30790:1;30787:81;30782:1;30775:9;30768:17;30764:105;30761:131;;;30872:18;;:::i;:::-;30761:131;30920:1;30917;30913:9;30902:20;;30580:348;;;;:::o;30934:171::-;30973:3;30996:24;31014:5;30996:24;:::i;:::-;30987:33;;31042:4;31035:5;31032:15;31029:41;;31050:18;;:::i;:::-;31029:41;31097:1;31090:5;31086:13;31079:20;;30934:171;;;:::o;31111:182::-;31251:34;31247:1;31239:6;31235:14;31228:58;31111:182;:::o;31299:366::-;31441:3;31462:67;31526:2;31521:3;31462:67;:::i;:::-;31455:74;;31538:93;31627:3;31538:93;:::i;:::-;31656:2;31651:3;31647:12;31640:19;;31299:366;;;:::o;31671:419::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31671:419;;;:::o
Swarm Source
ipfs://ecc01d42479e6fbfde8dcf34e95c36f59d18226820969c9979101480bf0868d9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.