ETH Price: $3,313.77 (-2.86%)
Gas: 13 Gwei

Token

STELLAX (STELLAX)
 

Overview

Max Total Supply

460 STELLAX

Holders

452

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xaa2d872cab938194e4eb4db14056a07c5f6dea4c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The official Atari X ████ ██ ███ █████ ████ ██ ██ ███ collection

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
STELLAX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.13;


/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }
    
    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

pragma solidity ^0.8.13;


/**
 * @title  DefaultOperatorFilterer
 * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
 */
abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;


/**
 * @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.
     *
     * NOTE: 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.
     *
     * NOTE: 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);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @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;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

pragma solidity ^0.8.7;

contract STELLAX is ERC1155, Ownable, DefaultOperatorFilterer {    

    string public metadata;
    string public name_;
    string public symbol_;  

    bool public burnStatus; 
    address public _burnContract;

    constructor() ERC1155(metadata)  {
        name_ = "STELLAX";
        symbol_ = "STELLAX";
    }
    
    function airdrop(uint256[] calldata tokenAmount, address[] calldata wallet, uint256 tokenId) public onlyOwner {
        for(uint256 i = 0; i < wallet.length; i++) 
            _mint(wallet[i], tokenId, tokenAmount[i], "");
    }

    function burnToken(address wallet, uint256 tokenId, uint256 amountOfTokens) public  {
        require(burnStatus, "Burn status disabled");
        require(wallet == msg.sender || isApprovedForAll(wallet, msg.sender), "Not allowed");
        _burn(wallet, tokenId, amountOfTokens);
    }

    function burnTokenFromContract(address wallet, uint256 tokenId, uint256 amountOfTokens) public  {
        require(burnStatus, "Burn status disabled");
        require(_burnContract == msg.sender, "Not allowed");
        _burn(wallet, tokenId, amountOfTokens);
    }

    function setMetadata(string calldata _uri) public onlyOwner {
        metadata = _uri;
    }

    function setBurnStatus(bool _status) public onlyOwner {
        burnStatus = _status;
    }

    function setBurnContract(address _contract) public onlyOwner {
        _burnContract = _contract;
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        return string(abi.encodePacked(metadata, Strings.toString(tokenId)));
    }

    function name() public view returns (string memory) {
        return name_;
    }

    function symbol() public view returns (string memory) {
        return symbol_;
    }

    function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) {
        super.setApprovalForAll(operator, approved);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, uint256 amount, bytes memory data)
        public
        override
        onlyAllowedOperator(from)
    {
        super.safeTransferFrom(from, to, tokenId, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override onlyAllowedOperator(from) {
        super.safeBatchTransferFrom(from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenAmount","type":"uint256[]"},{"internalType":"address[]","name":"wallet","type":"address[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"burnTokenFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setBurnContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBurnStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb66001600480546200003890620002e6565b80601f01602080910402602001604051908101604052809291908181526020018280546200006690620002e6565b8015620000b75780601f106200008b57610100808354040283529160200191620000b7565b820191906000526020600020905b8154815290600101906020018083116200009957829003601f168201915b5050505050620000cd816200028260201b60201c565b50620000d93362000294565b6daaeb6d7670e522a718067333cd4e3b156200021e5780156200016c57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200014d57600080fd5b505af115801562000162573d6000803e3d6000fd5b505050506200021e565b6001600160a01b03821615620001bd5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000132565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200020457600080fd5b505af115801562000219573d6000803e3d6000fd5b505050505b50506040805180820190915260078152660a6a88a989882b60cb1b60208201526005906200024d90826200038b565b506040805180820190915260078152660a6a88a989882b60cb1b60208201526006906200027b90826200038b565b5062000457565b60026200029082826200038b565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600181811c90821680620002fb57607f821691505b6020821081036200031c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f8211156200038657600081815260208120601f850160051c81016020861015620003615750805b601f850160051c820191505b8181101562000382578281556001016200036d565b5050505b505050565b81516001600160401b03811115620003a757620003a762000322565b620003bf81620003b88454620002e6565b8462000338565b602080601f831160018114620003f75760008415620003de5750858301515b600019600386901b1c1916600185901b17855562000382565b600085815260208120601f198616915b82811015620004285788860151825594840194600190910190840162000407565b5085821015620004475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61222680620004676000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c806390e0d992116100de578063c9031e9e11610097578063e985e9c511610071578063e985e9c51461031a578063ed8c593814610356578063f242432a14610369578063f2fde38b1461037c57600080fd5b8063c9031e9e146102e7578063da0890a8146102ff578063e2b9e1861461031257600080fd5b806390e0d9921461029157806395d89b411461029e57806397a2d0eb146102a6578063a22cb465146102b9578063a49a1e7d146102cc578063af17dea6146102df57600080fd5b806337beafe01161013057806337beafe014610210578063392f37e91461022357806341f434341461022b5780634e1273f414610258578063715018a6146102785780638da5cb5b1461028057600080fd5b8062fdd58e1461017757806301ffc9a71461019d57806306797901146101c057806306fdde03146101d55780630e89341c146101ea5780632eb2c2d6146101fd575b600080fd5b61018a61018536600461164b565b61038f565b6040519081526020015b60405180910390f35b6101b06101ab36600461168b565b610428565b6040519015158152602001610194565b6101d36101ce3660046116af565b610478565b005b6101dd61051e565b6040516101949190611732565b6101dd6101f8366004611745565b6105b0565b6101d361020b3660046118a7565b6105e4565b6101d361021e366004611950565b610613565b6101dd610643565b6102406daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b039091168152602001610194565b61026b61026636600461196b565b6106d1565b6040516101949190611a70565b6101d36107fa565b6003546001600160a01b0316610240565b6007546101b09060ff1681565b6101dd61080e565b6101d36102b4366004611a91565b61081d565b6101d36102c7366004611aae565b610838565b6101d36102da366004611ae5565b61084c565b6101dd610861565b6007546102409061010090046001600160a01b031681565b6101d361030d366004611ba1565b61086e565b6101dd6108ec565b6101b0610328366004611c14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101d36103643660046116af565b6108f9565b6101d3610377366004611c47565b6109b6565b6101d361038a366004611950565b6109dd565b60006001600160a01b0383166103ff5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061045957506001600160e01b031982166303a24d0760e21b145b8061042257506301ffc9a760e01b6001600160e01b0319831614610422565b60075460ff166104c15760405162461bcd60e51b8152602060048201526014602482015273109d5c9b881cdd185d1d5cc8191a5cd8589b195960621b60448201526064016103f6565b60075461010090046001600160a01b0316331461050e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016103f6565b610519838383610a56565b505050565b60606005805461052d90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611cab565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b5050505050905090565b606060046105bd83610bd7565b6040516020016105ce929190611ce5565b6040516020818303038152906040529050919050565b846001600160a01b03811633146105fe576105fe33610cdf565b61060b8686868686610d98565b505050505050565b61061b610de4565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6004805461065090611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90611cab565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b606081518351146107365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103f6565b600083516001600160401b038111156107515761075161175e565b60405190808252806020026020018201604052801561077a578160200160208202803683370190505b50905060005b84518110156107f2576107c585828151811061079e5761079e611d6c565b60200260200101518583815181106107b8576107b8611d6c565b602002602001015161038f565b8282815181106107d7576107d7611d6c565b60209081029190910101526107eb81611d98565b9050610780565b509392505050565b610802610de4565b61080c6000610e3e565b565b60606006805461052d90611cab565b610825610de4565b6007805460ff1916911515919091179055565b8161084281610cdf565b6105198383610e90565b610854610de4565b6004610519828483611df7565b6006805461065090611cab565b610876610de4565b60005b8281101561060b576108da84848381811061089657610896611d6c565b90506020020160208101906108ab9190611950565b838888858181106108be576108be611d6c565b9050602002013560405180602001604052806000815250610e9f565b806108e481611d98565b915050610879565b6005805461065090611cab565b60075460ff166109425760405162461bcd60e51b8152602060048201526014602482015273109d5c9b881cdd185d1d5cc8191a5cd8589b195960621b60448201526064016103f6565b6001600160a01b03831633148061097c57506001600160a01b038316600090815260016020908152604080832033845290915290205460ff165b61050e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016103f6565b846001600160a01b03811633146109d0576109d033610cdf565b61060b8686868686610faa565b6109e5610de4565b6001600160a01b038116610a4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f6565b610a5381610e3e565b50565b6001600160a01b038316610ab85760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103f6565b336000610ac484610fef565b90506000610ad184610fef565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015610b5a5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103f6565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b606081600003610bfe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610c285780610c1281611d98565b9150610c219050600a83611ecc565b9150610c02565b6000816001600160401b03811115610c4257610c4261175e565b6040519080825280601f01601f191660200182016040528015610c6c576020820181803683370190505b5090505b8415610cd757610c81600183611ee0565b9150610c8e600a86611ef3565b610c99906030611f07565b60f81b818381518110610cae57610cae611d6c565b60200101906001600160f81b031916908160001a905350610cd0600a86611ecc565b9450610c70565b949350505050565b6daaeb6d7670e522a718067333cd4e3b15610a5357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d709190611f1a565b610a5357604051633b79c77360e21b81526001600160a01b03821660048201526024016103f6565b6001600160a01b038516331480610db45750610db48533610328565b610dd05760405162461bcd60e51b81526004016103f690611f37565b610ddd858585858561103a565b5050505050565b6003546001600160a01b0316331461080c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f6565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e9b33838361120f565b5050565b6001600160a01b038416610eff5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016103f6565b336000610f0b85610fef565b90506000610f1885610fef565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610f4a908490611f07565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610bce836000898989896112ef565b6001600160a01b038516331480610fc65750610fc68533610328565b610fe25760405162461bcd60e51b81526004016103f690611f37565b610ddd858585858561144a565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061102957611029611d6c565b602090810291909101015292915050565b815183511461109c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103f6565b6001600160a01b0384166110c25760405162461bcd60e51b81526004016103f690611f86565b3360005b84518110156111a95760008582815181106110e3576110e3611d6c565b60200260200101519050600085838151811061110157611101611d6c565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111515760405162461bcd60e51b81526004016103f690611fcb565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061118e908490611f07565b92505081905550505050806111a290611d98565b90506110c6565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516111f9929190612015565b60405180910390a461060b818787878787611574565b816001600160a01b0316836001600160a01b0316036112825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103f6565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384163b1561060b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113339089908990889088908890600401612043565b6020604051808303816000875af192505050801561136e575060408051601f3d908101601f1916820190925261136b91810190612088565b60015b61141a5761137a6120a5565b806308c379a0036113b3575061138e6120c1565b8061139957506113b5565b8060405162461bcd60e51b81526004016103f69190611732565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103f6565b6001600160e01b0319811663f23a6e6160e01b14610bce5760405162461bcd60e51b81526004016103f69061214a565b6001600160a01b0384166114705760405162461bcd60e51b81526004016103f690611f86565b33600061147c85610fef565b9050600061148985610fef565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156114cc5760405162461bcd60e51b81526004016103f690611fcb565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611509908490611f07565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611569848a8a8a8a8a6112ef565b505050505050505050565b6001600160a01b0384163b1561060b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115b89089908990889088908890600401612192565b6020604051808303816000875af19250505080156115f3575060408051601f3d908101601f191682019092526115f091810190612088565b60015b6115ff5761137a6120a5565b6001600160e01b0319811663bc197c8160e01b14610bce5760405162461bcd60e51b81526004016103f69061214a565b80356001600160a01b038116811461164657600080fd5b919050565b6000806040838503121561165e57600080fd5b6116678361162f565b946020939093013593505050565b6001600160e01b031981168114610a5357600080fd5b60006020828403121561169d57600080fd5b81356116a881611675565b9392505050565b6000806000606084860312156116c457600080fd5b6116cd8461162f565b95602085013595506040909401359392505050565b60005b838110156116fd5781810151838201526020016116e5565b50506000910152565b6000815180845261171e8160208601602086016116e2565b601f01601f19169290920160200192915050565b6020815260006116a86020830184611706565b60006020828403121561175757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156117995761179961175e565b6040525050565b60006001600160401b038211156117b9576117b961175e565b5060051b60200190565b600082601f8301126117d457600080fd5b813560206117e1826117a0565b6040516117ee8282611774565b83815260059390931b850182019282810191508684111561180e57600080fd5b8286015b848110156118295780358352918301918301611812565b509695505050505050565b600082601f83011261184557600080fd5b81356001600160401b0381111561185e5761185e61175e565b604051611875601f8301601f191660200182611774565b81815284602083860101111561188a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156118bf57600080fd5b6118c88661162f565b94506118d66020870161162f565b935060408601356001600160401b03808211156118f257600080fd5b6118fe89838a016117c3565b9450606088013591508082111561191457600080fd5b61192089838a016117c3565b9350608088013591508082111561193657600080fd5b5061194388828901611834565b9150509295509295909350565b60006020828403121561196257600080fd5b6116a88261162f565b6000806040838503121561197e57600080fd5b82356001600160401b038082111561199557600080fd5b818501915085601f8301126119a957600080fd5b813560206119b6826117a0565b6040516119c38282611774565b83815260059390931b85018201928281019150898411156119e357600080fd5b948201945b83861015611a08576119f98661162f565b825294820194908201906119e8565b96505086013592505080821115611a1e57600080fd5b50611a2b858286016117c3565b9150509250929050565b600081518084526020808501945080840160005b83811015611a6557815187529582019590820190600101611a49565b509495945050505050565b6020815260006116a86020830184611a35565b8015158114610a5357600080fd5b600060208284031215611aa357600080fd5b81356116a881611a83565b60008060408385031215611ac157600080fd5b611aca8361162f565b91506020830135611ada81611a83565b809150509250929050565b60008060208385031215611af857600080fd5b82356001600160401b0380821115611b0f57600080fd5b818501915085601f830112611b2357600080fd5b813581811115611b3257600080fd5b866020828501011115611b4457600080fd5b60209290920196919550909350505050565b60008083601f840112611b6857600080fd5b5081356001600160401b03811115611b7f57600080fd5b6020830191508360208260051b8501011115611b9a57600080fd5b9250929050565b600080600080600060608688031215611bb957600080fd5b85356001600160401b0380821115611bd057600080fd5b611bdc89838a01611b56565b90975095506020880135915080821115611bf557600080fd5b50611c0288828901611b56565b96999598509660400135949350505050565b60008060408385031215611c2757600080fd5b611c308361162f565b9150611c3e6020840161162f565b90509250929050565b600080600080600060a08688031215611c5f57600080fd5b611c688661162f565b9450611c766020870161162f565b9350604086013592506060860135915060808601356001600160401b03811115611c9f57600080fd5b61194388828901611834565b600181811c90821680611cbf57607f821691505b602082108103611cdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000808454611cf381611cab565b60018281168015611d0b5760018114611d2057611d4f565b60ff1984168752821515830287019450611d4f565b8860005260208060002060005b85811015611d465781548a820152908401908201611d2d565b50505082870194505b505050508351611d638183602088016116e2565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611daa57611daa611d82565b5060010190565b601f82111561051957600081815260208120601f850160051c81016020861015611dd85750805b601f850160051c820191505b8181101561060b57828155600101611de4565b6001600160401b03831115611e0e57611e0e61175e565b611e2283611e1c8354611cab565b83611db1565b6000601f841160018114611e565760008515611e3e5750838201355b600019600387901b1c1916600186901b178355610ddd565b600083815260209020601f19861690835b82811015611e875786850135825560209485019460019092019101611e67565b5086821015611ea45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601260045260246000fd5b600082611edb57611edb611eb6565b500490565b8181038181111561042257610422611d82565b600082611f0257611f02611eb6565b500690565b8082018082111561042257610422611d82565b600060208284031215611f2c57600080fd5b81516116a881611a83565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006120286040830185611a35565b828103602084015261203a8185611a35565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061207d90830184611706565b979650505050505050565b60006020828403121561209a57600080fd5b81516116a881611675565b600060033d11156120be5760046000803e5060005160e01c5b90565b600060443d10156120cf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156120fe57505050505090565b82850191508151818111156121165750505050505090565b843d87010160208285010111156121305750505050505090565b61213f60208286010187611774565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906121be90830186611a35565b82810360608401526121d08186611a35565b905082810360808401526121e48185611706565b9897505050505050505056fea26469706673582212202594d063ceaf8425d6de2a184da129e7ecfd17686204cd40f5cfb4e7f5d9036d64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101725760003560e01c806390e0d992116100de578063c9031e9e11610097578063e985e9c511610071578063e985e9c51461031a578063ed8c593814610356578063f242432a14610369578063f2fde38b1461037c57600080fd5b8063c9031e9e146102e7578063da0890a8146102ff578063e2b9e1861461031257600080fd5b806390e0d9921461029157806395d89b411461029e57806397a2d0eb146102a6578063a22cb465146102b9578063a49a1e7d146102cc578063af17dea6146102df57600080fd5b806337beafe01161013057806337beafe014610210578063392f37e91461022357806341f434341461022b5780634e1273f414610258578063715018a6146102785780638da5cb5b1461028057600080fd5b8062fdd58e1461017757806301ffc9a71461019d57806306797901146101c057806306fdde03146101d55780630e89341c146101ea5780632eb2c2d6146101fd575b600080fd5b61018a61018536600461164b565b61038f565b6040519081526020015b60405180910390f35b6101b06101ab36600461168b565b610428565b6040519015158152602001610194565b6101d36101ce3660046116af565b610478565b005b6101dd61051e565b6040516101949190611732565b6101dd6101f8366004611745565b6105b0565b6101d361020b3660046118a7565b6105e4565b6101d361021e366004611950565b610613565b6101dd610643565b6102406daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b039091168152602001610194565b61026b61026636600461196b565b6106d1565b6040516101949190611a70565b6101d36107fa565b6003546001600160a01b0316610240565b6007546101b09060ff1681565b6101dd61080e565b6101d36102b4366004611a91565b61081d565b6101d36102c7366004611aae565b610838565b6101d36102da366004611ae5565b61084c565b6101dd610861565b6007546102409061010090046001600160a01b031681565b6101d361030d366004611ba1565b61086e565b6101dd6108ec565b6101b0610328366004611c14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101d36103643660046116af565b6108f9565b6101d3610377366004611c47565b6109b6565b6101d361038a366004611950565b6109dd565b60006001600160a01b0383166103ff5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061045957506001600160e01b031982166303a24d0760e21b145b8061042257506301ffc9a760e01b6001600160e01b0319831614610422565b60075460ff166104c15760405162461bcd60e51b8152602060048201526014602482015273109d5c9b881cdd185d1d5cc8191a5cd8589b195960621b60448201526064016103f6565b60075461010090046001600160a01b0316331461050e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016103f6565b610519838383610a56565b505050565b60606005805461052d90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611cab565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b5050505050905090565b606060046105bd83610bd7565b6040516020016105ce929190611ce5565b6040516020818303038152906040529050919050565b846001600160a01b03811633146105fe576105fe33610cdf565b61060b8686868686610d98565b505050505050565b61061b610de4565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6004805461065090611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90611cab565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b606081518351146107365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103f6565b600083516001600160401b038111156107515761075161175e565b60405190808252806020026020018201604052801561077a578160200160208202803683370190505b50905060005b84518110156107f2576107c585828151811061079e5761079e611d6c565b60200260200101518583815181106107b8576107b8611d6c565b602002602001015161038f565b8282815181106107d7576107d7611d6c565b60209081029190910101526107eb81611d98565b9050610780565b509392505050565b610802610de4565b61080c6000610e3e565b565b60606006805461052d90611cab565b610825610de4565b6007805460ff1916911515919091179055565b8161084281610cdf565b6105198383610e90565b610854610de4565b6004610519828483611df7565b6006805461065090611cab565b610876610de4565b60005b8281101561060b576108da84848381811061089657610896611d6c565b90506020020160208101906108ab9190611950565b838888858181106108be576108be611d6c565b9050602002013560405180602001604052806000815250610e9f565b806108e481611d98565b915050610879565b6005805461065090611cab565b60075460ff166109425760405162461bcd60e51b8152602060048201526014602482015273109d5c9b881cdd185d1d5cc8191a5cd8589b195960621b60448201526064016103f6565b6001600160a01b03831633148061097c57506001600160a01b038316600090815260016020908152604080832033845290915290205460ff165b61050e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016103f6565b846001600160a01b03811633146109d0576109d033610cdf565b61060b8686868686610faa565b6109e5610de4565b6001600160a01b038116610a4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f6565b610a5381610e3e565b50565b6001600160a01b038316610ab85760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103f6565b336000610ac484610fef565b90506000610ad184610fef565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015610b5a5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103f6565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b606081600003610bfe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610c285780610c1281611d98565b9150610c219050600a83611ecc565b9150610c02565b6000816001600160401b03811115610c4257610c4261175e565b6040519080825280601f01601f191660200182016040528015610c6c576020820181803683370190505b5090505b8415610cd757610c81600183611ee0565b9150610c8e600a86611ef3565b610c99906030611f07565b60f81b818381518110610cae57610cae611d6c565b60200101906001600160f81b031916908160001a905350610cd0600a86611ecc565b9450610c70565b949350505050565b6daaeb6d7670e522a718067333cd4e3b15610a5357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d709190611f1a565b610a5357604051633b79c77360e21b81526001600160a01b03821660048201526024016103f6565b6001600160a01b038516331480610db45750610db48533610328565b610dd05760405162461bcd60e51b81526004016103f690611f37565b610ddd858585858561103a565b5050505050565b6003546001600160a01b0316331461080c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f6565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e9b33838361120f565b5050565b6001600160a01b038416610eff5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016103f6565b336000610f0b85610fef565b90506000610f1885610fef565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610f4a908490611f07565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610bce836000898989896112ef565b6001600160a01b038516331480610fc65750610fc68533610328565b610fe25760405162461bcd60e51b81526004016103f690611f37565b610ddd858585858561144a565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061102957611029611d6c565b602090810291909101015292915050565b815183511461109c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103f6565b6001600160a01b0384166110c25760405162461bcd60e51b81526004016103f690611f86565b3360005b84518110156111a95760008582815181106110e3576110e3611d6c565b60200260200101519050600085838151811061110157611101611d6c565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111515760405162461bcd60e51b81526004016103f690611fcb565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061118e908490611f07565b92505081905550505050806111a290611d98565b90506110c6565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516111f9929190612015565b60405180910390a461060b818787878787611574565b816001600160a01b0316836001600160a01b0316036112825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103f6565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384163b1561060b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113339089908990889088908890600401612043565b6020604051808303816000875af192505050801561136e575060408051601f3d908101601f1916820190925261136b91810190612088565b60015b61141a5761137a6120a5565b806308c379a0036113b3575061138e6120c1565b8061139957506113b5565b8060405162461bcd60e51b81526004016103f69190611732565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103f6565b6001600160e01b0319811663f23a6e6160e01b14610bce5760405162461bcd60e51b81526004016103f69061214a565b6001600160a01b0384166114705760405162461bcd60e51b81526004016103f690611f86565b33600061147c85610fef565b9050600061148985610fef565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156114cc5760405162461bcd60e51b81526004016103f690611fcb565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611509908490611f07565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611569848a8a8a8a8a6112ef565b505050505050505050565b6001600160a01b0384163b1561060b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115b89089908990889088908890600401612192565b6020604051808303816000875af19250505080156115f3575060408051601f3d908101601f191682019092526115f091810190612088565b60015b6115ff5761137a6120a5565b6001600160e01b0319811663bc197c8160e01b14610bce5760405162461bcd60e51b81526004016103f69061214a565b80356001600160a01b038116811461164657600080fd5b919050565b6000806040838503121561165e57600080fd5b6116678361162f565b946020939093013593505050565b6001600160e01b031981168114610a5357600080fd5b60006020828403121561169d57600080fd5b81356116a881611675565b9392505050565b6000806000606084860312156116c457600080fd5b6116cd8461162f565b95602085013595506040909401359392505050565b60005b838110156116fd5781810151838201526020016116e5565b50506000910152565b6000815180845261171e8160208601602086016116e2565b601f01601f19169290920160200192915050565b6020815260006116a86020830184611706565b60006020828403121561175757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156117995761179961175e565b6040525050565b60006001600160401b038211156117b9576117b961175e565b5060051b60200190565b600082601f8301126117d457600080fd5b813560206117e1826117a0565b6040516117ee8282611774565b83815260059390931b850182019282810191508684111561180e57600080fd5b8286015b848110156118295780358352918301918301611812565b509695505050505050565b600082601f83011261184557600080fd5b81356001600160401b0381111561185e5761185e61175e565b604051611875601f8301601f191660200182611774565b81815284602083860101111561188a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156118bf57600080fd5b6118c88661162f565b94506118d66020870161162f565b935060408601356001600160401b03808211156118f257600080fd5b6118fe89838a016117c3565b9450606088013591508082111561191457600080fd5b61192089838a016117c3565b9350608088013591508082111561193657600080fd5b5061194388828901611834565b9150509295509295909350565b60006020828403121561196257600080fd5b6116a88261162f565b6000806040838503121561197e57600080fd5b82356001600160401b038082111561199557600080fd5b818501915085601f8301126119a957600080fd5b813560206119b6826117a0565b6040516119c38282611774565b83815260059390931b85018201928281019150898411156119e357600080fd5b948201945b83861015611a08576119f98661162f565b825294820194908201906119e8565b96505086013592505080821115611a1e57600080fd5b50611a2b858286016117c3565b9150509250929050565b600081518084526020808501945080840160005b83811015611a6557815187529582019590820190600101611a49565b509495945050505050565b6020815260006116a86020830184611a35565b8015158114610a5357600080fd5b600060208284031215611aa357600080fd5b81356116a881611a83565b60008060408385031215611ac157600080fd5b611aca8361162f565b91506020830135611ada81611a83565b809150509250929050565b60008060208385031215611af857600080fd5b82356001600160401b0380821115611b0f57600080fd5b818501915085601f830112611b2357600080fd5b813581811115611b3257600080fd5b866020828501011115611b4457600080fd5b60209290920196919550909350505050565b60008083601f840112611b6857600080fd5b5081356001600160401b03811115611b7f57600080fd5b6020830191508360208260051b8501011115611b9a57600080fd5b9250929050565b600080600080600060608688031215611bb957600080fd5b85356001600160401b0380821115611bd057600080fd5b611bdc89838a01611b56565b90975095506020880135915080821115611bf557600080fd5b50611c0288828901611b56565b96999598509660400135949350505050565b60008060408385031215611c2757600080fd5b611c308361162f565b9150611c3e6020840161162f565b90509250929050565b600080600080600060a08688031215611c5f57600080fd5b611c688661162f565b9450611c766020870161162f565b9350604086013592506060860135915060808601356001600160401b03811115611c9f57600080fd5b61194388828901611834565b600181811c90821680611cbf57607f821691505b602082108103611cdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000808454611cf381611cab565b60018281168015611d0b5760018114611d2057611d4f565b60ff1984168752821515830287019450611d4f565b8860005260208060002060005b85811015611d465781548a820152908401908201611d2d565b50505082870194505b505050508351611d638183602088016116e2565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611daa57611daa611d82565b5060010190565b601f82111561051957600081815260208120601f850160051c81016020861015611dd85750805b601f850160051c820191505b8181101561060b57828155600101611de4565b6001600160401b03831115611e0e57611e0e61175e565b611e2283611e1c8354611cab565b83611db1565b6000601f841160018114611e565760008515611e3e5750838201355b600019600387901b1c1916600186901b178355610ddd565b600083815260209020601f19861690835b82811015611e875786850135825560209485019460019092019101611e67565b5086821015611ea45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601260045260246000fd5b600082611edb57611edb611eb6565b500490565b8181038181111561042257610422611d82565b600082611f0257611f02611eb6565b500690565b8082018082111561042257610422611d82565b600060208284031215611f2c57600080fd5b81516116a881611a83565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006120286040830185611a35565b828103602084015261203a8185611a35565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061207d90830184611706565b979650505050505050565b60006020828403121561209a57600080fd5b81516116a881611675565b600060033d11156120be5760046000803e5060005160e01c5b90565b600060443d10156120cf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156120fe57505050505090565b82850191508151818111156121165750505050505090565b843d87010160208285010111156121305750505050505090565b61213f60208286010187611774565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906121be90830186611a35565b82810360608401526121d08186611a35565b905082810360808401526121e48185611706565b9897505050505050505056fea26469706673582212202594d063ceaf8425d6de2a184da129e7ecfd17686204cd40f5cfb4e7f5d9036d64736f6c63430008110033

Deployed Bytecode Sourcemap

45641:2575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:230;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;30087:230:0;;;;;;;;29110:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;29110:310:0;1019:187:1;46518:269:0;;;;;;:::i;:::-;;:::i;:::-;;47281:83;;;:::i;:::-;;;;;;;:::i;47111:162::-;;;;;;:::i;:::-;;:::i;47911:302::-;;;;;;:::i;:::-;;:::i;46998:105::-;;;;;;:::i;:::-;;:::i;45716:22::-;;;:::i;2827:143::-;;2927:42;2827:143;;;;;-1:-1:-1;;;;;5676:32:1;;;5658:51;;5646:2;5631:18;2827:143:0;5481:234:1;30483:524:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9805:103::-;;;:::i;9157:87::-;9230:6;;-1:-1:-1;;;;;9230:6:0;9157:87;;45803:22;;;;;;;;;47372:87;;;:::i;46897:93::-;;;;;;:::i;:::-;;:::i;47467:176::-;;;;;;:::i;:::-;;:::i;46795:94::-;;;;;;:::i;:::-;;:::i;45771:21::-;;;:::i;45833:28::-;;;;;;;;-1:-1:-1;;;;;45833:28:0;;;45981:231;;;;;;:::i;:::-;;:::i;45745:19::-;;;:::i;31307:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;31430:27:0;;;31406:4;31430:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;31307:168;46220:290;;;;;;:::i;:::-;;:::i;47651:252::-;;;;;;:::i;:::-;;:::i;10063:201::-;;;;;;:::i;:::-;;:::i;30087:230::-;30173:7;-1:-1:-1;;;;;30201:21:0;;30193:76;;;;-1:-1:-1;;;30193:76:0;;11429:2:1;30193:76:0;;;11411:21:1;11468:2;11448:18;;;11441:30;11507:34;11487:18;;;11480:62;-1:-1:-1;;;11558:18:1;;;11551:40;11608:19;;30193:76:0;;;;;;;;;-1:-1:-1;30287:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;30287:22:0;;;;;;;;;;30087:230;;;;;:::o;29110:310::-;29212:4;-1:-1:-1;;;;;;29249:41:0;;-1:-1:-1;;;29249:41:0;;:110;;-1:-1:-1;;;;;;;29307:52:0;;-1:-1:-1;;;29307:52:0;29249:110;:163;;;-1:-1:-1;;;;;;;;;;20661:40:0;;;29376:36;20552:157;46518:269;46633:10;;;;46625:43;;;;-1:-1:-1;;;46625:43:0;;11840:2:1;46625:43:0;;;11822:21:1;11879:2;11859:18;;;11852:30;-1:-1:-1;;;11898:18:1;;;11891:50;11958:18;;46625:43:0;11638:344:1;46625:43:0;46687:13;;;;;-1:-1:-1;;;;;46687:13:0;46704:10;46687:27;46679:51;;;;-1:-1:-1;;;46679:51:0;;12189:2:1;46679:51:0;;;12171:21:1;12228:2;12208:18;;;12201:30;-1:-1:-1;;;12247:18:1;;;12240:41;12298:18;;46679:51:0;11987:335:1;46679:51:0;46741:38;46747:6;46755:7;46764:14;46741:5;:38::i;:::-;46518:269;;;:::o;47281:83::-;47318:13;47351:5;47344:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47281:83;:::o;47111:162::-;47171:13;47228:8;47238:25;47255:7;47238:16;:25::i;:::-;47211:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47197:68;;47111:162;;;:::o;47911:302::-;48131:4;-1:-1:-1;;;;;4168:18:0;;4176:10;4168:18;4164:83;;4203:32;4224:10;4203:20;:32::i;:::-;48148:57:::1;48176:4;48182:2;48186:3;48191:7;48200:4;48148:27;:57::i;:::-;47911:302:::0;;;;;;:::o;46998:105::-;9043:13;:11;:13::i;:::-;47070::::1;:25:::0;;-1:-1:-1;;;;;47070:25:0;;::::1;;;-1:-1:-1::0;;;;;;47070:25:0;;::::1;::::0;;;::::1;::::0;;46998:105::o;45716:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30483:524::-;30639:16;30700:3;:10;30681:8;:15;:29;30673:83;;;;-1:-1:-1;;;30673:83:0;;14065:2:1;30673:83:0;;;14047:21:1;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;-1:-1:-1;;;14194:18:1;;;14187:39;14243:19;;30673:83:0;13863:405:1;30673:83:0;30769:30;30816:8;:15;-1:-1:-1;;;;;30802:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30802:30:0;;30769:63;;30850:9;30845:122;30869:8;:15;30865:1;:19;30845:122;;;30925:30;30935:8;30944:1;30935:11;;;;;;;;:::i;:::-;;;;;;;30948:3;30952:1;30948:6;;;;;;;;:::i;:::-;;;;;;;30925:9;:30::i;:::-;30906:13;30920:1;30906:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;30886:3;;;:::i;:::-;;;30845:122;;;-1:-1:-1;30986:13:0;30483:524;-1:-1:-1;;;30483:524:0:o;9805:103::-;9043:13;:11;:13::i;:::-;9870:30:::1;9897:1;9870:18;:30::i;:::-;9805:103::o:0;47372:87::-;47411:13;47444:7;47437:14;;;;;:::i;46897:93::-;9043:13;:11;:13::i;:::-;46962:10:::1;:20:::0;;-1:-1:-1;;46962:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46897:93::o;47467:176::-;47571:8;4348:30;4369:8;4348:20;:30::i;:::-;47592:43:::1;47616:8;47626;47592:23;:43::i;46795:94::-:0;9043:13;:11;:13::i;:::-;46866:8:::1;:15;46877:4:::0;;46866:8;:15:::1;:::i;45771:21::-:0;;;;;;;:::i;45981:231::-;9043:13;:11;:13::i;:::-;46106:9:::1;46102:102;46121:17:::0;;::::1;46102:102;;;46159:45;46165:6;;46172:1;46165:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;46176:7;46185:11;;46197:1;46185:14;;;;;;;:::i;:::-;;;;;;;46159:45;;;;;;;;;;;::::0;:5:::1;:45::i;:::-;46140:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46102:102;;45745:19:::0;;;;;;;:::i;46220:290::-;46323:10;;;;46315:43;;;;-1:-1:-1;;;46315:43:0;;11840:2:1;46315:43:0;;;11822:21:1;11879:2;11859:18;;;11852:30;-1:-1:-1;;;11898:18:1;;;11891:50;11958:18;;46315:43:0;11638:344:1;46315:43:0;-1:-1:-1;;;;;46377:20:0;;46387:10;46377:20;;:60;;-1:-1:-1;;;;;;31430:27:0;;31406:4;31430:27;;;:18;:27;;;;;;;;46426:10;31430:37;;;;;;;;;;46401:36;46369:84;;;;-1:-1:-1;;;46369:84:0;;12189:2:1;46369:84:0;;;12171:21:1;12228:2;12208:18;;;12201:30;-1:-1:-1;;;12247:18:1;;;12240:41;12298:18;;46369:84:0;11987:335:1;47651:252:0;47818:4;-1:-1:-1;;;;;4168:18:0;;4176:10;4168:18;4164:83;;4203:32;4224:10;4203:20;:32::i;:::-;47840:55:::1;47863:4;47869:2;47873:7;47882:6;47890:4;47840:22;:55::i;10063:201::-:0;9043:13;:11;:13::i;:::-;-1:-1:-1;;;;;10152:22:0;::::1;10144:73;;;::::0;-1:-1:-1;;;10144:73:0;;16811:2:1;10144:73:0::1;::::0;::::1;16793:21:1::0;16850:2;16830:18;;;16823:30;16889:34;16869:18;;;16862:62;-1:-1:-1;;;16940:18:1;;;16933:36;16986:19;;10144:73:0::1;16609:402:1::0;10144:73:0::1;10228:28;10247:8;10228:18;:28::i;:::-;10063:201:::0;:::o;38973:808::-;-1:-1:-1;;;;;39100:18:0;;39092:66;;;;-1:-1:-1;;;39092:66:0;;17218:2:1;39092:66:0;;;17200:21:1;17257:2;17237:18;;;17230:30;17296:34;17276:18;;;17269:62;-1:-1:-1;;;17347:18:1;;;17340:33;17390:19;;39092:66:0;17016:399:1;39092:66:0;7917:10;39171:16;39236:21;39254:2;39236:17;:21::i;:::-;39213:44;;39268:24;39295:25;39313:6;39295:17;:25::i;:::-;39333:66;;;;;;;;;-1:-1:-1;39333:66:0;;;;39434:13;;;;;;;;;-1:-1:-1;;;;;39434:19:0;;;;;;;;39268:52;;-1:-1:-1;39472:21:0;;;;39464:70;;;;-1:-1:-1;;;39464:70:0;;17622:2:1;39464:70:0;;;17604:21:1;17661:2;17641:18;;;17634:30;17700:34;17680:18;;;17673:62;-1:-1:-1;;;17751:18:1;;;17744:34;17795:19;;39464:70:0;17420:400:1;39464:70:0;39570:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39570:19:0;;;;;;;;;;;;39592:20;;;39570:42;;39641:54;;17999:25:1;;;18040:18;;;18033:34;;;39570:19:0;;39641:54;;;;;;17972:18:1;39641:54:0;;;;;;;39708:65;;;;;;;;;39752:1;39708:65;;;39081:700;;;;38973:808;;;:::o;5511:723::-;5567:13;5788:5;5797:1;5788:10;5784:53;;-1:-1:-1;;5815:10:0;;;;;;;;;;;;-1:-1:-1;;;5815:10:0;;;;;5511:723::o;5784:53::-;5862:5;5847:12;5903:78;5910:9;;5903:78;;5936:8;;;;:::i;:::-;;-1:-1:-1;5959:10:0;;-1:-1:-1;5967:2:0;5959:10;;:::i;:::-;;;5903:78;;;5991:19;6023:6;-1:-1:-1;;;;;6013:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6013:17:0;;5991:39;;6041:154;6048:10;;6041:154;;6075:11;6085:1;6075:11;;:::i;:::-;;-1:-1:-1;6144:10:0;6152:2;6144:5;:10;:::i;:::-;6131:24;;:2;:24;:::i;:::-;6118:39;;6101:6;6108;6101:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6101:56:0;;;;;;;;-1:-1:-1;6172:11:0;6181:2;6172:11;;:::i;:::-;;;6041:154;;;6219:6;5511:723;-1:-1:-1;;;;5511:723:0:o;4410:419::-;2927:42;4601:45;:49;4597:225;;4672:67;;-1:-1:-1;;;4672:67:0;;4723:4;4672:67;;;18927:34:1;-1:-1:-1;;;;;18997:15:1;;18977:18;;;18970:43;2927:42:0;;4672;;18862:18:1;;4672:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4667:144;;4767:28;;-1:-1:-1;;;4767:28:0;;-1:-1:-1;;;;;5676:32:1;;4767:28:0;;;5658:51:1;5631:18;;4767:28:0;5481:234:1;32031:439:0;-1:-1:-1;;;;;32264:20:0;;7917:10;32264:20;;:60;;-1:-1:-1;32288:36:0;32305:4;7917:10;31307:168;:::i;32288:36::-;32242:157;;;;-1:-1:-1;;;32242:157:0;;;;;;;:::i;:::-;32410:52;32433:4;32439:2;32443:3;32448:7;32457:4;32410:22;:52::i;:::-;32031:439;;;;;:::o;9322:132::-;9230:6;;-1:-1:-1;;;;;9230:6:0;7917:10;9386:23;9378:68;;;;-1:-1:-1;;;9378:68:0;;19892:2:1;9378:68:0;;;19874:21:1;;;19911:18;;;19904:30;19970:34;19950:18;;;19943:62;20022:18;;9378:68:0;19690:356:1;10424:191:0;10517:6;;;-1:-1:-1;;;;;10534:17:0;;;-1:-1:-1;;;;;;10534:17:0;;;;;;;10567:40;;10517:6;;;10534:17;10517:6;;10567:40;;10498:16;;10567:40;10487:128;10424:191;:::o;31080:155::-;31175:52;7917:10;31208:8;31218;31175:18;:52::i;:::-;31080:155;;:::o;36730:729::-;-1:-1:-1;;;;;36883:16:0;;36875:62;;;;-1:-1:-1;;;36875:62:0;;20253:2:1;36875:62:0;;;20235:21:1;20292:2;20272:18;;;20265:30;20331:34;20311:18;;;20304:62;-1:-1:-1;;;20382:18:1;;;20375:31;20423:19;;36875:62:0;20051:397:1;36875:62:0;7917:10;36950:16;37015:21;37033:2;37015:17;:21::i;:::-;36992:44;;37047:24;37074:25;37092:6;37074:17;:25::i;:::-;37047:52;;37191:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37191:17:0;;;;;;;;;:27;;37212:6;;37191:9;:27;;37212:6;;37191:27;:::i;:::-;;;;-1:-1:-1;;37234:52:0;;;17999:25:1;;;18055:2;18040:18;;18033:34;;;-1:-1:-1;;;;;37234:52:0;;;;37267:1;;37234:52;;;;;;17972:18:1;37234:52:0;;;;;;;37377:74;37408:8;37426:1;37430:2;37434;37438:6;37446:4;37377:30;:74::i;31547:407::-;-1:-1:-1;;;;;31755:20:0;;7917:10;31755:20;;:60;;-1:-1:-1;31779:36:0;31796:4;7917:10;31307:168;:::i;31779:36::-;31733:157;;;;-1:-1:-1;;;31733:157:0;;;;;;;:::i;:::-;31901:45;31919:4;31925:2;31929;31933:6;31941:4;31901:17;:45::i;45409:198::-;45529:16;;;45543:1;45529:16;;;;;;;;;45475;;45504:22;;45529:16;;;;;;;;;;;;-1:-1:-1;45529:16:0;45504:41;;45567:7;45556:5;45562:1;45556:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;45594:5;45409:198;-1:-1:-1;;45409:198:0:o;34266:1146::-;34493:7;:14;34479:3;:10;:28;34471:81;;;;-1:-1:-1;;;34471:81:0;;20655:2:1;34471:81:0;;;20637:21:1;20694:2;20674:18;;;20667:30;20733:34;20713:18;;;20706:62;-1:-1:-1;;;20784:18:1;;;20777:38;20832:19;;34471:81:0;20453:404:1;34471:81:0;-1:-1:-1;;;;;34571:16:0;;34563:66;;;;-1:-1:-1;;;34563:66:0;;;;;;;:::i;:::-;7917:10;34642:16;34759:421;34783:3;:10;34779:1;:14;34759:421;;;34815:10;34828:3;34832:1;34828:6;;;;;;;;:::i;:::-;;;;;;;34815:19;;34849:14;34866:7;34874:1;34866:10;;;;;;;;:::i;:::-;;;;;;;;;;;;34893:19;34915:13;;;;;;;;;;-1:-1:-1;;;;;34915:19:0;;;;;;;;;;;;34866:10;;-1:-1:-1;34957:21:0;;;;34949:76;;;;-1:-1:-1;;;34949:76:0;;;;;;;:::i;:::-;35069:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35069:19:0;;;;;;;;;;35091:20;;;35069:42;;35141:17;;;;;;;:27;;35091:20;;35069:9;35141:27;;35091:20;;35141:27;:::i;:::-;;;;;;;;34800:380;;;34795:3;;;;:::i;:::-;;;34759:421;;;;35227:2;-1:-1:-1;;;;;35197:47:0;35221:4;-1:-1:-1;;;;;35197:47:0;35211:8;-1:-1:-1;;;;;35197:47:0;;35231:3;35236:7;35197:47;;;;;;;:::i;:::-;;;;;;;;35329:75;35365:8;35375:4;35381:2;35385:3;35390:7;35399:4;35329:35;:75::i;41143:331::-;41298:8;-1:-1:-1;;;;;41289:17:0;:5;-1:-1:-1;;;;;41289:17:0;;41281:71;;;;-1:-1:-1;;;41281:71:0;;22351:2:1;41281:71:0;;;22333:21:1;22390:2;22370:18;;;22363:30;22429:34;22409:18;;;22402:62;-1:-1:-1;;;22480:18:1;;;22473:39;22529:19;;41281:71:0;22149:405:1;41281:71:0;-1:-1:-1;;;;;41363:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;41363:46:0;;;;;;;;;;41425:41;;1159::1;;;41425::0;;1132:18:1;41425:41:0;;;;;;;41143:331;;;:::o;43836:744::-;-1:-1:-1;;;;;44051:13:0;;12023:19;:23;44047:526;;44087:72;;-1:-1:-1;;;44087:72:0;;-1:-1:-1;;;;;44087:38:0;;;;;:72;;44126:8;;44136:4;;44142:2;;44146:6;;44154:4;;44087:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44087:72:0;;;;;;;;-1:-1:-1;;44087:72:0;;;;;;;;;;;;:::i;:::-;;;44083:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;44435:6;44428:14;;-1:-1:-1;;;44428:14:0;;;;;;;;:::i;44083:479::-;;;44484:62;;-1:-1:-1;;;44484:62:0;;24441:2:1;44484:62:0;;;24423:21:1;24480:2;24460:18;;;24453:30;24519:34;24499:18;;;24492:62;-1:-1:-1;;;24570:18:1;;;24563:50;24630:19;;44484:62:0;24239:416:1;44083:479:0;-1:-1:-1;;;;;;44209:55:0;;-1:-1:-1;;;44209:55:0;44205:154;;44289:50;;-1:-1:-1;;;44289:50:0;;;;;;;:::i;32934:974::-;-1:-1:-1;;;;;33122:16:0;;33114:66;;;;-1:-1:-1;;;33114:66:0;;;;;;;:::i;:::-;7917:10;33193:16;33258:21;33276:2;33258:17;:21::i;:::-;33235:44;;33290:24;33317:25;33335:6;33317:17;:25::i;:::-;33290:52;;33428:19;33450:13;;;;;;;;;;;-1:-1:-1;;;;;33450:19:0;;;;;;;;;;33488:21;;;;33480:76;;;;-1:-1:-1;;;33480:76:0;;;;;;;:::i;:::-;33592:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33592:19:0;;;;;;;;;;33614:20;;;33592:42;;33656:17;;;;;;;:27;;33614:20;;33592:9;33656:27;;33614:20;;33656:27;:::i;:::-;;;;-1:-1:-1;;33701:46:0;;;17999:25:1;;;18055:2;18040:18;;18033:34;;;-1:-1:-1;;;;;33701:46:0;;;;;;;;;;;;;;17972:18:1;33701:46:0;;;;;;;33832:68;33863:8;33873:4;33879:2;33883;33887:6;33895:4;33832:30;:68::i;:::-;33103:805;;;;32934:974;;;;;:::o;44588:813::-;-1:-1:-1;;;;;44828:13:0;;12023:19;:23;44824:570;;44864:79;;-1:-1:-1;;;44864:79:0;;-1:-1:-1;;;;;44864:43:0;;;;;:79;;44908:8;;44918:4;;44924:3;;44929:7;;44938:4;;44864:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44864:79:0;;;;;;;;-1:-1:-1;;44864:79:0;;;;;;;;;;;;:::i;:::-;;;44860:523;;;;:::i;:::-;-1:-1:-1;;;;;;45025:60:0;;-1:-1:-1;;;45025:60:0;45021:159;;45110:50;;-1:-1:-1;;;45110:50:0;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:322::-;1288:6;1296;1304;1357:2;1345:9;1336:7;1332:23;1328:32;1325:52;;;1373:1;1370;1363:12;1325:52;1396:29;1415:9;1396:29;:::i;:::-;1386:39;1472:2;1457:18;;1444:32;;-1:-1:-1;1523:2:1;1508:18;;;1495:32;;1211:322;-1:-1:-1;;;1211:322:1:o;1538:250::-;1623:1;1633:113;1647:6;1644:1;1641:13;1633:113;;;1723:11;;;1717:18;1704:11;;;1697:39;1669:2;1662:10;1633:113;;;-1:-1:-1;;1780:1:1;1762:16;;1755:27;1538:250::o;1793:271::-;1835:3;1873:5;1867:12;1900:6;1895:3;1888:19;1916:76;1985:6;1978:4;1973:3;1969:14;1962:4;1955:5;1951:16;1916:76;:::i;:::-;2046:2;2025:15;-1:-1:-1;;2021:29:1;2012:39;;;;2053:4;2008:50;;1793:271;-1:-1:-1;;1793:271:1:o;2069:220::-;2218:2;2207:9;2200:21;2181:4;2238:45;2279:2;2268:9;2264:18;2256:6;2238:45;:::i;2294:180::-;2353:6;2406:2;2394:9;2385:7;2381:23;2377:32;2374:52;;;2422:1;2419;2412:12;2374:52;-1:-1:-1;2445:23:1;;2294:180;-1:-1:-1;2294:180:1:o;2479:127::-;2540:10;2535:3;2531:20;2528:1;2521:31;2571:4;2568:1;2561:15;2595:4;2592:1;2585:15;2611:249;2721:2;2702:13;;-1:-1:-1;;2698:27:1;2686:40;;-1:-1:-1;;;;;2741:34:1;;2777:22;;;2738:62;2735:88;;;2803:18;;:::i;:::-;2839:2;2832:22;-1:-1:-1;;2611:249:1:o;2865:183::-;2925:4;-1:-1:-1;;;;;2950:6:1;2947:30;2944:56;;;2980:18;;:::i;:::-;-1:-1:-1;3025:1:1;3021:14;3037:4;3017:25;;2865:183::o;3053:724::-;3107:5;3160:3;3153:4;3145:6;3141:17;3137:27;3127:55;;3178:1;3175;3168:12;3127:55;3214:6;3201:20;3240:4;3263:43;3303:2;3263:43;:::i;:::-;3335:2;3329:9;3347:31;3375:2;3367:6;3347:31;:::i;:::-;3413:18;;;3505:1;3501:10;;;;3489:23;;3485:32;;;3447:15;;;;-1:-1:-1;3529:15:1;;;3526:35;;;3557:1;3554;3547:12;3526:35;3593:2;3585:6;3581:15;3605:142;3621:6;3616:3;3613:15;3605:142;;;3687:17;;3675:30;;3725:12;;;;3638;;3605:142;;;-1:-1:-1;3765:6:1;3053:724;-1:-1:-1;;;;;;3053:724:1:o;3782:555::-;3824:5;3877:3;3870:4;3862:6;3858:17;3854:27;3844:55;;3895:1;3892;3885:12;3844:55;3931:6;3918:20;-1:-1:-1;;;;;3953:2:1;3950:26;3947:52;;;3979:18;;:::i;:::-;4028:2;4022:9;4040:67;4095:2;4076:13;;-1:-1:-1;;4072:27:1;4101:4;4068:38;4022:9;4040:67;:::i;:::-;4131:2;4123:6;4116:18;4177:3;4170:4;4165:2;4157:6;4153:15;4149:26;4146:35;4143:55;;;4194:1;4191;4184:12;4143:55;4258:2;4251:4;4243:6;4239:17;4232:4;4224:6;4220:17;4207:54;4305:1;4281:15;;;4298:4;4277:26;4270:37;;;;4285:6;3782:555;-1:-1:-1;;;3782:555:1:o;4342:943::-;4496:6;4504;4512;4520;4528;4581:3;4569:9;4560:7;4556:23;4552:33;4549:53;;;4598:1;4595;4588:12;4549:53;4621:29;4640:9;4621:29;:::i;:::-;4611:39;;4669:38;4703:2;4692:9;4688:18;4669:38;:::i;:::-;4659:48;;4758:2;4747:9;4743:18;4730:32;-1:-1:-1;;;;;4822:2:1;4814:6;4811:14;4808:34;;;4838:1;4835;4828:12;4808:34;4861:61;4914:7;4905:6;4894:9;4890:22;4861:61;:::i;:::-;4851:71;;4975:2;4964:9;4960:18;4947:32;4931:48;;5004:2;4994:8;4991:16;4988:36;;;5020:1;5017;5010:12;4988:36;5043:63;5098:7;5087:8;5076:9;5072:24;5043:63;:::i;:::-;5033:73;;5159:3;5148:9;5144:19;5131:33;5115:49;;5189:2;5179:8;5176:16;5173:36;;;5205:1;5202;5195:12;5173:36;;5228:51;5271:7;5260:8;5249:9;5245:24;5228:51;:::i;:::-;5218:61;;;4342:943;;;;;;;;:::o;5290:186::-;5349:6;5402:2;5390:9;5381:7;5377:23;5373:32;5370:52;;;5418:1;5415;5408:12;5370:52;5441:29;5460:9;5441:29;:::i;5720:1208::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;5955:9;5942:23;-1:-1:-1;;;;;6025:2:1;6017:6;6014:14;6011:34;;;6041:1;6038;6031:12;6011:34;6079:6;6068:9;6064:22;6054:32;;6124:7;6117:4;6113:2;6109:13;6105:27;6095:55;;6146:1;6143;6136:12;6095:55;6182:2;6169:16;6204:4;6227:43;6267:2;6227:43;:::i;:::-;6299:2;6293:9;6311:31;6339:2;6331:6;6311:31;:::i;:::-;6377:18;;;6465:1;6461:10;;;;6453:19;;6449:28;;;6411:15;;;;-1:-1:-1;6489:19:1;;;6486:39;;;6521:1;6518;6511:12;6486:39;6545:11;;;;6565:148;6581:6;6576:3;6573:15;6565:148;;;6647:23;6666:3;6647:23;:::i;:::-;6635:36;;6598:12;;;;6691;;;;6565:148;;;6732:6;-1:-1:-1;;6776:18:1;;6763:32;;-1:-1:-1;;6807:16:1;;;6804:36;;;6836:1;6833;6826:12;6804:36;;6859:63;6914:7;6903:8;6892:9;6888:24;6859:63;:::i;:::-;6849:73;;;5720:1208;;;;;:::o;6933:435::-;6986:3;7024:5;7018:12;7051:6;7046:3;7039:19;7077:4;7106:2;7101:3;7097:12;7090:19;;7143:2;7136:5;7132:14;7164:1;7174:169;7188:6;7185:1;7182:13;7174:169;;;7249:13;;7237:26;;7283:12;;;;7318:15;;;;7210:1;7203:9;7174:169;;;-1:-1:-1;7359:3:1;;6933:435;-1:-1:-1;;;;;6933:435:1:o;7373:261::-;7552:2;7541:9;7534:21;7515:4;7572:56;7624:2;7613:9;7609:18;7601:6;7572:56;:::i;7847:118::-;7933:5;7926:13;7919:21;7912:5;7909:32;7899:60;;7955:1;7952;7945:12;7970:241;8026:6;8079:2;8067:9;8058:7;8054:23;8050:32;8047:52;;;8095:1;8092;8085:12;8047:52;8134:9;8121:23;8153:28;8175:5;8153:28;:::i;8216:315::-;8281:6;8289;8342:2;8330:9;8321:7;8317:23;8313:32;8310:52;;;8358:1;8355;8348:12;8310:52;8381:29;8400:9;8381:29;:::i;:::-;8371:39;;8460:2;8449:9;8445:18;8432:32;8473:28;8495:5;8473:28;:::i;:::-;8520:5;8510:15;;;8216:315;;;;;:::o;8536:592::-;8607:6;8615;8668:2;8656:9;8647:7;8643:23;8639:32;8636:52;;;8684:1;8681;8674:12;8636:52;8724:9;8711:23;-1:-1:-1;;;;;8794:2:1;8786:6;8783:14;8780:34;;;8810:1;8807;8800:12;8780:34;8848:6;8837:9;8833:22;8823:32;;8893:7;8886:4;8882:2;8878:13;8874:27;8864:55;;8915:1;8912;8905:12;8864:55;8955:2;8942:16;8981:2;8973:6;8970:14;8967:34;;;8997:1;8994;8987:12;8967:34;9042:7;9037:2;9028:6;9024:2;9020:15;9016:24;9013:37;9010:57;;;9063:1;9060;9053:12;9010:57;9094:2;9086:11;;;;;9116:6;;-1:-1:-1;8536:592:1;;-1:-1:-1;;;;8536:592:1:o;9133:367::-;9196:8;9206:6;9260:3;9253:4;9245:6;9241:17;9237:27;9227:55;;9278:1;9275;9268:12;9227:55;-1:-1:-1;9301:20:1;;-1:-1:-1;;;;;9333:30:1;;9330:50;;;9376:1;9373;9366:12;9330:50;9413:4;9405:6;9401:17;9389:29;;9473:3;9466:4;9456:6;9453:1;9449:14;9441:6;9437:27;9433:38;9430:47;9427:67;;;9490:1;9487;9480:12;9427:67;9133:367;;;;;:::o;9505:841::-;9636:6;9644;9652;9660;9668;9721:2;9709:9;9700:7;9696:23;9692:32;9689:52;;;9737:1;9734;9727:12;9689:52;9777:9;9764:23;-1:-1:-1;;;;;9847:2:1;9839:6;9836:14;9833:34;;;9863:1;9860;9853:12;9833:34;9902:70;9964:7;9955:6;9944:9;9940:22;9902:70;:::i;:::-;9991:8;;-1:-1:-1;9876:96:1;-1:-1:-1;10079:2:1;10064:18;;10051:32;;-1:-1:-1;10095:16:1;;;10092:36;;;10124:1;10121;10114:12;10092:36;;10163:72;10227:7;10216:8;10205:9;10201:24;10163:72;:::i;:::-;9505:841;;;;-1:-1:-1;10254:8:1;10336:2;10321:18;10308:32;;9505:841;-1:-1:-1;;;;9505:841:1:o;10351:260::-;10419:6;10427;10480:2;10468:9;10459:7;10455:23;10451:32;10448:52;;;10496:1;10493;10486:12;10448:52;10519:29;10538:9;10519:29;:::i;:::-;10509:39;;10567:38;10601:2;10590:9;10586:18;10567:38;:::i;:::-;10557:48;;10351:260;;;;;:::o;10616:606::-;10720:6;10728;10736;10744;10752;10805:3;10793:9;10784:7;10780:23;10776:33;10773:53;;;10822:1;10819;10812:12;10773:53;10845:29;10864:9;10845:29;:::i;:::-;10835:39;;10893:38;10927:2;10916:9;10912:18;10893:38;:::i;:::-;10883:48;;10978:2;10967:9;10963:18;10950:32;10940:42;;11029:2;11018:9;11014:18;11001:32;10991:42;;11084:3;11073:9;11069:19;11056:33;-1:-1:-1;;;;;11104:6:1;11101:30;11098:50;;;11144:1;11141;11134:12;11098:50;11167:49;11208:7;11199:6;11188:9;11184:22;11167:49;:::i;12327:380::-;12406:1;12402:12;;;;12449;;;12470:61;;12524:4;12516:6;12512:17;12502:27;;12470:61;12577:2;12569:6;12566:14;12546:18;12543:38;12540:161;;12623:10;12618:3;12614:20;12611:1;12604:31;12658:4;12655:1;12648:15;12686:4;12683:1;12676:15;12540:161;;12327:380;;;:::o;12838:1020::-;13014:3;13043:1;13076:6;13070:13;13106:36;13132:9;13106:36;:::i;:::-;13161:1;13178:18;;;13205:133;;;;13352:1;13347:356;;;;13171:532;;13205:133;-1:-1:-1;;13238:24:1;;13226:37;;13311:14;;13304:22;13292:35;;13283:45;;;-1:-1:-1;13205:133:1;;13347:356;13378:6;13375:1;13368:17;13408:4;13453:2;13450:1;13440:16;13478:1;13492:165;13506:6;13503:1;13500:13;13492:165;;;13584:14;;13571:11;;;13564:35;13627:16;;;;13521:10;;13492:165;;;13496:3;;;13686:6;13681:3;13677:16;13670:23;;13171:532;;;;;13734:6;13728:13;13750:68;13809:8;13804:3;13797:4;13789:6;13785:17;13750:68;:::i;:::-;13834:18;;12838:1020;-1:-1:-1;;;;12838:1020:1:o;14273:127::-;14334:10;14329:3;14325:20;14322:1;14315:31;14365:4;14362:1;14355:15;14389:4;14386:1;14379:15;14405:127;14466:10;14461:3;14457:20;14454:1;14447:31;14497:4;14494:1;14487:15;14521:4;14518:1;14511:15;14537:135;14576:3;14597:17;;;14594:43;;14617:18;;:::i;:::-;-1:-1:-1;14664:1:1;14653:13;;14537:135::o;14677:545::-;14779:2;14774:3;14771:11;14768:448;;;14815:1;14840:5;14836:2;14829:17;14885:4;14881:2;14871:19;14955:2;14943:10;14939:19;14936:1;14932:27;14926:4;14922:38;14991:4;14979:10;14976:20;14973:47;;;-1:-1:-1;15014:4:1;14973:47;15069:2;15064:3;15060:12;15057:1;15053:20;15047:4;15043:31;15033:41;;15124:82;15142:2;15135:5;15132:13;15124:82;;;15187:17;;;15168:1;15157:13;15124:82;;15398:1206;-1:-1:-1;;;;;15517:3:1;15514:27;15511:53;;;15544:18;;:::i;:::-;15573:94;15663:3;15623:38;15655:4;15649:11;15623:38;:::i;:::-;15617:4;15573:94;:::i;:::-;15693:1;15718:2;15713:3;15710:11;15735:1;15730:616;;;;16390:1;16407:3;16404:93;;;-1:-1:-1;16463:19:1;;;16450:33;16404:93;-1:-1:-1;;15355:1:1;15351:11;;;15347:24;15343:29;15333:40;15379:1;15375:11;;;15330:57;16510:78;;15703:895;;15730:616;12785:1;12778:14;;;12822:4;12809:18;;-1:-1:-1;;15766:17:1;;;15867:9;15889:229;15903:7;15900:1;15897:14;15889:229;;;15992:19;;;15979:33;15964:49;;16099:4;16084:20;;;;16052:1;16040:14;;;;15919:12;15889:229;;;15893:3;16146;16137:7;16134:16;16131:159;;;16270:1;16266:6;16260:3;16254;16251:1;16247:11;16243:21;16239:34;16235:39;16222:9;16217:3;16213:19;16200:33;16196:79;16188:6;16181:95;16131:159;;;16333:1;16327:3;16324:1;16320:11;16316:19;16310:4;16303:33;15703:895;;15398:1206;;;:::o;18078:127::-;18139:10;18134:3;18130:20;18127:1;18120:31;18170:4;18167:1;18160:15;18194:4;18191:1;18184:15;18210:120;18250:1;18276;18266:35;;18281:18;;:::i;:::-;-1:-1:-1;18315:9:1;;18210:120::o;18335:128::-;18402:9;;;18423:11;;;18420:37;;;18437:18;;:::i;18468:112::-;18500:1;18526;18516:35;;18531:18;;:::i;:::-;-1:-1:-1;18565:9:1;;18468:112::o;18585:125::-;18650:9;;;18671:10;;;18668:36;;;18684:18;;:::i;19024:245::-;19091:6;19144:2;19132:9;19123:7;19119:23;19115:32;19112:52;;;19160:1;19157;19150:12;19112:52;19192:9;19186:16;19211:28;19233:5;19211:28;:::i;19274:411::-;19476:2;19458:21;;;19515:2;19495:18;;;19488:30;19554:34;19549:2;19534:18;;19527:62;-1:-1:-1;;;19620:2:1;19605:18;;19598:45;19675:3;19660:19;;19274:411::o;20862:401::-;21064:2;21046:21;;;21103:2;21083:18;;;21076:30;21142:34;21137:2;21122:18;;21115:62;-1:-1:-1;;;21208:2:1;21193:18;;21186:35;21253:3;21238:19;;20862:401::o;21268:406::-;21470:2;21452:21;;;21509:2;21489:18;;;21482:30;21548:34;21543:2;21528:18;;21521:62;-1:-1:-1;;;21614:2:1;21599:18;;21592:40;21664:3;21649:19;;21268:406::o;21679:465::-;21936:2;21925:9;21918:21;21899:4;21962:56;22014:2;22003:9;21999:18;21991:6;21962:56;:::i;:::-;22066:9;22058:6;22054:22;22049:2;22038:9;22034:18;22027:50;22094:44;22131:6;22123;22094:44;:::i;:::-;22086:52;21679:465;-1:-1:-1;;;;;21679:465:1:o;22559:561::-;-1:-1:-1;;;;;22856:15:1;;;22838:34;;22908:15;;22903:2;22888:18;;22881:43;22955:2;22940:18;;22933:34;;;22998:2;22983:18;;22976:34;;;22818:3;23041;23026:19;;23019:32;;;22781:4;;23068:46;;23094:19;;23086:6;23068:46;:::i;:::-;23060:54;22559:561;-1:-1:-1;;;;;;;22559:561:1:o;23125:249::-;23194:6;23247:2;23235:9;23226:7;23222:23;23218:32;23215:52;;;23263:1;23260;23253:12;23215:52;23295:9;23289:16;23314:30;23338:5;23314:30;:::i;23379:179::-;23414:3;23456:1;23438:16;23435:23;23432:120;;;23502:1;23499;23496;23481:23;-1:-1:-1;23539:1:1;23533:8;23528:3;23524:18;23432:120;23379:179;:::o;23563:671::-;23602:3;23644:4;23626:16;23623:26;23620:39;;;23563:671;:::o;23620:39::-;23686:2;23680:9;-1:-1:-1;;23751:16:1;23747:25;;23744:1;23680:9;23723:50;23802:4;23796:11;23826:16;-1:-1:-1;;;;;23932:2:1;23925:4;23917:6;23913:17;23910:25;23905:2;23897:6;23894:14;23891:45;23888:58;;;23939:5;;;;;23563:671;:::o;23888:58::-;23976:6;23970:4;23966:17;23955:28;;24012:3;24006:10;24039:2;24031:6;24028:14;24025:27;;;24045:5;;;;;;23563:671;:::o;24025:27::-;24129:2;24110:16;24104:4;24100:27;24096:36;24089:4;24080:6;24075:3;24071:16;24067:27;24064:69;24061:82;;;24136:5;;;;;;23563:671;:::o;24061:82::-;24152:57;24203:4;24194:6;24186;24182:19;24178:30;24172:4;24152:57;:::i;:::-;-1:-1:-1;24225:3:1;;23563:671;-1:-1:-1;;;;;23563:671:1:o;24660:404::-;24862:2;24844:21;;;24901:2;24881:18;;;24874:30;24940:34;24935:2;24920:18;;24913:62;-1:-1:-1;;;25006:2:1;24991:18;;24984:38;25054:3;25039:19;;24660:404::o;25069:827::-;-1:-1:-1;;;;;25466:15:1;;;25448:34;;25518:15;;25513:2;25498:18;;25491:43;25428:3;25565:2;25550:18;;25543:31;;;25391:4;;25597:57;;25634:19;;25626:6;25597:57;:::i;:::-;25702:9;25694:6;25690:22;25685:2;25674:9;25670:18;25663:50;25736:44;25773:6;25765;25736:44;:::i;:::-;25722:58;;25829:9;25821:6;25817:22;25811:3;25800:9;25796:19;25789:51;25857:33;25883:6;25875;25857:33;:::i;:::-;25849:41;25069:827;-1:-1:-1;;;;;;;;25069:827:1:o

Swarm Source

ipfs://2594d063ceaf8425d6de2a184da129e7ecfd17686204cd40f5cfb4e7f5d9036d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.