ETH Price: $3,002.07 (+5.30%)
Gas: 2 Gwei

Token

MNFTSG (MNFTSG)
 

Overview

Max Total Supply

226 MNFTSG

Holders

126

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xaf59ffea85445fba76c3c4d92b01b3a304adea63
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:
mnftsg

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-18
*/

// SPDX-License-Identifier: MIT

/**
$$\      $$\ $$\   $$\ $$$$$$$$\ $$$$$$$$\  $$$$$$\   $$$$$$\  
$$$\    $$$ |$$$\  $$ |$$  _____|\__$$  __|$$  __$$\ $$  __$$\ 
$$$$\  $$$$ |$$$$\ $$ |$$ |         $$ |   $$ /  \__|$$ /  \__|
$$\$$\$$ $$ |$$ $$\$$ |$$$$$\       $$ |   \$$$$$$\  $$ |$$$$\ 
$$ \$$$  $$ |$$ \$$$$ |$$  __|      $$ |    \____$$\ $$ |\_$$ |
$$ |\$  /$$ |$$ |\$$$ |$$ |         $$ |   $$\   $$ |$$ |  $$ |
$$ | \_/ $$ |$$ | \$$ |$$ |         $$ |   \$$$$$$  |\$$$$$$  |
\__|     \__|\__|  \__|\__|         \__|    \______/  \______/                                                               
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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 be 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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 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: transfer caller is not 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}.
     *
     * 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`
     *
     * 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}.
     *
     * 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 a {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 `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 _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

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

        return array;
    }
}

// File: contracts/mntftsg.sol

// Amended by rayrayng


pragma solidity ^0.8.0;

contract mnftsg is ERC1155, Ownable {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "MNFTSG";
    symbol = "MNFTSG";
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
    _burnBatch(msg.sender, _ids, _amounts);
  }

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

}

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":[{"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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600681526020017f4d4e46545347000000000000000000000000000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600681526020017f4d4e46545347000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613f1780620003056000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a60048036038101906101459190612be9565b6103cc565b6040516101579190613513565b60405180910390f35b61017a60048036038101906101759190612d6c565b610495565b60405161018791906132f6565b60405180910390f35b610198610577565b6040516101a59190613311565b60405180910390f35b6101c860048036038101906101c39190612dc6565b610605565b6040516101d59190613311565b60405180910390f35b6101f860048036038101906101f39190612c29565b6106aa565b005b610214600480360381019061020f91906128cd565b610746565b005b610230600480360381019061022b9190612c7c565b6107e7565b60405161023d919061329d565b60405180910390f35b610260600480360381019061025b9190612abe565b610900565b005b61026a6109a9565b005b61028660048036038101906102819190612cf4565b610a31565b005b6102a2600480360381019061029d9190612df3565b610a40565b005b6102ac610b20565b6040516102b991906131c0565b60405180910390f35b6102ca610b4a565b6040516102d79190613311565b60405180910390f35b6102fa60048036038101906102f59190612ba9565b610bd8565b005b61031660048036038101906103119190612e4f565b610bee565b005b610332600480360381019061032d9190612dc6565b610bfd565b60405161033f9190613311565b60405180910390f35b610362600480360381019061035d9190612a33565b610c9d565b005b61037e6004803603810190610379919061288d565b610d39565b60405161038b91906132f6565b60405180910390f35b6103ae60048036038101906103a9919061299c565b610dcd565b005b6103ca60048036038101906103c59190612860565b610e6e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610434906133d3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82610f66565b5b9050919050565b60048054610584906137b3565b80601f01602080910402602001604051908101604052809291908181526020018280546105b0906137b3565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6060600660008381526020019081526020016000208054610625906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610651906137b3565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b50505050509050919050565b6106b2610fd0565b73ffffffffffffffffffffffffffffffffffffffff166106d0610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d90613473565b60405180910390fd5b61074183838360405180602001604052806000815250610fd8565b505050565b61074e610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079457506107938561078e610fd0565b610d39565b5b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90613413565b60405180910390fd5b6107e08585858585611189565b5050505050565b6060815183511461082d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610824906134b3565b60405180910390fd5b6000835167ffffffffffffffff81111561084a576108496138ec565b5b6040519080825280602002602001820160405280156108785781602001602082028036833780820191505090505b50905060005b84518110156108f5576108c585828151811061089d5761089c6138bd565b5b60200260200101518583815181106108b8576108b76138bd565b5b60200260200101516103cc565b8282815181106108d8576108d76138bd565b5b602002602001018181525050806108ee90613816565b905061087e565b508091505092915050565b610908610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610926610b20565b73ffffffffffffffffffffffffffffffffffffffff161461097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097390613473565b60405180910390fd5b6109878585856114ab565b6109a28583836040518060200160405280600081525061177a565b5050505050565b6109b1610fd0565b73ffffffffffffffffffffffffffffffffffffffff166109cf610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613473565b60405180910390fd5b610a2f60006119a7565b565b610a3c3383836114ab565b5050565b610a48610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610a66610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613473565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae3929190612538565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b149190613311565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b57906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b83906137b3565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b610bea610be3610fd0565b8383611a6d565b5050565b610bf9338383611bda565b5050565b60066020528060005260406000206000915090508054610c1c906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c48906137b3565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b505050505081565b610ca5610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610cc3610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613473565b60405180910390fd5b610d348383836040518060200160405280600081525061177a565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd5610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1b5750610e1a85610e15610fd0565b610d39565b5b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e51906133b3565b60405180910390fd5b610e678585858585611e21565b5050505050565b610e76610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610e94610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190613473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190613373565b60405180910390fd5b610f63816119a7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906134f3565b60405180910390fd5b6000611052610fd0565b9050600061105f856120bd565b9050600061106c856120bd565b905061107d83600089858589612137565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110dc91906136a7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161115a92919061352e565b60405180910390a46111718360008985858961213f565b61118083600089898989612147565b50505050505050565b81518351146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561123d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611234906133f3565b60405180910390fd5b6000611247610fd0565b9050611257818787878787612137565b60005b8451811015611408576000858281518110611278576112776138bd565b5b602002602001015190506000858381518110611297576112966138bd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613453565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ed91906136a7565b925050819055505050508061140190613816565b905061125a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161147f9291906132bf565b60405180910390a461149581878787878761213f565b6114a381878787878761232e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290613433565b60405180910390fd5b805182511461155f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611556906134d3565b60405180910390fd5b6000611569610fd0565b905061158981856000868660405180602001604052806000815250612137565b60005b83518110156116d65760008482815181106115aa576115a96138bd565b5b6020026020010151905060008483815181106115c9576115c86138bd565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613393565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116ce90613816565b91505061158c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161174e9291906132bf565b60405180910390a46117748185600086866040518060200160405280600081525061213f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906134f3565b60405180910390fd5b815183511461182e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611825906134d3565b60405180910390fd5b6000611838610fd0565b905061184981600087878787612137565b60005b845181101561190257838181518110611868576118676138bd565b5b6020026020010151600080878481518110611886576118856138bd565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e891906136a7565b9250508190555080806118fa90613816565b91505061184c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161197a9291906132bf565b60405180910390a46119918160008787878761213f565b6119a08160008787878761232e565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613493565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bcd91906132f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190613433565b60405180910390fd5b6000611c54610fd0565b90506000611c61846120bd565b90506000611c6e846120bd565b9050611c8e83876000858560405180602001604052806000815250612137565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90613393565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611df292919061352e565b60405180910390a4611e188488600086866040518060200160405280600081525061213f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e88906133f3565b60405180910390fd5b6000611e9b610fd0565b90506000611ea8856120bd565b90506000611eb5856120bd565b9050611ec5838989858589612137565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390613453565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461201191906136a7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161208e92919061352e565b60405180910390a46120a4848a8a86868a61213f565b6120b2848a8a8a8a8a612147565b505050505050505050565b60606000600167ffffffffffffffff8111156120dc576120db6138ec565b5b60405190808252806020026020018201604052801561210a5781602001602082028036833780820191505090505b5090508281600081518110612122576121216138bd565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6121668473ffffffffffffffffffffffffffffffffffffffff16612515565b15612326578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121ac959493929190613243565b602060405180830381600087803b1580156121c657600080fd5b505af19250505080156121f757506040513d601f19601f820116820180604052508101906121f49190612d99565b60015b61229d5761220361391b565b806308c379a014156122605750612218613def565b806122235750612262565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122579190613311565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490613333565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613353565b60405180910390fd5b505b505050505050565b61234d8473ffffffffffffffffffffffffffffffffffffffff16612515565b1561250d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123939594939291906131db565b602060405180830381600087803b1580156123ad57600080fd5b505af19250505080156123de57506040513d601f19601f820116820180604052508101906123db9190612d99565b60015b612484576123ea61391b565b806308c379a0141561244757506123ff613def565b8061240a5750612449565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9190613311565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90613333565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290613353565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612544906137b3565b90600052602060002090601f01602090048101928261256657600085556125ad565b82601f1061257f57805160ff19168380011785556125ad565b828001600101855582156125ad579182015b828111156125ac578251825591602001919060010190612591565b5b5090506125ba91906125be565b5090565b5b808211156125d75760008160009055506001016125bf565b5090565b60006125ee6125e98461357c565b613557565b9050808382526020820190508285602086028201111561261157612610613942565b5b60005b858110156126415781612627888261273f565b845260208401935060208301925050600181019050612614565b5050509392505050565b600061265e612659846135a8565b613557565b9050808382526020820190508285602086028201111561268157612680613942565b5b60005b858110156126b15781612697888261284b565b845260208401935060208301925050600181019050612684565b5050509392505050565b60006126ce6126c9846135d4565b613557565b9050828152602081018484840111156126ea576126e9613947565b5b6126f5848285613771565b509392505050565b600061271061270b84613605565b613557565b90508281526020810184848401111561272c5761272b613947565b5b612737848285613771565b509392505050565b60008135905061274e81613e85565b92915050565b600082601f8301126127695761276861393d565b5b81356127798482602086016125db565b91505092915050565b600082601f8301126127975761279661393d565b5b81356127a784826020860161264b565b91505092915050565b6000813590506127bf81613e9c565b92915050565b6000813590506127d481613eb3565b92915050565b6000815190506127e981613eb3565b92915050565b600082601f8301126128045761280361393d565b5b81356128148482602086016126bb565b91505092915050565b600082601f8301126128325761283161393d565b5b81356128428482602086016126fd565b91505092915050565b60008135905061285a81613eca565b92915050565b60006020828403121561287657612875613951565b5b60006128848482850161273f565b91505092915050565b600080604083850312156128a4576128a3613951565b5b60006128b28582860161273f565b92505060206128c38582860161273f565b9150509250929050565b600080600080600060a086880312156128e9576128e8613951565b5b60006128f78882890161273f565b95505060206129088882890161273f565b945050604086013567ffffffffffffffff8111156129295761292861394c565b5b61293588828901612782565b935050606086013567ffffffffffffffff8111156129565761295561394c565b5b61296288828901612782565b925050608086013567ffffffffffffffff8111156129835761298261394c565b5b61298f888289016127ef565b9150509295509295909350565b600080600080600060a086880312156129b8576129b7613951565b5b60006129c68882890161273f565b95505060206129d78882890161273f565b94505060406129e88882890161284b565b93505060606129f98882890161284b565b925050608086013567ffffffffffffffff811115612a1a57612a1961394c565b5b612a26888289016127ef565b9150509295509295909350565b600080600060608486031215612a4c57612a4b613951565b5b6000612a5a8682870161273f565b935050602084013567ffffffffffffffff811115612a7b57612a7a61394c565b5b612a8786828701612782565b925050604084013567ffffffffffffffff811115612aa857612aa761394c565b5b612ab486828701612782565b9150509250925092565b600080600080600060a08688031215612ada57612ad9613951565b5b6000612ae88882890161273f565b955050602086013567ffffffffffffffff811115612b0957612b0861394c565b5b612b1588828901612782565b945050604086013567ffffffffffffffff811115612b3657612b3561394c565b5b612b4288828901612782565b935050606086013567ffffffffffffffff811115612b6357612b6261394c565b5b612b6f88828901612782565b925050608086013567ffffffffffffffff811115612b9057612b8f61394c565b5b612b9c88828901612782565b9150509295509295909350565b60008060408385031215612bc057612bbf613951565b5b6000612bce8582860161273f565b9250506020612bdf858286016127b0565b9150509250929050565b60008060408385031215612c0057612bff613951565b5b6000612c0e8582860161273f565b9250506020612c1f8582860161284b565b9150509250929050565b600080600060608486031215612c4257612c41613951565b5b6000612c508682870161273f565b9350506020612c618682870161284b565b9250506040612c728682870161284b565b9150509250925092565b60008060408385031215612c9357612c92613951565b5b600083013567ffffffffffffffff811115612cb157612cb061394c565b5b612cbd85828601612754565b925050602083013567ffffffffffffffff811115612cde57612cdd61394c565b5b612cea85828601612782565b9150509250929050565b60008060408385031215612d0b57612d0a613951565b5b600083013567ffffffffffffffff811115612d2957612d2861394c565b5b612d3585828601612782565b925050602083013567ffffffffffffffff811115612d5657612d5561394c565b5b612d6285828601612782565b9150509250929050565b600060208284031215612d8257612d81613951565b5b6000612d90848285016127c5565b91505092915050565b600060208284031215612daf57612dae613951565b5b6000612dbd848285016127da565b91505092915050565b600060208284031215612ddc57612ddb613951565b5b6000612dea8482850161284b565b91505092915050565b60008060408385031215612e0a57612e09613951565b5b6000612e188582860161284b565b925050602083013567ffffffffffffffff811115612e3957612e3861394c565b5b612e458582860161281d565b9150509250929050565b60008060408385031215612e6657612e65613951565b5b6000612e748582860161284b565b9250506020612e858582860161284b565b9150509250929050565b6000612e9b83836131a2565b60208301905092915050565b612eb0816136fd565b82525050565b6000612ec182613646565b612ecb8185613674565b9350612ed683613636565b8060005b83811015612f07578151612eee8882612e8f565b9750612ef983613667565b925050600181019050612eda565b5085935050505092915050565b612f1d8161370f565b82525050565b6000612f2e82613651565b612f388185613685565b9350612f48818560208601613780565b612f5181613956565b840191505092915050565b6000612f678261365c565b612f718185613696565b9350612f81818560208601613780565b612f8a81613956565b840191505092915050565b6000612fa2603483613696565b9150612fad82613974565b604082019050919050565b6000612fc5602883613696565b9150612fd0826139c3565b604082019050919050565b6000612fe8602683613696565b9150612ff382613a12565b604082019050919050565b600061300b602483613696565b915061301682613a61565b604082019050919050565b600061302e602983613696565b915061303982613ab0565b604082019050919050565b6000613051602a83613696565b915061305c82613aff565b604082019050919050565b6000613074602583613696565b915061307f82613b4e565b604082019050919050565b6000613097603283613696565b91506130a282613b9d565b604082019050919050565b60006130ba602383613696565b91506130c582613bec565b604082019050919050565b60006130dd602a83613696565b91506130e882613c3b565b604082019050919050565b6000613100602083613696565b915061310b82613c8a565b602082019050919050565b6000613123602983613696565b915061312e82613cb3565b604082019050919050565b6000613146602983613696565b915061315182613d02565b604082019050919050565b6000613169602883613696565b915061317482613d51565b604082019050919050565b600061318c602183613696565b915061319782613da0565b604082019050919050565b6131ab81613767565b82525050565b6131ba81613767565b82525050565b60006020820190506131d56000830184612ea7565b92915050565b600060a0820190506131f06000830188612ea7565b6131fd6020830187612ea7565b818103604083015261320f8186612eb6565b905081810360608301526132238185612eb6565b905081810360808301526132378184612f23565b90509695505050505050565b600060a0820190506132586000830188612ea7565b6132656020830187612ea7565b61327260408301866131b1565b61327f60608301856131b1565b81810360808301526132918184612f23565b90509695505050505050565b600060208201905081810360008301526132b78184612eb6565b905092915050565b600060408201905081810360008301526132d98185612eb6565b905081810360208301526132ed8184612eb6565b90509392505050565b600060208201905061330b6000830184612f14565b92915050565b6000602082019050818103600083015261332b8184612f5c565b905092915050565b6000602082019050818103600083015261334c81612f95565b9050919050565b6000602082019050818103600083015261336c81612fb8565b9050919050565b6000602082019050818103600083015261338c81612fdb565b9050919050565b600060208201905081810360008301526133ac81612ffe565b9050919050565b600060208201905081810360008301526133cc81613021565b9050919050565b600060208201905081810360008301526133ec81613044565b9050919050565b6000602082019050818103600083015261340c81613067565b9050919050565b6000602082019050818103600083015261342c8161308a565b9050919050565b6000602082019050818103600083015261344c816130ad565b9050919050565b6000602082019050818103600083015261346c816130d0565b9050919050565b6000602082019050818103600083015261348c816130f3565b9050919050565b600060208201905081810360008301526134ac81613116565b9050919050565b600060208201905081810360008301526134cc81613139565b9050919050565b600060208201905081810360008301526134ec8161315c565b9050919050565b6000602082019050818103600083015261350c8161317f565b9050919050565b600060208201905061352860008301846131b1565b92915050565b600060408201905061354360008301856131b1565b61355060208301846131b1565b9392505050565b6000613561613572565b905061356d82826137e5565b919050565b6000604051905090565b600067ffffffffffffffff821115613597576135966138ec565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135c3576135c26138ec565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135ef576135ee6138ec565b5b6135f882613956565b9050602081019050919050565b600067ffffffffffffffff8211156136205761361f6138ec565b5b61362982613956565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136b282613767565b91506136bd83613767565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136f2576136f161385f565b5b828201905092915050565b600061370882613747565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379e578082015181840152602081019050613783565b838111156137ad576000848401525b50505050565b600060028204905060018216806137cb57607f821691505b602082108114156137df576137de61388e565b5b50919050565b6137ee82613956565b810181811067ffffffffffffffff8211171561380d5761380c6138ec565b5b80604052505050565b600061382182613767565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138545761385361385f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561393a5760046000803e613937600051613967565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613dff57613e82565b613e07613572565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e2f575050613e82565b808201805167ffffffffffffffff811115613e4d5750505050613e82565b80602083010160043d038501811115613e6a575050505050613e82565b613e79826020018501866137e5565b82955050505050505b90565b613e8e816136fd565b8114613e9957600080fd5b50565b613ea58161370f565b8114613eb057600080fd5b50565b613ebc8161371b565b8114613ec757600080fd5b50565b613ed381613767565b8114613ede57600080fd5b5056fea264697066735822122001583984162d37f47a92144917ece7a11a964ff98c9b5b6809095cb8af6030a364736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a60048036038101906101459190612be9565b6103cc565b6040516101579190613513565b60405180910390f35b61017a60048036038101906101759190612d6c565b610495565b60405161018791906132f6565b60405180910390f35b610198610577565b6040516101a59190613311565b60405180910390f35b6101c860048036038101906101c39190612dc6565b610605565b6040516101d59190613311565b60405180910390f35b6101f860048036038101906101f39190612c29565b6106aa565b005b610214600480360381019061020f91906128cd565b610746565b005b610230600480360381019061022b9190612c7c565b6107e7565b60405161023d919061329d565b60405180910390f35b610260600480360381019061025b9190612abe565b610900565b005b61026a6109a9565b005b61028660048036038101906102819190612cf4565b610a31565b005b6102a2600480360381019061029d9190612df3565b610a40565b005b6102ac610b20565b6040516102b991906131c0565b60405180910390f35b6102ca610b4a565b6040516102d79190613311565b60405180910390f35b6102fa60048036038101906102f59190612ba9565b610bd8565b005b61031660048036038101906103119190612e4f565b610bee565b005b610332600480360381019061032d9190612dc6565b610bfd565b60405161033f9190613311565b60405180910390f35b610362600480360381019061035d9190612a33565b610c9d565b005b61037e6004803603810190610379919061288d565b610d39565b60405161038b91906132f6565b60405180910390f35b6103ae60048036038101906103a9919061299c565b610dcd565b005b6103ca60048036038101906103c59190612860565b610e6e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610434906133d3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82610f66565b5b9050919050565b60048054610584906137b3565b80601f01602080910402602001604051908101604052809291908181526020018280546105b0906137b3565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6060600660008381526020019081526020016000208054610625906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610651906137b3565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b50505050509050919050565b6106b2610fd0565b73ffffffffffffffffffffffffffffffffffffffff166106d0610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d90613473565b60405180910390fd5b61074183838360405180602001604052806000815250610fd8565b505050565b61074e610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079457506107938561078e610fd0565b610d39565b5b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90613413565b60405180910390fd5b6107e08585858585611189565b5050505050565b6060815183511461082d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610824906134b3565b60405180910390fd5b6000835167ffffffffffffffff81111561084a576108496138ec565b5b6040519080825280602002602001820160405280156108785781602001602082028036833780820191505090505b50905060005b84518110156108f5576108c585828151811061089d5761089c6138bd565b5b60200260200101518583815181106108b8576108b76138bd565b5b60200260200101516103cc565b8282815181106108d8576108d76138bd565b5b602002602001018181525050806108ee90613816565b905061087e565b508091505092915050565b610908610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610926610b20565b73ffffffffffffffffffffffffffffffffffffffff161461097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097390613473565b60405180910390fd5b6109878585856114ab565b6109a28583836040518060200160405280600081525061177a565b5050505050565b6109b1610fd0565b73ffffffffffffffffffffffffffffffffffffffff166109cf610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613473565b60405180910390fd5b610a2f60006119a7565b565b610a3c3383836114ab565b5050565b610a48610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610a66610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613473565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae3929190612538565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b149190613311565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b57906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b83906137b3565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b610bea610be3610fd0565b8383611a6d565b5050565b610bf9338383611bda565b5050565b60066020528060005260406000206000915090508054610c1c906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c48906137b3565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b505050505081565b610ca5610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610cc3610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613473565b60405180910390fd5b610d348383836040518060200160405280600081525061177a565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd5610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1b5750610e1a85610e15610fd0565b610d39565b5b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e51906133b3565b60405180910390fd5b610e678585858585611e21565b5050505050565b610e76610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610e94610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190613473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190613373565b60405180910390fd5b610f63816119a7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906134f3565b60405180910390fd5b6000611052610fd0565b9050600061105f856120bd565b9050600061106c856120bd565b905061107d83600089858589612137565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110dc91906136a7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161115a92919061352e565b60405180910390a46111718360008985858961213f565b61118083600089898989612147565b50505050505050565b81518351146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561123d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611234906133f3565b60405180910390fd5b6000611247610fd0565b9050611257818787878787612137565b60005b8451811015611408576000858281518110611278576112776138bd565b5b602002602001015190506000858381518110611297576112966138bd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613453565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ed91906136a7565b925050819055505050508061140190613816565b905061125a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161147f9291906132bf565b60405180910390a461149581878787878761213f565b6114a381878787878761232e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290613433565b60405180910390fd5b805182511461155f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611556906134d3565b60405180910390fd5b6000611569610fd0565b905061158981856000868660405180602001604052806000815250612137565b60005b83518110156116d65760008482815181106115aa576115a96138bd565b5b6020026020010151905060008483815181106115c9576115c86138bd565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613393565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116ce90613816565b91505061158c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161174e9291906132bf565b60405180910390a46117748185600086866040518060200160405280600081525061213f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906134f3565b60405180910390fd5b815183511461182e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611825906134d3565b60405180910390fd5b6000611838610fd0565b905061184981600087878787612137565b60005b845181101561190257838181518110611868576118676138bd565b5b6020026020010151600080878481518110611886576118856138bd565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e891906136a7565b9250508190555080806118fa90613816565b91505061184c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161197a9291906132bf565b60405180910390a46119918160008787878761213f565b6119a08160008787878761232e565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613493565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bcd91906132f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190613433565b60405180910390fd5b6000611c54610fd0565b90506000611c61846120bd565b90506000611c6e846120bd565b9050611c8e83876000858560405180602001604052806000815250612137565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90613393565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611df292919061352e565b60405180910390a4611e188488600086866040518060200160405280600081525061213f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e88906133f3565b60405180910390fd5b6000611e9b610fd0565b90506000611ea8856120bd565b90506000611eb5856120bd565b9050611ec5838989858589612137565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390613453565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461201191906136a7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161208e92919061352e565b60405180910390a46120a4848a8a86868a61213f565b6120b2848a8a8a8a8a612147565b505050505050505050565b60606000600167ffffffffffffffff8111156120dc576120db6138ec565b5b60405190808252806020026020018201604052801561210a5781602001602082028036833780820191505090505b5090508281600081518110612122576121216138bd565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6121668473ffffffffffffffffffffffffffffffffffffffff16612515565b15612326578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121ac959493929190613243565b602060405180830381600087803b1580156121c657600080fd5b505af19250505080156121f757506040513d601f19601f820116820180604052508101906121f49190612d99565b60015b61229d5761220361391b565b806308c379a014156122605750612218613def565b806122235750612262565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122579190613311565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490613333565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613353565b60405180910390fd5b505b505050505050565b61234d8473ffffffffffffffffffffffffffffffffffffffff16612515565b1561250d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123939594939291906131db565b602060405180830381600087803b1580156123ad57600080fd5b505af19250505080156123de57506040513d601f19601f820116820180604052508101906123db9190612d99565b60015b612484576123ea61391b565b806308c379a0141561244757506123ff613def565b8061240a5750612449565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9190613311565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90613333565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290613353565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612544906137b3565b90600052602060002090601f01602090048101928261256657600085556125ad565b82601f1061257f57805160ff19168380011785556125ad565b828001600101855582156125ad579182015b828111156125ac578251825591602001919060010190612591565b5b5090506125ba91906125be565b5090565b5b808211156125d75760008160009055506001016125bf565b5090565b60006125ee6125e98461357c565b613557565b9050808382526020820190508285602086028201111561261157612610613942565b5b60005b858110156126415781612627888261273f565b845260208401935060208301925050600181019050612614565b5050509392505050565b600061265e612659846135a8565b613557565b9050808382526020820190508285602086028201111561268157612680613942565b5b60005b858110156126b15781612697888261284b565b845260208401935060208301925050600181019050612684565b5050509392505050565b60006126ce6126c9846135d4565b613557565b9050828152602081018484840111156126ea576126e9613947565b5b6126f5848285613771565b509392505050565b600061271061270b84613605565b613557565b90508281526020810184848401111561272c5761272b613947565b5b612737848285613771565b509392505050565b60008135905061274e81613e85565b92915050565b600082601f8301126127695761276861393d565b5b81356127798482602086016125db565b91505092915050565b600082601f8301126127975761279661393d565b5b81356127a784826020860161264b565b91505092915050565b6000813590506127bf81613e9c565b92915050565b6000813590506127d481613eb3565b92915050565b6000815190506127e981613eb3565b92915050565b600082601f8301126128045761280361393d565b5b81356128148482602086016126bb565b91505092915050565b600082601f8301126128325761283161393d565b5b81356128428482602086016126fd565b91505092915050565b60008135905061285a81613eca565b92915050565b60006020828403121561287657612875613951565b5b60006128848482850161273f565b91505092915050565b600080604083850312156128a4576128a3613951565b5b60006128b28582860161273f565b92505060206128c38582860161273f565b9150509250929050565b600080600080600060a086880312156128e9576128e8613951565b5b60006128f78882890161273f565b95505060206129088882890161273f565b945050604086013567ffffffffffffffff8111156129295761292861394c565b5b61293588828901612782565b935050606086013567ffffffffffffffff8111156129565761295561394c565b5b61296288828901612782565b925050608086013567ffffffffffffffff8111156129835761298261394c565b5b61298f888289016127ef565b9150509295509295909350565b600080600080600060a086880312156129b8576129b7613951565b5b60006129c68882890161273f565b95505060206129d78882890161273f565b94505060406129e88882890161284b565b93505060606129f98882890161284b565b925050608086013567ffffffffffffffff811115612a1a57612a1961394c565b5b612a26888289016127ef565b9150509295509295909350565b600080600060608486031215612a4c57612a4b613951565b5b6000612a5a8682870161273f565b935050602084013567ffffffffffffffff811115612a7b57612a7a61394c565b5b612a8786828701612782565b925050604084013567ffffffffffffffff811115612aa857612aa761394c565b5b612ab486828701612782565b9150509250925092565b600080600080600060a08688031215612ada57612ad9613951565b5b6000612ae88882890161273f565b955050602086013567ffffffffffffffff811115612b0957612b0861394c565b5b612b1588828901612782565b945050604086013567ffffffffffffffff811115612b3657612b3561394c565b5b612b4288828901612782565b935050606086013567ffffffffffffffff811115612b6357612b6261394c565b5b612b6f88828901612782565b925050608086013567ffffffffffffffff811115612b9057612b8f61394c565b5b612b9c88828901612782565b9150509295509295909350565b60008060408385031215612bc057612bbf613951565b5b6000612bce8582860161273f565b9250506020612bdf858286016127b0565b9150509250929050565b60008060408385031215612c0057612bff613951565b5b6000612c0e8582860161273f565b9250506020612c1f8582860161284b565b9150509250929050565b600080600060608486031215612c4257612c41613951565b5b6000612c508682870161273f565b9350506020612c618682870161284b565b9250506040612c728682870161284b565b9150509250925092565b60008060408385031215612c9357612c92613951565b5b600083013567ffffffffffffffff811115612cb157612cb061394c565b5b612cbd85828601612754565b925050602083013567ffffffffffffffff811115612cde57612cdd61394c565b5b612cea85828601612782565b9150509250929050565b60008060408385031215612d0b57612d0a613951565b5b600083013567ffffffffffffffff811115612d2957612d2861394c565b5b612d3585828601612782565b925050602083013567ffffffffffffffff811115612d5657612d5561394c565b5b612d6285828601612782565b9150509250929050565b600060208284031215612d8257612d81613951565b5b6000612d90848285016127c5565b91505092915050565b600060208284031215612daf57612dae613951565b5b6000612dbd848285016127da565b91505092915050565b600060208284031215612ddc57612ddb613951565b5b6000612dea8482850161284b565b91505092915050565b60008060408385031215612e0a57612e09613951565b5b6000612e188582860161284b565b925050602083013567ffffffffffffffff811115612e3957612e3861394c565b5b612e458582860161281d565b9150509250929050565b60008060408385031215612e6657612e65613951565b5b6000612e748582860161284b565b9250506020612e858582860161284b565b9150509250929050565b6000612e9b83836131a2565b60208301905092915050565b612eb0816136fd565b82525050565b6000612ec182613646565b612ecb8185613674565b9350612ed683613636565b8060005b83811015612f07578151612eee8882612e8f565b9750612ef983613667565b925050600181019050612eda565b5085935050505092915050565b612f1d8161370f565b82525050565b6000612f2e82613651565b612f388185613685565b9350612f48818560208601613780565b612f5181613956565b840191505092915050565b6000612f678261365c565b612f718185613696565b9350612f81818560208601613780565b612f8a81613956565b840191505092915050565b6000612fa2603483613696565b9150612fad82613974565b604082019050919050565b6000612fc5602883613696565b9150612fd0826139c3565b604082019050919050565b6000612fe8602683613696565b9150612ff382613a12565b604082019050919050565b600061300b602483613696565b915061301682613a61565b604082019050919050565b600061302e602983613696565b915061303982613ab0565b604082019050919050565b6000613051602a83613696565b915061305c82613aff565b604082019050919050565b6000613074602583613696565b915061307f82613b4e565b604082019050919050565b6000613097603283613696565b91506130a282613b9d565b604082019050919050565b60006130ba602383613696565b91506130c582613bec565b604082019050919050565b60006130dd602a83613696565b91506130e882613c3b565b604082019050919050565b6000613100602083613696565b915061310b82613c8a565b602082019050919050565b6000613123602983613696565b915061312e82613cb3565b604082019050919050565b6000613146602983613696565b915061315182613d02565b604082019050919050565b6000613169602883613696565b915061317482613d51565b604082019050919050565b600061318c602183613696565b915061319782613da0565b604082019050919050565b6131ab81613767565b82525050565b6131ba81613767565b82525050565b60006020820190506131d56000830184612ea7565b92915050565b600060a0820190506131f06000830188612ea7565b6131fd6020830187612ea7565b818103604083015261320f8186612eb6565b905081810360608301526132238185612eb6565b905081810360808301526132378184612f23565b90509695505050505050565b600060a0820190506132586000830188612ea7565b6132656020830187612ea7565b61327260408301866131b1565b61327f60608301856131b1565b81810360808301526132918184612f23565b90509695505050505050565b600060208201905081810360008301526132b78184612eb6565b905092915050565b600060408201905081810360008301526132d98185612eb6565b905081810360208301526132ed8184612eb6565b90509392505050565b600060208201905061330b6000830184612f14565b92915050565b6000602082019050818103600083015261332b8184612f5c565b905092915050565b6000602082019050818103600083015261334c81612f95565b9050919050565b6000602082019050818103600083015261336c81612fb8565b9050919050565b6000602082019050818103600083015261338c81612fdb565b9050919050565b600060208201905081810360008301526133ac81612ffe565b9050919050565b600060208201905081810360008301526133cc81613021565b9050919050565b600060208201905081810360008301526133ec81613044565b9050919050565b6000602082019050818103600083015261340c81613067565b9050919050565b6000602082019050818103600083015261342c8161308a565b9050919050565b6000602082019050818103600083015261344c816130ad565b9050919050565b6000602082019050818103600083015261346c816130d0565b9050919050565b6000602082019050818103600083015261348c816130f3565b9050919050565b600060208201905081810360008301526134ac81613116565b9050919050565b600060208201905081810360008301526134cc81613139565b9050919050565b600060208201905081810360008301526134ec8161315c565b9050919050565b6000602082019050818103600083015261350c8161317f565b9050919050565b600060208201905061352860008301846131b1565b92915050565b600060408201905061354360008301856131b1565b61355060208301846131b1565b9392505050565b6000613561613572565b905061356d82826137e5565b919050565b6000604051905090565b600067ffffffffffffffff821115613597576135966138ec565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135c3576135c26138ec565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135ef576135ee6138ec565b5b6135f882613956565b9050602081019050919050565b600067ffffffffffffffff8211156136205761361f6138ec565b5b61362982613956565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136b282613767565b91506136bd83613767565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136f2576136f161385f565b5b828201905092915050565b600061370882613747565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379e578082015181840152602081019050613783565b838111156137ad576000848401525b50505050565b600060028204905060018216806137cb57607f821691505b602082108114156137df576137de61388e565b5b50919050565b6137ee82613956565b810181811067ffffffffffffffff8211171561380d5761380c6138ec565b5b80604052505050565b600061382182613767565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138545761385361385f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561393a5760046000803e613937600051613967565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613dff57613e82565b613e07613572565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e2f575050613e82565b808201805167ffffffffffffffff811115613e4d5750505050613e82565b80602083010160043d038501811115613e6a575050505050613e82565b613e79826020018501866137e5565b82955050505050505b90565b613e8e816136fd565b8114613e9957600080fd5b50565b613ea58161370f565b8114613eb057600080fd5b50565b613ebc8161371b565b8114613ec757600080fd5b50565b613ed381613767565b8114613ede57600080fd5b5056fea264697066735822122001583984162d37f47a92144917ece7a11a964ff98c9b5b6809095cb8af6030a364736f6c63430008070033

Deployed Bytecode Sourcemap

39948:1226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24480:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23503:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39995:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41068:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40175:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26418:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24876:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40667:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3338:103;;;:::i;:::-;;40538:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40938:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2687:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40018:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25473:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40441:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40045:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40292:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25700:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25940:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3596:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24480:230;24566:7;24613:1;24594:21;;:7;:21;;;;24586:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24680:9;:13;24690:2;24680:13;;;;;;;;;;;:22;24694:7;24680:22;;;;;;;;;;;;;;;;24673:29;;24480:230;;;;:::o;23503:310::-;23605:4;23657:26;23642:41;;;:11;:41;;;;:110;;;;23715:37;23700:52;;;:11;:52;;;;23642:110;:163;;;;23769:36;23793:11;23769:23;:36::i;:::-;23642:163;23622:183;;23503:310;;;:::o;39995:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41068:101::-;41121:13;41150:8;:13;41159:3;41150:13;;;;;;;;;;;41143:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41068:101;;;:::o;40175:111::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40252:28:::1;40258:3;40263;40268:7;40252:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;40175:111:::0;;;:::o;26418:442::-;26659:12;:10;:12::i;:::-;26651:20;;:4;:20;;;:60;;;;26675:36;26692:4;26698:12;:10;:12::i;:::-;26675:16;:36::i;:::-;26651:60;26629:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26800:52;26823:4;26829:2;26833:3;26838:7;26847:4;26800:22;:52::i;:::-;26418:442;;;;;:::o;24876:524::-;25032:16;25093:3;:10;25074:8;:15;:29;25066:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25162:30;25209:8;:15;25195:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25162:63;;25243:9;25238:122;25262:8;:15;25258:1;:19;25238:122;;;25318:30;25328:8;25337:1;25328:11;;;;;;;;:::i;:::-;;;;;;;;25341:3;25345:1;25341:6;;;;;;;;:::i;:::-;;;;;;;;25318:9;:30::i;:::-;25299:13;25313:1;25299:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25279:3;;;;:::i;:::-;;;25238:122;;;;25379:13;25372:20;;;24876:524;;;;:::o;40667:265::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40833:41:::1;40844:5;40851:8;40861:12;40833:10;:41::i;:::-;40881:45;40892:5;40899:8;40909:12;40881:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;40667:265:::0;;;;;:::o;3338:103::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3403:30:::1;3430:1;3403:18;:30::i;:::-;3338:103::o:0;40538:123::-;40617:38;40628:10;40640:4;40646:8;40617:10;:38::i;:::-;40538:123;;:::o;40938:124::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41026:4:::1;41010:8;:13;41019:3;41010:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;41052:3;41042:14;41046:4;41042:14;;;;;;:::i;:::-;;;;;;;;40938:124:::0;;:::o;2687:87::-;2733:7;2760:6;;;;;;;;;;;2753:13;;2687:87;:::o;40018:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25473:155::-;25568:52;25587:12;:10;:12::i;:::-;25601:8;25611;25568:18;:52::i;:::-;25473:155;;:::o;40441:91::-;40495:31;40501:10;40513:3;40518:7;40495:5;:31::i;:::-;40441:91;;:::o;40045:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40292:143::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40394:35:::1;40405:3;40410:4;40416:8;40394:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;40292:143:::0;;;:::o;25700:168::-;25799:4;25823:18;:27;25842:7;25823:27;;;;;;;;;;;;;;;:37;25851:8;25823:37;;;;;;;;;;;;;;;;;;;;;;;;;25816:44;;25700:168;;;;:::o;25940:401::-;26156:12;:10;:12::i;:::-;26148:20;;:4;:20;;;:60;;;;26172:36;26189:4;26195:12;:10;:12::i;:::-;26172:16;:36::i;:::-;26148:60;26126:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26288:45;26306:4;26312:2;26316;26320:6;26328:4;26288:17;:45::i;:::-;25940:401;;;;;:::o;3596:201::-;2918:12;:10;:12::i;:::-;2907:23;;:7;:5;:7::i;:::-;:23;;;2899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3705:1:::1;3685:22;;:8;:22;;;;3677:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3761:28;3780:8;3761:18;:28::i;:::-;3596:201:::0;:::o;14599:157::-;14684:4;14723:25;14708:40;;;:11;:40;;;;14701:47;;14599:157;;;:::o;1358:98::-;1411:7;1438:10;1431:17;;1358:98;:::o;31120:729::-;31287:1;31273:16;;:2;:16;;;;31265:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31340:16;31359:12;:10;:12::i;:::-;31340:31;;31382:20;31405:21;31423:2;31405:17;:21::i;:::-;31382:44;;31437:24;31464:25;31482:6;31464:17;:25::i;:::-;31437:52;;31502:66;31523:8;31541:1;31545:2;31549:3;31554:7;31563:4;31502:20;:66::i;:::-;31602:6;31581:9;:13;31591:2;31581:13;;;;;;;;;;;:17;31595:2;31581:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31661:2;31624:52;;31657:1;31624:52;;31639:8;31624:52;;;31665:2;31669:6;31624:52;;;;;;;:::i;:::-;;;;;;;;31689:65;31709:8;31727:1;31731:2;31735:3;31740:7;31749:4;31689:19;:65::i;:::-;31767:74;31798:8;31816:1;31820:2;31824;31828:6;31836:4;31767:30;:74::i;:::-;31254:595;;;31120:729;;;;:::o;28656:1146::-;28883:7;:14;28869:3;:10;:28;28861:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:1;28961:16;;:2;:16;;;;28953:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29032:16;29051:12;:10;:12::i;:::-;29032:31;;29076:60;29097:8;29107:4;29113:2;29117:3;29122:7;29131:4;29076:20;:60::i;:::-;29154:9;29149:421;29173:3;:10;29169:1;:14;29149:421;;;29205:10;29218:3;29222:1;29218:6;;;;;;;;:::i;:::-;;;;;;;;29205:19;;29239:14;29256:7;29264:1;29256:10;;;;;;;;:::i;:::-;;;;;;;;29239:27;;29283:19;29305:9;:13;29315:2;29305:13;;;;;;;;;;;:19;29319:4;29305:19;;;;;;;;;;;;;;;;29283:41;;29362:6;29347:11;:21;;29339:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29495:6;29481:11;:20;29459:9;:13;29469:2;29459:13;;;;;;;;;;;:19;29473:4;29459:19;;;;;;;;;;;;;;;:42;;;;29552:6;29531:9;:13;29541:2;29531:13;;;;;;;;;;;:17;29545:2;29531:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29190:380;;;29185:3;;;;:::i;:::-;;;29149:421;;;;29617:2;29587:47;;29611:4;29587:47;;29601:8;29587:47;;;29621:3;29626:7;29587:47;;;;;;;:::i;:::-;;;;;;;;29647:59;29667:8;29677:4;29683:2;29687:3;29692:7;29701:4;29647:19;:59::i;:::-;29719:75;29755:8;29765:4;29771:2;29775:3;29780:7;29789:4;29719:35;:75::i;:::-;28850:952;28656:1146;;;;;:::o;34279:969::-;34447:1;34431:18;;:4;:18;;;;34423:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34522:7;:14;34508:3;:10;:28;34500:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34594:16;34613:12;:10;:12::i;:::-;34594:31;;34638:66;34659:8;34669:4;34683:1;34687:3;34692:7;34638:66;;;;;;;;;;;;:20;:66::i;:::-;34722:9;34717:373;34741:3;:10;34737:1;:14;34717:373;;;34773:10;34786:3;34790:1;34786:6;;;;;;;;:::i;:::-;;;;;;;;34773:19;;34807:14;34824:7;34832:1;34824:10;;;;;;;;:::i;:::-;;;;;;;;34807:27;;34851:19;34873:9;:13;34883:2;34873:13;;;;;;;;;;;:19;34887:4;34873:19;;;;;;;;;;;;;;;;34851:41;;34930:6;34915:11;:21;;34907:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35057:6;35043:11;:20;35021:9;:13;35031:2;35021:13;;;;;;;;;;;:19;35035:4;35021:19;;;;;;;;;;;;;;;:42;;;;34758:332;;;34753:3;;;;;:::i;:::-;;;;34717:373;;;;35145:1;35107:55;;35131:4;35107:55;;35121:8;35107:55;;;35149:3;35154:7;35107:55;;;;;;;:::i;:::-;;;;;;;;35175:65;35195:8;35205:4;35219:1;35223:3;35228:7;35175:65;;;;;;;;;;;;:19;:65::i;:::-;34412:836;34279:969;;;:::o;32205:813::-;32397:1;32383:16;;:2;:16;;;;32375:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32470:7;:14;32456:3;:10;:28;32448:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32542:16;32561:12;:10;:12::i;:::-;32542:31;;32586:66;32607:8;32625:1;32629:2;32633:3;32638:7;32647:4;32586:20;:66::i;:::-;32670:9;32665:103;32689:3;:10;32685:1;:14;32665:103;;;32746:7;32754:1;32746:10;;;;;;;;:::i;:::-;;;;;;;;32721:9;:17;32731:3;32735:1;32731:6;;;;;;;;:::i;:::-;;;;;;;;32721:17;;;;;;;;;;;:21;32739:2;32721:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32701:3;;;;;:::i;:::-;;;;32665:103;;;;32821:2;32785:53;;32817:1;32785:53;;32799:8;32785:53;;;32825:3;32830:7;32785:53;;;;;;;:::i;:::-;;;;;;;;32851:65;32871:8;32889:1;32893:2;32897:3;32902:7;32911:4;32851:19;:65::i;:::-;32929:81;32965:8;32983:1;32987:2;32991:3;32996:7;33005:4;32929:35;:81::i;:::-;32364:654;32205:813;;;;:::o;3957:191::-;4031:16;4050:6;;;;;;;;;;;4031:25;;4076:8;4067:6;;:17;;;;;;;;;;;;;;;;;;4131:8;4100:40;;4121:8;4100:40;;;;;;;;;;;;4020:128;3957:191;:::o;35390:331::-;35545:8;35536:17;;:5;:17;;;;35528:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35648:8;35610:18;:25;35629:5;35610:25;;;;;;;;;;;;;;;:35;35636:8;35610:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35694:8;35672:41;;35687:5;35672:41;;;35704:8;35672:41;;;;;;:::i;:::-;;;;;;;;35390:331;;;:::o;33268:808::-;33411:1;33395:18;;:4;:18;;;;33387:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:16;33485:12;:10;:12::i;:::-;33466:31;;33508:20;33531:21;33549:2;33531:17;:21::i;:::-;33508:44;;33563:24;33590:25;33608:6;33590:17;:25::i;:::-;33563:52;;33628:66;33649:8;33659:4;33673:1;33677:3;33682:7;33628:66;;;;;;;;;;;;:20;:66::i;:::-;33707:19;33729:9;:13;33739:2;33729:13;;;;;;;;;;;:19;33743:4;33729:19;;;;;;;;;;;;;;;;33707:41;;33782:6;33767:11;:21;;33759:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33901:6;33887:11;:20;33865:9;:13;33875:2;33865:13;;;;;;;;;;;:19;33879:4;33865:19;;;;;;;;;;;;;;;:42;;;;33975:1;33936:54;;33961:4;33936:54;;33951:8;33936:54;;;33979:2;33983:6;33936:54;;;;;;;:::i;:::-;;;;;;;;34003:65;34023:8;34033:4;34047:1;34051:3;34056:7;34003:65;;;;;;;;;;;;:19;:65::i;:::-;33376:700;;;;33268:808;;;:::o;27324:974::-;27526:1;27512:16;;:2;:16;;;;27504:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27583:16;27602:12;:10;:12::i;:::-;27583:31;;27625:20;27648:21;27666:2;27648:17;:21::i;:::-;27625:44;;27680:24;27707:25;27725:6;27707:17;:25::i;:::-;27680:52;;27745:60;27766:8;27776:4;27782:2;27786:3;27791:7;27800:4;27745:20;:60::i;:::-;27818:19;27840:9;:13;27850:2;27840:13;;;;;;;;;;;:19;27854:4;27840:19;;;;;;;;;;;;;;;;27818:41;;27893:6;27878:11;:21;;27870:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28018:6;28004:11;:20;27982:9;:13;27992:2;27982:13;;;;;;;;;;;:19;27996:4;27982:19;;;;;;;;;;;;;;;:42;;;;28067:6;28046:9;:13;28056:2;28046:13;;;;;;;;;;;:17;28060:2;28046:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28122:2;28091:46;;28116:4;28091:46;;28106:8;28091:46;;;28126:2;28130:6;28091:46;;;;;;;:::i;:::-;;;;;;;;28150:59;28170:8;28180:4;28186:2;28190:3;28195:7;28204:4;28150:19;:59::i;:::-;28222:68;28253:8;28263:4;28269:2;28273;28277:6;28285:4;28222:30;:68::i;:::-;27493:805;;;;27324:974;;;;;:::o;39654:198::-;39720:16;39749:22;39788:1;39774:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39749:41;;39812:7;39801:5;39807:1;39801:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39839:5;39832:12;;;39654:198;;;:::o;36677:221::-;;;;;;;:::o;37853:220::-;;;;;;;:::o;38081:744::-;38296:15;:2;:13;;;:15::i;:::-;38292:526;;;38349:2;38332:38;;;38371:8;38381:4;38387:2;38391:6;38399:4;38332:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38328:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38680:6;38673:14;;;;;;;;;;;:::i;:::-;;;;;;;;38328:479;;;38729:62;;;;;;;;;;:::i;:::-;;;;;;;;38328:479;38466:43;;;38454:55;;;:8;:55;;;;38450:154;;38534:50;;;;;;;;;;:::i;:::-;;;;;;;;38450:154;38405:214;38292:526;38081:744;;;;;;:::o;38833:813::-;39073:15;:2;:13;;;:15::i;:::-;39069:570;;;39126:2;39109:43;;;39153:8;39163:4;39169:3;39174:7;39183:4;39109:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39105:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39501:6;39494:14;;;;;;;;;;;:::i;:::-;;;;;;;;39105:523;;;39550:62;;;;;;;;;;:::i;:::-;;;;;;;;39105:523;39282:48;;;39270:60;;;:8;:60;;;;39266:159;;39355:50;;;;;;;;;;:::i;:::-;;;;;;;;39266:159;39189:251;39069:570;38833:813;;;;;;:::o;5441:326::-;5501:4;5758:1;5736:7;:19;;;:23;5729:30;;5441:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:1751::-;9218:6;9226;9234;9242;9250;9299:3;9287:9;9278:7;9274:23;9270:33;9267:120;;;9306:79;;:::i;:::-;9267:120;9426:1;9451:53;9496:7;9487:6;9476:9;9472:22;9451:53;:::i;:::-;9441:63;;9397:117;9581:2;9570:9;9566:18;9553:32;9612:18;9604:6;9601:30;9598:117;;;9634:79;;:::i;:::-;9598:117;9739:78;9809:7;9800:6;9789:9;9785:22;9739:78;:::i;:::-;9729:88;;9524:303;9894:2;9883:9;9879:18;9866:32;9925:18;9917:6;9914:30;9911:117;;;9947:79;;:::i;:::-;9911:117;10052:78;10122:7;10113:6;10102:9;10098:22;10052:78;:::i;:::-;10042:88;;9837:303;10207:2;10196:9;10192:18;10179:32;10238:18;10230:6;10227:30;10224:117;;;10260:79;;:::i;:::-;10224:117;10365:78;10435:7;10426:6;10415:9;10411:22;10365:78;:::i;:::-;10355:88;;10150:303;10520:3;10509:9;10505:19;10492:33;10552:18;10544:6;10541:30;10538:117;;;10574:79;;:::i;:::-;10538:117;10679:78;10749:7;10740:6;10729:9;10725:22;10679:78;:::i;:::-;10669:88;;10463:304;9023:1751;;;;;;;;:::o;10780:468::-;10845:6;10853;10902:2;10890:9;10881:7;10877:23;10873:32;10870:119;;;10908:79;;:::i;:::-;10870:119;11028:1;11053:53;11098:7;11089:6;11078:9;11074:22;11053:53;:::i;:::-;11043:63;;10999:117;11155:2;11181:50;11223:7;11214:6;11203:9;11199:22;11181:50;:::i;:::-;11171:60;;11126:115;10780:468;;;;;:::o;11254:474::-;11322:6;11330;11379:2;11367:9;11358:7;11354:23;11350:32;11347:119;;;11385:79;;:::i;:::-;11347:119;11505:1;11530:53;11575:7;11566:6;11555:9;11551:22;11530:53;:::i;:::-;11520:63;;11476:117;11632:2;11658:53;11703:7;11694:6;11683:9;11679:22;11658:53;:::i;:::-;11648:63;;11603:118;11254:474;;;;;:::o;11734:619::-;11811:6;11819;11827;11876:2;11864:9;11855:7;11851:23;11847:32;11844:119;;;11882:79;;:::i;:::-;11844:119;12002:1;12027:53;12072:7;12063:6;12052:9;12048:22;12027:53;:::i;:::-;12017:63;;11973:117;12129:2;12155:53;12200:7;12191:6;12180:9;12176:22;12155:53;:::i;:::-;12145:63;;12100:118;12257:2;12283:53;12328:7;12319:6;12308:9;12304:22;12283:53;:::i;:::-;12273:63;;12228:118;11734:619;;;;;:::o;12359:894::-;12477:6;12485;12534:2;12522:9;12513:7;12509:23;12505:32;12502:119;;;12540:79;;:::i;:::-;12502:119;12688:1;12677:9;12673:17;12660:31;12718:18;12710:6;12707:30;12704:117;;;12740:79;;:::i;:::-;12704:117;12845:78;12915:7;12906:6;12895:9;12891:22;12845:78;:::i;:::-;12835:88;;12631:302;13000:2;12989:9;12985:18;12972:32;13031:18;13023:6;13020:30;13017:117;;;13053:79;;:::i;:::-;13017:117;13158:78;13228:7;13219:6;13208:9;13204:22;13158:78;:::i;:::-;13148:88;;12943:303;12359:894;;;;;:::o;13259:::-;13377:6;13385;13434:2;13422:9;13413:7;13409:23;13405:32;13402:119;;;13440:79;;:::i;:::-;13402:119;13588:1;13577:9;13573:17;13560:31;13618:18;13610:6;13607:30;13604:117;;;13640:79;;:::i;:::-;13604:117;13745:78;13815:7;13806:6;13795:9;13791:22;13745:78;:::i;:::-;13735:88;;13531:302;13900:2;13889:9;13885:18;13872:32;13931:18;13923:6;13920:30;13917:117;;;13953:79;;:::i;:::-;13917:117;14058:78;14128:7;14119:6;14108:9;14104:22;14058:78;:::i;:::-;14048:88;;13843:303;13259:894;;;;;:::o;14159:327::-;14217:6;14266:2;14254:9;14245:7;14241:23;14237:32;14234:119;;;14272:79;;:::i;:::-;14234:119;14392:1;14417:52;14461:7;14452:6;14441:9;14437:22;14417:52;:::i;:::-;14407:62;;14363:116;14159:327;;;;:::o;14492:349::-;14561:6;14610:2;14598:9;14589:7;14585:23;14581:32;14578:119;;;14616:79;;:::i;:::-;14578:119;14736:1;14761:63;14816:7;14807:6;14796:9;14792:22;14761:63;:::i;:::-;14751:73;;14707:127;14492:349;;;;:::o;14847:329::-;14906:6;14955:2;14943:9;14934:7;14930:23;14926:32;14923:119;;;14961:79;;:::i;:::-;14923:119;15081:1;15106:53;15151:7;15142:6;15131:9;15127:22;15106:53;:::i;:::-;15096:63;;15052:117;14847:329;;;;:::o;15182:654::-;15260:6;15268;15317:2;15305:9;15296:7;15292:23;15288:32;15285:119;;;15323:79;;:::i;:::-;15285:119;15443:1;15468:53;15513:7;15504:6;15493:9;15489:22;15468:53;:::i;:::-;15458:63;;15414:117;15598:2;15587:9;15583:18;15570:32;15629:18;15621:6;15618:30;15615:117;;;15651:79;;:::i;:::-;15615:117;15756:63;15811:7;15802:6;15791:9;15787:22;15756:63;:::i;:::-;15746:73;;15541:288;15182:654;;;;;:::o;15842:474::-;15910:6;15918;15967:2;15955:9;15946:7;15942:23;15938:32;15935:119;;;15973:79;;:::i;:::-;15935:119;16093:1;16118:53;16163:7;16154:6;16143:9;16139:22;16118:53;:::i;:::-;16108:63;;16064:117;16220:2;16246:53;16291:7;16282:6;16271:9;16267:22;16246:53;:::i;:::-;16236:63;;16191:118;15842:474;;;;;:::o;16322:179::-;16391:10;16412:46;16454:3;16446:6;16412:46;:::i;:::-;16490:4;16485:3;16481:14;16467:28;;16322:179;;;;:::o;16507:118::-;16594:24;16612:5;16594:24;:::i;:::-;16589:3;16582:37;16507:118;;:::o;16661:732::-;16780:3;16809:54;16857:5;16809:54;:::i;:::-;16879:86;16958:6;16953:3;16879:86;:::i;:::-;16872:93;;16989:56;17039:5;16989:56;:::i;:::-;17068:7;17099:1;17084:284;17109:6;17106:1;17103:13;17084:284;;;17185:6;17179:13;17212:63;17271:3;17256:13;17212:63;:::i;:::-;17205:70;;17298:60;17351:6;17298:60;:::i;:::-;17288:70;;17144:224;17131:1;17128;17124:9;17119:14;;17084:284;;;17088:14;17384:3;17377:10;;16785:608;;;16661:732;;;;:::o;17399:109::-;17480:21;17495:5;17480:21;:::i;:::-;17475:3;17468:34;17399:109;;:::o;17514:360::-;17600:3;17628:38;17660:5;17628:38;:::i;:::-;17682:70;17745:6;17740:3;17682:70;:::i;:::-;17675:77;;17761:52;17806:6;17801:3;17794:4;17787:5;17783:16;17761:52;:::i;:::-;17838:29;17860:6;17838:29;:::i;:::-;17833:3;17829:39;17822:46;;17604:270;17514:360;;;;:::o;17880:364::-;17968:3;17996:39;18029:5;17996:39;:::i;:::-;18051:71;18115:6;18110:3;18051:71;:::i;:::-;18044:78;;18131:52;18176:6;18171:3;18164:4;18157:5;18153:16;18131:52;:::i;:::-;18208:29;18230:6;18208:29;:::i;:::-;18203:3;18199:39;18192:46;;17972:272;17880:364;;;;:::o;18250:366::-;18392:3;18413:67;18477:2;18472:3;18413:67;:::i;:::-;18406:74;;18489:93;18578:3;18489:93;:::i;:::-;18607:2;18602:3;18598:12;18591:19;;18250:366;;;:::o;18622:::-;18764:3;18785:67;18849:2;18844:3;18785:67;:::i;:::-;18778:74;;18861:93;18950:3;18861:93;:::i;:::-;18979:2;18974:3;18970:12;18963:19;;18622:366;;;:::o;18994:::-;19136:3;19157:67;19221:2;19216:3;19157:67;:::i;:::-;19150:74;;19233:93;19322:3;19233:93;:::i;:::-;19351:2;19346:3;19342:12;19335:19;;18994:366;;;:::o;19366:::-;19508:3;19529:67;19593:2;19588:3;19529:67;:::i;:::-;19522:74;;19605:93;19694:3;19605:93;:::i;:::-;19723:2;19718:3;19714:12;19707:19;;19366:366;;;:::o;19738:::-;19880:3;19901:67;19965:2;19960:3;19901:67;:::i;:::-;19894:74;;19977:93;20066:3;19977:93;:::i;:::-;20095:2;20090:3;20086:12;20079:19;;19738:366;;;:::o;20110:::-;20252:3;20273:67;20337:2;20332:3;20273:67;:::i;:::-;20266:74;;20349:93;20438:3;20349:93;:::i;:::-;20467:2;20462:3;20458:12;20451:19;;20110:366;;;:::o;20482:::-;20624:3;20645:67;20709:2;20704:3;20645:67;:::i;:::-;20638:74;;20721:93;20810:3;20721:93;:::i;:::-;20839:2;20834:3;20830:12;20823:19;;20482:366;;;:::o;20854:::-;20996:3;21017:67;21081:2;21076:3;21017:67;:::i;:::-;21010:74;;21093:93;21182:3;21093:93;:::i;:::-;21211:2;21206:3;21202:12;21195:19;;20854:366;;;:::o;21226:::-;21368:3;21389:67;21453:2;21448:3;21389:67;:::i;:::-;21382:74;;21465:93;21554:3;21465:93;:::i;:::-;21583:2;21578:3;21574:12;21567:19;;21226:366;;;:::o;21598:::-;21740:3;21761:67;21825:2;21820:3;21761:67;:::i;:::-;21754:74;;21837:93;21926:3;21837:93;:::i;:::-;21955:2;21950:3;21946:12;21939:19;;21598:366;;;:::o;21970:::-;22112:3;22133:67;22197:2;22192:3;22133:67;:::i;:::-;22126:74;;22209:93;22298:3;22209:93;:::i;:::-;22327:2;22322:3;22318:12;22311:19;;21970:366;;;:::o;22342:::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:::-;22856:3;22877:67;22941:2;22936:3;22877:67;:::i;:::-;22870:74;;22953:93;23042:3;22953:93;:::i;:::-;23071:2;23066:3;23062:12;23055:19;;22714:366;;;:::o;23086:::-;23228:3;23249:67;23313:2;23308:3;23249:67;:::i;:::-;23242:74;;23325:93;23414:3;23325:93;:::i;:::-;23443:2;23438:3;23434:12;23427:19;;23086:366;;;:::o;23458:::-;23600:3;23621:67;23685:2;23680:3;23621:67;:::i;:::-;23614:74;;23697:93;23786:3;23697:93;:::i;:::-;23815:2;23810:3;23806:12;23799:19;;23458:366;;;:::o;23830:108::-;23907:24;23925:5;23907:24;:::i;:::-;23902:3;23895:37;23830:108;;:::o;23944:118::-;24031:24;24049:5;24031:24;:::i;:::-;24026:3;24019:37;23944:118;;:::o;24068:222::-;24161:4;24199:2;24188:9;24184:18;24176:26;;24212:71;24280:1;24269:9;24265:17;24256:6;24212:71;:::i;:::-;24068:222;;;;:::o;24296:1053::-;24619:4;24657:3;24646:9;24642:19;24634:27;;24671:71;24739:1;24728:9;24724:17;24715:6;24671:71;:::i;:::-;24752:72;24820:2;24809:9;24805:18;24796:6;24752:72;:::i;:::-;24871:9;24865:4;24861:20;24856:2;24845:9;24841:18;24834:48;24899:108;25002:4;24993:6;24899:108;:::i;:::-;24891:116;;25054:9;25048:4;25044:20;25039:2;25028:9;25024:18;25017:48;25082:108;25185:4;25176:6;25082:108;:::i;:::-;25074:116;;25238:9;25232:4;25228:20;25222:3;25211:9;25207:19;25200:49;25266:76;25337:4;25328:6;25266:76;:::i;:::-;25258:84;;24296:1053;;;;;;;;:::o;25355:751::-;25578:4;25616:3;25605:9;25601:19;25593:27;;25630:71;25698:1;25687:9;25683:17;25674:6;25630:71;:::i;:::-;25711:72;25779:2;25768:9;25764:18;25755:6;25711:72;:::i;:::-;25793;25861:2;25850:9;25846:18;25837:6;25793:72;:::i;:::-;25875;25943:2;25932:9;25928:18;25919:6;25875:72;:::i;:::-;25995:9;25989:4;25985:20;25979:3;25968:9;25964:19;25957:49;26023:76;26094:4;26085:6;26023:76;:::i;:::-;26015:84;;25355:751;;;;;;;;:::o;26112:373::-;26255:4;26293:2;26282:9;26278:18;26270:26;;26342:9;26336:4;26332:20;26328:1;26317:9;26313:17;26306:47;26370:108;26473:4;26464:6;26370:108;:::i;:::-;26362:116;;26112:373;;;;:::o;26491:634::-;26712:4;26750:2;26739:9;26735:18;26727:26;;26799:9;26793:4;26789:20;26785:1;26774:9;26770:17;26763:47;26827:108;26930:4;26921:6;26827:108;:::i;:::-;26819:116;;26982:9;26976:4;26972:20;26967:2;26956:9;26952:18;26945:48;27010:108;27113:4;27104:6;27010:108;:::i;:::-;27002:116;;26491:634;;;;;:::o;27131:210::-;27218:4;27256:2;27245:9;27241:18;27233:26;;27269:65;27331:1;27320:9;27316:17;27307:6;27269:65;:::i;:::-;27131:210;;;;:::o;27347:313::-;27460:4;27498:2;27487:9;27483:18;27475:26;;27547:9;27541:4;27537:20;27533:1;27522:9;27518:17;27511:47;27575:78;27648:4;27639:6;27575:78;:::i;:::-;27567:86;;27347:313;;;;:::o;27666:419::-;27832:4;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27666:419;;;:::o;28091:::-;28257:4;28295:2;28284:9;28280:18;28272:26;;28344:9;28338:4;28334:20;28330:1;28319:9;28315:17;28308:47;28372:131;28498:4;28372:131;:::i;:::-;28364:139;;28091:419;;;:::o;28516:::-;28682:4;28720:2;28709:9;28705:18;28697:26;;28769:9;28763:4;28759:20;28755:1;28744:9;28740:17;28733:47;28797:131;28923:4;28797:131;:::i;:::-;28789:139;;28516:419;;;:::o;28941:::-;29107:4;29145:2;29134:9;29130:18;29122:26;;29194:9;29188:4;29184:20;29180:1;29169:9;29165:17;29158:47;29222:131;29348:4;29222:131;:::i;:::-;29214:139;;28941:419;;;:::o;29366:::-;29532:4;29570:2;29559:9;29555:18;29547:26;;29619:9;29613:4;29609:20;29605:1;29594:9;29590:17;29583:47;29647:131;29773:4;29647:131;:::i;:::-;29639:139;;29366:419;;;:::o;29791:::-;29957:4;29995:2;29984:9;29980:18;29972:26;;30044:9;30038:4;30034:20;30030:1;30019:9;30015:17;30008:47;30072:131;30198:4;30072:131;:::i;:::-;30064:139;;29791:419;;;:::o;30216:::-;30382:4;30420:2;30409:9;30405:18;30397:26;;30469:9;30463:4;30459:20;30455:1;30444:9;30440:17;30433:47;30497:131;30623:4;30497:131;:::i;:::-;30489:139;;30216:419;;;:::o;30641:::-;30807:4;30845:2;30834:9;30830:18;30822:26;;30894:9;30888:4;30884:20;30880:1;30869:9;30865:17;30858:47;30922:131;31048:4;30922:131;:::i;:::-;30914:139;;30641:419;;;:::o;31066:::-;31232:4;31270:2;31259:9;31255:18;31247:26;;31319:9;31313:4;31309:20;31305:1;31294:9;31290:17;31283:47;31347:131;31473:4;31347:131;:::i;:::-;31339:139;;31066:419;;;:::o;31491:::-;31657:4;31695:2;31684:9;31680:18;31672:26;;31744:9;31738:4;31734:20;31730:1;31719:9;31715:17;31708:47;31772:131;31898:4;31772:131;:::i;:::-;31764:139;;31491:419;;;:::o;31916:::-;32082:4;32120:2;32109:9;32105:18;32097:26;;32169:9;32163:4;32159:20;32155:1;32144:9;32140:17;32133:47;32197:131;32323:4;32197:131;:::i;:::-;32189:139;;31916:419;;;:::o;32341:::-;32507:4;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32341:419;;;:::o;32766:::-;32932:4;32970:2;32959:9;32955:18;32947:26;;33019:9;33013:4;33009:20;33005:1;32994:9;32990:17;32983:47;33047:131;33173:4;33047:131;:::i;:::-;33039:139;;32766:419;;;:::o;33191:::-;33357:4;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33191:419;;;:::o;33616:::-;33782:4;33820:2;33809:9;33805:18;33797:26;;33869:9;33863:4;33859:20;33855:1;33844:9;33840:17;33833:47;33897:131;34023:4;33897:131;:::i;:::-;33889:139;;33616:419;;;:::o;34041:222::-;34134:4;34172:2;34161:9;34157:18;34149:26;;34185:71;34253:1;34242:9;34238:17;34229:6;34185:71;:::i;:::-;34041:222;;;;:::o;34269:332::-;34390:4;34428:2;34417:9;34413:18;34405:26;;34441:71;34509:1;34498:9;34494:17;34485:6;34441:71;:::i;:::-;34522:72;34590:2;34579:9;34575:18;34566:6;34522:72;:::i;:::-;34269:332;;;;;:::o;34607:129::-;34641:6;34668:20;;:::i;:::-;34658:30;;34697:33;34725:4;34717:6;34697:33;:::i;:::-;34607:129;;;:::o;34742:75::-;34775:6;34808:2;34802:9;34792:19;;34742:75;:::o;34823:311::-;34900:4;34990:18;34982:6;34979:30;34976:56;;;35012:18;;:::i;:::-;34976:56;35062:4;35054:6;35050:17;35042:25;;35122:4;35116;35112:15;35104:23;;34823:311;;;:::o;35140:::-;35217:4;35307:18;35299:6;35296:30;35293:56;;;35329:18;;:::i;:::-;35293:56;35379:4;35371:6;35367:17;35359:25;;35439:4;35433;35429:15;35421:23;;35140:311;;;:::o;35457:307::-;35518:4;35608:18;35600:6;35597:30;35594:56;;;35630:18;;:::i;:::-;35594:56;35668:29;35690:6;35668:29;:::i;:::-;35660:37;;35752:4;35746;35742:15;35734:23;;35457:307;;;:::o;35770:308::-;35832:4;35922:18;35914:6;35911:30;35908:56;;;35944:18;;:::i;:::-;35908:56;35982:29;36004:6;35982:29;:::i;:::-;35974:37;;36066:4;36060;36056:15;36048:23;;35770:308;;;:::o;36084:132::-;36151:4;36174:3;36166:11;;36204:4;36199:3;36195:14;36187:22;;36084:132;;;:::o;36222:114::-;36289:6;36323:5;36317:12;36307:22;;36222:114;;;:::o;36342:98::-;36393:6;36427:5;36421:12;36411:22;;36342:98;;;:::o;36446:99::-;36498:6;36532:5;36526:12;36516:22;;36446:99;;;:::o;36551:113::-;36621:4;36653;36648:3;36644:14;36636:22;;36551:113;;;:::o;36670:184::-;36769:11;36803:6;36798:3;36791:19;36843:4;36838:3;36834:14;36819:29;;36670:184;;;;:::o;36860:168::-;36943:11;36977:6;36972:3;36965:19;37017:4;37012:3;37008:14;36993:29;;36860:168;;;;:::o;37034:169::-;37118:11;37152:6;37147:3;37140:19;37192:4;37187:3;37183:14;37168:29;;37034:169;;;;:::o;37209:305::-;37249:3;37268:20;37286:1;37268:20;:::i;:::-;37263:25;;37302:20;37320:1;37302:20;:::i;:::-;37297:25;;37456:1;37388:66;37384:74;37381:1;37378:81;37375:107;;;37462:18;;:::i;:::-;37375:107;37506:1;37503;37499:9;37492:16;;37209:305;;;;:::o;37520:96::-;37557:7;37586:24;37604:5;37586:24;:::i;:::-;37575:35;;37520:96;;;:::o;37622:90::-;37656:7;37699:5;37692:13;37685:21;37674:32;;37622:90;;;:::o;37718:149::-;37754:7;37794:66;37787:5;37783:78;37772:89;;37718:149;;;:::o;37873:126::-;37910:7;37950:42;37943:5;37939:54;37928:65;;37873:126;;;:::o;38005:77::-;38042:7;38071:5;38060:16;;38005:77;;;:::o;38088:154::-;38172:6;38167:3;38162;38149:30;38234:1;38225:6;38220:3;38216:16;38209:27;38088:154;;;:::o;38248:307::-;38316:1;38326:113;38340:6;38337:1;38334:13;38326:113;;;38425:1;38420:3;38416:11;38410:18;38406:1;38401:3;38397:11;38390:39;38362:2;38359:1;38355:10;38350:15;;38326:113;;;38457:6;38454:1;38451:13;38448:101;;;38537:1;38528:6;38523:3;38519:16;38512:27;38448:101;38297:258;38248:307;;;:::o;38561:320::-;38605:6;38642:1;38636:4;38632:12;38622:22;;38689:1;38683:4;38679:12;38710:18;38700:81;;38766:4;38758:6;38754:17;38744:27;;38700:81;38828:2;38820:6;38817:14;38797:18;38794:38;38791:84;;;38847:18;;:::i;:::-;38791:84;38612:269;38561:320;;;:::o;38887:281::-;38970:27;38992:4;38970:27;:::i;:::-;38962:6;38958:40;39100:6;39088:10;39085:22;39064:18;39052:10;39049:34;39046:62;39043:88;;;39111:18;;:::i;:::-;39043:88;39151:10;39147:2;39140:22;38930:238;38887:281;;:::o;39174:233::-;39213:3;39236:24;39254:5;39236:24;:::i;:::-;39227:33;;39282:66;39275:5;39272:77;39269:103;;;39352:18;;:::i;:::-;39269:103;39399:1;39392:5;39388:13;39381:20;;39174:233;;;:::o;39413:180::-;39461:77;39458:1;39451:88;39558:4;39555:1;39548:15;39582:4;39579:1;39572:15;39599:180;39647:77;39644:1;39637:88;39744:4;39741:1;39734:15;39768:4;39765:1;39758:15;39785:180;39833:77;39830:1;39823:88;39930:4;39927:1;39920:15;39954:4;39951:1;39944:15;39971:180;40019:77;40016:1;40009:88;40116:4;40113:1;40106:15;40140:4;40137:1;40130:15;40157:183;40192:3;40230:1;40212:16;40209:23;40206:128;;;40268:1;40265;40262;40247:23;40290:34;40321:1;40315:8;40290:34;:::i;:::-;40283:41;;40206:128;40157:183;:::o;40346:117::-;40455:1;40452;40445:12;40469:117;40578:1;40575;40568:12;40592:117;40701:1;40698;40691:12;40715:117;40824:1;40821;40814:12;40838:117;40947:1;40944;40937:12;40961:102;41002:6;41053:2;41049:7;41044:2;41037:5;41033:14;41029:28;41019:38;;40961:102;;;:::o;41069:106::-;41113:8;41162:5;41157:3;41153:15;41132:36;;41069:106;;;:::o;41181:239::-;41321:34;41317:1;41309:6;41305:14;41298:58;41390:22;41385:2;41377:6;41373:15;41366:47;41181:239;:::o;41426:227::-;41566:34;41562:1;41554:6;41550:14;41543:58;41635:10;41630:2;41622:6;41618:15;41611:35;41426:227;:::o;41659:225::-;41799:34;41795:1;41787:6;41783:14;41776:58;41868:8;41863:2;41855:6;41851:15;41844:33;41659:225;:::o;41890:223::-;42030:34;42026:1;42018:6;42014:14;42007:58;42099:6;42094:2;42086:6;42082:15;42075:31;41890:223;:::o;42119:228::-;42259:34;42255:1;42247:6;42243:14;42236:58;42328:11;42323:2;42315:6;42311:15;42304:36;42119:228;:::o;42353:229::-;42493:34;42489:1;42481:6;42477:14;42470:58;42562:12;42557:2;42549:6;42545:15;42538:37;42353:229;:::o;42588:224::-;42728:34;42724:1;42716:6;42712:14;42705:58;42797:7;42792:2;42784:6;42780:15;42773:32;42588:224;:::o;42818:237::-;42958:34;42954:1;42946:6;42942:14;42935:58;43027:20;43022:2;43014:6;43010:15;43003:45;42818:237;:::o;43061:222::-;43201:34;43197:1;43189:6;43185:14;43178:58;43270:5;43265:2;43257:6;43253:15;43246:30;43061:222;:::o;43289:229::-;43429:34;43425:1;43417:6;43413:14;43406:58;43498:12;43493:2;43485:6;43481:15;43474:37;43289:229;:::o;43524:182::-;43664:34;43660:1;43652:6;43648:14;43641:58;43524:182;:::o;43712:228::-;43852:34;43848:1;43840:6;43836:14;43829:58;43921:11;43916:2;43908:6;43904:15;43897:36;43712:228;:::o;43946:::-;44086:34;44082:1;44074:6;44070:14;44063:58;44155:11;44150:2;44142:6;44138:15;44131:36;43946:228;:::o;44180:227::-;44320:34;44316:1;44308:6;44304:14;44297:58;44389:10;44384:2;44376:6;44372:15;44365:35;44180:227;:::o;44413:220::-;44553:34;44549:1;44541:6;44537:14;44530:58;44622:3;44617:2;44609:6;44605:15;44598:28;44413:220;:::o;44639:711::-;44678:3;44716:4;44698:16;44695:26;44692:39;;;44724:5;;44692:39;44753:20;;:::i;:::-;44828:1;44810:16;44806:24;44803:1;44797:4;44782:49;44861:4;44855:11;44960:16;44953:4;44945:6;44941:17;44938:39;44905:18;44897:6;44894:30;44878:113;44875:146;;;45006:5;;;;44875:146;45052:6;45046:4;45042:17;45088:3;45082:10;45115:18;45107:6;45104:30;45101:43;;;45137:5;;;;;;45101:43;45185:6;45178:4;45173:3;45169:14;45165:27;45244:1;45226:16;45222:24;45216:4;45212:35;45207:3;45204:44;45201:57;;;45251:5;;;;;;;45201:57;45268;45316:6;45310:4;45306:17;45298:6;45294:30;45288:4;45268:57;:::i;:::-;45341:3;45334:10;;44682:668;;;;;44639:711;;:::o;45356:122::-;45429:24;45447:5;45429:24;:::i;:::-;45422:5;45419:35;45409:63;;45468:1;45465;45458:12;45409:63;45356:122;:::o;45484:116::-;45554:21;45569:5;45554:21;:::i;:::-;45547:5;45544:32;45534:60;;45590:1;45587;45580:12;45534:60;45484:116;:::o;45606:120::-;45678:23;45695:5;45678:23;:::i;:::-;45671:5;45668:34;45658:62;;45716:1;45713;45706:12;45658:62;45606:120;:::o;45732:122::-;45805:24;45823:5;45805:24;:::i;:::-;45798:5;45795:35;45785:63;;45844:1;45841;45834:12;45785:63;45732:122;:::o

Swarm Source

ipfs://01583984162d37f47a92144917ece7a11a964ff98c9b5b6809095cb8af6030a3
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.