ETH Price: $3,301.84 (-1.91%)

Token

 

Overview

Max Total Supply

111

Holders

77

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
altsanonymous.eth
0x2f7f6485353742e459F67BBE957FF8FB6C8943e9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SecretProject1

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@&(,,,,(&@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@,,,,,,,,,,,,,,,,,,,/@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@(,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@,,,,,,,,,,,,,&@@@@(,,,,,,,,,,,,,@@@@@@@@@@@@@@
// @@@@@@@@@@@@,,,,,,,,,,,&@@@@@@@@@@@@,,,,,,,,,,,/@@@@@@@@@@@@
// @@@@@@@@@@%,,,,,,,,,,,@@@@&,,,,,,@@@@@,,,,,,,,,,,@@@@@@@@@@@
// @@@@@@@@@*,,,,,,,,,,,@@@@(,,,,,,,,@@@@,,,,,,,,,,,,@@@@@@@@@@
// @@@@@@@@@@,,,,,,,,,,,&@@@@,,,,,,#@@@@@,,,,,,,,,,,,@@@@@@@@@@
// @@@@@@@@@@@*,,,,,,,,,,&@@@@,,@,,@@@@@,,,,,,,,,,,&@@@@@@@@@@@
// @@@@@@@@@@@@@,,,,,,,,,,,@@@@@@%@@@@&,,,,,,,,,,,@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@,,,,,,,,,,&@,&@@*,,,,,,,,,,,,*@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@*,,,,,,*,,,&@*,,,,,,,,,,,,@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@**********************&@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@********&@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*****@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//
//         CLONESPIRACY.ETH👁‍🗨 (https://twitter.com/clonespiracys)
//         Secret_Project_1 Contract (made by @moopidoopi)

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


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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// 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.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/1_Storage.sol

pragma solidity ^0.8.15;





contract SecretProject1 is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
    mapping (address => int16) wlAddress;
    constructor() ERC1155("https://gateway.pinata.cloud/ipfs/QmVZ7ejuZ2bNREQZBAWopjqCLsAZox94ubnBEyU5yBwH2F") {
        wlAddress[address(0x136F7983bd213c0302FA9A13d2447D731384f81D)] = 1;
        wlAddress[address(0xF874f30b8e9110b701eFF279eC9F891d4c621080)] = 1;
        wlAddress[address(0x52fF0Dc8d6Bc369cDF9A2DeF5E134fC5d122e8F4)] = 1;
        wlAddress[address(0x7a4363D01eDF3276a9849265cb48759aDF40e7aa)] = 1;
        wlAddress[address(0x5a9045A2DBeF1f3eb0a2d05cF4B88d89318eE5F9)] = 1;
        wlAddress[address(0x801cc4DB029c247AB936640A6dC478AA8CBCB9Ec)] = 1;
        wlAddress[address(0x460c0818232E5E88416029A4730B418056C76080)] = 1;
        wlAddress[address(0xaE4682921aE67E7C626DF7Ab25515762eBfFDAa1)] = 1;
        wlAddress[address(0xd3eA84C1472c4b339FFf833CaC7D03a25145F6E9)] = 1;
        wlAddress[address(0xac1C644658ea7CA8bE1E7D58F7c99E5e89750Ccc)] = 1;
        wlAddress[address(0xc392663Dbb215DFDeD371503745292505Cf3406d)] = 1;
        wlAddress[address(0x346D5E632e7f443fA58a8aBE7123C86A417221b0)] = 1;
        wlAddress[address(0xf6033e87a800416C6A270230bA1696E4bA1d5704)] = 1;
        wlAddress[address(0xAB505b577d0841742654a26BC111CB6b068CbCbe)] = 1;
        wlAddress[address(0x3b36Af7Fb68125A49FB41c2731Eee7bbc475db6E)] = 1;
        wlAddress[address(0xE774BAa76861390774acA8C13a9B07d9B793F249)] = 1;
        wlAddress[address(0xb9623443069a5823A21172a62A714E650D2c5aF2)] = 1;
        wlAddress[address(0x30Ef65FF2b11105b00FC447CE99b6CaA2Ef9AC28)] = 1;
        wlAddress[address(0x53665c9A86767488604238d96E53d6EA6b75e7D0)] = 1;
        wlAddress[address(0xa4dDE78906b73133296D43f23Ca4b41009059123)] = 1;
        wlAddress[address(0xCdCb4AD8E3a5Ed0c1ba6334091486aFc5a7c93D2)] = 1;
        wlAddress[address(0xdb27D37572eA22A7c2b82D15101d6CABdb0b6F74)] = 1;
        wlAddress[address(0xD9F95fF5b38A7eD7Dba5EF567fe69274c727c4ef)] = 1;
        wlAddress[address(0x7EB7e711BA3278f02fE5fc2b50cBB1523C3f34C6)] = 1;
        wlAddress[address(0xe78F56dbcB2f1187ec5091832A967fa0a872074E)] = 1;
        wlAddress[address(0xe789381EeDCE66d0e15C857Fac58Bc84B145b662)] = 1;
        wlAddress[address(0x19e4BF08DE2c45DB9a10245950259ed572305D02)] = 1;
        wlAddress[address(0x46ac0690804610992a7Ff0bAe6aceC24A06814A7)] = 1;
        wlAddress[address(0x4fDe6eAa7C93FbD0F084b915ea0a51b68166320d)] = 1;
        wlAddress[address(0xd3d5338526CA1A4cE83AB3e43750e100BFffa698)] = 1;
        wlAddress[address(0x2784F20A9f5ff4C985A16D7DA540Ff8225C5dAD7)] = 1;
        wlAddress[address(0x193Ceac599fB0b2DadD816Bd30EF975c893ac154)] = 1;
        wlAddress[address(0x75Cc02a7C59bDb984a10e2Ef97E29Daa3ee47A93)] = 1;
        wlAddress[address(0xb68991E860E81671F3f18E6E003938b35af83638)] = 1;
        wlAddress[address(0x48927F2D78b8DDDaFe9f3e14DE91844A5622b545)] = 1;
        wlAddress[address(0x94fae9932b0c58a53cc2145fE4666a63f93115ae)] = 1;
        wlAddress[address(0x4a8065df0140Ad7079604D2aCa3e4D8f301D6767)] = 1;
        wlAddress[address(0xe0a42A437b20aaCc0AEdeF7199FC8cBD90d0D931)] = 1;
        wlAddress[address(0x61890B45409b17423A1F60F5905b60017848aA86)] = 1;
        wlAddress[address(0x23bdEb4396BEB7e179c65A3FcA025EA2ABC156D5)] = 1;
        wlAddress[address(0xD6409D0f2457791e9Aa5f8D92AeB64da2Bb4B0cf)] = 1;
        wlAddress[address(0x5CdaFb158011C28C6c0103Ede69F2BC2ADe00D90)] = 1;
        wlAddress[address(0x27eb3947D5C209e25FbD7d0Cf77FEdb52f8D482e)] = 1;
        wlAddress[address(0xa13658934a57563548CeE3cf6e0d49ba390503F6)] = 1;
        wlAddress[address(0xC6f7B59Ee090D7313E05e1600D9AD27A8456D600)] = 1;
    }

    uint256 public MAX_SUPPLY = 111;
    bool public PUBLIC_MINT = false;
    
    function whitelistMint() payable public
    {
        uint256 ts = totalSupply(1);
        require(wlAddress[msg.sender] != 2, "Address has already claimed.");
        require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens");
        require(wlAddress[msg.sender] == 1, "Address not in WL.");
        wlAddress[msg.sender] += 1;
        
        payable(owner()).transfer(msg.value);
        _mint(msg.sender, 1, 1, "");
    }

    function mint() payable public
    {
        uint256 ts = totalSupply(1);
        require(PUBLIC_MINT, "Public mint not open.");
        require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens");
        payable(owner()).transfer(msg.value);
        _mint(msg.sender, 1, 1, "");
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }
    
    function withdrawFunds() public onlyOwner {
		payable(msg.sender).transfer(address(this).balance);
	}

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function setPublicMint(bool ready) public onlyOwner {
        PUBLIC_MINT = ready;
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"ready","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052606f6006556000600760006101000a81548160ff0219169083151502179055503480156200003157600080fd5b5060405180608001604052806050815260200162005ee0605091396200005d816200148e60201b60201c565b506200007e62000072620014a360201b60201c565b620014ab60201b60201c565b60016005600073136f7983bd213c0302fa9a13d2447d731384f81d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073f874f30b8e9110b701eff279ec9f891d4c62108073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007352ff0dc8d6bc369cdf9a2def5e134fc5d122e8f473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000737a4363d01edf3276a9849265cb48759adf40e7aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000735a9045a2dbef1f3eb0a2d05cf4b88d89318ee5f973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073801cc4db029c247ab936640a6dc478aa8cbcb9ec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073460c0818232e5e88416029a4730b418056c7608073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073ae4682921ae67e7c626df7ab25515762ebffdaa173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073d3ea84c1472c4b339fff833cac7d03a25145f6e973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073ac1c644658ea7ca8be1e7d58f7c99e5e89750ccc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073c392663dbb215dfded371503745292505cf3406d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073346d5e632e7f443fa58a8abe7123c86a417221b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073f6033e87a800416c6a270230ba1696e4ba1d570473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073ab505b577d0841742654a26bc111cb6b068cbcbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000733b36af7fb68125a49fb41c2731eee7bbc475db6e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073e774baa76861390774aca8c13a9b07d9b793f24973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073b9623443069a5823a21172a62a714e650d2c5af273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007330ef65ff2b11105b00fc447ce99b6caa2ef9ac2873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007353665c9a86767488604238d96e53d6ea6b75e7d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073a4dde78906b73133296d43f23ca4b4100905912373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073cdcb4ad8e3a5ed0c1ba6334091486afc5a7c93d273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073db27d37572ea22a7c2b82d15101d6cabdb0b6f7473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073d9f95ff5b38a7ed7dba5ef567fe69274c727c4ef73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000737eb7e711ba3278f02fe5fc2b50cbb1523c3f34c673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073e78f56dbcb2f1187ec5091832a967fa0a872074e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073e789381eedce66d0e15c857fac58bc84b145b66273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007319e4bf08de2c45db9a10245950259ed572305d0273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007346ac0690804610992a7ff0bae6acec24a06814a773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000734fde6eaa7c93fbd0f084b915ea0a51b68166320d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073d3d5338526ca1a4ce83ab3e43750e100bfffa69873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000732784f20a9f5ff4c985a16d7da540ff8225c5dad773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073193ceac599fb0b2dadd816bd30ef975c893ac15473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007375cc02a7c59bdb984a10e2ef97e29daa3ee47a9373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073b68991e860e81671f3f18e6e003938b35af8363873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007348927f2d78b8dddafe9f3e14de91844a5622b54573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007394fae9932b0c58a53cc2145fe4666a63f93115ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000734a8065df0140ad7079604d2aca3e4d8f301d676773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073e0a42a437b20aacc0aedef7199fc8cbd90d0d93173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007361890b45409b17423a1f60f5905b60017848aa8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007323bdeb4396beb7e179c65a3fca025ea2abc156d573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073d6409d0f2457791e9aa5f8d92aeb64da2bb4b0cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550600160056000735cdafb158011c28c6c0103ede69f2bc2ade00d9073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff1602179055506001600560007327eb3947d5c209e25fbd7d0cf77fedb52f8d482e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073a13658934a57563548cee3cf6e0d49ba390503f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff16021790555060016005600073c6f7b59ee090d7313e05e1600d9ad27a8456d60073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908360010b61ffff160217905550620018d2565b80600290816200149f9190620017eb565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620015f357607f821691505b602082108103620016095762001608620015ab565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620016737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001634565b6200167f868362001634565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620016cc620016c6620016c08462001697565b620016a1565b62001697565b9050919050565b6000819050919050565b620016e883620016ab565b62001700620016f782620016d3565b84845462001641565b825550505050565b600090565b6200171762001708565b62001724818484620016dd565b505050565b5b818110156200174c57620017406000826200170d565b6001810190506200172a565b5050565b601f8211156200179b5762001765816200160f565b620017708462001624565b8101602085101562001780578190505b620017986200178f8562001624565b83018262001729565b50505b505050565b600082821c905092915050565b6000620017c060001984600802620017a0565b1980831691505092915050565b6000620017db8383620017ad565b9150826002028217905092915050565b620017f68262001571565b67ffffffffffffffff8111156200181257620018116200157c565b5b6200181e8254620015da565b6200182b82828562001750565b600060209050601f8311600181146200186357600084156200184e578287015190505b6200185a8582620017cd565b865550620018ca565b601f19841662001873866200160f565b60005b828110156200189d5784890151825560018201915060208501945060208101905062001876565b86831015620018bd5784890151620018b9601f891682620017ad565b8355505b6001600288020188555050505b505050505050565b6145fe80620018e26000396000f3fe60806040526004361061013f5760003560e01c80634f558e79116100b6578063bd85b0391161006f578063bd85b03914610403578063e985e9c514610440578063f242432a1461047d578063f2fde38b146104a6578063f5298aca146104cf578063f96bc076146104f85761013f565b80634f558e79146103285780636b20c45414610365578063715018a61461038e578063804f43cd146103a55780638da5cb5b146103af578063a22cb465146103da5761013f565b80631249c58b116101085780631249c58b1461024d5780631f7fdffa1461025757806324600fc3146102805780632eb2c2d61461029757806332cb6b0c146102c05780634e1273f4146102eb5761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be5780630e2d56cf146101e75780630e89341c14610210575b600080fd5b34801561015057600080fd5b5061016b6004803603810190610166919061299d565b610523565b60405161017891906129ec565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612a5f565b6105eb565b6040516101b59190612aa7565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c08565b6106cd565b005b3480156101f357600080fd5b5061020e60048036038101906102099190612c7d565b6106e1565b005b34801561021c57600080fd5b5061023760048036038101906102329190612caa565b610706565b6040516102449190612d5f565b60405180910390f35b61025561079a565b005b34801561026357600080fd5b5061027e60048036038101906102799190612eea565b6108b5565b005b34801561028c57600080fd5b506102956108cf565b005b3480156102a357600080fd5b506102be60048036038101906102b99190612fa5565b610920565b005b3480156102cc57600080fd5b506102d56109c1565b6040516102e291906129ec565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190613137565b6109c7565b60405161031f919061326d565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612caa565b610ae0565b60405161035c9190612aa7565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061328f565b610af4565b005b34801561039a57600080fd5b506103a3610b91565b005b6103ad610ba5565b005b3480156103bb57600080fd5b506103c4610e0e565b6040516103d19190613329565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613344565b610e38565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612caa565b610e4e565b60405161043791906129ec565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613384565b610e6b565b6040516104749190612aa7565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906133c4565b610eff565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061345b565b610fa0565b005b3480156104db57600080fd5b506104f660048036038101906104f19190613488565b611023565b005b34801561050457600080fd5b5061050d6110c0565b60405161051a9190612aa7565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a9061354d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c657506106c5826110d3565b5b9050919050565b6106d561113d565b6106de816111bb565b50565b6106e961113d565b80600760006101000a81548160ff02191690831515021790555050565b6060600280546107159061359c565b80601f01602080910402602001604051908101604052809291908181526020018280546107419061359c565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b50505050509050919050565b60006107a66001610e4e565b9050600760009054906101000a900460ff166107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee90613619565b60405180910390fd5b6006546001826108079190613668565b1115610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f9061370a565b60405180910390fd5b610850610e0e565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610895573d6000803e3d6000fd5b506108b233600180604051806020016040528060008152506111ce565b50565b6108bd61113d565b6108c98484848461137e565b50505050565b6108d761113d565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561091d573d6000803e3d6000fd5b50565b6109286115aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061096e575061096d856109686115aa565b610e6b565b5b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a49061379c565b60405180910390fd5b6109ba85858585856115b2565b5050505050565b60065481565b60608151835114610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a049061382e565b60405180910390fd5b6000835167ffffffffffffffff811115610a2a57610a29612add565b5b604051908082528060200260200182016040528015610a585781602001602082028036833780820191505090505b50905060005b8451811015610ad557610aa5858281518110610a7d57610a7c61384e565b5b6020026020010151858381518110610a9857610a9761384e565b5b6020026020010151610523565b828281518110610ab857610ab761384e565b5b60200260200101818152505080610ace9061387d565b9050610a5e565b508091505092915050565b600080610aec83610e4e565b119050919050565b610afc6115aa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b425750610b4183610b3c6115aa565b610e6b565b5b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b789061379c565b60405180910390fd5b610b8c8383836118d3565b505050565b610b9961113d565b610ba36000611ba1565b565b6000610bb16001610e4e565b90506002600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460010b60010b03610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613911565b60405180910390fd5b600654600182610c559190613668565b1115610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d9061370a565b60405180910390fd5b6001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460010b60010b14610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f9061397d565b60405180910390fd5b6001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460010b610d8491906139aa565b92506101000a81548161ffff021916908360010b61ffff160217905550610da9610e0e565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610dee573d6000803e3d6000fd5b50610e0b33600180604051806020016040528060008152506111ce565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e4a610e436115aa565b8383611c67565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f076115aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f4d5750610f4c85610f476115aa565b610e6b565b5b610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f839061379c565b60405180910390fd5b610f998585858585611dd3565b5050505050565b610fa861113d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613a92565b60405180910390fd5b61102081611ba1565b50565b61102b6115aa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061107157506110708361106b6115aa565b610e6b565b5b6110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a79061379c565b60405180910390fd5b6110bb83838361206e565b505050565b600760009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111456115aa565b73ffffffffffffffffffffffffffffffffffffffff16611163610e0e565b73ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613afe565b60405180910390fd5b565b80600290816111ca9190613cca565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613e0e565b60405180910390fd5b60006112476115aa565b90506000611254856122b4565b90506000611261856122b4565b90506112728360008985858961232e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112d19190613668565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161134f929190613e2e565b60405180910390a461136683600089858589612344565b6113758360008989898961234c565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613e0e565b60405180910390fd5b8151835114611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613ec9565b60405180910390fd5b600061143b6115aa565b905061144c8160008787878761232e565b60005b84518110156115055783818151811061146b5761146a61384e565b5b60200260200101516000808784815181106114895761148861384e565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114eb9190613668565b9250508190555080806114fd9061387d565b91505061144f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161157d929190613ee9565b60405180910390a461159481600087878787612344565b6115a381600087878787612523565b5050505050565b600033905090565b81518351146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613ec9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90613f92565b60405180910390fd5b600061166f6115aa565b905061167f81878787878761232e565b60005b84518110156118305760008582815181106116a05761169f61384e565b5b6020026020010151905060008583815181106116bf576116be61384e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614024565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118159190613668565b92505081905550505050806118299061387d565b9050611682565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118a7929190613ee9565b60405180910390a46118bd818787878787612344565b6118cb818787878787612523565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611939906140b6565b60405180910390fd5b8051825114611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90613ec9565b60405180910390fd5b60006119906115aa565b90506119b08185600086866040518060200160405280600081525061232e565b60005b8351811015611afd5760008482815181106119d1576119d061384e565b5b6020026020010151905060008483815181106119f0576119ef61384e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614148565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611af59061387d565b9150506119b3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b75929190613ee9565b60405180910390a4611b9b81856000868660405180602001604052806000815250612344565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906141da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dc69190612aa7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990613f92565b60405180910390fd5b6000611e4c6115aa565b90506000611e59856122b4565b90506000611e66856122b4565b9050611e7683898985858961232e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490614024565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc29190613668565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161203f929190613e2e565b60405180910390a4612055848a8a86868a612344565b612063848a8a8a8a8a61234c565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906140b6565b60405180910390fd5b60006120e76115aa565b905060006120f4846122b4565b90506000612101846122b4565b90506121218387600085856040518060200160405280600081525061232e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614148565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612285929190613e2e565b60405180910390a46122ab84886000868660405180602001604052806000815250612344565b50505050505050565b60606000600167ffffffffffffffff8111156122d3576122d2612add565b5b6040519080825280602002602001820160405280156123015781602001602082028036833780820191505090505b50905082816000815181106123195761231861384e565b5b60200260200101818152505080915050919050565b61233c8686868686866126fa565b505050505050565b505050505050565b61236b8473ffffffffffffffffffffffffffffffffffffffff166128ca565b1561251b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123b195949392919061424f565b6020604051808303816000875af19250505080156123ed57506040513d601f19601f820116820180604052508101906123ea91906142be565b60015b612492576123f96142f8565b806308c379a003612455575061240d61431a565b806124185750612457565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9190612d5f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124899061441c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612519576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612510906144ae565b60405180910390fd5b505b505050505050565b6125428473ffffffffffffffffffffffffffffffffffffffff166128ca565b156126f2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125889594939291906144ce565b6020604051808303816000875af19250505080156125c457506040513d601f19601f820116820180604052508101906125c191906142be565b60015b612669576125d06142f8565b806308c379a00361262c57506125e461431a565b806125ef575061262e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126239190612d5f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126609061441c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906144ae565b60405180910390fd5b505b505050505050565b6127088686868686866128ed565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036127b95760005b83518110156127b75782818151811061275b5761275a61384e565b5b60200260200101516004600086848151811061277a5761277961384e565b5b60200260200101518152602001908152602001600020600082825461279f9190613668565b92505081905550806127b09061387d565b905061273f565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036128c25760005b83518110156128c057600084828151811061280e5761280d61384e565b5b60200260200101519050600084838151811061282d5761282c61384e565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906145a8565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806128b99061387d565b90506127f0565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b811461294f57600080fd5b50565b6000813590506129618161293b565b92915050565b6000819050919050565b61297a81612967565b811461298557600080fd5b50565b60008135905061299781612971565b92915050565b600080604083850312156129b4576129b36128ff565b5b60006129c285828601612952565b92505060206129d385828601612988565b9150509250929050565b6129e681612967565b82525050565b6000602082019050612a0160008301846129dd565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a3c81612a07565b8114612a4757600080fd5b50565b600081359050612a5981612a33565b92915050565b600060208284031215612a7557612a746128ff565b5b6000612a8384828501612a4a565b91505092915050565b60008115159050919050565b612aa181612a8c565b82525050565b6000602082019050612abc6000830184612a98565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b1582612acc565b810181811067ffffffffffffffff82111715612b3457612b33612add565b5b80604052505050565b6000612b476128f5565b9050612b538282612b0c565b919050565b600067ffffffffffffffff821115612b7357612b72612add565b5b612b7c82612acc565b9050602081019050919050565b82818337600083830152505050565b6000612bab612ba684612b58565b612b3d565b905082815260208101848484011115612bc757612bc6612ac7565b5b612bd2848285612b89565b509392505050565b600082601f830112612bef57612bee612ac2565b5b8135612bff848260208601612b98565b91505092915050565b600060208284031215612c1e57612c1d6128ff565b5b600082013567ffffffffffffffff811115612c3c57612c3b612904565b5b612c4884828501612bda565b91505092915050565b612c5a81612a8c565b8114612c6557600080fd5b50565b600081359050612c7781612c51565b92915050565b600060208284031215612c9357612c926128ff565b5b6000612ca184828501612c68565b91505092915050565b600060208284031215612cc057612cbf6128ff565b5b6000612cce84828501612988565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d11578082015181840152602081019050612cf6565b83811115612d20576000848401525b50505050565b6000612d3182612cd7565b612d3b8185612ce2565b9350612d4b818560208601612cf3565b612d5481612acc565b840191505092915050565b60006020820190508181036000830152612d798184612d26565b905092915050565b600067ffffffffffffffff821115612d9c57612d9b612add565b5b602082029050602081019050919050565b600080fd5b6000612dc5612dc084612d81565b612b3d565b90508083825260208201905060208402830185811115612de857612de7612dad565b5b835b81811015612e115780612dfd8882612988565b845260208401935050602081019050612dea565b5050509392505050565b600082601f830112612e3057612e2f612ac2565b5b8135612e40848260208601612db2565b91505092915050565b600067ffffffffffffffff821115612e6457612e63612add565b5b612e6d82612acc565b9050602081019050919050565b6000612e8d612e8884612e49565b612b3d565b905082815260208101848484011115612ea957612ea8612ac7565b5b612eb4848285612b89565b509392505050565b600082601f830112612ed157612ed0612ac2565b5b8135612ee1848260208601612e7a565b91505092915050565b60008060008060808587031215612f0457612f036128ff565b5b6000612f1287828801612952565b945050602085013567ffffffffffffffff811115612f3357612f32612904565b5b612f3f87828801612e1b565b935050604085013567ffffffffffffffff811115612f6057612f5f612904565b5b612f6c87828801612e1b565b925050606085013567ffffffffffffffff811115612f8d57612f8c612904565b5b612f9987828801612ebc565b91505092959194509250565b600080600080600060a08688031215612fc157612fc06128ff565b5b6000612fcf88828901612952565b9550506020612fe088828901612952565b945050604086013567ffffffffffffffff81111561300157613000612904565b5b61300d88828901612e1b565b935050606086013567ffffffffffffffff81111561302e5761302d612904565b5b61303a88828901612e1b565b925050608086013567ffffffffffffffff81111561305b5761305a612904565b5b61306788828901612ebc565b9150509295509295909350565b600067ffffffffffffffff82111561308f5761308e612add565b5b602082029050602081019050919050565b60006130b36130ae84613074565b612b3d565b905080838252602082019050602084028301858111156130d6576130d5612dad565b5b835b818110156130ff57806130eb8882612952565b8452602084019350506020810190506130d8565b5050509392505050565b600082601f83011261311e5761311d612ac2565b5b813561312e8482602086016130a0565b91505092915050565b6000806040838503121561314e5761314d6128ff565b5b600083013567ffffffffffffffff81111561316c5761316b612904565b5b61317885828601613109565b925050602083013567ffffffffffffffff81111561319957613198612904565b5b6131a585828601612e1b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131e481612967565b82525050565b60006131f683836131db565b60208301905092915050565b6000602082019050919050565b600061321a826131af565b61322481856131ba565b935061322f836131cb565b8060005b8381101561326057815161324788826131ea565b975061325283613202565b925050600181019050613233565b5085935050505092915050565b60006020820190508181036000830152613287818461320f565b905092915050565b6000806000606084860312156132a8576132a76128ff565b5b60006132b686828701612952565b935050602084013567ffffffffffffffff8111156132d7576132d6612904565b5b6132e386828701612e1b565b925050604084013567ffffffffffffffff81111561330457613303612904565b5b61331086828701612e1b565b9150509250925092565b61332381612929565b82525050565b600060208201905061333e600083018461331a565b92915050565b6000806040838503121561335b5761335a6128ff565b5b600061336985828601612952565b925050602061337a85828601612c68565b9150509250929050565b6000806040838503121561339b5761339a6128ff565b5b60006133a985828601612952565b92505060206133ba85828601612952565b9150509250929050565b600080600080600060a086880312156133e0576133df6128ff565b5b60006133ee88828901612952565b95505060206133ff88828901612952565b945050604061341088828901612988565b935050606061342188828901612988565b925050608086013567ffffffffffffffff81111561344257613441612904565b5b61344e88828901612ebc565b9150509295509295909350565b600060208284031215613471576134706128ff565b5b600061347f84828501612952565b91505092915050565b6000806000606084860312156134a1576134a06128ff565b5b60006134af86828701612952565b93505060206134c086828701612988565b92505060406134d186828701612988565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613537602a83612ce2565b9150613542826134db565b604082019050919050565b600060208201905081810360008301526135668161352a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135b457607f821691505b6020821081036135c7576135c661356d565b5b50919050565b7f5075626c6963206d696e74206e6f74206f70656e2e0000000000000000000000600082015250565b6000613603601583612ce2565b915061360e826135cd565b602082019050919050565b60006020820190508181036000830152613632816135f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367382612967565b915061367e83612967565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b3576136b2613639565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b60006136f4602083612ce2565b91506136ff826136be565b602082019050919050565b60006020820190508181036000830152613723816136e7565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613786602f83612ce2565b91506137918261372a565b604082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613818602983612ce2565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061388882612967565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ba576138b9613639565b5b600182019050919050565b7f416464726573732068617320616c726561647920636c61696d65642e00000000600082015250565b60006138fb601c83612ce2565b9150613906826138c5565b602082019050919050565b6000602082019050818103600083015261392a816138ee565b9050919050565b7f41646472657373206e6f7420696e20574c2e0000000000000000000000000000600082015250565b6000613967601283612ce2565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b60008160010b9050919050565b60006139b58261399d565b91506139c08361399d565b925081617fff038313600083121516156139dd576139dc613639565b5b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000038312600083121615613a1557613a14613639565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a7c602683612ce2565b9150613a8782613a20565b604082019050919050565b60006020820190508181036000830152613aab81613a6f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ae8602083612ce2565b9150613af382613ab2565b602082019050919050565b60006020820190508181036000830152613b1781613adb565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b43565b613b8a8683613b43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613bc7613bc2613bbd84612967565b613ba2565b612967565b9050919050565b6000819050919050565b613be183613bac565b613bf5613bed82613bce565b848454613b50565b825550505050565b600090565b613c0a613bfd565b613c15818484613bd8565b505050565b5b81811015613c3957613c2e600082613c02565b600181019050613c1b565b5050565b601f821115613c7e57613c4f81613b1e565b613c5884613b33565b81016020851015613c67578190505b613c7b613c7385613b33565b830182613c1a565b50505b505050565b600082821c905092915050565b6000613ca160001984600802613c83565b1980831691505092915050565b6000613cba8383613c90565b9150826002028217905092915050565b613cd382612cd7565b67ffffffffffffffff811115613cec57613ceb612add565b5b613cf6825461359c565b613d01828285613c3d565b600060209050601f831160018114613d345760008415613d22578287015190505b613d2c8582613cae565b865550613d94565b601f198416613d4286613b1e565b60005b82811015613d6a57848901518255600182019150602085019450602081019050613d45565b86831015613d875784890151613d83601f891682613c90565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613df8602183612ce2565b9150613e0382613d9c565b604082019050919050565b60006020820190508181036000830152613e2781613deb565b9050919050565b6000604082019050613e4360008301856129dd565b613e5060208301846129dd565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613eb3602883612ce2565b9150613ebe82613e57565b604082019050919050565b60006020820190508181036000830152613ee281613ea6565b9050919050565b60006040820190508181036000830152613f03818561320f565b90508181036020830152613f17818461320f565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f7c602583612ce2565b9150613f8782613f20565b604082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061400e602a83612ce2565b915061401982613fb2565b604082019050919050565b6000602082019050818103600083015261403d81614001565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140a0602383612ce2565b91506140ab82614044565b604082019050919050565b600060208201905081810360008301526140cf81614093565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614132602483612ce2565b915061413d826140d6565b604082019050919050565b6000602082019050818103600083015261416181614125565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006141c4602983612ce2565b91506141cf82614168565b604082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614221826141fa565b61422b8185614205565b935061423b818560208601612cf3565b61424481612acc565b840191505092915050565b600060a082019050614264600083018861331a565b614271602083018761331a565b61427e60408301866129dd565b61428b60608301856129dd565b818103608083015261429d8184614216565b90509695505050505050565b6000815190506142b881612a33565b92915050565b6000602082840312156142d4576142d36128ff565b5b60006142e2848285016142a9565b91505092915050565b60008160e01c9050919050565b600060033d11156143175760046000803e6143146000516142eb565b90505b90565b600060443d106143a75761432c6128f5565b60043d036004823e80513d602482011167ffffffffffffffff821117156143545750506143a7565b808201805167ffffffffffffffff81111561437257505050506143a7565b80602083010160043d03850181111561438f5750505050506143a7565b61439e82602001850186612b0c565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614406603483612ce2565b9150614411826143aa565b604082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614498602883612ce2565b91506144a38261443c565b604082019050919050565b600060208201905081810360008301526144c78161448b565b9050919050565b600060a0820190506144e3600083018861331a565b6144f0602083018761331a565b8181036040830152614502818661320f565b90508181036060830152614516818561320f565b9050818103608083015261452a8184614216565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614592602883612ce2565b915061459d82614536565b604082019050919050565b600060208201905081810360008301526145c181614585565b905091905056fea2646970667358221220461f4dd719416180d251a5eb3c3af859f70f03bf7ae8435ed49587c82d20f01464736f6c634300080f003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d565a37656a755a32624e5245515a4241576f706a71434c73415a6f78393475626e4245795535794277483246

Deployed Bytecode

0x60806040526004361061013f5760003560e01c80634f558e79116100b6578063bd85b0391161006f578063bd85b03914610403578063e985e9c514610440578063f242432a1461047d578063f2fde38b146104a6578063f5298aca146104cf578063f96bc076146104f85761013f565b80634f558e79146103285780636b20c45414610365578063715018a61461038e578063804f43cd146103a55780638da5cb5b146103af578063a22cb465146103da5761013f565b80631249c58b116101085780631249c58b1461024d5780631f7fdffa1461025757806324600fc3146102805780632eb2c2d61461029757806332cb6b0c146102c05780634e1273f4146102eb5761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be5780630e2d56cf146101e75780630e89341c14610210575b600080fd5b34801561015057600080fd5b5061016b6004803603810190610166919061299d565b610523565b60405161017891906129ec565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612a5f565b6105eb565b6040516101b59190612aa7565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c08565b6106cd565b005b3480156101f357600080fd5b5061020e60048036038101906102099190612c7d565b6106e1565b005b34801561021c57600080fd5b5061023760048036038101906102329190612caa565b610706565b6040516102449190612d5f565b60405180910390f35b61025561079a565b005b34801561026357600080fd5b5061027e60048036038101906102799190612eea565b6108b5565b005b34801561028c57600080fd5b506102956108cf565b005b3480156102a357600080fd5b506102be60048036038101906102b99190612fa5565b610920565b005b3480156102cc57600080fd5b506102d56109c1565b6040516102e291906129ec565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190613137565b6109c7565b60405161031f919061326d565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612caa565b610ae0565b60405161035c9190612aa7565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061328f565b610af4565b005b34801561039a57600080fd5b506103a3610b91565b005b6103ad610ba5565b005b3480156103bb57600080fd5b506103c4610e0e565b6040516103d19190613329565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613344565b610e38565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612caa565b610e4e565b60405161043791906129ec565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613384565b610e6b565b6040516104749190612aa7565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906133c4565b610eff565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061345b565b610fa0565b005b3480156104db57600080fd5b506104f660048036038101906104f19190613488565b611023565b005b34801561050457600080fd5b5061050d6110c0565b60405161051a9190612aa7565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a9061354d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c657506106c5826110d3565b5b9050919050565b6106d561113d565b6106de816111bb565b50565b6106e961113d565b80600760006101000a81548160ff02191690831515021790555050565b6060600280546107159061359c565b80601f01602080910402602001604051908101604052809291908181526020018280546107419061359c565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b50505050509050919050565b60006107a66001610e4e565b9050600760009054906101000a900460ff166107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee90613619565b60405180910390fd5b6006546001826108079190613668565b1115610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f9061370a565b60405180910390fd5b610850610e0e565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610895573d6000803e3d6000fd5b506108b233600180604051806020016040528060008152506111ce565b50565b6108bd61113d565b6108c98484848461137e565b50505050565b6108d761113d565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561091d573d6000803e3d6000fd5b50565b6109286115aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061096e575061096d856109686115aa565b610e6b565b5b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a49061379c565b60405180910390fd5b6109ba85858585856115b2565b5050505050565b60065481565b60608151835114610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a049061382e565b60405180910390fd5b6000835167ffffffffffffffff811115610a2a57610a29612add565b5b604051908082528060200260200182016040528015610a585781602001602082028036833780820191505090505b50905060005b8451811015610ad557610aa5858281518110610a7d57610a7c61384e565b5b6020026020010151858381518110610a9857610a9761384e565b5b6020026020010151610523565b828281518110610ab857610ab761384e565b5b60200260200101818152505080610ace9061387d565b9050610a5e565b508091505092915050565b600080610aec83610e4e565b119050919050565b610afc6115aa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b425750610b4183610b3c6115aa565b610e6b565b5b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b789061379c565b60405180910390fd5b610b8c8383836118d3565b505050565b610b9961113d565b610ba36000611ba1565b565b6000610bb16001610e4e565b90506002600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460010b60010b03610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613911565b60405180910390fd5b600654600182610c559190613668565b1115610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d9061370a565b60405180910390fd5b6001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460010b60010b14610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f9061397d565b60405180910390fd5b6001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460010b610d8491906139aa565b92506101000a81548161ffff021916908360010b61ffff160217905550610da9610e0e565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610dee573d6000803e3d6000fd5b50610e0b33600180604051806020016040528060008152506111ce565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e4a610e436115aa565b8383611c67565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f076115aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f4d5750610f4c85610f476115aa565b610e6b565b5b610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f839061379c565b60405180910390fd5b610f998585858585611dd3565b5050505050565b610fa861113d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613a92565b60405180910390fd5b61102081611ba1565b50565b61102b6115aa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061107157506110708361106b6115aa565b610e6b565b5b6110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a79061379c565b60405180910390fd5b6110bb83838361206e565b505050565b600760009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111456115aa565b73ffffffffffffffffffffffffffffffffffffffff16611163610e0e565b73ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613afe565b60405180910390fd5b565b80600290816111ca9190613cca565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613e0e565b60405180910390fd5b60006112476115aa565b90506000611254856122b4565b90506000611261856122b4565b90506112728360008985858961232e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112d19190613668565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161134f929190613e2e565b60405180910390a461136683600089858589612344565b6113758360008989898961234c565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613e0e565b60405180910390fd5b8151835114611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613ec9565b60405180910390fd5b600061143b6115aa565b905061144c8160008787878761232e565b60005b84518110156115055783818151811061146b5761146a61384e565b5b60200260200101516000808784815181106114895761148861384e565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114eb9190613668565b9250508190555080806114fd9061387d565b91505061144f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161157d929190613ee9565b60405180910390a461159481600087878787612344565b6115a381600087878787612523565b5050505050565b600033905090565b81518351146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613ec9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90613f92565b60405180910390fd5b600061166f6115aa565b905061167f81878787878761232e565b60005b84518110156118305760008582815181106116a05761169f61384e565b5b6020026020010151905060008583815181106116bf576116be61384e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614024565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118159190613668565b92505081905550505050806118299061387d565b9050611682565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118a7929190613ee9565b60405180910390a46118bd818787878787612344565b6118cb818787878787612523565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611939906140b6565b60405180910390fd5b8051825114611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90613ec9565b60405180910390fd5b60006119906115aa565b90506119b08185600086866040518060200160405280600081525061232e565b60005b8351811015611afd5760008482815181106119d1576119d061384e565b5b6020026020010151905060008483815181106119f0576119ef61384e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614148565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611af59061387d565b9150506119b3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b75929190613ee9565b60405180910390a4611b9b81856000868660405180602001604052806000815250612344565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906141da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dc69190612aa7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990613f92565b60405180910390fd5b6000611e4c6115aa565b90506000611e59856122b4565b90506000611e66856122b4565b9050611e7683898985858961232e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490614024565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc29190613668565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161203f929190613e2e565b60405180910390a4612055848a8a86868a612344565b612063848a8a8a8a8a61234c565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906140b6565b60405180910390fd5b60006120e76115aa565b905060006120f4846122b4565b90506000612101846122b4565b90506121218387600085856040518060200160405280600081525061232e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614148565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612285929190613e2e565b60405180910390a46122ab84886000868660405180602001604052806000815250612344565b50505050505050565b60606000600167ffffffffffffffff8111156122d3576122d2612add565b5b6040519080825280602002602001820160405280156123015781602001602082028036833780820191505090505b50905082816000815181106123195761231861384e565b5b60200260200101818152505080915050919050565b61233c8686868686866126fa565b505050505050565b505050505050565b61236b8473ffffffffffffffffffffffffffffffffffffffff166128ca565b1561251b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123b195949392919061424f565b6020604051808303816000875af19250505080156123ed57506040513d601f19601f820116820180604052508101906123ea91906142be565b60015b612492576123f96142f8565b806308c379a003612455575061240d61431a565b806124185750612457565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9190612d5f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124899061441c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612519576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612510906144ae565b60405180910390fd5b505b505050505050565b6125428473ffffffffffffffffffffffffffffffffffffffff166128ca565b156126f2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125889594939291906144ce565b6020604051808303816000875af19250505080156125c457506040513d601f19601f820116820180604052508101906125c191906142be565b60015b612669576125d06142f8565b806308c379a00361262c57506125e461431a565b806125ef575061262e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126239190612d5f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126609061441c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906144ae565b60405180910390fd5b505b505050505050565b6127088686868686866128ed565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036127b95760005b83518110156127b75782818151811061275b5761275a61384e565b5b60200260200101516004600086848151811061277a5761277961384e565b5b60200260200101518152602001908152602001600020600082825461279f9190613668565b92505081905550806127b09061387d565b905061273f565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036128c25760005b83518110156128c057600084828151811061280e5761280d61384e565b5b60200260200101519050600084838151811061282d5761282c61384e565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906145a8565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806128b99061387d565b90506127f0565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b811461294f57600080fd5b50565b6000813590506129618161293b565b92915050565b6000819050919050565b61297a81612967565b811461298557600080fd5b50565b60008135905061299781612971565b92915050565b600080604083850312156129b4576129b36128ff565b5b60006129c285828601612952565b92505060206129d385828601612988565b9150509250929050565b6129e681612967565b82525050565b6000602082019050612a0160008301846129dd565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a3c81612a07565b8114612a4757600080fd5b50565b600081359050612a5981612a33565b92915050565b600060208284031215612a7557612a746128ff565b5b6000612a8384828501612a4a565b91505092915050565b60008115159050919050565b612aa181612a8c565b82525050565b6000602082019050612abc6000830184612a98565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b1582612acc565b810181811067ffffffffffffffff82111715612b3457612b33612add565b5b80604052505050565b6000612b476128f5565b9050612b538282612b0c565b919050565b600067ffffffffffffffff821115612b7357612b72612add565b5b612b7c82612acc565b9050602081019050919050565b82818337600083830152505050565b6000612bab612ba684612b58565b612b3d565b905082815260208101848484011115612bc757612bc6612ac7565b5b612bd2848285612b89565b509392505050565b600082601f830112612bef57612bee612ac2565b5b8135612bff848260208601612b98565b91505092915050565b600060208284031215612c1e57612c1d6128ff565b5b600082013567ffffffffffffffff811115612c3c57612c3b612904565b5b612c4884828501612bda565b91505092915050565b612c5a81612a8c565b8114612c6557600080fd5b50565b600081359050612c7781612c51565b92915050565b600060208284031215612c9357612c926128ff565b5b6000612ca184828501612c68565b91505092915050565b600060208284031215612cc057612cbf6128ff565b5b6000612cce84828501612988565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d11578082015181840152602081019050612cf6565b83811115612d20576000848401525b50505050565b6000612d3182612cd7565b612d3b8185612ce2565b9350612d4b818560208601612cf3565b612d5481612acc565b840191505092915050565b60006020820190508181036000830152612d798184612d26565b905092915050565b600067ffffffffffffffff821115612d9c57612d9b612add565b5b602082029050602081019050919050565b600080fd5b6000612dc5612dc084612d81565b612b3d565b90508083825260208201905060208402830185811115612de857612de7612dad565b5b835b81811015612e115780612dfd8882612988565b845260208401935050602081019050612dea565b5050509392505050565b600082601f830112612e3057612e2f612ac2565b5b8135612e40848260208601612db2565b91505092915050565b600067ffffffffffffffff821115612e6457612e63612add565b5b612e6d82612acc565b9050602081019050919050565b6000612e8d612e8884612e49565b612b3d565b905082815260208101848484011115612ea957612ea8612ac7565b5b612eb4848285612b89565b509392505050565b600082601f830112612ed157612ed0612ac2565b5b8135612ee1848260208601612e7a565b91505092915050565b60008060008060808587031215612f0457612f036128ff565b5b6000612f1287828801612952565b945050602085013567ffffffffffffffff811115612f3357612f32612904565b5b612f3f87828801612e1b565b935050604085013567ffffffffffffffff811115612f6057612f5f612904565b5b612f6c87828801612e1b565b925050606085013567ffffffffffffffff811115612f8d57612f8c612904565b5b612f9987828801612ebc565b91505092959194509250565b600080600080600060a08688031215612fc157612fc06128ff565b5b6000612fcf88828901612952565b9550506020612fe088828901612952565b945050604086013567ffffffffffffffff81111561300157613000612904565b5b61300d88828901612e1b565b935050606086013567ffffffffffffffff81111561302e5761302d612904565b5b61303a88828901612e1b565b925050608086013567ffffffffffffffff81111561305b5761305a612904565b5b61306788828901612ebc565b9150509295509295909350565b600067ffffffffffffffff82111561308f5761308e612add565b5b602082029050602081019050919050565b60006130b36130ae84613074565b612b3d565b905080838252602082019050602084028301858111156130d6576130d5612dad565b5b835b818110156130ff57806130eb8882612952565b8452602084019350506020810190506130d8565b5050509392505050565b600082601f83011261311e5761311d612ac2565b5b813561312e8482602086016130a0565b91505092915050565b6000806040838503121561314e5761314d6128ff565b5b600083013567ffffffffffffffff81111561316c5761316b612904565b5b61317885828601613109565b925050602083013567ffffffffffffffff81111561319957613198612904565b5b6131a585828601612e1b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131e481612967565b82525050565b60006131f683836131db565b60208301905092915050565b6000602082019050919050565b600061321a826131af565b61322481856131ba565b935061322f836131cb565b8060005b8381101561326057815161324788826131ea565b975061325283613202565b925050600181019050613233565b5085935050505092915050565b60006020820190508181036000830152613287818461320f565b905092915050565b6000806000606084860312156132a8576132a76128ff565b5b60006132b686828701612952565b935050602084013567ffffffffffffffff8111156132d7576132d6612904565b5b6132e386828701612e1b565b925050604084013567ffffffffffffffff81111561330457613303612904565b5b61331086828701612e1b565b9150509250925092565b61332381612929565b82525050565b600060208201905061333e600083018461331a565b92915050565b6000806040838503121561335b5761335a6128ff565b5b600061336985828601612952565b925050602061337a85828601612c68565b9150509250929050565b6000806040838503121561339b5761339a6128ff565b5b60006133a985828601612952565b92505060206133ba85828601612952565b9150509250929050565b600080600080600060a086880312156133e0576133df6128ff565b5b60006133ee88828901612952565b95505060206133ff88828901612952565b945050604061341088828901612988565b935050606061342188828901612988565b925050608086013567ffffffffffffffff81111561344257613441612904565b5b61344e88828901612ebc565b9150509295509295909350565b600060208284031215613471576134706128ff565b5b600061347f84828501612952565b91505092915050565b6000806000606084860312156134a1576134a06128ff565b5b60006134af86828701612952565b93505060206134c086828701612988565b92505060406134d186828701612988565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613537602a83612ce2565b9150613542826134db565b604082019050919050565b600060208201905081810360008301526135668161352a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135b457607f821691505b6020821081036135c7576135c661356d565b5b50919050565b7f5075626c6963206d696e74206e6f74206f70656e2e0000000000000000000000600082015250565b6000613603601583612ce2565b915061360e826135cd565b602082019050919050565b60006020820190508181036000830152613632816135f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367382612967565b915061367e83612967565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b3576136b2613639565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b60006136f4602083612ce2565b91506136ff826136be565b602082019050919050565b60006020820190508181036000830152613723816136e7565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613786602f83612ce2565b91506137918261372a565b604082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613818602983612ce2565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061388882612967565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ba576138b9613639565b5b600182019050919050565b7f416464726573732068617320616c726561647920636c61696d65642e00000000600082015250565b60006138fb601c83612ce2565b9150613906826138c5565b602082019050919050565b6000602082019050818103600083015261392a816138ee565b9050919050565b7f41646472657373206e6f7420696e20574c2e0000000000000000000000000000600082015250565b6000613967601283612ce2565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b60008160010b9050919050565b60006139b58261399d565b91506139c08361399d565b925081617fff038313600083121516156139dd576139dc613639565b5b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000038312600083121615613a1557613a14613639565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a7c602683612ce2565b9150613a8782613a20565b604082019050919050565b60006020820190508181036000830152613aab81613a6f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ae8602083612ce2565b9150613af382613ab2565b602082019050919050565b60006020820190508181036000830152613b1781613adb565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b43565b613b8a8683613b43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613bc7613bc2613bbd84612967565b613ba2565b612967565b9050919050565b6000819050919050565b613be183613bac565b613bf5613bed82613bce565b848454613b50565b825550505050565b600090565b613c0a613bfd565b613c15818484613bd8565b505050565b5b81811015613c3957613c2e600082613c02565b600181019050613c1b565b5050565b601f821115613c7e57613c4f81613b1e565b613c5884613b33565b81016020851015613c67578190505b613c7b613c7385613b33565b830182613c1a565b50505b505050565b600082821c905092915050565b6000613ca160001984600802613c83565b1980831691505092915050565b6000613cba8383613c90565b9150826002028217905092915050565b613cd382612cd7565b67ffffffffffffffff811115613cec57613ceb612add565b5b613cf6825461359c565b613d01828285613c3d565b600060209050601f831160018114613d345760008415613d22578287015190505b613d2c8582613cae565b865550613d94565b601f198416613d4286613b1e565b60005b82811015613d6a57848901518255600182019150602085019450602081019050613d45565b86831015613d875784890151613d83601f891682613c90565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613df8602183612ce2565b9150613e0382613d9c565b604082019050919050565b60006020820190508181036000830152613e2781613deb565b9050919050565b6000604082019050613e4360008301856129dd565b613e5060208301846129dd565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613eb3602883612ce2565b9150613ebe82613e57565b604082019050919050565b60006020820190508181036000830152613ee281613ea6565b9050919050565b60006040820190508181036000830152613f03818561320f565b90508181036020830152613f17818461320f565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f7c602583612ce2565b9150613f8782613f20565b604082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061400e602a83612ce2565b915061401982613fb2565b604082019050919050565b6000602082019050818103600083015261403d81614001565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140a0602383612ce2565b91506140ab82614044565b604082019050919050565b600060208201905081810360008301526140cf81614093565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614132602483612ce2565b915061413d826140d6565b604082019050919050565b6000602082019050818103600083015261416181614125565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006141c4602983612ce2565b91506141cf82614168565b604082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614221826141fa565b61422b8185614205565b935061423b818560208601612cf3565b61424481612acc565b840191505092915050565b600060a082019050614264600083018861331a565b614271602083018761331a565b61427e60408301866129dd565b61428b60608301856129dd565b818103608083015261429d8184614216565b90509695505050505050565b6000815190506142b881612a33565b92915050565b6000602082840312156142d4576142d36128ff565b5b60006142e2848285016142a9565b91505092915050565b60008160e01c9050919050565b600060033d11156143175760046000803e6143146000516142eb565b90505b90565b600060443d106143a75761432c6128f5565b60043d036004823e80513d602482011167ffffffffffffffff821117156143545750506143a7565b808201805167ffffffffffffffff81111561437257505050506143a7565b80602083010160043d03850181111561438f5750505050506143a7565b61439e82602001850186612b0c565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614406603483612ce2565b9150614411826143aa565b604082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614498602883612ce2565b91506144a38261443c565b604082019050919050565b600060208201905081810360008301526144c78161448b565b9050919050565b600060a0820190506144e3600083018861331a565b6144f0602083018761331a565b8181036040830152614502818661320f565b90508181036060830152614516818561320f565b9050818103608083015261452a8184614216565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614592602883612ce2565b915061459d82614536565b604082019050919050565b600060208201905081810360008301526145c181614585565b905091905056fea2646970667358221220461f4dd719416180d251a5eb3c3af859f70f03bf7ae8435ed49587c82d20f01464736f6c634300080f0033

Deployed Bytecode Sourcemap

44158:5349:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25326:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24349:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49018:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49115:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25070:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48406:299;;;:::i;:::-;;48713:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48907:103;;;;;;;;;;;;;:::i;:::-;;27270:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47871:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25722:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41804:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43720:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4478:103;;;;;;;;;;;;;:::i;:::-;;47953:445;;;:::i;:::-;;3830:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26319:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41593:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26546:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26786:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4736:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43385:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47909:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25326:230;25412:7;25459:1;25440:21;;:7;:21;;;25432:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25526:9;:13;25536:2;25526:13;;;;;;;;;;;:22;25540:7;25526:22;;;;;;;;;;;;;;;;25519:29;;25326:230;;;;:::o;24349:310::-;24451:4;24503:26;24488:41;;;:11;:41;;;;:110;;;;24561:37;24546:52;;;:11;:52;;;;24488:110;:163;;;;24615:36;24639:11;24615:23;:36::i;:::-;24488:163;24468:183;;24349:310;;;:::o;49018:89::-;3716:13;:11;:13::i;:::-;49084:15:::1;49092:6;49084:7;:15::i;:::-;49018:89:::0;:::o;49115:90::-;3716:13;:11;:13::i;:::-;49192:5:::1;49178:11;;:19;;;;;;;;;;;;;;;;;;49115:90:::0;:::o;25070:105::-;25130:13;25163:4;25156:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25070:105;;;:::o;48406:299::-;48453:10;48466:14;48478:1;48466:11;:14::i;:::-;48453:27;;48499:11;;;;;;;;;;;48491:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;48565:10;;48560:1;48555:2;:6;;;;:::i;:::-;:20;;48547:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48631:7;:5;:7::i;:::-;48623:25;;:36;48649:9;48623:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48670:27;48676:10;48688:1;48691;48670:27;;;;;;;;;;;;:5;:27::i;:::-;48442:263;48406:299::o;48713:182::-;3716:13;:11;:13::i;:::-;48853:34:::1;48864:2;48868:3;48873:7;48882:4;48853:10;:34::i;:::-;48713:182:::0;;;;:::o;48907:103::-;3716:13;:11;:13::i;:::-;48962:10:::1;48954:28;;:51;48983:21;48954:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48907:103::o:0;27270:439::-;27511:12;:10;:12::i;:::-;27503:20;;:4;:20;;;:60;;;;27527:36;27544:4;27550:12;:10;:12::i;:::-;27527:16;:36::i;:::-;27503:60;27481:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27649:52;27672:4;27678:2;27682:3;27687:7;27696:4;27649:22;:52::i;:::-;27270:439;;;;;:::o;47871:31::-;;;;:::o;25722:524::-;25878:16;25939:3;:10;25920:8;:15;:29;25912:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26008:30;26055:8;:15;26041:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26008:63;;26089:9;26084:122;26108:8;:15;26104:1;:19;26084:122;;;26164:30;26174:8;26183:1;26174:11;;;;;;;;:::i;:::-;;;;;;;;26187:3;26191:1;26187:6;;;;;;;;:::i;:::-;;;;;;;;26164:9;:30::i;:::-;26145:13;26159:1;26145:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26125:3;;;;:::i;:::-;;;26084:122;;;;26225:13;26218:20;;;25722:524;;;;:::o;41804:122::-;41861:4;41917:1;41885:29;41911:2;41885:25;:29::i;:::-;:33;41878:40;;41804:122;;;:::o;43720:359::-;43896:12;:10;:12::i;:::-;43885:23;;:7;:23;;;:66;;;;43912:39;43929:7;43938:12;:10;:12::i;:::-;43912:16;:39::i;:::-;43885:66;43863:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;44039:32;44050:7;44059:3;44064:6;44039:10;:32::i;:::-;43720:359;;;:::o;4478:103::-;3716:13;:11;:13::i;:::-;4543:30:::1;4570:1;4543:18;:30::i;:::-;4478:103::o:0;47953:445::-;48009:10;48022:14;48034:1;48022:11;:14::i;:::-;48009:27;;48080:1;48055:9;:21;48065:10;48055:21;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;48047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48143:10;;48138:1;48133:2;:6;;;;:::i;:::-;:20;;48125:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48234:1;48209:9;:21;48219:10;48209:21;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;48201:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48294:1;48269:9;:21;48279:10;48269:21;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;48324:7;:5;:7::i;:::-;48316:25;;:36;48342:9;48316:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48363:27;48369:10;48381:1;48384;48363:27;;;;;;;;;;;;:5;:27::i;:::-;47998:400;47953:445::o;3830:87::-;3876:7;3903:6;;;;;;;;;;;3896:13;;3830:87;:::o;26319:155::-;26414:52;26433:12;:10;:12::i;:::-;26447:8;26457;26414:18;:52::i;:::-;26319:155;;:::o;41593:113::-;41655:7;41682:12;:16;41695:2;41682:16;;;;;;;;;;;;41675:23;;41593:113;;;:::o;26546:168::-;26645:4;26669:18;:27;26688:7;26669:27;;;;;;;;;;;;;;;:37;26697:8;26669:37;;;;;;;;;;;;;;;;;;;;;;;;;26662:44;;26546:168;;;;:::o;26786:407::-;27002:12;:10;:12::i;:::-;26994:20;;:4;:20;;;:60;;;;27018:36;27035:4;27041:12;:10;:12::i;:::-;27018:16;:36::i;:::-;26994:60;26972:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27140:45;27158:4;27164:2;27168;27172:6;27180:4;27140:17;:45::i;:::-;26786:407;;;;;:::o;4736:201::-;3716:13;:11;:13::i;:::-;4845:1:::1;4825:22;;:8;:22;;::::0;4817:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4901:28;4920:8;4901:18;:28::i;:::-;4736:201:::0;:::o;43385:327::-;43536:12;:10;:12::i;:::-;43525:23;;:7;:23;;;:66;;;;43552:39;43569:7;43578:12;:10;:12::i;:::-;43552:16;:39::i;:::-;43525:66;43503:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;43679:25;43685:7;43694:2;43698:5;43679;:25::i;:::-;43385:327;;;:::o;47909:31::-;;;;;;;;;;;;;:::o;15630:157::-;15715:4;15754:25;15739:40;;;:11;:40;;;;15732:47;;15630:157;;;:::o;3995:132::-;4070:12;:10;:12::i;:::-;4059:23;;:7;:5;:7::i;:::-;:23;;;4051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3995:132::o;31495:88::-;31569:6;31562:4;:13;;;;;;:::i;:::-;;31495:88;:::o;31969:729::-;32136:1;32122:16;;:2;:16;;;32114:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32189:16;32208:12;:10;:12::i;:::-;32189:31;;32231:20;32254:21;32272:2;32254:17;:21::i;:::-;32231:44;;32286:24;32313:25;32331:6;32313:17;:25::i;:::-;32286:52;;32351:66;32372:8;32390:1;32394:2;32398:3;32403:7;32412:4;32351:20;:66::i;:::-;32451:6;32430:9;:13;32440:2;32430:13;;;;;;;;;;;:17;32444:2;32430:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32510:2;32473:52;;32506:1;32473:52;;32488:8;32473:52;;;32514:2;32518:6;32473:52;;;;;;;:::i;:::-;;;;;;;;32538:65;32558:8;32576:1;32580:2;32584:3;32589:7;32598:4;32538:19;:65::i;:::-;32616:74;32647:8;32665:1;32669:2;32673;32677:6;32685:4;32616:30;:74::i;:::-;32103:595;;;31969:729;;;;:::o;33101:813::-;33293:1;33279:16;;:2;:16;;;33271:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33366:7;:14;33352:3;:10;:28;33344:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33438:16;33457:12;:10;:12::i;:::-;33438:31;;33482:66;33503:8;33521:1;33525:2;33529:3;33534:7;33543:4;33482:20;:66::i;:::-;33566:9;33561:103;33585:3;:10;33581:1;:14;33561:103;;;33642:7;33650:1;33642:10;;;;;;;;:::i;:::-;;;;;;;;33617:9;:17;33627:3;33631:1;33627:6;;;;;;;;:::i;:::-;;;;;;;;33617:17;;;;;;;;;;;:21;33635:2;33617:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33597:3;;;;;:::i;:::-;;;;33561:103;;;;33717:2;33681:53;;33713:1;33681:53;;33695:8;33681:53;;;33721:3;33726:7;33681:53;;;;;;;:::i;:::-;;;;;;;;33747:65;33767:8;33785:1;33789:2;33793:3;33798:7;33807:4;33747:19;:65::i;:::-;33825:81;33861:8;33879:1;33883:2;33887:3;33892:7;33901:4;33825:35;:81::i;:::-;33260:654;33101:813;;;;:::o;2381:98::-;2434:7;2461:10;2454:17;;2381:98;:::o;29505:1146::-;29732:7;:14;29718:3;:10;:28;29710:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29824:1;29810:16;;:2;:16;;;29802:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29881:16;29900:12;:10;:12::i;:::-;29881:31;;29925:60;29946:8;29956:4;29962:2;29966:3;29971:7;29980:4;29925:20;:60::i;:::-;30003:9;29998:421;30022:3;:10;30018:1;:14;29998:421;;;30054:10;30067:3;30071:1;30067:6;;;;;;;;:::i;:::-;;;;;;;;30054:19;;30088:14;30105:7;30113:1;30105:10;;;;;;;;:::i;:::-;;;;;;;;30088:27;;30132:19;30154:9;:13;30164:2;30154:13;;;;;;;;;;;:19;30168:4;30154:19;;;;;;;;;;;;;;;;30132:41;;30211:6;30196:11;:21;;30188:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30344:6;30330:11;:20;30308:9;:13;30318:2;30308:13;;;;;;;;;;;:19;30322:4;30308:19;;;;;;;;;;;;;;;:42;;;;30401:6;30380:9;:13;30390:2;30380:13;;;;;;;;;;;:17;30394:2;30380:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30039:380;;;30034:3;;;;:::i;:::-;;;29998:421;;;;30466:2;30436:47;;30460:4;30436:47;;30450:8;30436:47;;;30470:3;30475:7;30436:47;;;;;;;:::i;:::-;;;;;;;;30496:59;30516:8;30526:4;30532:2;30536:3;30541:7;30550:4;30496:19;:59::i;:::-;30568:75;30604:8;30614:4;30620:2;30624:3;30629:7;30638:4;30568:35;:75::i;:::-;29699:952;29505:1146;;;;;:::o;35270:969::-;35438:1;35422:18;;:4;:18;;;35414:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35513:7;:14;35499:3;:10;:28;35491:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35585:16;35604:12;:10;:12::i;:::-;35585:31;;35629:66;35650:8;35660:4;35674:1;35678:3;35683:7;35629:66;;;;;;;;;;;;:20;:66::i;:::-;35713:9;35708:373;35732:3;:10;35728:1;:14;35708:373;;;35764:10;35777:3;35781:1;35777:6;;;;;;;;:::i;:::-;;;;;;;;35764:19;;35798:14;35815:7;35823:1;35815:10;;;;;;;;:::i;:::-;;;;;;;;35798:27;;35842:19;35864:9;:13;35874:2;35864:13;;;;;;;;;;;:19;35878:4;35864:19;;;;;;;;;;;;;;;;35842:41;;35921:6;35906:11;:21;;35898:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36048:6;36034:11;:20;36012:9;:13;36022:2;36012:13;;;;;;;;;;;:19;36026:4;36012:19;;;;;;;;;;;;;;;:42;;;;35749:332;;;35744:3;;;;;:::i;:::-;;;;35708:373;;;;36136:1;36098:55;;36122:4;36098:55;;36112:8;36098:55;;;36140:3;36145:7;36098:55;;;;;;;:::i;:::-;;;;;;;;36166:65;36186:8;36196:4;36210:1;36214:3;36219:7;36166:65;;;;;;;;;;;;:19;:65::i;:::-;35403:836;35270:969;;;:::o;5097:191::-;5171:16;5190:6;;;;;;;;;;;5171:25;;5216:8;5207:6;;:17;;;;;;;;;;;;;;;;;;5271:8;5240:40;;5261:8;5240:40;;;;;;;;;;;;5160:128;5097:191;:::o;36382:331::-;36537:8;36528:17;;:5;:17;;;36520:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36640:8;36602:18;:25;36621:5;36602:25;;;;;;;;;;;;;;;:35;36628:8;36602:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36686:8;36664:41;;36679:5;36664:41;;;36696:8;36664:41;;;;;;:::i;:::-;;;;;;;;36382:331;;;:::o;28173:974::-;28375:1;28361:16;;:2;:16;;;28353:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28432:16;28451:12;:10;:12::i;:::-;28432:31;;28474:20;28497:21;28515:2;28497:17;:21::i;:::-;28474:44;;28529:24;28556:25;28574:6;28556:17;:25::i;:::-;28529:52;;28594:60;28615:8;28625:4;28631:2;28635:3;28640:7;28649:4;28594:20;:60::i;:::-;28667:19;28689:9;:13;28699:2;28689:13;;;;;;;;;;;:19;28703:4;28689:19;;;;;;;;;;;;;;;;28667:41;;28742:6;28727:11;:21;;28719:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28867:6;28853:11;:20;28831:9;:13;28841:2;28831:13;;;;;;;;;;;:19;28845:4;28831:19;;;;;;;;;;;;;;;:42;;;;28916:6;28895:9;:13;28905:2;28895:13;;;;;;;;;;;:17;28909:2;28895:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28971:2;28940:46;;28965:4;28940:46;;28955:8;28940:46;;;28975:2;28979:6;28940:46;;;;;;;:::i;:::-;;;;;;;;28999:59;29019:8;29029:4;29035:2;29039:3;29044:7;29053:4;28999:19;:59::i;:::-;29071:68;29102:8;29112:4;29118:2;29122;29126:6;29134:4;29071:30;:68::i;:::-;28342:805;;;;28173:974;;;;;:::o;34212:808::-;34355:1;34339:18;;:4;:18;;;34331:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34410:16;34429:12;:10;:12::i;:::-;34410:31;;34452:20;34475:21;34493:2;34475:17;:21::i;:::-;34452:44;;34507:24;34534:25;34552:6;34534:17;:25::i;:::-;34507:52;;34572:66;34593:8;34603:4;34617:1;34621:3;34626:7;34572:66;;;;;;;;;;;;:20;:66::i;:::-;34651:19;34673:9;:13;34683:2;34673:13;;;;;;;;;;;:19;34687:4;34673:19;;;;;;;;;;;;;;;;34651:41;;34726:6;34711:11;:21;;34703:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34845:6;34831:11;:20;34809:9;:13;34819:2;34809:13;;;;;;;;;;;:19;34823:4;34809:19;;;;;;;;;;;;;;;:42;;;;34919:1;34880:54;;34905:4;34880:54;;34895:8;34880:54;;;34923:2;34927:6;34880:54;;;;;;;:::i;:::-;;;;;;;;34947:65;34967:8;34977:4;34991:1;34995:3;35000:7;34947:65;;;;;;;;;;;;:19;:65::i;:::-;34320:700;;;;34212:808;;;:::o;40648:198::-;40714:16;40743:22;40782:1;40768:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40743:41;;40806:7;40795:5;40801:1;40795:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40833:5;40826:12;;;40648:198;;;:::o;49213:291::-;49430:66;49457:8;49467:4;49473:2;49477:3;49482:7;49491:4;49430:26;:66::i;:::-;49213:291;;;;;;:::o;38847:220::-;;;;;;;:::o;39075:744::-;39290:15;:2;:13;;;:15::i;:::-;39286:526;;;39343:2;39326:38;;;39365:8;39375:4;39381:2;39385:6;39393:4;39326:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39322:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39674:6;39667:14;;;;;;;;;;;:::i;:::-;;;;;;;;39322:479;;;39723:62;;;;;;;;;;:::i;:::-;;;;;;;;39322:479;39460:43;;;39448:55;;;:8;:55;;;;39444:154;;39528:50;;;;;;;;;;:::i;:::-;;;;;;;;39444:154;39399:214;39286:526;39075:744;;;;;;:::o;39827:813::-;40067:15;:2;:13;;;:15::i;:::-;40063:570;;;40120:2;40103:43;;;40147:8;40157:4;40163:3;40168:7;40177:4;40103:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40099:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40495:6;40488:14;;;;;;;;;;;:::i;:::-;;;;;;;;40099:523;;;40544:62;;;;;;;;;;:::i;:::-;;;;;;;;40099:523;40276:48;;;40264:60;;;:8;:60;;;;40260:159;;40349:50;;;;;;;;;;:::i;:::-;;;;;;;;40260:159;40183:251;40063:570;39827:813;;;;;;:::o;42001:931::-;42240:66;42267:8;42277:4;42283:2;42287:3;42292:7;42301:4;42240:26;:66::i;:::-;42339:1;42323:18;;:4;:18;;;42319:160;;42363:9;42358:110;42382:3;:10;42378:1;:14;42358:110;;;42442:7;42450:1;42442:10;;;;;;;;:::i;:::-;;;;;;;;42418:12;:20;42431:3;42435:1;42431:6;;;;;;;;:::i;:::-;;;;;;;;42418:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;42394:3;;;;:::i;:::-;;;42358:110;;;;42319:160;42509:1;42495:16;;:2;:16;;;42491:434;;42533:9;42528:386;42552:3;:10;42548:1;:14;42528:386;;;42588:10;42601:3;42605:1;42601:6;;;;;;;;:::i;:::-;;;;;;;;42588:19;;42626:14;42643:7;42651:1;42643:10;;;;;;;;:::i;:::-;;;;;;;;42626:27;;42672:14;42689:12;:16;42702:2;42689:16;;;;;;;;;;;;42672:33;;42742:6;42732;:16;;42724:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42873:6;42864;:15;42845:12;:16;42858:2;42845:16;;;;;;;;;;;:34;;;;42569:345;;;42564:3;;;;:::i;:::-;;;42528:386;;;;42491:434;42001:931;;;;;;:::o;6528:326::-;6588:4;6845:1;6823:7;:19;;;:23;6816:30;;6528:326;;;:::o;37671:221::-;;;;;;;:::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:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:116::-;6012:21;6027:5;6012:21;:::i;:::-;6005:5;6002:32;5992:60;;6048:1;6045;6038:12;5992:60;5942:116;:::o;6064:133::-;6107:5;6145:6;6132:20;6123:29;;6161:30;6185:5;6161:30;:::i;:::-;6064:133;;;;:::o;6203:323::-;6259:6;6308:2;6296:9;6287:7;6283:23;6279:32;6276:119;;;6314:79;;:::i;:::-;6276:119;6434:1;6459:50;6501:7;6492:6;6481:9;6477:22;6459:50;:::i;:::-;6449:60;;6405:114;6203:323;;;;:::o;6532:329::-;6591:6;6640:2;6628:9;6619:7;6615:23;6611:32;6608:119;;;6646:79;;:::i;:::-;6608:119;6766:1;6791:53;6836:7;6827:6;6816:9;6812:22;6791:53;:::i;:::-;6781:63;;6737:117;6532:329;;;;:::o;6867:99::-;6919:6;6953:5;6947:12;6937:22;;6867:99;;;:::o;6972:169::-;7056:11;7090:6;7085:3;7078:19;7130:4;7125:3;7121:14;7106:29;;6972:169;;;;:::o;7147:307::-;7215:1;7225:113;7239:6;7236:1;7233:13;7225:113;;;7324:1;7319:3;7315:11;7309:18;7305:1;7300:3;7296:11;7289:39;7261:2;7258:1;7254:10;7249:15;;7225:113;;;7356:6;7353:1;7350:13;7347:101;;;7436:1;7427:6;7422:3;7418:16;7411:27;7347:101;7196:258;7147:307;;;:::o;7460:364::-;7548:3;7576:39;7609:5;7576:39;:::i;:::-;7631:71;7695:6;7690:3;7631:71;:::i;:::-;7624:78;;7711:52;7756:6;7751:3;7744:4;7737:5;7733:16;7711:52;:::i;:::-;7788:29;7810:6;7788:29;:::i;:::-;7783:3;7779:39;7772:46;;7552:272;7460:364;;;;:::o;7830:313::-;7943:4;7981:2;7970:9;7966:18;7958:26;;8030:9;8024:4;8020:20;8016:1;8005:9;8001:17;7994:47;8058:78;8131:4;8122:6;8058:78;:::i;:::-;8050:86;;7830:313;;;;:::o;8149:311::-;8226:4;8316:18;8308:6;8305:30;8302:56;;;8338:18;;:::i;:::-;8302:56;8388:4;8380:6;8376:17;8368:25;;8448:4;8442;8438:15;8430:23;;8149:311;;;:::o;8466:117::-;8575:1;8572;8565:12;8606:710;8702:5;8727:81;8743:64;8800:6;8743:64;:::i;:::-;8727:81;:::i;:::-;8718:90;;8828:5;8857:6;8850:5;8843:21;8891:4;8884:5;8880:16;8873:23;;8944:4;8936:6;8932:17;8924:6;8920:30;8973:3;8965:6;8962:15;8959:122;;;8992:79;;:::i;:::-;8959:122;9107:6;9090:220;9124:6;9119:3;9116:15;9090:220;;;9199:3;9228:37;9261:3;9249:10;9228:37;:::i;:::-;9223:3;9216:50;9295:4;9290:3;9286:14;9279:21;;9166:144;9150:4;9145:3;9141:14;9134:21;;9090:220;;;9094:21;8708:608;;8606:710;;;;;:::o;9339:370::-;9410:5;9459:3;9452:4;9444:6;9440:17;9436:27;9426:122;;9467:79;;:::i;:::-;9426:122;9584:6;9571:20;9609:94;9699:3;9691:6;9684:4;9676:6;9672:17;9609:94;:::i;:::-;9600:103;;9416:293;9339:370;;;;:::o;9715:307::-;9776:4;9866:18;9858:6;9855:30;9852:56;;;9888:18;;:::i;:::-;9852:56;9926:29;9948:6;9926:29;:::i;:::-;9918:37;;10010:4;10004;10000:15;9992:23;;9715:307;;;:::o;10028:410::-;10105:5;10130:65;10146:48;10187:6;10146:48;:::i;:::-;10130:65;:::i;:::-;10121:74;;10218:6;10211:5;10204:21;10256:4;10249:5;10245:16;10294:3;10285:6;10280:3;10276:16;10273:25;10270:112;;;10301:79;;:::i;:::-;10270:112;10391:41;10425:6;10420:3;10415;10391:41;:::i;:::-;10111:327;10028:410;;;;;:::o;10457:338::-;10512:5;10561:3;10554:4;10546:6;10542:17;10538:27;10528:122;;10569:79;;:::i;:::-;10528:122;10686:6;10673:20;10711:78;10785:3;10777:6;10770:4;10762:6;10758:17;10711:78;:::i;:::-;10702:87;;10518:277;10457:338;;;;:::o;10801:1363::-;10946:6;10954;10962;10970;11019:3;11007:9;10998:7;10994:23;10990:33;10987:120;;;11026:79;;:::i;:::-;10987:120;11146:1;11171:53;11216:7;11207:6;11196:9;11192:22;11171:53;:::i;:::-;11161:63;;11117:117;11301:2;11290:9;11286:18;11273:32;11332:18;11324:6;11321:30;11318:117;;;11354:79;;:::i;:::-;11318:117;11459:78;11529:7;11520:6;11509:9;11505:22;11459:78;:::i;:::-;11449:88;;11244:303;11614:2;11603:9;11599:18;11586:32;11645:18;11637:6;11634:30;11631:117;;;11667:79;;:::i;:::-;11631:117;11772:78;11842:7;11833:6;11822:9;11818:22;11772:78;:::i;:::-;11762:88;;11557:303;11927:2;11916:9;11912:18;11899:32;11958:18;11950:6;11947:30;11944:117;;;11980:79;;:::i;:::-;11944:117;12085:62;12139:7;12130:6;12119:9;12115:22;12085:62;:::i;:::-;12075:72;;11870:287;10801:1363;;;;;;;:::o;12170:1509::-;12324:6;12332;12340;12348;12356;12405:3;12393:9;12384:7;12380:23;12376:33;12373:120;;;12412:79;;:::i;:::-;12373:120;12532:1;12557:53;12602:7;12593:6;12582:9;12578:22;12557:53;:::i;:::-;12547:63;;12503:117;12659:2;12685:53;12730:7;12721:6;12710:9;12706:22;12685:53;:::i;:::-;12675:63;;12630:118;12815:2;12804:9;12800:18;12787:32;12846:18;12838:6;12835:30;12832:117;;;12868:79;;:::i;:::-;12832:117;12973:78;13043:7;13034:6;13023:9;13019:22;12973:78;:::i;:::-;12963:88;;12758:303;13128:2;13117:9;13113:18;13100:32;13159:18;13151:6;13148:30;13145:117;;;13181:79;;:::i;:::-;13145:117;13286:78;13356:7;13347:6;13336:9;13332:22;13286:78;:::i;:::-;13276:88;;13071:303;13441:3;13430:9;13426:19;13413:33;13473:18;13465:6;13462:30;13459:117;;;13495:79;;:::i;:::-;13459:117;13600:62;13654:7;13645:6;13634:9;13630:22;13600:62;:::i;:::-;13590:72;;13384:288;12170:1509;;;;;;;;:::o;13685:311::-;13762:4;13852:18;13844:6;13841:30;13838:56;;;13874:18;;:::i;:::-;13838:56;13924:4;13916:6;13912:17;13904:25;;13984:4;13978;13974:15;13966:23;;13685:311;;;:::o;14019:710::-;14115:5;14140:81;14156:64;14213:6;14156:64;:::i;:::-;14140:81;:::i;:::-;14131:90;;14241:5;14270:6;14263:5;14256:21;14304:4;14297:5;14293:16;14286:23;;14357:4;14349:6;14345:17;14337:6;14333:30;14386:3;14378:6;14375:15;14372:122;;;14405:79;;:::i;:::-;14372:122;14520:6;14503:220;14537:6;14532:3;14529:15;14503:220;;;14612:3;14641:37;14674:3;14662:10;14641:37;:::i;:::-;14636:3;14629:50;14708:4;14703:3;14699:14;14692:21;;14579:144;14563:4;14558:3;14554:14;14547:21;;14503:220;;;14507:21;14121:608;;14019:710;;;;;:::o;14752:370::-;14823:5;14872:3;14865:4;14857:6;14853:17;14849:27;14839:122;;14880:79;;:::i;:::-;14839:122;14997:6;14984:20;15022:94;15112:3;15104:6;15097:4;15089:6;15085:17;15022:94;:::i;:::-;15013:103;;14829:293;14752:370;;;;:::o;15128:894::-;15246:6;15254;15303:2;15291:9;15282:7;15278:23;15274:32;15271:119;;;15309:79;;:::i;:::-;15271:119;15457:1;15446:9;15442:17;15429:31;15487:18;15479:6;15476:30;15473:117;;;15509:79;;:::i;:::-;15473:117;15614:78;15684:7;15675:6;15664:9;15660:22;15614:78;:::i;:::-;15604:88;;15400:302;15769:2;15758:9;15754:18;15741:32;15800:18;15792:6;15789:30;15786:117;;;15822:79;;:::i;:::-;15786:117;15927:78;15997:7;15988:6;15977:9;15973:22;15927:78;:::i;:::-;15917:88;;15712:303;15128:894;;;;;:::o;16028:114::-;16095:6;16129:5;16123:12;16113:22;;16028:114;;;:::o;16148:184::-;16247:11;16281:6;16276:3;16269:19;16321:4;16316:3;16312:14;16297:29;;16148:184;;;;:::o;16338:132::-;16405:4;16428:3;16420:11;;16458:4;16453:3;16449:14;16441:22;;16338:132;;;:::o;16476:108::-;16553:24;16571:5;16553:24;:::i;:::-;16548:3;16541:37;16476:108;;:::o;16590:179::-;16659:10;16680:46;16722:3;16714:6;16680:46;:::i;:::-;16758:4;16753:3;16749:14;16735:28;;16590:179;;;;:::o;16775:113::-;16845:4;16877;16872:3;16868:14;16860:22;;16775:113;;;:::o;16924:732::-;17043:3;17072:54;17120:5;17072:54;:::i;:::-;17142:86;17221:6;17216:3;17142:86;:::i;:::-;17135:93;;17252:56;17302:5;17252:56;:::i;:::-;17331:7;17362:1;17347:284;17372:6;17369:1;17366:13;17347:284;;;17448:6;17442:13;17475:63;17534:3;17519:13;17475:63;:::i;:::-;17468:70;;17561:60;17614:6;17561:60;:::i;:::-;17551:70;;17407:224;17394:1;17391;17387:9;17382:14;;17347:284;;;17351:14;17647:3;17640:10;;17048:608;;;16924:732;;;;:::o;17662:373::-;17805:4;17843:2;17832:9;17828:18;17820:26;;17892:9;17886:4;17882:20;17878:1;17867:9;17863:17;17856:47;17920:108;18023:4;18014:6;17920:108;:::i;:::-;17912:116;;17662:373;;;;:::o;18041:1039::-;18168:6;18176;18184;18233:2;18221:9;18212:7;18208:23;18204:32;18201:119;;;18239:79;;:::i;:::-;18201:119;18359:1;18384:53;18429:7;18420:6;18409:9;18405:22;18384:53;:::i;:::-;18374:63;;18330:117;18514:2;18503:9;18499:18;18486:32;18545:18;18537:6;18534:30;18531:117;;;18567:79;;:::i;:::-;18531:117;18672:78;18742:7;18733:6;18722:9;18718:22;18672:78;:::i;:::-;18662:88;;18457:303;18827:2;18816:9;18812:18;18799:32;18858:18;18850:6;18847:30;18844:117;;;18880:79;;:::i;:::-;18844:117;18985:78;19055:7;19046:6;19035:9;19031:22;18985:78;:::i;:::-;18975:88;;18770:303;18041:1039;;;;;:::o;19086:118::-;19173:24;19191:5;19173:24;:::i;:::-;19168:3;19161:37;19086:118;;:::o;19210:222::-;19303:4;19341:2;19330:9;19326:18;19318:26;;19354:71;19422:1;19411:9;19407:17;19398:6;19354:71;:::i;:::-;19210:222;;;;:::o;19438:468::-;19503:6;19511;19560:2;19548:9;19539:7;19535:23;19531:32;19528:119;;;19566:79;;:::i;:::-;19528:119;19686:1;19711:53;19756:7;19747:6;19736:9;19732:22;19711:53;:::i;:::-;19701:63;;19657:117;19813:2;19839:50;19881:7;19872:6;19861:9;19857:22;19839:50;:::i;:::-;19829:60;;19784:115;19438:468;;;;;:::o;19912:474::-;19980:6;19988;20037:2;20025:9;20016:7;20012:23;20008:32;20005:119;;;20043:79;;:::i;:::-;20005:119;20163:1;20188:53;20233:7;20224:6;20213:9;20209:22;20188:53;:::i;:::-;20178:63;;20134:117;20290:2;20316:53;20361:7;20352:6;20341:9;20337:22;20316:53;:::i;:::-;20306:63;;20261:118;19912:474;;;;;:::o;20392:1089::-;20496:6;20504;20512;20520;20528;20577:3;20565:9;20556:7;20552:23;20548:33;20545:120;;;20584:79;;:::i;:::-;20545:120;20704:1;20729:53;20774:7;20765:6;20754:9;20750:22;20729:53;:::i;:::-;20719:63;;20675:117;20831:2;20857:53;20902:7;20893:6;20882:9;20878:22;20857:53;:::i;:::-;20847:63;;20802:118;20959:2;20985:53;21030:7;21021:6;21010:9;21006:22;20985:53;:::i;:::-;20975:63;;20930:118;21087:2;21113:53;21158:7;21149:6;21138:9;21134:22;21113:53;:::i;:::-;21103:63;;21058:118;21243:3;21232:9;21228:19;21215:33;21275:18;21267:6;21264:30;21261:117;;;21297:79;;:::i;:::-;21261:117;21402:62;21456:7;21447:6;21436:9;21432:22;21402:62;:::i;:::-;21392:72;;21186:288;20392:1089;;;;;;;;:::o;21487:329::-;21546:6;21595:2;21583:9;21574:7;21570:23;21566:32;21563:119;;;21601:79;;:::i;:::-;21563:119;21721:1;21746:53;21791:7;21782:6;21771:9;21767:22;21746:53;:::i;:::-;21736:63;;21692:117;21487:329;;;;:::o;21822:619::-;21899:6;21907;21915;21964:2;21952:9;21943:7;21939:23;21935:32;21932:119;;;21970:79;;:::i;:::-;21932:119;22090:1;22115:53;22160:7;22151:6;22140:9;22136:22;22115:53;:::i;:::-;22105:63;;22061:117;22217:2;22243:53;22288:7;22279:6;22268:9;22264:22;22243:53;:::i;:::-;22233:63;;22188:118;22345:2;22371:53;22416:7;22407:6;22396:9;22392:22;22371:53;:::i;:::-;22361:63;;22316:118;21822:619;;;;;:::o;22447:229::-;22587:34;22583:1;22575:6;22571:14;22564:58;22656:12;22651:2;22643:6;22639:15;22632:37;22447:229;:::o;22682:366::-;22824:3;22845:67;22909:2;22904:3;22845:67;:::i;:::-;22838:74;;22921:93;23010:3;22921:93;:::i;:::-;23039:2;23034:3;23030:12;23023:19;;22682:366;;;:::o;23054:419::-;23220:4;23258:2;23247:9;23243:18;23235:26;;23307:9;23301:4;23297:20;23293:1;23282:9;23278:17;23271:47;23335:131;23461:4;23335:131;:::i;:::-;23327:139;;23054:419;;;:::o;23479:180::-;23527:77;23524:1;23517:88;23624:4;23621:1;23614:15;23648:4;23645:1;23638:15;23665:320;23709:6;23746:1;23740:4;23736:12;23726:22;;23793:1;23787:4;23783:12;23814:18;23804:81;;23870:4;23862:6;23858:17;23848:27;;23804:81;23932:2;23924:6;23921:14;23901:18;23898:38;23895:84;;23951:18;;:::i;:::-;23895:84;23716:269;23665:320;;;:::o;23991:171::-;24131:23;24127:1;24119:6;24115:14;24108:47;23991:171;:::o;24168:366::-;24310:3;24331:67;24395:2;24390:3;24331:67;:::i;:::-;24324:74;;24407:93;24496:3;24407:93;:::i;:::-;24525:2;24520:3;24516:12;24509:19;;24168:366;;;:::o;24540:419::-;24706:4;24744:2;24733:9;24729:18;24721:26;;24793:9;24787:4;24783:20;24779:1;24768:9;24764:17;24757:47;24821:131;24947:4;24821:131;:::i;:::-;24813:139;;24540:419;;;:::o;24965:180::-;25013:77;25010:1;25003:88;25110:4;25107:1;25100:15;25134:4;25131:1;25124:15;25151:305;25191:3;25210:20;25228:1;25210:20;:::i;:::-;25205:25;;25244:20;25262:1;25244:20;:::i;:::-;25239:25;;25398:1;25330:66;25326:74;25323:1;25320:81;25317:107;;;25404:18;;:::i;:::-;25317:107;25448:1;25445;25441:9;25434:16;;25151:305;;;;:::o;25462:182::-;25602:34;25598:1;25590:6;25586:14;25579:58;25462:182;:::o;25650:366::-;25792:3;25813:67;25877:2;25872:3;25813:67;:::i;:::-;25806:74;;25889:93;25978:3;25889:93;:::i;:::-;26007:2;26002:3;25998:12;25991:19;;25650:366;;;:::o;26022:419::-;26188:4;26226:2;26215:9;26211:18;26203:26;;26275:9;26269:4;26265:20;26261:1;26250:9;26246:17;26239:47;26303:131;26429:4;26303:131;:::i;:::-;26295:139;;26022:419;;;:::o;26447:234::-;26587:34;26583:1;26575:6;26571:14;26564:58;26656:17;26651:2;26643:6;26639:15;26632:42;26447:234;:::o;26687:366::-;26829:3;26850:67;26914:2;26909:3;26850:67;:::i;:::-;26843:74;;26926:93;27015:3;26926:93;:::i;:::-;27044:2;27039:3;27035:12;27028:19;;26687:366;;;:::o;27059:419::-;27225:4;27263:2;27252:9;27248:18;27240:26;;27312:9;27306:4;27302:20;27298:1;27287:9;27283:17;27276:47;27340:131;27466:4;27340:131;:::i;:::-;27332:139;;27059:419;;;:::o;27484:228::-;27624:34;27620:1;27612:6;27608:14;27601:58;27693:11;27688:2;27680:6;27676:15;27669:36;27484:228;:::o;27718:366::-;27860:3;27881:67;27945:2;27940:3;27881:67;:::i;:::-;27874:74;;27957:93;28046:3;27957:93;:::i;:::-;28075:2;28070:3;28066:12;28059:19;;27718:366;;;:::o;28090:419::-;28256:4;28294:2;28283:9;28279:18;28271:26;;28343:9;28337:4;28333:20;28329:1;28318:9;28314:17;28307:47;28371:131;28497:4;28371:131;:::i;:::-;28363:139;;28090:419;;;:::o;28515:180::-;28563:77;28560:1;28553:88;28660:4;28657:1;28650:15;28684:4;28681:1;28674:15;28701:233;28740:3;28763:24;28781:5;28763:24;:::i;:::-;28754:33;;28809:66;28802:5;28799:77;28796:103;;28879:18;;:::i;:::-;28796:103;28926:1;28919:5;28915:13;28908:20;;28701:233;;;:::o;28940:178::-;29080:30;29076:1;29068:6;29064:14;29057:54;28940:178;:::o;29124:366::-;29266:3;29287:67;29351:2;29346:3;29287:67;:::i;:::-;29280:74;;29363:93;29452:3;29363:93;:::i;:::-;29481:2;29476:3;29472:12;29465:19;;29124:366;;;:::o;29496:419::-;29662:4;29700:2;29689:9;29685:18;29677:26;;29749:9;29743:4;29739:20;29735:1;29724:9;29720:17;29713:47;29777:131;29903:4;29777:131;:::i;:::-;29769:139;;29496:419;;;:::o;29921:168::-;30061:20;30057:1;30049:6;30045:14;30038:44;29921:168;:::o;30095:366::-;30237:3;30258:67;30322:2;30317:3;30258:67;:::i;:::-;30251:74;;30334:93;30423:3;30334:93;:::i;:::-;30452:2;30447:3;30443:12;30436:19;;30095:366;;;:::o;30467:419::-;30633:4;30671:2;30660:9;30656:18;30648:26;;30720:9;30714:4;30710:20;30706:1;30695:9;30691:17;30684:47;30748:131;30874:4;30748:131;:::i;:::-;30740:139;;30467:419;;;:::o;30892:90::-;30927:7;30970:5;30967:1;30956:20;30945:31;;30892:90;;;:::o;30988:462::-;31026:3;31045:18;31061:1;31045:18;:::i;:::-;31040:23;;31077:18;31093:1;31077:18;:::i;:::-;31072:23;;31204:1;31196:6;31192:14;31189:1;31185:22;31180:1;31177;31173:9;31166:17;31162:46;31159:72;;;31211:18;;:::i;:::-;31159:72;31391:1;31323:66;31319:74;31316:1;31312:82;31308:1;31305;31301:9;31297:98;31294:124;;;31398:18;;:::i;:::-;31294:124;31442:1;31439;31435:9;31428:16;;30988:462;;;;:::o;31456:225::-;31596:34;31592:1;31584:6;31580:14;31573:58;31665:8;31660:2;31652:6;31648:15;31641:33;31456:225;:::o;31687:366::-;31829:3;31850:67;31914:2;31909:3;31850:67;:::i;:::-;31843:74;;31926:93;32015:3;31926:93;:::i;:::-;32044:2;32039:3;32035:12;32028:19;;31687:366;;;:::o;32059:419::-;32225:4;32263:2;32252:9;32248:18;32240:26;;32312:9;32306:4;32302:20;32298:1;32287:9;32283:17;32276:47;32340:131;32466:4;32340:131;:::i;:::-;32332:139;;32059:419;;;:::o;32484:182::-;32624:34;32620:1;32612:6;32608:14;32601:58;32484:182;:::o;32672:366::-;32814:3;32835:67;32899:2;32894:3;32835:67;:::i;:::-;32828:74;;32911:93;33000:3;32911:93;:::i;:::-;33029:2;33024:3;33020:12;33013:19;;32672:366;;;:::o;33044:419::-;33210:4;33248:2;33237:9;33233:18;33225:26;;33297:9;33291:4;33287:20;33283:1;33272:9;33268:17;33261:47;33325:131;33451:4;33325:131;:::i;:::-;33317:139;;33044:419;;;:::o;33469:141::-;33518:4;33541:3;33533:11;;33564:3;33561:1;33554:14;33598:4;33595:1;33585:18;33577:26;;33469:141;;;:::o;33616:93::-;33653:6;33700:2;33695;33688:5;33684:14;33680:23;33670:33;;33616:93;;;:::o;33715:107::-;33759:8;33809:5;33803:4;33799:16;33778:37;;33715:107;;;;:::o;33828:393::-;33897:6;33947:1;33935:10;33931:18;33970:97;34000:66;33989:9;33970:97;:::i;:::-;34088:39;34118:8;34107:9;34088:39;:::i;:::-;34076:51;;34160:4;34156:9;34149:5;34145:21;34136:30;;34209:4;34199:8;34195:19;34188:5;34185:30;34175:40;;33904:317;;33828:393;;;;;:::o;34227:60::-;34255:3;34276:5;34269:12;;34227:60;;;:::o;34293:142::-;34343:9;34376:53;34394:34;34403:24;34421:5;34403:24;:::i;:::-;34394:34;:::i;:::-;34376:53;:::i;:::-;34363:66;;34293:142;;;:::o;34441:75::-;34484:3;34505:5;34498:12;;34441:75;;;:::o;34522:269::-;34632:39;34663:7;34632:39;:::i;:::-;34693:91;34742:41;34766:16;34742:41;:::i;:::-;34734:6;34727:4;34721:11;34693:91;:::i;:::-;34687:4;34680:105;34598:193;34522:269;;;:::o;34797:73::-;34842:3;34797:73;:::o;34876:189::-;34953:32;;:::i;:::-;34994:65;35052:6;35044;35038:4;34994:65;:::i;:::-;34929:136;34876:189;;:::o;35071:186::-;35131:120;35148:3;35141:5;35138:14;35131:120;;;35202:39;35239:1;35232:5;35202:39;:::i;:::-;35175:1;35168:5;35164:13;35155:22;;35131:120;;;35071:186;;:::o;35263:543::-;35364:2;35359:3;35356:11;35353:446;;;35398:38;35430:5;35398:38;:::i;:::-;35482:29;35500:10;35482:29;:::i;:::-;35472:8;35468:44;35665:2;35653:10;35650:18;35647:49;;;35686:8;35671:23;;35647:49;35709:80;35765:22;35783:3;35765:22;:::i;:::-;35755:8;35751:37;35738:11;35709:80;:::i;:::-;35368:431;;35353:446;35263:543;;;:::o;35812:117::-;35866:8;35916:5;35910:4;35906:16;35885:37;;35812:117;;;;:::o;35935:169::-;35979:6;36012:51;36060:1;36056:6;36048:5;36045:1;36041:13;36012:51;:::i;:::-;36008:56;36093:4;36087;36083:15;36073:25;;35986:118;35935:169;;;;:::o;36109:295::-;36185:4;36331:29;36356:3;36350:4;36331:29;:::i;:::-;36323:37;;36393:3;36390:1;36386:11;36380:4;36377:21;36369:29;;36109:295;;;;:::o;36409:1395::-;36526:37;36559:3;36526:37;:::i;:::-;36628:18;36620:6;36617:30;36614:56;;;36650:18;;:::i;:::-;36614:56;36694:38;36726:4;36720:11;36694:38;:::i;:::-;36779:67;36839:6;36831;36825:4;36779:67;:::i;:::-;36873:1;36897:4;36884:17;;36929:2;36921:6;36918:14;36946:1;36941:618;;;;37603:1;37620:6;37617:77;;;37669:9;37664:3;37660:19;37654:26;37645:35;;37617:77;37720:67;37780:6;37773:5;37720:67;:::i;:::-;37714:4;37707:81;37576:222;36911:887;;36941:618;36993:4;36989:9;36981:6;36977:22;37027:37;37059:4;37027:37;:::i;:::-;37086:1;37100:208;37114:7;37111:1;37108:14;37100:208;;;37193:9;37188:3;37184:19;37178:26;37170:6;37163:42;37244:1;37236:6;37232:14;37222:24;;37291:2;37280:9;37276:18;37263:31;;37137:4;37134:1;37130:12;37125:17;;37100:208;;;37336:6;37327:7;37324:19;37321:179;;;37394:9;37389:3;37385:19;37379:26;37437:48;37479:4;37471:6;37467:17;37456:9;37437:48;:::i;:::-;37429:6;37422:64;37344:156;37321:179;37546:1;37542;37534:6;37530:14;37526:22;37520:4;37513:36;36948:611;;;36911:887;;36501:1303;;;36409:1395;;:::o;37810:220::-;37950:34;37946:1;37938:6;37934:14;37927:58;38019:3;38014:2;38006:6;38002:15;37995:28;37810:220;:::o;38036:366::-;38178:3;38199:67;38263:2;38258:3;38199:67;:::i;:::-;38192:74;;38275:93;38364:3;38275:93;:::i;:::-;38393:2;38388:3;38384:12;38377:19;;38036:366;;;:::o;38408:419::-;38574:4;38612:2;38601:9;38597:18;38589:26;;38661:9;38655:4;38651:20;38647:1;38636:9;38632:17;38625:47;38689:131;38815:4;38689:131;:::i;:::-;38681:139;;38408:419;;;:::o;38833:332::-;38954:4;38992:2;38981:9;38977:18;38969:26;;39005:71;39073:1;39062:9;39058:17;39049:6;39005:71;:::i;:::-;39086:72;39154:2;39143:9;39139:18;39130:6;39086:72;:::i;:::-;38833:332;;;;;:::o;39171:227::-;39311:34;39307:1;39299:6;39295:14;39288:58;39380:10;39375:2;39367:6;39363:15;39356:35;39171:227;:::o;39404:366::-;39546:3;39567:67;39631:2;39626:3;39567:67;:::i;:::-;39560:74;;39643:93;39732:3;39643:93;:::i;:::-;39761:2;39756:3;39752:12;39745:19;;39404:366;;;:::o;39776:419::-;39942:4;39980:2;39969:9;39965:18;39957:26;;40029:9;40023:4;40019:20;40015:1;40004:9;40000:17;39993:47;40057:131;40183:4;40057:131;:::i;:::-;40049:139;;39776:419;;;:::o;40201:634::-;40422:4;40460:2;40449:9;40445:18;40437:26;;40509:9;40503:4;40499:20;40495:1;40484:9;40480:17;40473:47;40537:108;40640:4;40631:6;40537:108;:::i;:::-;40529:116;;40692:9;40686:4;40682:20;40677:2;40666:9;40662:18;40655:48;40720:108;40823:4;40814:6;40720:108;:::i;:::-;40712:116;;40201:634;;;;;:::o;40841:224::-;40981:34;40977:1;40969:6;40965:14;40958:58;41050:7;41045:2;41037:6;41033:15;41026:32;40841:224;:::o;41071:366::-;41213:3;41234:67;41298:2;41293:3;41234:67;:::i;:::-;41227:74;;41310:93;41399:3;41310:93;:::i;:::-;41428:2;41423:3;41419:12;41412:19;;41071:366;;;:::o;41443:419::-;41609:4;41647:2;41636:9;41632:18;41624:26;;41696:9;41690:4;41686:20;41682:1;41671:9;41667:17;41660:47;41724:131;41850:4;41724:131;:::i;:::-;41716:139;;41443:419;;;:::o;41868:229::-;42008:34;42004:1;41996:6;41992:14;41985:58;42077:12;42072:2;42064:6;42060:15;42053:37;41868:229;:::o;42103:366::-;42245:3;42266:67;42330:2;42325:3;42266:67;:::i;:::-;42259:74;;42342:93;42431:3;42342:93;:::i;:::-;42460:2;42455:3;42451:12;42444:19;;42103:366;;;:::o;42475:419::-;42641:4;42679:2;42668:9;42664:18;42656:26;;42728:9;42722:4;42718:20;42714:1;42703:9;42699:17;42692:47;42756:131;42882:4;42756:131;:::i;:::-;42748:139;;42475:419;;;:::o;42900:222::-;43040:34;43036:1;43028:6;43024:14;43017:58;43109:5;43104:2;43096:6;43092:15;43085:30;42900:222;:::o;43128:366::-;43270:3;43291:67;43355:2;43350:3;43291:67;:::i;:::-;43284:74;;43367:93;43456:3;43367:93;:::i;:::-;43485:2;43480:3;43476:12;43469:19;;43128:366;;;:::o;43500:419::-;43666:4;43704:2;43693:9;43689:18;43681:26;;43753:9;43747:4;43743:20;43739:1;43728:9;43724:17;43717:47;43781:131;43907:4;43781:131;:::i;:::-;43773:139;;43500:419;;;:::o;43925:223::-;44065:34;44061:1;44053:6;44049:14;44042:58;44134:6;44129:2;44121:6;44117:15;44110:31;43925:223;:::o;44154:366::-;44296:3;44317:67;44381:2;44376:3;44317:67;:::i;:::-;44310:74;;44393:93;44482:3;44393:93;:::i;:::-;44511:2;44506:3;44502:12;44495:19;;44154:366;;;:::o;44526:419::-;44692:4;44730:2;44719:9;44715:18;44707:26;;44779:9;44773:4;44769:20;44765:1;44754:9;44750:17;44743:47;44807:131;44933:4;44807:131;:::i;:::-;44799:139;;44526:419;;;:::o;44951:228::-;45091:34;45087:1;45079:6;45075:14;45068:58;45160:11;45155:2;45147:6;45143:15;45136:36;44951:228;:::o;45185:366::-;45327:3;45348:67;45412:2;45407:3;45348:67;:::i;:::-;45341:74;;45424:93;45513:3;45424:93;:::i;:::-;45542:2;45537:3;45533:12;45526:19;;45185:366;;;:::o;45557:419::-;45723:4;45761:2;45750:9;45746:18;45738:26;;45810:9;45804:4;45800:20;45796:1;45785:9;45781:17;45774:47;45838:131;45964:4;45838:131;:::i;:::-;45830:139;;45557:419;;;:::o;45982:98::-;46033:6;46067:5;46061:12;46051:22;;45982:98;;;:::o;46086:168::-;46169:11;46203:6;46198:3;46191:19;46243:4;46238:3;46234:14;46219:29;;46086:168;;;;:::o;46260:360::-;46346:3;46374:38;46406:5;46374:38;:::i;:::-;46428:70;46491:6;46486:3;46428:70;:::i;:::-;46421:77;;46507:52;46552:6;46547:3;46540:4;46533:5;46529:16;46507:52;:::i;:::-;46584:29;46606:6;46584:29;:::i;:::-;46579:3;46575:39;46568:46;;46350:270;46260:360;;;;:::o;46626:751::-;46849:4;46887:3;46876:9;46872:19;46864:27;;46901:71;46969:1;46958:9;46954:17;46945:6;46901:71;:::i;:::-;46982:72;47050:2;47039:9;47035:18;47026:6;46982:72;:::i;:::-;47064;47132:2;47121:9;47117:18;47108:6;47064:72;:::i;:::-;47146;47214:2;47203:9;47199:18;47190:6;47146:72;:::i;:::-;47266:9;47260:4;47256:20;47250:3;47239:9;47235:19;47228:49;47294:76;47365:4;47356:6;47294:76;:::i;:::-;47286:84;;46626:751;;;;;;;;:::o;47383:141::-;47439:5;47470:6;47464:13;47455:22;;47486:32;47512:5;47486:32;:::i;:::-;47383:141;;;;:::o;47530:349::-;47599:6;47648:2;47636:9;47627:7;47623:23;47619:32;47616:119;;;47654:79;;:::i;:::-;47616:119;47774:1;47799:63;47854:7;47845:6;47834:9;47830:22;47799:63;:::i;:::-;47789:73;;47745:127;47530:349;;;;:::o;47885:106::-;47929:8;47978:5;47973:3;47969:15;47948:36;;47885:106;;;:::o;47997:183::-;48032:3;48070:1;48052:16;48049:23;48046:128;;;48108:1;48105;48102;48087:23;48130:34;48161:1;48155:8;48130:34;:::i;:::-;48123:41;;48046:128;47997:183;:::o;48186:711::-;48225:3;48263:4;48245:16;48242:26;48271:5;48239:39;48300:20;;:::i;:::-;48375:1;48357:16;48353:24;48350:1;48344:4;48329:49;48408:4;48402:11;48507:16;48500:4;48492:6;48488:17;48485:39;48452:18;48444:6;48441:30;48425:113;48422:146;;;48553:5;;;;48422:146;48599:6;48593:4;48589:17;48635:3;48629:10;48662:18;48654:6;48651:30;48648:43;;;48684:5;;;;;;48648:43;48732:6;48725:4;48720:3;48716:14;48712:27;48791:1;48773:16;48769:24;48763:4;48759:35;48754:3;48751:44;48748:57;;;48798:5;;;;;;;48748:57;48815;48863:6;48857:4;48853:17;48845:6;48841:30;48835:4;48815:57;:::i;:::-;48888:3;48881:10;;48229:668;;;;;48186:711;;:::o;48903:239::-;49043:34;49039:1;49031:6;49027:14;49020:58;49112:22;49107:2;49099:6;49095:15;49088:47;48903:239;:::o;49148:366::-;49290:3;49311:67;49375:2;49370:3;49311:67;:::i;:::-;49304:74;;49387:93;49476:3;49387:93;:::i;:::-;49505:2;49500:3;49496:12;49489:19;;49148:366;;;:::o;49520:419::-;49686:4;49724:2;49713:9;49709:18;49701:26;;49773:9;49767:4;49763:20;49759:1;49748:9;49744:17;49737:47;49801:131;49927:4;49801:131;:::i;:::-;49793:139;;49520:419;;;:::o;49945:227::-;50085:34;50081:1;50073:6;50069:14;50062:58;50154:10;50149:2;50141:6;50137:15;50130:35;49945:227;:::o;50178:366::-;50320:3;50341:67;50405:2;50400:3;50341:67;:::i;:::-;50334:74;;50417:93;50506:3;50417:93;:::i;:::-;50535:2;50530:3;50526:12;50519:19;;50178:366;;;:::o;50550:419::-;50716:4;50754:2;50743:9;50739:18;50731:26;;50803:9;50797:4;50793:20;50789:1;50778:9;50774:17;50767:47;50831:131;50957:4;50831:131;:::i;:::-;50823:139;;50550:419;;;:::o;50975:1053::-;51298:4;51336:3;51325:9;51321:19;51313:27;;51350:71;51418:1;51407:9;51403:17;51394:6;51350:71;:::i;:::-;51431:72;51499:2;51488:9;51484:18;51475:6;51431:72;:::i;:::-;51550:9;51544:4;51540:20;51535:2;51524:9;51520:18;51513:48;51578:108;51681:4;51672:6;51578:108;:::i;:::-;51570:116;;51733:9;51727:4;51723:20;51718:2;51707:9;51703:18;51696:48;51761:108;51864:4;51855:6;51761:108;:::i;:::-;51753:116;;51917:9;51911:4;51907:20;51901:3;51890:9;51886:19;51879:49;51945:76;52016:4;52007:6;51945:76;:::i;:::-;51937:84;;50975:1053;;;;;;;;:::o;52034:227::-;52174:34;52170:1;52162:6;52158:14;52151:58;52243:10;52238:2;52230:6;52226:15;52219:35;52034:227;:::o;52267:366::-;52409:3;52430:67;52494:2;52489:3;52430:67;:::i;:::-;52423:74;;52506:93;52595:3;52506:93;:::i;:::-;52624:2;52619:3;52615:12;52608:19;;52267:366;;;:::o;52639:419::-;52805:4;52843:2;52832:9;52828:18;52820:26;;52892:9;52886:4;52882:20;52878:1;52867:9;52863:17;52856:47;52920:131;53046:4;52920:131;:::i;:::-;52912:139;;52639:419;;;:::o

Swarm Source

ipfs://461f4dd719416180d251a5eb3c3af859f70f03bf7ae8435ed49587c82d20f014
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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