POL Price: $0.696229 (-0.70%)
Gas: 40 GWei
 

Overview

Max Total Supply

0

Holders

54,180

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xb048d86978c8f6cce5b1f0c86b06514e59736593
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
RecipientNFT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2023-08-27
*/

// SPDX-License-Identifier: UNLICENSED



// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev 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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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);
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


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

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.9.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.9.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 or 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 or 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;
    }
}

// File: contracts/yaeblan.sol



pragma solidity ^0.8.0;




contract RecipientNFT is ERC1155, Ownable {
    uint256 private coinbase = 0;
    string private _baseTokenURI;
    string public name;
    string public symbol;
    uint256 private amount = 20000;

    constructor(string memory baseTokenURI) ERC1155(baseTokenURI) {
        name = "$1099 USDC";
        symbol = "$1099 USDC";
        _baseTokenURI = baseTokenURI;
        // _mint(msg.sender, coinbase,amount, "");
    }

    function setBaseTokenURI(string memory newBaseTokenURI) public onlyOwner {
        _baseTokenURI = newBaseTokenURI;
    }

    function airdrop(address[] memory recipients) public onlyOwner {
        for (uint256 i = 0; i < recipients.length; i++) {
             if(!isContract(recipients[i])){
               _mint(recipients[i], coinbase, 1, "");
               
                // coinbase++;
                
            }
            
        }
    }
    function mint(address to)
        public
        onlyOwner
        {
        
        _mint(to, coinbase, 1, "");
        }
    
    function isContract(address _addr) internal view returns (bool) {
        return Address.isContract(_addr);
    }
    

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"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":[{"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":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"id","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":"string","name":"newBaseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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"}]

60806040526000600455614e206008553480156200001c57600080fd5b506040516200391238038062003912833981810160405281019062000042919062000392565b8062000054816200011c60201b60201c565b5062000075620000696200013160201b60201c565b6200013960201b60201c565b6040518060400160405280600a81526020017f243130393920555344430000000000000000000000000000000000000000000081525060069081620000bb91906200062e565b506040518060400160405280600a81526020017f2431303939205553444300000000000000000000000000000000000000000000815250600790816200010291906200062e565b5080600590816200011491906200062e565b505062000715565b80600290816200012d91906200062e565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000268826200021d565b810181811067ffffffffffffffff821117156200028a57620002896200022e565b5b80604052505050565b60006200029f620001ff565b9050620002ad82826200025d565b919050565b600067ffffffffffffffff821115620002d057620002cf6200022e565b5b620002db826200021d565b9050602081019050919050565b60005b8381101562000308578082015181840152602081019050620002eb565b60008484015250505050565b60006200032b6200032584620002b2565b62000293565b9050828152602081018484840111156200034a576200034962000218565b5b62000357848285620002e8565b509392505050565b600082601f83011262000377576200037662000213565b5b81516200038984826020860162000314565b91505092915050565b600060208284031215620003ab57620003aa62000209565b5b600082015167ffffffffffffffff811115620003cc57620003cb6200020e565b5b620003da848285016200035f565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043657607f821691505b6020821081036200044c576200044b620003ee565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000477565b620004c2868362000477565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200050f620005096200050384620004da565b620004e4565b620004da565b9050919050565b6000819050919050565b6200052b83620004ee565b620005436200053a8262000516565b84845462000484565b825550505050565b600090565b6200055a6200054b565b6200056781848462000520565b505050565b5b818110156200058f576200058360008262000550565b6001810190506200056d565b5050565b601f821115620005de57620005a88162000452565b620005b38462000467565b81016020851015620005c3578190505b620005db620005d28562000467565b8301826200056c565b50505b505050565b600082821c905092915050565b60006200060360001984600802620005e3565b1980831691505092915050565b60006200061e8383620005f0565b9150826002028217905092915050565b6200063982620003e3565b67ffffffffffffffff8111156200065557620006546200022e565b5b6200066182546200041d565b6200066e82828562000593565b600060209050601f831160018114620006a6576000841562000691578287015190505b6200069d858262000610565b8655506200070d565b601f198416620006b68662000452565b60005b82811015620006e057848901518255600182019150602085019450602081019050620006b9565b86831015620007005784890151620006fc601f891682620005f0565b8355505b6001600288020188555050505b505050505050565b6131ed80620007256000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a46565b61031c565b60405161012b9190611a95565b60405180910390f35b61014e60048036038101906101499190611b08565b6103e4565b60405161015b9190611b50565b60405180910390f35b61016c6104c6565b6040516101799190611bfb565b60405180910390f35b61019c60048036038101906101979190611c1d565b610554565b6040516101a99190611bfb565b60405180910390f35b6101cc60048036038101906101c79190611e47565b610580565b005b6101e860048036038101906101e39190611fb7565b610621565b005b61020460048036038101906101ff91906120c3565b61063c565b60405161021191906121f9565b60405180910390f35b610234600480360381019061022f919061221b565b610755565b005b61023e61077e565b005b61025a60048036038101906102559190612248565b610792565b005b61026461081d565b60405161027191906122a0565b60405180910390f35b610282610847565b60405161028f9190611bfb565b60405180910390f35b6102b260048036038101906102ad91906122e7565b6108d5565b005b6102ce60048036038101906102c99190612327565b6108eb565b6040516102db9190611b50565b60405180910390f35b6102fe60048036038101906102f99190612367565b61097f565b005b61031a6004803603810190610315919061221b565b610a20565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612470565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa3565b5b9050919050565b600680546104d3906124bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124bf565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b4565b6040516020818303038152906040529050919050565b610588610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0d565b6108eb565b5b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061264e565b60405180910390fd5b61061a8585858585610b15565b5050505050565b610629610e36565b80600590816106389190612805565b5050565b60608151835114610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067990612949565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c4f565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f1612969565b5b602002602001015185838151811061070d5761070c612969565b5b602002602001015161031c565b82828151811061072d5761072c612969565b5b60200260200101818152505080610743906129c7565b90506106d3565b508091505092915050565b61075d610e36565b61077b81600454600160405180602001604052806000815250610eb4565b50565b610786610e36565b6107906000611064565b565b61079a610e36565b60005b8151811015610819576107c98282815181106107bc576107bb612969565b5b602002602001015161112a565b610806576108058282815181106107e3576107e2612969565b5b6020026020010151600454600160405180602001604052806000815250610eb4565b5b8080610811906129c7565b91505061079d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610854906124bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610880906124bf565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b6108e76108e0610b0d565b838361113c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610987610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cd57506109cc856109c7610b0d565b6108eb565b5b610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a039061264e565b60405180910390fd5b610a1985858585856112a8565b5050505050565b610a28610e36565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90612a81565b60405180910390fd5b610aa081611064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612ba5565b60405180910390fd5b6000610bd2610b0d565b9050610be2818787878787611543565b60005b8451811015610d93576000858281518110610c0357610c02612969565b5b602002602001015190506000858381518110610c2257610c21612969565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612c37565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d789190612c57565b9250508190555050505080610d8c906129c7565b9050610be5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0a929190612c8b565b60405180910390a4610e2081878787878761154b565b610e2e818787878787611553565b505050505050565b610e3e610b0d565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61081d565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612d0e565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612da0565b60405180910390fd5b6000610f2d610b0d565b90506000610f3a8561172a565b90506000610f478561172a565b9050610f5883600089858589611543565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb79190612c57565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611035929190612dc0565b60405180910390a461104c8360008985858961154b565b61105b836000898989896117a4565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111358261197b565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612e5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190611b50565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612ba5565b60405180910390fd5b6000611321610b0d565b9050600061132e8561172a565b9050600061133b8561172a565b905061134b838989858589611543565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612c37565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114979190612c57565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611514929190612dc0565b60405180910390a461152a848a8a86868a61154b565b611538848a8a8a8a8a6117a4565b505050505050505050565b505050505050565b505050505050565b6115728473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611722578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115b8959493929190612ed0565b6020604051808303816000875af19250505080156115f457506040513d601f19601f820116820180604052508101906115f19190612f4d565b60015b61169957611600612f87565b806308c379a00361165c5750611614612fa9565b8061161f575061165e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539190611bfb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906130ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117179061313d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174957611748611c4f565b5b6040519080825280602002602001820160405280156117775781602001602082028036833780820191505090505b509050828160008151811061178f5761178e612969565b5b60200260200101818152505080915050919050565b6117c38473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611973578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180995949392919061315d565b6020604051808303816000875af192505050801561184557506040513d601f19601f820116820180604052508101906118429190612f4d565b60015b6118ea57611851612f87565b806308c379a0036118ad5750611865612fa9565b8061187057506118af565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49190611bfb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906130ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061313d565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119dd826119b2565b9050919050565b6119ed816119d2565b81146119f857600080fd5b50565b600081359050611a0a816119e4565b92915050565b6000819050919050565b611a2381611a10565b8114611a2e57600080fd5b50565b600081359050611a4081611a1a565b92915050565b60008060408385031215611a5d57611a5c6119a8565b5b6000611a6b858286016119fb565b9250506020611a7c85828601611a31565b9150509250929050565b611a8f81611a10565b82525050565b6000602082019050611aaa6000830184611a86565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae581611ab0565b8114611af057600080fd5b50565b600081359050611b0281611adc565b92915050565b600060208284031215611b1e57611b1d6119a8565b5b6000611b2c84828501611af3565b91505092915050565b60008115159050919050565b611b4a81611b35565b82525050565b6000602082019050611b656000830184611b41565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba5578082015181840152602081019050611b8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcd82611b6b565b611bd78185611b76565b9350611be7818560208601611b87565b611bf081611bb1565b840191505092915050565b60006020820190508181036000830152611c158184611bc2565b905092915050565b600060208284031215611c3357611c326119a8565b5b6000611c4184828501611a31565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8782611bb1565b810181811067ffffffffffffffff82111715611ca657611ca5611c4f565b5b80604052505050565b6000611cb961199e565b9050611cc58282611c7e565b919050565b600067ffffffffffffffff821115611ce557611ce4611c4f565b5b602082029050602081019050919050565b600080fd5b6000611d0e611d0984611cca565b611caf565b90508083825260208201905060208402830185811115611d3157611d30611cf6565b5b835b81811015611d5a5780611d468882611a31565b845260208401935050602081019050611d33565b5050509392505050565b600082601f830112611d7957611d78611c4a565b5b8135611d89848260208601611cfb565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db257611db1611c4f565b5b611dbb82611bb1565b9050602081019050919050565b82818337600083830152505050565b6000611dea611de584611d97565b611caf565b905082815260208101848484011115611e0657611e05611d92565b5b611e11848285611dc8565b509392505050565b600082601f830112611e2e57611e2d611c4a565b5b8135611e3e848260208601611dd7565b91505092915050565b600080600080600060a08688031215611e6357611e626119a8565b5b6000611e71888289016119fb565b9550506020611e82888289016119fb565b945050604086013567ffffffffffffffff811115611ea357611ea26119ad565b5b611eaf88828901611d64565b935050606086013567ffffffffffffffff811115611ed057611ecf6119ad565b5b611edc88828901611d64565b925050608086013567ffffffffffffffff811115611efd57611efc6119ad565b5b611f0988828901611e19565b9150509295509295909350565b600067ffffffffffffffff821115611f3157611f30611c4f565b5b611f3a82611bb1565b9050602081019050919050565b6000611f5a611f5584611f16565b611caf565b905082815260208101848484011115611f7657611f75611d92565b5b611f81848285611dc8565b509392505050565b600082601f830112611f9e57611f9d611c4a565b5b8135611fae848260208601611f47565b91505092915050565b600060208284031215611fcd57611fcc6119a8565b5b600082013567ffffffffffffffff811115611feb57611fea6119ad565b5b611ff784828501611f89565b91505092915050565b600067ffffffffffffffff82111561201b5761201a611c4f565b5b602082029050602081019050919050565b600061203f61203a84612000565b611caf565b9050808382526020820190506020840283018581111561206257612061611cf6565b5b835b8181101561208b578061207788826119fb565b845260208401935050602081019050612064565b5050509392505050565b600082601f8301126120aa576120a9611c4a565b5b81356120ba84826020860161202c565b91505092915050565b600080604083850312156120da576120d96119a8565b5b600083013567ffffffffffffffff8111156120f8576120f76119ad565b5b61210485828601612095565b925050602083013567ffffffffffffffff811115612125576121246119ad565b5b61213185828601611d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217081611a10565b82525050565b60006121828383612167565b60208301905092915050565b6000602082019050919050565b60006121a68261213b565b6121b08185612146565b93506121bb83612157565b8060005b838110156121ec5781516121d38882612176565b97506121de8361218e565b9250506001810190506121bf565b5085935050505092915050565b60006020820190508181036000830152612213818461219b565b905092915050565b600060208284031215612231576122306119a8565b5b600061223f848285016119fb565b91505092915050565b60006020828403121561225e5761225d6119a8565b5b600082013567ffffffffffffffff81111561227c5761227b6119ad565b5b61228884828501612095565b91505092915050565b61229a816119d2565b82525050565b60006020820190506122b56000830184612291565b92915050565b6122c481611b35565b81146122cf57600080fd5b50565b6000813590506122e1816122bb565b92915050565b600080604083850312156122fe576122fd6119a8565b5b600061230c858286016119fb565b925050602061231d858286016122d2565b9150509250929050565b6000806040838503121561233e5761233d6119a8565b5b600061234c858286016119fb565b925050602061235d858286016119fb565b9150509250929050565b600080600080600060a08688031215612383576123826119a8565b5b6000612391888289016119fb565b95505060206123a2888289016119fb565b94505060406123b388828901611a31565b93505060606123c488828901611a31565b925050608086013567ffffffffffffffff8111156123e5576123e46119ad565b5b6123f188828901611e19565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245a602a83611b76565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d757607f821691505b6020821081036124ea576124e9612490565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251d816124bf565b61252781866124f0565b9450600182166000811461254257600181146125575761258a565b60ff198316865281151582028601935061258a565b612560856124fb565b60005b8381101561258257815481890152600182019150602081019050612563565b838801955050505b50505092915050565b6000819050919050565b6125ae6125a982611a10565b612593565b82525050565b60006125c08285612510565b91506125cc828461259d565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612638602e83611b76565b9150612643826125dc565b604082019050919050565b600060208201905081810360008301526126678161262b565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261267e565b6126c5868361267e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127026126fd6126f884611a10565b6126dd565b611a10565b9050919050565b6000819050919050565b61271c836126e7565b61273061272882612709565b84845461268b565b825550505050565b600090565b612745612738565b612750818484612713565b505050565b5b818110156127745761276960008261273d565b600181019050612756565b5050565b601f8211156127b95761278a816124fb565b6127938461266e565b810160208510156127a2578190505b6127b66127ae8561266e565b830182612755565b50505b505050565b600082821c905092915050565b60006127dc600019846008026127be565b1980831691505092915050565b60006127f583836127cb565b9150826002028217905092915050565b61280e82611b6b565b67ffffffffffffffff81111561282757612826611c4f565b5b61283182546124bf565b61283c828285612778565b600060209050601f83116001811461286f576000841561285d578287015190505b61286785826127e9565b8655506128cf565b601f19841661287d866124fb565b60005b828110156128a557848901518255600182019150602085019450602081019050612880565b868310156128c257848901516128be601f8916826127cb565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612933602983611b76565b915061293e826128d7565b604082019050919050565b6000602082019050818103600083015261296281612926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d282611a10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0457612a03612998565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6b602683611b76565b9150612a7682612a0f565b604082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612afd602883611b76565b9150612b0882612aa1565b604082019050919050565b60006020820190508181036000830152612b2c81612af0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b8f602583611b76565b9150612b9a82612b33565b604082019050919050565b60006020820190508181036000830152612bbe81612b82565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c21602a83611b76565b9150612c2c82612bc5565b604082019050919050565b60006020820190508181036000830152612c5081612c14565b9050919050565b6000612c6282611a10565b9150612c6d83611a10565b9250828201905080821115612c8557612c84612998565b5b92915050565b60006040820190508181036000830152612ca5818561219b565b90508181036020830152612cb9818461219b565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cf8602083611b76565b9150612d0382612cc2565b602082019050919050565b60006020820190508181036000830152612d2781612ceb565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8a602183611b76565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b6000604082019050612dd56000830185611a86565b612de26020830184611a86565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e45602983611b76565b9150612e5082612de9565b604082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea282612e7b565b612eac8185612e86565b9350612ebc818560208601611b87565b612ec581611bb1565b840191505092915050565b600060a082019050612ee56000830188612291565b612ef26020830187612291565b8181036040830152612f04818661219b565b90508181036060830152612f18818561219b565b90508181036080830152612f2c8184612e97565b90509695505050505050565b600081519050612f4781611adc565b92915050565b600060208284031215612f6357612f626119a8565b5b6000612f7184828501612f38565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa65760046000803e612fa3600051612f7a565b90505b90565b600060443d1061303657612fbb61199e565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe3575050613036565b808201805167ffffffffffffffff8111156130015750505050613036565b80602083010160043d03850181111561301e575050505050613036565b61302d82602001850186611c7e565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613095603483611b76565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613127602883611b76565b9150613132826130cb565b604082019050919050565b600060208201905081810360008301526131568161311a565b9050919050565b600060a0820190506131726000830188612291565b61317f6020830187612291565b61318c6040830186611a86565b6131996060830185611a86565b81810360808301526131ab8184612e97565b9050969550505050505056fea26469706673582212209cccf95b9e90ba24b36294d9d56480619fb43bacfccd84dc2efb3d9f536fb1e664736f6c634300081200330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f75736463746f702e636f6d2f77696e000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a46565b61031c565b60405161012b9190611a95565b60405180910390f35b61014e60048036038101906101499190611b08565b6103e4565b60405161015b9190611b50565b60405180910390f35b61016c6104c6565b6040516101799190611bfb565b60405180910390f35b61019c60048036038101906101979190611c1d565b610554565b6040516101a99190611bfb565b60405180910390f35b6101cc60048036038101906101c79190611e47565b610580565b005b6101e860048036038101906101e39190611fb7565b610621565b005b61020460048036038101906101ff91906120c3565b61063c565b60405161021191906121f9565b60405180910390f35b610234600480360381019061022f919061221b565b610755565b005b61023e61077e565b005b61025a60048036038101906102559190612248565b610792565b005b61026461081d565b60405161027191906122a0565b60405180910390f35b610282610847565b60405161028f9190611bfb565b60405180910390f35b6102b260048036038101906102ad91906122e7565b6108d5565b005b6102ce60048036038101906102c99190612327565b6108eb565b6040516102db9190611b50565b60405180910390f35b6102fe60048036038101906102f99190612367565b61097f565b005b61031a6004803603810190610315919061221b565b610a20565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612470565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa3565b5b9050919050565b600680546104d3906124bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124bf565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b4565b6040516020818303038152906040529050919050565b610588610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0d565b6108eb565b5b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061264e565b60405180910390fd5b61061a8585858585610b15565b5050505050565b610629610e36565b80600590816106389190612805565b5050565b60608151835114610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067990612949565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c4f565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f1612969565b5b602002602001015185838151811061070d5761070c612969565b5b602002602001015161031c565b82828151811061072d5761072c612969565b5b60200260200101818152505080610743906129c7565b90506106d3565b508091505092915050565b61075d610e36565b61077b81600454600160405180602001604052806000815250610eb4565b50565b610786610e36565b6107906000611064565b565b61079a610e36565b60005b8151811015610819576107c98282815181106107bc576107bb612969565b5b602002602001015161112a565b610806576108058282815181106107e3576107e2612969565b5b6020026020010151600454600160405180602001604052806000815250610eb4565b5b8080610811906129c7565b91505061079d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610854906124bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610880906124bf565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b6108e76108e0610b0d565b838361113c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610987610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cd57506109cc856109c7610b0d565b6108eb565b5b610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a039061264e565b60405180910390fd5b610a1985858585856112a8565b5050505050565b610a28610e36565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90612a81565b60405180910390fd5b610aa081611064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612ba5565b60405180910390fd5b6000610bd2610b0d565b9050610be2818787878787611543565b60005b8451811015610d93576000858281518110610c0357610c02612969565b5b602002602001015190506000858381518110610c2257610c21612969565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612c37565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d789190612c57565b9250508190555050505080610d8c906129c7565b9050610be5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0a929190612c8b565b60405180910390a4610e2081878787878761154b565b610e2e818787878787611553565b505050505050565b610e3e610b0d565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61081d565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612d0e565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612da0565b60405180910390fd5b6000610f2d610b0d565b90506000610f3a8561172a565b90506000610f478561172a565b9050610f5883600089858589611543565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb79190612c57565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611035929190612dc0565b60405180910390a461104c8360008985858961154b565b61105b836000898989896117a4565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111358261197b565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612e5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190611b50565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612ba5565b60405180910390fd5b6000611321610b0d565b9050600061132e8561172a565b9050600061133b8561172a565b905061134b838989858589611543565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612c37565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114979190612c57565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611514929190612dc0565b60405180910390a461152a848a8a86868a61154b565b611538848a8a8a8a8a6117a4565b505050505050505050565b505050505050565b505050505050565b6115728473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611722578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115b8959493929190612ed0565b6020604051808303816000875af19250505080156115f457506040513d601f19601f820116820180604052508101906115f19190612f4d565b60015b61169957611600612f87565b806308c379a00361165c5750611614612fa9565b8061161f575061165e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539190611bfb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906130ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117179061313d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174957611748611c4f565b5b6040519080825280602002602001820160405280156117775781602001602082028036833780820191505090505b509050828160008151811061178f5761178e612969565b5b60200260200101818152505080915050919050565b6117c38473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611973578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180995949392919061315d565b6020604051808303816000875af192505050801561184557506040513d601f19601f820116820180604052508101906118429190612f4d565b60015b6118ea57611851612f87565b806308c379a0036118ad5750611865612fa9565b8061187057506118af565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49190611bfb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906130ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061313d565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119dd826119b2565b9050919050565b6119ed816119d2565b81146119f857600080fd5b50565b600081359050611a0a816119e4565b92915050565b6000819050919050565b611a2381611a10565b8114611a2e57600080fd5b50565b600081359050611a4081611a1a565b92915050565b60008060408385031215611a5d57611a5c6119a8565b5b6000611a6b858286016119fb565b9250506020611a7c85828601611a31565b9150509250929050565b611a8f81611a10565b82525050565b6000602082019050611aaa6000830184611a86565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae581611ab0565b8114611af057600080fd5b50565b600081359050611b0281611adc565b92915050565b600060208284031215611b1e57611b1d6119a8565b5b6000611b2c84828501611af3565b91505092915050565b60008115159050919050565b611b4a81611b35565b82525050565b6000602082019050611b656000830184611b41565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba5578082015181840152602081019050611b8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcd82611b6b565b611bd78185611b76565b9350611be7818560208601611b87565b611bf081611bb1565b840191505092915050565b60006020820190508181036000830152611c158184611bc2565b905092915050565b600060208284031215611c3357611c326119a8565b5b6000611c4184828501611a31565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8782611bb1565b810181811067ffffffffffffffff82111715611ca657611ca5611c4f565b5b80604052505050565b6000611cb961199e565b9050611cc58282611c7e565b919050565b600067ffffffffffffffff821115611ce557611ce4611c4f565b5b602082029050602081019050919050565b600080fd5b6000611d0e611d0984611cca565b611caf565b90508083825260208201905060208402830185811115611d3157611d30611cf6565b5b835b81811015611d5a5780611d468882611a31565b845260208401935050602081019050611d33565b5050509392505050565b600082601f830112611d7957611d78611c4a565b5b8135611d89848260208601611cfb565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db257611db1611c4f565b5b611dbb82611bb1565b9050602081019050919050565b82818337600083830152505050565b6000611dea611de584611d97565b611caf565b905082815260208101848484011115611e0657611e05611d92565b5b611e11848285611dc8565b509392505050565b600082601f830112611e2e57611e2d611c4a565b5b8135611e3e848260208601611dd7565b91505092915050565b600080600080600060a08688031215611e6357611e626119a8565b5b6000611e71888289016119fb565b9550506020611e82888289016119fb565b945050604086013567ffffffffffffffff811115611ea357611ea26119ad565b5b611eaf88828901611d64565b935050606086013567ffffffffffffffff811115611ed057611ecf6119ad565b5b611edc88828901611d64565b925050608086013567ffffffffffffffff811115611efd57611efc6119ad565b5b611f0988828901611e19565b9150509295509295909350565b600067ffffffffffffffff821115611f3157611f30611c4f565b5b611f3a82611bb1565b9050602081019050919050565b6000611f5a611f5584611f16565b611caf565b905082815260208101848484011115611f7657611f75611d92565b5b611f81848285611dc8565b509392505050565b600082601f830112611f9e57611f9d611c4a565b5b8135611fae848260208601611f47565b91505092915050565b600060208284031215611fcd57611fcc6119a8565b5b600082013567ffffffffffffffff811115611feb57611fea6119ad565b5b611ff784828501611f89565b91505092915050565b600067ffffffffffffffff82111561201b5761201a611c4f565b5b602082029050602081019050919050565b600061203f61203a84612000565b611caf565b9050808382526020820190506020840283018581111561206257612061611cf6565b5b835b8181101561208b578061207788826119fb565b845260208401935050602081019050612064565b5050509392505050565b600082601f8301126120aa576120a9611c4a565b5b81356120ba84826020860161202c565b91505092915050565b600080604083850312156120da576120d96119a8565b5b600083013567ffffffffffffffff8111156120f8576120f76119ad565b5b61210485828601612095565b925050602083013567ffffffffffffffff811115612125576121246119ad565b5b61213185828601611d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217081611a10565b82525050565b60006121828383612167565b60208301905092915050565b6000602082019050919050565b60006121a68261213b565b6121b08185612146565b93506121bb83612157565b8060005b838110156121ec5781516121d38882612176565b97506121de8361218e565b9250506001810190506121bf565b5085935050505092915050565b60006020820190508181036000830152612213818461219b565b905092915050565b600060208284031215612231576122306119a8565b5b600061223f848285016119fb565b91505092915050565b60006020828403121561225e5761225d6119a8565b5b600082013567ffffffffffffffff81111561227c5761227b6119ad565b5b61228884828501612095565b91505092915050565b61229a816119d2565b82525050565b60006020820190506122b56000830184612291565b92915050565b6122c481611b35565b81146122cf57600080fd5b50565b6000813590506122e1816122bb565b92915050565b600080604083850312156122fe576122fd6119a8565b5b600061230c858286016119fb565b925050602061231d858286016122d2565b9150509250929050565b6000806040838503121561233e5761233d6119a8565b5b600061234c858286016119fb565b925050602061235d858286016119fb565b9150509250929050565b600080600080600060a08688031215612383576123826119a8565b5b6000612391888289016119fb565b95505060206123a2888289016119fb565b94505060406123b388828901611a31565b93505060606123c488828901611a31565b925050608086013567ffffffffffffffff8111156123e5576123e46119ad565b5b6123f188828901611e19565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245a602a83611b76565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d757607f821691505b6020821081036124ea576124e9612490565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251d816124bf565b61252781866124f0565b9450600182166000811461254257600181146125575761258a565b60ff198316865281151582028601935061258a565b612560856124fb565b60005b8381101561258257815481890152600182019150602081019050612563565b838801955050505b50505092915050565b6000819050919050565b6125ae6125a982611a10565b612593565b82525050565b60006125c08285612510565b91506125cc828461259d565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612638602e83611b76565b9150612643826125dc565b604082019050919050565b600060208201905081810360008301526126678161262b565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261267e565b6126c5868361267e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127026126fd6126f884611a10565b6126dd565b611a10565b9050919050565b6000819050919050565b61271c836126e7565b61273061272882612709565b84845461268b565b825550505050565b600090565b612745612738565b612750818484612713565b505050565b5b818110156127745761276960008261273d565b600181019050612756565b5050565b601f8211156127b95761278a816124fb565b6127938461266e565b810160208510156127a2578190505b6127b66127ae8561266e565b830182612755565b50505b505050565b600082821c905092915050565b60006127dc600019846008026127be565b1980831691505092915050565b60006127f583836127cb565b9150826002028217905092915050565b61280e82611b6b565b67ffffffffffffffff81111561282757612826611c4f565b5b61283182546124bf565b61283c828285612778565b600060209050601f83116001811461286f576000841561285d578287015190505b61286785826127e9565b8655506128cf565b601f19841661287d866124fb565b60005b828110156128a557848901518255600182019150602085019450602081019050612880565b868310156128c257848901516128be601f8916826127cb565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612933602983611b76565b915061293e826128d7565b604082019050919050565b6000602082019050818103600083015261296281612926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d282611a10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0457612a03612998565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6b602683611b76565b9150612a7682612a0f565b604082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612afd602883611b76565b9150612b0882612aa1565b604082019050919050565b60006020820190508181036000830152612b2c81612af0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b8f602583611b76565b9150612b9a82612b33565b604082019050919050565b60006020820190508181036000830152612bbe81612b82565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c21602a83611b76565b9150612c2c82612bc5565b604082019050919050565b60006020820190508181036000830152612c5081612c14565b9050919050565b6000612c6282611a10565b9150612c6d83611a10565b9250828201905080821115612c8557612c84612998565b5b92915050565b60006040820190508181036000830152612ca5818561219b565b90508181036020830152612cb9818461219b565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cf8602083611b76565b9150612d0382612cc2565b602082019050919050565b60006020820190508181036000830152612d2781612ceb565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8a602183611b76565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b6000604082019050612dd56000830185611a86565b612de26020830184611a86565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e45602983611b76565b9150612e5082612de9565b604082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea282612e7b565b612eac8185612e86565b9350612ebc818560208601611b87565b612ec581611bb1565b840191505092915050565b600060a082019050612ee56000830188612291565b612ef26020830187612291565b8181036040830152612f04818661219b565b90508181036060830152612f18818561219b565b90508181036080830152612f2c8184612e97565b90509695505050505050565b600081519050612f4781611adc565b92915050565b600060208284031215612f6357612f626119a8565b5b6000612f7184828501612f38565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa65760046000803e612fa3600051612f7a565b90505b90565b600060443d1061303657612fbb61199e565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe3575050613036565b808201805167ffffffffffffffff8111156130015750505050613036565b80602083010160043d03850181111561301e575050505050613036565b61302d82602001850186611c7e565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613095603483611b76565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613127602883611b76565b9150613132826130cb565b604082019050919050565b600060208201905081810360008301526131568161311a565b9050919050565b600060a0820190506131726000830188612291565b61317f6020830187612291565b61318c6040830186611a86565b6131996060830185611a86565b81810360808301526131ab8184612e97565b9050969550505050505056fea26469706673582212209cccf95b9e90ba24b36294d9d56480619fb43bacfccd84dc2efb3d9f536fb1e664736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f75736463746f702e636f6d2f77696e000000000000000000

-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://usdctop.com/win

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [2] : 68747470733a2f2f75736463746f702e636f6d2f77696e000000000000000000


Deployed Bytecode Sourcemap

40059:1340:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24633:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40178:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41245:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26551:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40500:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25029:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40975:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2759:103;;;:::i;:::-;;40631:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2118:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40203:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25601:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25828:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26068:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3017:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24633:230;24719:7;24766:1;24747:21;;:7;:21;;;24739:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24833:9;:13;24843:2;24833:13;;;;;;;;;;;:22;24847:7;24833:22;;;;;;;;;;;;;;;;24826:29;;24633:230;;;;:::o;23656:310::-;23758:4;23810:26;23795:41;;;:11;:41;;;;:110;;;;23868:37;23853:52;;;:11;:52;;;;23795:110;:163;;;;23922:36;23946:11;23922:23;:36::i;:::-;23795:163;23775:183;;23656:310;;;:::o;40178:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41245:149::-;41305:13;41362;41377:7;41345:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41331:55;;41245:149;;;:::o;26551:438::-;26792:12;:10;:12::i;:::-;26784:20;;:4;:20;;;:60;;;;26808:36;26825:4;26831:12;:10;:12::i;:::-;26808:16;:36::i;:::-;26784:60;26762:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26929:52;26952:4;26958:2;26962:3;26967:7;26976:4;26929:22;:52::i;:::-;26551:438;;;;;:::o;40500:123::-;2004:13;:11;:13::i;:::-;40600:15:::1;40584:13;:31;;;;;;:::i;:::-;;40500:123:::0;:::o;25029:499::-;25165:16;25221:3;:10;25202:8;:15;:29;25194:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25290:30;25337:8;:15;25323:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25290:63;;25371:9;25366:122;25390:8;:15;25386:1;:19;25366:122;;;25446:30;25456:8;25465:1;25456:11;;;;;;;;:::i;:::-;;;;;;;;25469:3;25473:1;25469:6;;;;;;;;:::i;:::-;;;;;;;;25446:9;:30::i;:::-;25427:13;25441:1;25427:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25407:3;;;;:::i;:::-;;;25366:122;;;;25507:13;25500:20;;;25029:499;;;;:::o;40975:129::-;2004:13;:11;:13::i;:::-;41066:26:::1;41072:2;41076:8;;41086:1;41066:26;;;;;;;;;;;::::0;:5:::1;:26::i;:::-;40975:129:::0;:::o;2759:103::-;2004:13;:11;:13::i;:::-;2824:30:::1;2851:1;2824:18;:30::i;:::-;2759:103::o:0;40631:338::-;2004:13;:11;:13::i;:::-;40710:9:::1;40705:257;40729:10;:17;40725:1;:21;40705:257;;;40773:25;40784:10;40795:1;40784:13;;;;;;;;:::i;:::-;;;;;;;;40773:10;:25::i;:::-;40769:168;;40817:37;40823:10;40834:1;40823:13;;;;;;;;:::i;:::-;;;;;;;;40838:8;;40848:1;40817:37;;;;;;;;;;;::::0;:5:::1;:37::i;:::-;40769:168;40748:3;;;;;:::i;:::-;;;;40705:257;;;;40631:338:::0;:::o;2118:87::-;2164:7;2191:6;;;;;;;;;;;2184:13;;2118:87;:::o;40203:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25601:155::-;25696:52;25715:12;:10;:12::i;:::-;25729:8;25739;25696:18;:52::i;:::-;25601:155;;:::o;25828:168::-;25927:4;25951:18;:27;25970:7;25951:27;;;;;;;;;;;;;;;:37;25979:8;25951:37;;;;;;;;;;;;;;;;;;;;;;;;;25944:44;;25828:168;;;;:::o;26068:406::-;26284:12;:10;:12::i;:::-;26276:20;;:4;:20;;;:60;;;;26300:36;26317:4;26323:12;:10;:12::i;:::-;26300:16;:36::i;:::-;26276:60;26254:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26421:45;26439:4;26445:2;26449;26453:6;26461:4;26421:17;:45::i;:::-;26068:406;;;;;:::o;3017:201::-;2004:13;:11;:13::i;:::-;3126:1:::1;3106:22;;:8;:22;;::::0;3098:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3182:28;3201:8;3182:18;:28::i;:::-;3017:201:::0;:::o;14991:157::-;15076:4;15115:25;15100:40;;;:11;:40;;;;15093:47;;14991:157;;;:::o;669:98::-;722:7;749:10;742:17;;669:98;:::o;28785:1146::-;29012:7;:14;28998:3;:10;:28;28990:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29104:1;29090:16;;:2;:16;;;29082:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29161:16;29180:12;:10;:12::i;:::-;29161:31;;29205:60;29226:8;29236:4;29242:2;29246:3;29251:7;29260:4;29205:20;:60::i;:::-;29283:9;29278:421;29302:3;:10;29298:1;:14;29278:421;;;29334:10;29347:3;29351:1;29347:6;;;;;;;;:::i;:::-;;;;;;;;29334:19;;29368:14;29385:7;29393:1;29385:10;;;;;;;;:::i;:::-;;;;;;;;29368:27;;29412:19;29434:9;:13;29444:2;29434:13;;;;;;;;;;;:19;29448:4;29434:19;;;;;;;;;;;;;;;;29412:41;;29491:6;29476:11;:21;;29468:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29624:6;29610:11;:20;29588:9;:13;29598:2;29588:13;;;;;;;;;;;:19;29602:4;29588:19;;;;;;;;;;;;;;;:42;;;;29681:6;29660:9;:13;29670:2;29660:13;;;;;;;;;;;:17;29674:2;29660:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29319:380;;;29314:3;;;;:::i;:::-;;;29278:421;;;;29746:2;29716:47;;29740:4;29716:47;;29730:8;29716:47;;;29750:3;29755:7;29716:47;;;;;;;:::i;:::-;;;;;;;;29776:59;29796:8;29806:4;29812:2;29816:3;29821:7;29830:4;29776:19;:59::i;:::-;29848:75;29884:8;29894:4;29900:2;29904:3;29909:7;29918:4;29848:35;:75::i;:::-;28979:952;28785:1146;;;;;:::o;2283:132::-;2358:12;:10;:12::i;:::-;2347:23;;:7;:5;:7::i;:::-;:23;;;2339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2283:132::o;31249:686::-;31373:1;31359:16;;:2;:16;;;31351:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31426:16;31445:12;:10;:12::i;:::-;31426:31;;31468:20;31491:21;31509:2;31491:17;:21::i;:::-;31468:44;;31523:24;31550:25;31568:6;31550:17;:25::i;:::-;31523:52;;31588:66;31609:8;31627:1;31631:2;31635:3;31640:7;31649:4;31588:20;:66::i;:::-;31688:6;31667:9;:13;31677:2;31667:13;;;;;;;;;;;:17;31681:2;31667:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31747:2;31710:52;;31743:1;31710:52;;31725:8;31710:52;;;31751:2;31755:6;31710:52;;;;;;;:::i;:::-;;;;;;;;31775:65;31795:8;31813:1;31817:2;31821:3;31826:7;31835:4;31775:19;:65::i;:::-;31853:74;31884:8;31902:1;31906:2;31910;31914:6;31922:4;31853:30;:74::i;:::-;31340:595;;;31249:686;;;;:::o;3378:191::-;3452:16;3471:6;;;;;;;;;;;3452:25;;3497:8;3488:6;;:17;;;;;;;;;;;;;;;;;;3552:8;3521:40;;3542:8;3521:40;;;;;;;;;;;;3441:128;3378:191;:::o;41116:115::-;41174:4;41198:25;41217:5;41198:18;:25::i;:::-;41191:32;;41116:115;;;:::o;35551:297::-;35672:8;35663:17;;:5;:17;;;35655:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35775:8;35737:18;:25;35756:5;35737:25;;;;;;;;;;;;;;;:35;35763:8;35737:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35821:8;35799:41;;35814:5;35799:41;;;35831:8;35799:41;;;;;;:::i;:::-;;;;;;;;35551:297;;;:::o;27453:974::-;27655:1;27641:16;;:2;:16;;;27633:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27712:16;27731:12;:10;:12::i;:::-;27712:31;;27754:20;27777:21;27795:2;27777:17;:21::i;:::-;27754:44;;27809:24;27836:25;27854:6;27836:17;:25::i;:::-;27809:52;;27874:60;27895:8;27905:4;27911:2;27915:3;27920:7;27929:4;27874:20;:60::i;:::-;27947:19;27969:9;:13;27979:2;27969:13;;;;;;;;;;;:19;27983:4;27969:19;;;;;;;;;;;;;;;;27947:41;;28022:6;28007:11;:21;;27999:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28147:6;28133:11;:20;28111:9;:13;28121:2;28111:13;;;;;;;;;;;:19;28125:4;28111:19;;;;;;;;;;;;;;;:42;;;;28196:6;28175:9;:13;28185:2;28175:13;;;;;;;;;;;:17;28189:2;28175:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28251:2;28220:46;;28245:4;28220:46;;28235:8;28220:46;;;28255:2;28259:6;28220:46;;;;;;;:::i;:::-;;;;;;;;28279:59;28299:8;28309:4;28315:2;28319:3;28324:7;28333:4;28279:19;:59::i;:::-;28351:68;28382:8;28392:4;28398:2;28402;28406:6;28414:4;28351:30;:68::i;:::-;27622:805;;;;27453:974;;;;;:::o;36806:221::-;;;;;;;:::o;37982:220::-;;;;;;;:::o;38962:813::-;39202:15;:2;:13;;;:15::i;:::-;39198:570;;;39255:2;39238:43;;;39282:8;39292:4;39298:3;39303:7;39312:4;39238:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39234:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39630:6;39623:14;;;;;;;;;;;:::i;:::-;;;;;;;;39234:523;;;39679:62;;;;;;;;;;:::i;:::-;;;;;;;;39234:523;39411:48;;;39399:60;;;:8;:60;;;;39395:159;;39484:50;;;;;;;;;;:::i;:::-;;;;;;;;39395:159;39318:251;39198:570;38962:813;;;;;;:::o;39783:198::-;39849:16;39878:22;39917:1;39903:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39878:41;;39941:7;39930:5;39936:1;39930:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39968:5;39961:12;;;39783:198;;;:::o;38210:744::-;38425:15;:2;:13;;;:15::i;:::-;38421:526;;;38478:2;38461:38;;;38500:8;38510:4;38516:2;38520:6;38528:4;38461:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38457:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38809:6;38802:14;;;;;;;;;;;:::i;:::-;;;;;;;;38457:479;;;38858:62;;;;;;;;;;:::i;:::-;;;;;;;;38457:479;38595:43;;;38583:55;;;:8;:55;;;;38579:154;;38663:50;;;;;;;;;;:::i;:::-;;;;;;;;38579:154;38534:214;38421:526;38210:744;;;;;;:::o;5050:326::-;5110:4;5367:1;5345:7;:19;;;:23;5338:30;;5050:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:308::-;10138:4;10228:18;10220:6;10217:30;10214:56;;;10250:18;;:::i;:::-;10214:56;10288:29;10310:6;10288:29;:::i;:::-;10280:37;;10372:4;10366;10362:15;10354:23;;10076:308;;;:::o;10390:425::-;10468:5;10493:66;10509:49;10551:6;10509:49;:::i;:::-;10493:66;:::i;:::-;10484:75;;10582:6;10575:5;10568:21;10620:4;10613:5;10609:16;10658:3;10649:6;10644:3;10640:16;10637:25;10634:112;;;10665:79;;:::i;:::-;10634:112;10755:54;10802:6;10797:3;10792;10755:54;:::i;:::-;10474:341;10390:425;;;;;:::o;10835:340::-;10891:5;10940:3;10933:4;10925:6;10921:17;10917:27;10907:122;;10948:79;;:::i;:::-;10907:122;11065:6;11052:20;11090:79;11165:3;11157:6;11150:4;11142:6;11138:17;11090:79;:::i;:::-;11081:88;;10897:278;10835:340;;;;:::o;11181:509::-;11250:6;11299:2;11287:9;11278:7;11274:23;11270:32;11267:119;;;11305:79;;:::i;:::-;11267:119;11453:1;11442:9;11438:17;11425:31;11483:18;11475:6;11472:30;11469:117;;;11505:79;;:::i;:::-;11469:117;11610:63;11665:7;11656:6;11645:9;11641:22;11610:63;:::i;:::-;11600:73;;11396:287;11181:509;;;;:::o;11696:311::-;11773:4;11863:18;11855:6;11852:30;11849:56;;;11885:18;;:::i;:::-;11849:56;11935:4;11927:6;11923:17;11915:25;;11995:4;11989;11985:15;11977:23;;11696:311;;;:::o;12030:710::-;12126:5;12151:81;12167:64;12224:6;12167:64;:::i;:::-;12151:81;:::i;:::-;12142:90;;12252:5;12281:6;12274:5;12267:21;12315:4;12308:5;12304:16;12297:23;;12368:4;12360:6;12356:17;12348:6;12344:30;12397:3;12389:6;12386:15;12383:122;;;12416:79;;:::i;:::-;12383:122;12531:6;12514:220;12548:6;12543:3;12540:15;12514:220;;;12623:3;12652:37;12685:3;12673:10;12652:37;:::i;:::-;12647:3;12640:50;12719:4;12714:3;12710:14;12703:21;;12590:144;12574:4;12569:3;12565:14;12558:21;;12514:220;;;12518:21;12132:608;;12030:710;;;;;:::o;12763:370::-;12834:5;12883:3;12876:4;12868:6;12864:17;12860:27;12850:122;;12891:79;;:::i;:::-;12850:122;13008:6;12995:20;13033:94;13123:3;13115:6;13108:4;13100:6;13096:17;13033:94;:::i;:::-;13024:103;;12840:293;12763:370;;;;:::o;13139:894::-;13257:6;13265;13314:2;13302:9;13293:7;13289:23;13285:32;13282:119;;;13320:79;;:::i;:::-;13282:119;13468:1;13457:9;13453:17;13440:31;13498:18;13490:6;13487:30;13484:117;;;13520:79;;:::i;:::-;13484:117;13625:78;13695:7;13686:6;13675:9;13671:22;13625:78;:::i;:::-;13615:88;;13411:302;13780:2;13769:9;13765:18;13752:32;13811:18;13803:6;13800:30;13797:117;;;13833:79;;:::i;:::-;13797:117;13938:78;14008:7;13999:6;13988:9;13984:22;13938:78;:::i;:::-;13928:88;;13723:303;13139:894;;;;;:::o;14039:114::-;14106:6;14140:5;14134:12;14124:22;;14039:114;;;:::o;14159:184::-;14258:11;14292:6;14287:3;14280:19;14332:4;14327:3;14323:14;14308:29;;14159:184;;;;:::o;14349:132::-;14416:4;14439:3;14431:11;;14469:4;14464:3;14460:14;14452:22;;14349:132;;;:::o;14487:108::-;14564:24;14582:5;14564:24;:::i;:::-;14559:3;14552:37;14487:108;;:::o;14601:179::-;14670:10;14691:46;14733:3;14725:6;14691:46;:::i;:::-;14769:4;14764:3;14760:14;14746:28;;14601:179;;;;:::o;14786:113::-;14856:4;14888;14883:3;14879:14;14871:22;;14786:113;;;:::o;14935:732::-;15054:3;15083:54;15131:5;15083:54;:::i;:::-;15153:86;15232:6;15227:3;15153:86;:::i;:::-;15146:93;;15263:56;15313:5;15263:56;:::i;:::-;15342:7;15373:1;15358:284;15383:6;15380:1;15377:13;15358:284;;;15459:6;15453:13;15486:63;15545:3;15530:13;15486:63;:::i;:::-;15479:70;;15572:60;15625:6;15572:60;:::i;:::-;15562:70;;15418:224;15405:1;15402;15398:9;15393:14;;15358:284;;;15362:14;15658:3;15651:10;;15059:608;;;14935:732;;;;:::o;15673:373::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15903:9;15897:4;15893:20;15889:1;15878:9;15874:17;15867:47;15931:108;16034:4;16025:6;15931:108;:::i;:::-;15923:116;;15673:373;;;;:::o;16052:329::-;16111:6;16160:2;16148:9;16139:7;16135:23;16131:32;16128:119;;;16166:79;;:::i;:::-;16128:119;16286:1;16311:53;16356:7;16347:6;16336:9;16332:22;16311:53;:::i;:::-;16301:63;;16257:117;16052:329;;;;:::o;16387:539::-;16471:6;16520:2;16508:9;16499:7;16495:23;16491:32;16488:119;;;16526:79;;:::i;:::-;16488:119;16674:1;16663:9;16659:17;16646:31;16704:18;16696:6;16693:30;16690:117;;;16726:79;;:::i;:::-;16690:117;16831:78;16901:7;16892:6;16881:9;16877:22;16831:78;:::i;:::-;16821:88;;16617:302;16387:539;;;;:::o;16932:118::-;17019:24;17037:5;17019:24;:::i;:::-;17014:3;17007:37;16932:118;;:::o;17056:222::-;17149:4;17187:2;17176:9;17172:18;17164:26;;17200:71;17268:1;17257:9;17253:17;17244:6;17200:71;:::i;:::-;17056:222;;;;:::o;17284:116::-;17354:21;17369:5;17354:21;:::i;:::-;17347:5;17344:32;17334:60;;17390:1;17387;17380:12;17334:60;17284:116;:::o;17406:133::-;17449:5;17487:6;17474:20;17465:29;;17503:30;17527:5;17503:30;:::i;:::-;17406:133;;;;:::o;17545:468::-;17610:6;17618;17667:2;17655:9;17646:7;17642:23;17638:32;17635:119;;;17673:79;;:::i;:::-;17635:119;17793:1;17818:53;17863:7;17854:6;17843:9;17839:22;17818:53;:::i;:::-;17808:63;;17764:117;17920:2;17946:50;17988:7;17979:6;17968:9;17964:22;17946:50;:::i;:::-;17936:60;;17891:115;17545:468;;;;;:::o;18019:474::-;18087:6;18095;18144:2;18132:9;18123:7;18119:23;18115:32;18112:119;;;18150:79;;:::i;:::-;18112:119;18270:1;18295:53;18340:7;18331:6;18320:9;18316:22;18295:53;:::i;:::-;18285:63;;18241:117;18397:2;18423:53;18468:7;18459:6;18448:9;18444:22;18423:53;:::i;:::-;18413:63;;18368:118;18019:474;;;;;:::o;18499:1089::-;18603:6;18611;18619;18627;18635;18684:3;18672:9;18663:7;18659:23;18655:33;18652:120;;;18691:79;;:::i;:::-;18652:120;18811:1;18836:53;18881:7;18872:6;18861:9;18857:22;18836:53;:::i;:::-;18826:63;;18782:117;18938:2;18964:53;19009:7;19000:6;18989:9;18985:22;18964:53;:::i;:::-;18954:63;;18909:118;19066:2;19092:53;19137:7;19128:6;19117:9;19113:22;19092:53;:::i;:::-;19082:63;;19037:118;19194:2;19220:53;19265:7;19256:6;19245:9;19241:22;19220:53;:::i;:::-;19210:63;;19165:118;19350:3;19339:9;19335:19;19322:33;19382:18;19374:6;19371:30;19368:117;;;19404:79;;:::i;:::-;19368:117;19509:62;19563:7;19554:6;19543:9;19539:22;19509:62;:::i;:::-;19499:72;;19293:288;18499:1089;;;;;;;;:::o;19594:229::-;19734:34;19730:1;19722:6;19718:14;19711:58;19803:12;19798:2;19790:6;19786:15;19779:37;19594:229;:::o;19829:366::-;19971:3;19992:67;20056:2;20051:3;19992:67;:::i;:::-;19985:74;;20068:93;20157:3;20068:93;:::i;:::-;20186:2;20181:3;20177:12;20170:19;;19829:366;;;:::o;20201:419::-;20367:4;20405:2;20394:9;20390:18;20382:26;;20454:9;20448:4;20444:20;20440:1;20429:9;20425:17;20418:47;20482:131;20608:4;20482:131;:::i;:::-;20474:139;;20201:419;;;:::o;20626:180::-;20674:77;20671:1;20664:88;20771:4;20768:1;20761:15;20795:4;20792:1;20785:15;20812:320;20856:6;20893:1;20887:4;20883:12;20873:22;;20940:1;20934:4;20930:12;20961:18;20951:81;;21017:4;21009:6;21005:17;20995:27;;20951:81;21079:2;21071:6;21068:14;21048:18;21045:38;21042:84;;21098:18;;:::i;:::-;21042:84;20863:269;20812:320;;;:::o;21138:148::-;21240:11;21277:3;21262:18;;21138:148;;;;:::o;21292:141::-;21341:4;21364:3;21356:11;;21387:3;21384:1;21377:14;21421:4;21418:1;21408:18;21400:26;;21292:141;;;:::o;21463:874::-;21566:3;21603:5;21597:12;21632:36;21658:9;21632:36;:::i;:::-;21684:89;21766:6;21761:3;21684:89;:::i;:::-;21677:96;;21804:1;21793:9;21789:17;21820:1;21815:166;;;;21995:1;21990:341;;;;21782:549;;21815:166;21899:4;21895:9;21884;21880:25;21875:3;21868:38;21961:6;21954:14;21947:22;21939:6;21935:35;21930:3;21926:45;21919:52;;21815:166;;21990:341;22057:38;22089:5;22057:38;:::i;:::-;22117:1;22131:154;22145:6;22142:1;22139:13;22131:154;;;22219:7;22213:14;22209:1;22204:3;22200:11;22193:35;22269:1;22260:7;22256:15;22245:26;;22167:4;22164:1;22160:12;22155:17;;22131:154;;;22314:6;22309:3;22305:16;22298:23;;21997:334;;21782:549;;21570:767;;21463:874;;;;:::o;22343:79::-;22382:7;22411:5;22400:16;;22343:79;;;:::o;22428:157::-;22533:45;22553:24;22571:5;22553:24;:::i;:::-;22533:45;:::i;:::-;22528:3;22521:58;22428:157;;:::o;22591:410::-;22748:3;22770:92;22858:3;22849:6;22770:92;:::i;:::-;22763:99;;22872:75;22943:3;22934:6;22872:75;:::i;:::-;22972:2;22967:3;22963:12;22956:19;;22992:3;22985:10;;22591:410;;;;;:::o;23007:233::-;23147:34;23143:1;23135:6;23131:14;23124:58;23216:16;23211:2;23203:6;23199:15;23192:41;23007:233;:::o;23246:366::-;23388:3;23409:67;23473:2;23468:3;23409:67;:::i;:::-;23402:74;;23485:93;23574:3;23485:93;:::i;:::-;23603:2;23598:3;23594:12;23587:19;;23246:366;;;:::o;23618:419::-;23784:4;23822:2;23811:9;23807:18;23799:26;;23871:9;23865:4;23861:20;23857:1;23846:9;23842:17;23835:47;23899:131;24025:4;23899:131;:::i;:::-;23891:139;;23618:419;;;:::o;24043:93::-;24080:6;24127:2;24122;24115:5;24111:14;24107:23;24097:33;;24043:93;;;:::o;24142:107::-;24186:8;24236:5;24230:4;24226:16;24205:37;;24142:107;;;;:::o;24255:393::-;24324:6;24374:1;24362:10;24358:18;24397:97;24427:66;24416:9;24397:97;:::i;:::-;24515:39;24545:8;24534:9;24515:39;:::i;:::-;24503:51;;24587:4;24583:9;24576:5;24572:21;24563:30;;24636:4;24626:8;24622:19;24615:5;24612:30;24602:40;;24331:317;;24255:393;;;;;:::o;24654:60::-;24682:3;24703:5;24696:12;;24654:60;;;:::o;24720:142::-;24770:9;24803:53;24821:34;24830:24;24848:5;24830:24;:::i;:::-;24821:34;:::i;:::-;24803:53;:::i;:::-;24790:66;;24720:142;;;:::o;24868:75::-;24911:3;24932:5;24925:12;;24868:75;;;:::o;24949:269::-;25059:39;25090:7;25059:39;:::i;:::-;25120:91;25169:41;25193:16;25169:41;:::i;:::-;25161:6;25154:4;25148:11;25120:91;:::i;:::-;25114:4;25107:105;25025:193;24949:269;;;:::o;25224:73::-;25269:3;25224:73;:::o;25303:189::-;25380:32;;:::i;:::-;25421:65;25479:6;25471;25465:4;25421:65;:::i;:::-;25356:136;25303:189;;:::o;25498:186::-;25558:120;25575:3;25568:5;25565:14;25558:120;;;25629:39;25666:1;25659:5;25629:39;:::i;:::-;25602:1;25595:5;25591:13;25582:22;;25558:120;;;25498:186;;:::o;25690:543::-;25791:2;25786:3;25783:11;25780:446;;;25825:38;25857:5;25825:38;:::i;:::-;25909:29;25927:10;25909:29;:::i;:::-;25899:8;25895:44;26092:2;26080:10;26077:18;26074:49;;;26113:8;26098:23;;26074:49;26136:80;26192:22;26210:3;26192:22;:::i;:::-;26182:8;26178:37;26165:11;26136:80;:::i;:::-;25795:431;;25780:446;25690:543;;;:::o;26239:117::-;26293:8;26343:5;26337:4;26333:16;26312:37;;26239:117;;;;:::o;26362:169::-;26406:6;26439:51;26487:1;26483:6;26475:5;26472:1;26468:13;26439:51;:::i;:::-;26435:56;26520:4;26514;26510:15;26500:25;;26413:118;26362:169;;;;:::o;26536:295::-;26612:4;26758:29;26783:3;26777:4;26758:29;:::i;:::-;26750:37;;26820:3;26817:1;26813:11;26807:4;26804:21;26796:29;;26536:295;;;;:::o;26836:1395::-;26953:37;26986:3;26953:37;:::i;:::-;27055:18;27047:6;27044:30;27041:56;;;27077:18;;:::i;:::-;27041:56;27121:38;27153:4;27147:11;27121:38;:::i;:::-;27206:67;27266:6;27258;27252:4;27206:67;:::i;:::-;27300:1;27324:4;27311:17;;27356:2;27348:6;27345:14;27373:1;27368:618;;;;28030:1;28047:6;28044:77;;;28096:9;28091:3;28087:19;28081:26;28072:35;;28044:77;28147:67;28207:6;28200:5;28147:67;:::i;:::-;28141:4;28134:81;28003:222;27338:887;;27368:618;27420:4;27416:9;27408:6;27404:22;27454:37;27486:4;27454:37;:::i;:::-;27513:1;27527:208;27541:7;27538:1;27535:14;27527:208;;;27620:9;27615:3;27611:19;27605:26;27597:6;27590:42;27671:1;27663:6;27659:14;27649:24;;27718:2;27707:9;27703:18;27690:31;;27564:4;27561:1;27557:12;27552:17;;27527:208;;;27763:6;27754:7;27751:19;27748:179;;;27821:9;27816:3;27812:19;27806:26;27864:48;27906:4;27898:6;27894:17;27883:9;27864:48;:::i;:::-;27856:6;27849:64;27771:156;27748:179;27973:1;27969;27961:6;27957:14;27953:22;27947:4;27940:36;27375:611;;;27338:887;;26928:1303;;;26836:1395;;:::o;28237:228::-;28377:34;28373:1;28365:6;28361:14;28354:58;28446:11;28441:2;28433:6;28429:15;28422:36;28237:228;:::o;28471:366::-;28613:3;28634:67;28698:2;28693:3;28634:67;:::i;:::-;28627:74;;28710:93;28799:3;28710:93;:::i;:::-;28828:2;28823:3;28819:12;28812:19;;28471:366;;;:::o;28843:419::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:180::-;29316:77;29313:1;29306:88;29413:4;29410:1;29403:15;29437:4;29434:1;29427:15;29454:180;29502:77;29499:1;29492:88;29599:4;29596:1;29589:15;29623:4;29620:1;29613:15;29640:233;29679:3;29702:24;29720:5;29702:24;:::i;:::-;29693:33;;29748:66;29741:5;29738:77;29735:103;;29818:18;;:::i;:::-;29735:103;29865:1;29858:5;29854:13;29847:20;;29640:233;;;:::o;29879:225::-;30019:34;30015:1;30007:6;30003:14;29996:58;30088:8;30083:2;30075:6;30071:15;30064:33;29879:225;:::o;30110:366::-;30252:3;30273:67;30337:2;30332:3;30273:67;:::i;:::-;30266:74;;30349:93;30438:3;30349:93;:::i;:::-;30467:2;30462:3;30458:12;30451:19;;30110:366;;;:::o;30482:419::-;30648:4;30686:2;30675:9;30671:18;30663:26;;30735:9;30729:4;30725:20;30721:1;30710:9;30706:17;30699:47;30763:131;30889:4;30763:131;:::i;:::-;30755:139;;30482:419;;;:::o;30907:227::-;31047:34;31043:1;31035:6;31031:14;31024:58;31116:10;31111:2;31103:6;31099:15;31092:35;30907:227;:::o;31140:366::-;31282:3;31303:67;31367:2;31362:3;31303:67;:::i;:::-;31296:74;;31379:93;31468:3;31379:93;:::i;:::-;31497:2;31492:3;31488:12;31481:19;;31140:366;;;:::o;31512:419::-;31678:4;31716:2;31705:9;31701:18;31693:26;;31765:9;31759:4;31755:20;31751:1;31740:9;31736:17;31729:47;31793:131;31919:4;31793:131;:::i;:::-;31785:139;;31512:419;;;:::o;31937:224::-;32077:34;32073:1;32065:6;32061:14;32054:58;32146:7;32141:2;32133:6;32129:15;32122:32;31937:224;:::o;32167:366::-;32309:3;32330:67;32394:2;32389:3;32330:67;:::i;:::-;32323:74;;32406:93;32495:3;32406:93;:::i;:::-;32524:2;32519:3;32515:12;32508:19;;32167:366;;;:::o;32539:419::-;32705:4;32743:2;32732:9;32728:18;32720:26;;32792:9;32786:4;32782:20;32778:1;32767:9;32763:17;32756:47;32820:131;32946:4;32820:131;:::i;:::-;32812:139;;32539:419;;;:::o;32964:229::-;33104:34;33100:1;33092:6;33088:14;33081:58;33173:12;33168:2;33160:6;33156:15;33149:37;32964:229;:::o;33199:366::-;33341:3;33362:67;33426:2;33421:3;33362:67;:::i;:::-;33355:74;;33438:93;33527:3;33438:93;:::i;:::-;33556:2;33551:3;33547:12;33540:19;;33199:366;;;:::o;33571:419::-;33737:4;33775:2;33764:9;33760:18;33752:26;;33824:9;33818:4;33814:20;33810:1;33799:9;33795:17;33788:47;33852:131;33978:4;33852:131;:::i;:::-;33844:139;;33571:419;;;:::o;33996:191::-;34036:3;34055:20;34073:1;34055:20;:::i;:::-;34050:25;;34089:20;34107:1;34089:20;:::i;:::-;34084:25;;34132:1;34129;34125:9;34118:16;;34153:3;34150:1;34147:10;34144:36;;;34160:18;;:::i;:::-;34144:36;33996:191;;;;:::o;34193:634::-;34414:4;34452:2;34441:9;34437:18;34429:26;;34501:9;34495:4;34491:20;34487:1;34476:9;34472:17;34465:47;34529:108;34632:4;34623:6;34529:108;:::i;:::-;34521:116;;34684:9;34678:4;34674:20;34669:2;34658:9;34654:18;34647:48;34712:108;34815:4;34806:6;34712:108;:::i;:::-;34704:116;;34193:634;;;;;:::o;34833:182::-;34973:34;34969:1;34961:6;34957:14;34950:58;34833:182;:::o;35021:366::-;35163:3;35184:67;35248:2;35243:3;35184:67;:::i;:::-;35177:74;;35260:93;35349:3;35260:93;:::i;:::-;35378:2;35373:3;35369:12;35362:19;;35021:366;;;:::o;35393:419::-;35559:4;35597:2;35586:9;35582:18;35574:26;;35646:9;35640:4;35636:20;35632:1;35621:9;35617:17;35610:47;35674:131;35800:4;35674:131;:::i;:::-;35666:139;;35393:419;;;:::o;35818:220::-;35958:34;35954:1;35946:6;35942:14;35935:58;36027:3;36022:2;36014:6;36010:15;36003:28;35818:220;:::o;36044:366::-;36186:3;36207:67;36271:2;36266:3;36207:67;:::i;:::-;36200:74;;36283:93;36372:3;36283:93;:::i;:::-;36401:2;36396:3;36392:12;36385:19;;36044:366;;;:::o;36416:419::-;36582:4;36620:2;36609:9;36605:18;36597:26;;36669:9;36663:4;36659:20;36655:1;36644:9;36640:17;36633:47;36697:131;36823:4;36697:131;:::i;:::-;36689:139;;36416:419;;;:::o;36841:332::-;36962:4;37000:2;36989:9;36985:18;36977:26;;37013:71;37081:1;37070:9;37066:17;37057:6;37013:71;:::i;:::-;37094:72;37162:2;37151:9;37147:18;37138:6;37094:72;:::i;:::-;36841:332;;;;;:::o;37179:228::-;37319:34;37315:1;37307:6;37303:14;37296:58;37388:11;37383:2;37375:6;37371:15;37364:36;37179:228;:::o;37413:366::-;37555:3;37576:67;37640:2;37635:3;37576:67;:::i;:::-;37569:74;;37652:93;37741:3;37652:93;:::i;:::-;37770:2;37765:3;37761:12;37754:19;;37413:366;;;:::o;37785:419::-;37951:4;37989:2;37978:9;37974:18;37966:26;;38038:9;38032:4;38028:20;38024:1;38013:9;38009:17;38002:47;38066:131;38192:4;38066:131;:::i;:::-;38058:139;;37785:419;;;:::o;38210:98::-;38261:6;38295:5;38289:12;38279:22;;38210:98;;;:::o;38314:168::-;38397:11;38431:6;38426:3;38419:19;38471:4;38466:3;38462:14;38447:29;;38314:168;;;;:::o;38488:373::-;38574:3;38602:38;38634:5;38602:38;:::i;:::-;38656:70;38719:6;38714:3;38656:70;:::i;:::-;38649:77;;38735:65;38793:6;38788:3;38781:4;38774:5;38770:16;38735:65;:::i;:::-;38825:29;38847:6;38825:29;:::i;:::-;38820:3;38816:39;38809:46;;38578:283;38488:373;;;;:::o;38867:1053::-;39190:4;39228:3;39217:9;39213:19;39205:27;;39242:71;39310:1;39299:9;39295:17;39286:6;39242:71;:::i;:::-;39323:72;39391:2;39380:9;39376:18;39367:6;39323:72;:::i;:::-;39442:9;39436:4;39432:20;39427:2;39416:9;39412:18;39405:48;39470:108;39573:4;39564:6;39470:108;:::i;:::-;39462:116;;39625:9;39619:4;39615:20;39610:2;39599:9;39595:18;39588:48;39653:108;39756:4;39747:6;39653:108;:::i;:::-;39645:116;;39809:9;39803:4;39799:20;39793:3;39782:9;39778:19;39771:49;39837:76;39908:4;39899:6;39837:76;:::i;:::-;39829:84;;38867:1053;;;;;;;;:::o;39926:141::-;39982:5;40013:6;40007:13;39998:22;;40029:32;40055:5;40029:32;:::i;:::-;39926:141;;;;:::o;40073:349::-;40142:6;40191:2;40179:9;40170:7;40166:23;40162:32;40159:119;;;40197:79;;:::i;:::-;40159:119;40317:1;40342:63;40397:7;40388:6;40377:9;40373:22;40342:63;:::i;:::-;40332:73;;40288:127;40073:349;;;;:::o;40428:106::-;40472:8;40521:5;40516:3;40512:15;40491:36;;40428:106;;;:::o;40540:183::-;40575:3;40613:1;40595:16;40592:23;40589:128;;;40651:1;40648;40645;40630:23;40673:34;40704:1;40698:8;40673:34;:::i;:::-;40666:41;;40589:128;40540:183;:::o;40729:711::-;40768:3;40806:4;40788:16;40785:26;40814:5;40782:39;40843:20;;:::i;:::-;40918:1;40900:16;40896:24;40893:1;40887:4;40872:49;40951:4;40945:11;41050:16;41043:4;41035:6;41031:17;41028:39;40995:18;40987:6;40984:30;40968:113;40965:146;;;41096:5;;;;40965:146;41142:6;41136:4;41132:17;41178:3;41172:10;41205:18;41197:6;41194:30;41191:43;;;41227:5;;;;;;41191:43;41275:6;41268:4;41263:3;41259:14;41255:27;41334:1;41316:16;41312:24;41306:4;41302:35;41297:3;41294:44;41291:57;;;41341:5;;;;;;;41291:57;41358;41406:6;41400:4;41396:17;41388:6;41384:30;41378:4;41358:57;:::i;:::-;41431:3;41424:10;;40772:668;;;;;40729:711;;:::o;41446:239::-;41586:34;41582:1;41574:6;41570:14;41563:58;41655:22;41650:2;41642:6;41638:15;41631:47;41446:239;:::o;41691:366::-;41833:3;41854:67;41918:2;41913:3;41854:67;:::i;:::-;41847:74;;41930:93;42019:3;41930:93;:::i;:::-;42048:2;42043:3;42039:12;42032:19;;41691:366;;;:::o;42063:419::-;42229:4;42267:2;42256:9;42252:18;42244:26;;42316:9;42310:4;42306:20;42302:1;42291:9;42287:17;42280:47;42344:131;42470:4;42344:131;:::i;:::-;42336:139;;42063:419;;;:::o;42488:227::-;42628:34;42624:1;42616:6;42612:14;42605:58;42697:10;42692:2;42684:6;42680:15;42673:35;42488:227;:::o;42721:366::-;42863:3;42884:67;42948:2;42943:3;42884:67;:::i;:::-;42877:74;;42960:93;43049:3;42960:93;:::i;:::-;43078:2;43073:3;43069:12;43062:19;;42721:366;;;:::o;43093:419::-;43259:4;43297:2;43286:9;43282:18;43274:26;;43346:9;43340:4;43336:20;43332:1;43321:9;43317:17;43310:47;43374:131;43500:4;43374:131;:::i;:::-;43366:139;;43093:419;;;:::o;43518:751::-;43741:4;43779:3;43768:9;43764:19;43756:27;;43793:71;43861:1;43850:9;43846:17;43837:6;43793:71;:::i;:::-;43874:72;43942:2;43931:9;43927:18;43918:6;43874:72;:::i;:::-;43956;44024:2;44013:9;44009:18;44000:6;43956:72;:::i;:::-;44038;44106:2;44095:9;44091:18;44082:6;44038:72;:::i;:::-;44158:9;44152:4;44148:20;44142:3;44131:9;44127:19;44120:49;44186:76;44257:4;44248:6;44186:76;:::i;:::-;44178:84;;43518:751;;;;;;;;:::o

Swarm Source

ipfs://9cccf95b9e90ba24b36294d9d56480619fb43bacfccd84dc2efb3d9f536fb1e6
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.