ETH Price: $3,307.26 (+1.33%)
Gas: 16.2 Gwei

Iscariot Game Tokens (BLZT)
 

Overview

TokenID

8

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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:
IscariotTokens

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.x
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/LICENSE

pragma solidity ^0.8.4;

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)
/**
 * @dev Provides a set of functions to operate with Base64 strings.
 *
 * _Available since v4.5._
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
/**
 * @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);
}


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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
/**
 * @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);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
/**
 * @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);
}


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
/**
 * @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 functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @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;
    }
}


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
/**
 * @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;
    }
}


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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}


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

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

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

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

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

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

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

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

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


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

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}


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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155URIStorage.sol)
/**
 * @dev ERC1155 token with storage based token URI management.
 * Inspired by the ERC721URIStorage extension
 *
 * _Available since v4.6._
 */
abstract contract ERC1155URIStorage is ERC1155 {
    using Strings for uint256;

    // Optional base URI
    string private _baseURI = "";

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the concatenation of the `_baseURI`
     * and the token-specific uri if the latter is set
     *
     * This enables the following behaviors:
     *
     * - if `_tokenURIs[tokenId]` is set, then the result is the concatenation
     *   of `_baseURI` and `_tokenURIs[tokenId]` (keep in mind that `_baseURI`
     *   is empty per default);
     *
     * - if `_tokenURIs[tokenId]` is NOT set then we fallback to `super.uri()`
     *   which in most cases will contain `ERC1155._uri`;
     *
     * - if `_tokenURIs[tokenId]` is NOT set, and if the parents do not have a
     *   uri value set, then the result is empty.
     */
    function uri(uint256 tokenId) public view virtual override returns (string memory) {
        string memory tokenURI = _tokenURIs[tokenId];

        // If token URI is set, concatenate base URI and tokenURI (via abi.encodePacked).
        return bytes(tokenURI).length > 0 ? string(abi.encodePacked(_baseURI, tokenURI)) : super.uri(tokenId);
    }

    /**
     * @dev Sets `tokenURI` as the tokenURI of `tokenId`.
     */
    function _setURI(uint256 tokenId, string memory tokenURI) internal virtual {
        _tokenURIs[tokenId] = tokenURI;
        emit URI(uri(tokenId), tokenId);
    }

    /**
     * @dev Sets `baseURI` as the `_baseURI` for all tokens
     */
    function _setBaseURI(string memory baseURI) internal virtual {
        _baseURI = baseURI;
    }
}



contract IscariotTokens is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply, ERC1155URIStorage {

    uint256 public constant GAME_TOKEN_MINT = 128;
    uint256 public constant NFT_MINT = 1;

    uint256 public constant DENARIUS = 0;
    uint256 public constant S1_ILLUMINATOR = 1;
    uint256 public constant S1_MAP = 2;
    uint256 public constant S2_COAX = 3;
    uint256 public constant S2_GLASS = 4;
    uint256 public constant S2_MAP = 5;
    uint256 public constant S2_MICROWAVE = 6;
    uint256 public constant S2_MODULATOR = 7;
    uint256 public constant S2_TOWER = 8;
    uint256 public constant S2_VANAGON = 9;
    uint256 public constant S2_X = 10;
    
    string public name;
    string public symbol;
    string private _contractURI;

    constructor() ERC1155("https://iscariot.net/tokens/{id}.json") 
    {
        name = "Iscariot Game Tokens";
        symbol = "BLZT";
        setContractURI("https://iscariot.net/tokens/collection.json");
        _mint(msg.sender, DENARIUS, 2048, "");
        _mint(msg.sender, S1_ILLUMINATOR, GAME_TOKEN_MINT, "");
        _mint(msg.sender, S1_MAP, GAME_TOKEN_MINT, "");
        _mint(msg.sender, S2_COAX, GAME_TOKEN_MINT, "");
        _mint(msg.sender, S2_GLASS, GAME_TOKEN_MINT, "");
        _mint(msg.sender, S2_MAP, GAME_TOKEN_MINT, "");
        _mint(msg.sender, S2_MICROWAVE, NFT_MINT, "");
        _mint(msg.sender, S2_MODULATOR, NFT_MINT, "");
        _mint(msg.sender, S2_TOWER, NFT_MINT, "");
        _mint(msg.sender, S2_VANAGON, NFT_MINT, "");
        _mint(msg.sender, S2_X, NFT_MINT, "");
    }

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function setContractURI(string memory newContractURI)
        public 
        onlyOwner() 
    {
        _contractURI = newContractURI;
    }

    function uri(uint256 tokenId) public view override(ERC1155, ERC1155URIStorage) returns (string memory) {
        return ERC1155URIStorage.uri(tokenId);
    }

    function setURI(uint256 tokenId, string memory tokenURI)
        external
        onlyOwner
    {
        ERC1155URIStorage._setURI(tokenId, tokenURI);
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        external
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        external
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DENARIUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_TOKEN_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S1_ILLUMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S1_MAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_COAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_GLASS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_MAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_MICROWAVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_MODULATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_TOWER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_VANAGON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"S2_X","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"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[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"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":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","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":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052604051806020016040528060008152506005908162000024919062000dc1565b503480156200003257600080fd5b5060405180606001604052806025815260200162005bfb602591396200005e81620002d560201b60201c565b506200007f62000073620002ea60201b60201c565b620002f260201b60201c565b6040518060400160405280601481526020017f4973636172696f742047616d6520546f6b656e7300000000000000000000000081525060079081620000c5919062000dc1565b506040518060400160405280600481526020017f424c5a5400000000000000000000000000000000000000000000000000000000815250600890816200010c919062000dc1565b50620001376040518060600160405280602b815260200162005c20602b9139620003b860201b60201c565b6200015d33600061080060405180602001604052806000815250620003dd60201b60201c565b62000182336001608060405180602001604052806000815250620003dd60201b60201c565b620001a7336002608060405180602001604052806000815250620003dd60201b60201c565b620001cc336003608060405180602001604052806000815250620003dd60201b60201c565b620001f1336004608060405180602001604052806000815250620003dd60201b60201c565b62000216336005608060405180602001604052806000815250620003dd60201b60201c565b6200023b336006600160405180602001604052806000815250620003dd60201b60201c565b62000260336007600160405180602001604052806000815250620003dd60201b60201c565b62000285336008600160405180602001604052806000815250620003dd60201b60201c565b620002aa336009600160405180602001604052806000815250620003dd60201b60201c565b620002cf33600a600160405180602001604052806000815250620003dd60201b60201c565b620015f8565b8060029081620002e6919062000dc1565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003c8620005c460201b60201c565b8060099081620003d9919062000dc1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200044f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004469062000f2f565b60405180910390fd5b600062000461620002ea60201b60201c565b9050600062000476856200065560201b60201c565b905060006200048b856200065560201b60201c565b9050620004a483600089858589620006d660201b60201c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000505919062000f80565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516200058592919062000fcc565b60405180910390a4620005a483600089858589620006f960201b60201c565b620005bb836000898989896200070160201b60201c565b50505050505050565b620005d4620002ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005fa620008fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000653576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064a9062001049565b60405180910390fd5b565b60606000600167ffffffffffffffff81111562000677576200067662000b52565b5b604051908082528060200260200182016040528015620006a65781602001602082028036833780820191505090505b5090508281600081518110620006c157620006c06200106b565b5b60200260200101818152505080915050919050565b620006f18686868686866200092460201b62000fc61760201c565b505050505050565b505050505050565b6200072d8473ffffffffffffffffffffffffffffffffffffffff1662000b1c60201b620011961760201c565b15620008f2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200077695949392919062001179565b6020604051808303816000875af1925050508015620007b557506040513d601f19601f82011682018060405250810190620007b2919062001249565b60015b6200086657620007c462001288565b806308c379a003620008275750620007db620012e3565b80620007e8575062000829565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081e9190620013bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d9062001459565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620008f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e790620014f1565b60405180910390fd5b505b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200093f86868686868662000b3f60201b620011b91760201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620009fd5760005b8351811015620009fb578281815181106200099757620009966200106b565b5b602002602001015160046000868481518110620009b957620009b86200106b565b5b602002602001015181526020019081526020016000206000828254620009e0919062000f80565b9250508190555080620009f39062001513565b905062000977565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000b145760005b835181101562000b1257600084828151811062000a575762000a566200106b565b5b60200260200101519050600084838151811062000a795762000a786200106b565b5b602002602001015190506000600460008481526020019081526020016000205490508181101562000ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad890620015d6565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508062000b0a9062001513565b905062000a35565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc957607f821691505b60208210810362000bdf5762000bde62000b81565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c0a565b62000c55868362000c0a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ca262000c9c62000c968462000c6d565b62000c77565b62000c6d565b9050919050565b6000819050919050565b62000cbe8362000c81565b62000cd662000ccd8262000ca9565b84845462000c17565b825550505050565b600090565b62000ced62000cde565b62000cfa81848462000cb3565b505050565b5b8181101562000d225762000d1660008262000ce3565b60018101905062000d00565b5050565b601f82111562000d715762000d3b8162000be5565b62000d468462000bfa565b8101602085101562000d56578190505b62000d6e62000d658562000bfa565b83018262000cff565b50505b505050565b600082821c905092915050565b600062000d966000198460080262000d76565b1980831691505092915050565b600062000db1838362000d83565b9150826002028217905092915050565b62000dcc8262000b47565b67ffffffffffffffff81111562000de85762000de762000b52565b5b62000df4825462000bb0565b62000e0182828562000d26565b600060209050601f83116001811462000e39576000841562000e24578287015190505b62000e30858262000da3565b86555062000ea0565b601f19841662000e498662000be5565b60005b8281101562000e735784890151825560018201915060208501945060208101905062000e4c565b8683101562000e93578489015162000e8f601f89168262000d83565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000f1760218362000ea8565b915062000f248262000eb9565b604082019050919050565b6000602082019050818103600083015262000f4a8162000f08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f8d8262000c6d565b915062000f9a8362000c6d565b925082820190508082111562000fb55762000fb462000f51565b5b92915050565b62000fc68162000c6d565b82525050565b600060408201905062000fe3600083018562000fbb565b62000ff2602083018462000fbb565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200103160208362000ea8565b91506200103e8262000ff9565b602082019050919050565b60006020820190508181036000830152620010648162001022565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010c7826200109a565b9050919050565b620010d981620010ba565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200111b578082015181840152602081019050620010fe565b60008484015250505050565b6000601f19601f8301169050919050565b60006200114582620010df565b620011518185620010ea565b935062001163818560208601620010fb565b6200116e8162001127565b840191505092915050565b600060a082019050620011906000830188620010ce565b6200119f6020830187620010ce565b620011ae604083018662000fbb565b620011bd606083018562000fbb565b8181036080830152620011d1818462001138565b90509695505050505050565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200122381620011ec565b81146200122f57600080fd5b50565b600081519050620012438162001218565b92915050565b600060208284031215620012625762001261620011e7565b5b6000620012728482850162001232565b91505092915050565b60008160e01c9050919050565b600060033d1115620012aa5760046000803e620012a76000516200127b565b90505b90565b620012b88262001127565b810181811067ffffffffffffffff82111715620012da57620012d962000b52565b5b80604052505050565b600060443d106200137b57620012f8620011dd565b60043d036004823e80513d602482011167ffffffffffffffff82111715620013225750506200137b565b808201805167ffffffffffffffff8111156200134257505050506200137b565b80602083010160043d038501811115620013615750505050506200137b565b6200137282602001850186620012ad565b82955050505050505b90565b60006200138b8262000b47565b62001397818562000ea8565b9350620013a9818560208601620010fb565b620013b48162001127565b840191505092915050565b60006020820190508181036000830152620013db81846200137e565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006200144160348362000ea8565b91506200144e82620013e3565b604082019050919050565b60006020820190508181036000830152620014748162001432565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000620014d960288362000ea8565b9150620014e6826200147b565b604082019050919050565b600060208201905081810360008301526200150c81620014ca565b9050919050565b6000620015208262000c6d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362001555576200155462000f51565b5b600182019050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000620015be60288362000ea8565b9150620015cb8262001560565b604082019050919050565b60006020820190508181036000830152620015f181620015af565b9050919050565b6145f380620016086000396000f3fe608060405234801561001057600080fd5b50600436106102105760003560e01c806380d6edc011610125578063a89a2973116100ad578063e985e9c51161007c578063e985e9c5146105e3578063f242432a14610613578063f268e7bf1461062f578063f2fde38b1461064d578063f5298aca1461066957610210565b8063a89a297314610559578063bd85b03914610577578063db625479146105a7578063e8a3d485146105c557610210565b806395d89b41116100f457806395d89b41146104c55780639ef90b6f146104e3578063a03eebaa14610501578063a22cb4651461051f578063a5fc21f91461053b57610210565b806380d6edc014610451578063862440e21461046f5780638da5cb5b1461048b578063938e3d7b146104a957610210565b8063403426b3116101a8578063578246071161017757806357824607146103d35780636b20c454146103f1578063715018a61461040d578063731133e91461041757806373fe21c01461043357610210565b8063403426b3146103375780634e1273f4146103555780634f558e79146103855780635762b0ab146103b557610210565b80630adb9a44116101e45780630adb9a44146102b15780630e89341c146102cf5780631f7fdffa146102ff5780632eb2c2d61461031b57610210565b8062fdd58e1461021557806301ffc9a714610245578063030c52321461027557806306fdde0314610293575b600080fd5b61022f600480360381019061022a9190612a5b565b610685565b60405161023c9190612aaa565b60405180910390f35b61025f600480360381019061025a9190612b1d565b61074d565b60405161026c9190612b65565b60405180910390f35b61027d61082f565b60405161028a9190612aaa565b60405180910390f35b61029b610834565b6040516102a89190612c10565b60405180910390f35b6102b96108c2565b6040516102c69190612aaa565b60405180910390f35b6102e960048036038101906102e49190612c32565b6108c7565b6040516102f69190612c10565b60405180910390f35b61031960048036038101906103149190612e5c565b6108d9565b005b61033560048036038101906103309190612f17565b6108f3565b005b61033f610994565b60405161034c9190612aaa565b60405180910390f35b61036f600480360381019061036a91906130a9565b610999565b60405161037c91906131df565b60405180910390f35b61039f600480360381019061039a9190612c32565b610ab2565b6040516103ac9190612b65565b60405180910390f35b6103bd610ac6565b6040516103ca9190612aaa565b60405180910390f35b6103db610acb565b6040516103e89190612aaa565b60405180910390f35b61040b60048036038101906104069190613201565b610ad0565b005b610415610b6d565b005b610431600480360381019061042c919061328c565b610b81565b005b61043b610b9b565b6040516104489190612aaa565b60405180910390f35b610459610ba0565b6040516104669190612aaa565b60405180910390f35b610489600480360381019061048491906133b0565b610ba5565b005b610493610bbb565b6040516104a0919061341b565b60405180910390f35b6104c360048036038101906104be9190613436565b610be5565b005b6104cd610c00565b6040516104da9190612c10565b60405180910390f35b6104eb610c8e565b6040516104f89190612aaa565b60405180910390f35b610509610c93565b6040516105169190612aaa565b60405180910390f35b610539600480360381019061053491906134ab565b610c98565b005b610543610cae565b6040516105509190612aaa565b60405180910390f35b610561610cb3565b60405161056e9190612aaa565b60405180910390f35b610591600480360381019061058c9190612c32565b610cb8565b60405161059e9190612aaa565b60405180910390f35b6105af610cd5565b6040516105bc9190612aaa565b60405180910390f35b6105cd610cda565b6040516105da9190612c10565b60405180910390f35b6105fd60048036038101906105f891906134eb565b610d6c565b60405161060a9190612b65565b60405180910390f35b61062d6004803603810190610628919061352b565b610e00565b005b610637610ea1565b6040516106449190612aaa565b60405180910390f35b610667600480360381019061066291906135c2565b610ea6565b005b610683600480360381019061067e91906135ef565b610f29565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec906136b4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108285750610827826111c1565b5b9050919050565b600881565b6007805461084190613703565b80601f016020809104026020016040519081016040528092919081815260200182805461086d90613703565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b600681565b60606108d28261122b565b9050919050565b6108e1611310565b6108ed8484848461138e565b50505050565b6108fb6115ba565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061094157506109408561093b6115ba565b610d6c565b5b610980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610977906137a6565b60405180910390fd5b61098d85858585856115c2565b5050505050565b600481565b606081518351146109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613838565b60405180910390fd5b6000835167ffffffffffffffff8111156109fc576109fb612c64565b5b604051908082528060200260200182016040528015610a2a5781602001602082028036833780820191505090505b50905060005b8451811015610aa757610a77858281518110610a4f57610a4e613858565b5b6020026020010151858381518110610a6a57610a69613858565b5b6020026020010151610685565b828281518110610a8a57610a89613858565b5b60200260200101818152505080610aa0906138b6565b9050610a30565b508091505092915050565b600080610abe83610cb8565b119050919050565b600181565b600a81565b610ad86115ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b1e5750610b1d83610b186115ba565b610d6c565b5b610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b54906137a6565b60405180910390fd5b610b688383836118e3565b505050565b610b75611310565b610b7f6000611bb1565b565b610b89611310565b610b9584848484611c77565b50505050565b600581565b600981565b610bad611310565b610bb78282611e27565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bed611310565b8060099081610bfc9190613aaa565b5050565b60088054610c0d90613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3990613703565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b505050505081565b608081565b600181565b610caa610ca36115ba565b8383611e8c565b5050565b600081565b600281565b600060046000838152602001908152602001600020549050919050565b600381565b606060098054610ce990613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1590613703565b8015610d625780601f10610d3757610100808354040283529160200191610d62565b820191906000526020600020905b815481529060010190602001808311610d4557829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e086115ba565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e4e5750610e4d85610e486115ba565b610d6c565b5b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906137a6565b60405180910390fd5b610e9a8585858585611ff8565b5050505050565b600781565b610eae611310565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613bee565b60405180910390fd5b610f2681611bb1565b50565b610f316115ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f775750610f7683610f716115ba565b610d6c565b5b610fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fad906137a6565b60405180910390fd5b610fc1838383612293565b505050565b610fd48686868686866111b9565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036110855760005b83518110156110835782818151811061102757611026613858565b5b60200260200101516004600086848151811061104657611045613858565b5b60200260200101518152602001908152602001600020600082825461106b9190613c0e565b925050819055508061107c906138b6565b905061100b565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361118e5760005b835181101561118c5760008482815181106110da576110d9613858565b5b6020026020010151905060008483815181106110f9576110f8613858565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590613cb4565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080611185906138b6565b90506110bc565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060066000848152602001908152602001600020805461124d90613703565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613703565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b5050505050905060008151116112e4576112df836124d9565b611308565b6005816040516020016112f8929190613d93565b6040516020818303038152906040525b915050919050565b6113186115ba565b73ffffffffffffffffffffffffffffffffffffffff16611336610bbb565b73ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613e03565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490613e95565b60405180910390fd5b8151835114611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613f27565b60405180910390fd5b600061144b6115ba565b905061145c8160008787878761256d565b60005b84518110156115155783818151811061147b5761147a613858565b5b602002602001015160008087848151811061149957611498613858565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fb9190613c0e565b92505081905550808061150d906138b6565b91505061145f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161158d929190613f47565b60405180910390a46115a481600087878787612583565b6115b38160008787878761258b565b5050505050565b600033905090565b8151835114611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613f27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613ff0565b60405180910390fd5b600061167f6115ba565b905061168f81878787878761256d565b60005b84518110156118405760008582815181106116b0576116af613858565b5b6020026020010151905060008583815181106116cf576116ce613858565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790614082565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118259190613c0e565b9250508190555050505080611839906138b6565b9050611692565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118b7929190613f47565b60405180910390a46118cd818787878787612583565b6118db81878787878761258b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614114565b60405180910390fd5b8051825114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613f27565b60405180910390fd5b60006119a06115ba565b90506119c08185600086866040518060200160405280600081525061256d565b60005b8351811015611b0d5760008482815181106119e1576119e0613858565b5b602002602001015190506000848381518110611a00576119ff613858565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a98906141a6565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b05906138b6565b9150506119c3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b85929190613f47565b60405180910390a4611bab81856000868660405180602001604052806000815250612583565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613e95565b60405180910390fd5b6000611cf06115ba565b90506000611cfd85612762565b90506000611d0a85612762565b9050611d1b8360008985858961256d565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7a9190613c0e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611df89291906141c6565b60405180910390a4611e0f83600089858589612583565b611e1e836000898989896127dc565b50505050505050565b80600660008481526020019081526020016000209081611e479190613aaa565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b611e73846108c7565b604051611e809190612c10565b60405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190614261565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611feb9190612b65565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613ff0565b60405180910390fd5b60006120716115ba565b9050600061207e85612762565b9050600061208b85612762565b905061209b83898985858961256d565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614082565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e79190613c0e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516122649291906141c6565b60405180910390a461227a848a8a86868a612583565b612288848a8a8a8a8a6127dc565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990614114565b60405180910390fd5b600061230c6115ba565b9050600061231984612762565b9050600061232684612762565b90506123468387600085856040518060200160405280600081525061256d565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d4906141a6565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516124aa9291906141c6565b60405180910390a46124d084886000868660405180602001604052806000815250612583565b50505050505050565b6060600280546124e890613703565b80601f016020809104026020016040519081016040528092919081815260200182805461251490613703565b80156125615780601f1061253657610100808354040283529160200191612561565b820191906000526020600020905b81548152906001019060200180831161254457829003601f168201915b50505050509050919050565b61257b868686868686610fc6565b505050505050565b505050505050565b6125aa8473ffffffffffffffffffffffffffffffffffffffff16611196565b1561275a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125f09594939291906142d6565b6020604051808303816000875af192505050801561262c57506040513d601f19601f820116820180604052508101906126299190614353565b60015b6126d15761263861438d565b806308c379a003612694575061264c6143af565b806126575750612696565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b9190612c10565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906144b1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614543565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561278157612780612c64565b5b6040519080825280602002602001820160405280156127af5781602001602082028036833780820191505090505b50905082816000815181106127c7576127c6613858565b5b60200260200101818152505080915050919050565b6127fb8473ffffffffffffffffffffffffffffffffffffffff16611196565b156129ab578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612841959493929190614563565b6020604051808303816000875af192505050801561287d57506040513d601f19601f8201168201806040525081019061287a9190614353565b60015b6129225761288961438d565b806308c379a0036128e5575061289d6143af565b806128a857506128e7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9190612c10565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612919906144b1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614543565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129f2826129c7565b9050919050565b612a02816129e7565b8114612a0d57600080fd5b50565b600081359050612a1f816129f9565b92915050565b6000819050919050565b612a3881612a25565b8114612a4357600080fd5b50565b600081359050612a5581612a2f565b92915050565b60008060408385031215612a7257612a716129bd565b5b6000612a8085828601612a10565b9250506020612a9185828601612a46565b9150509250929050565b612aa481612a25565b82525050565b6000602082019050612abf6000830184612a9b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612afa81612ac5565b8114612b0557600080fd5b50565b600081359050612b1781612af1565b92915050565b600060208284031215612b3357612b326129bd565b5b6000612b4184828501612b08565b91505092915050565b60008115159050919050565b612b5f81612b4a565b82525050565b6000602082019050612b7a6000830184612b56565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bba578082015181840152602081019050612b9f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612be282612b80565b612bec8185612b8b565b9350612bfc818560208601612b9c565b612c0581612bc6565b840191505092915050565b60006020820190508181036000830152612c2a8184612bd7565b905092915050565b600060208284031215612c4857612c476129bd565b5b6000612c5684828501612a46565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c9c82612bc6565b810181811067ffffffffffffffff82111715612cbb57612cba612c64565b5b80604052505050565b6000612cce6129b3565b9050612cda8282612c93565b919050565b600067ffffffffffffffff821115612cfa57612cf9612c64565b5b602082029050602081019050919050565b600080fd5b6000612d23612d1e84612cdf565b612cc4565b90508083825260208201905060208402830185811115612d4657612d45612d0b565b5b835b81811015612d6f5780612d5b8882612a46565b845260208401935050602081019050612d48565b5050509392505050565b600082601f830112612d8e57612d8d612c5f565b5b8135612d9e848260208601612d10565b91505092915050565b600080fd5b600067ffffffffffffffff821115612dc757612dc6612c64565b5b612dd082612bc6565b9050602081019050919050565b82818337600083830152505050565b6000612dff612dfa84612dac565b612cc4565b905082815260208101848484011115612e1b57612e1a612da7565b5b612e26848285612ddd565b509392505050565b600082601f830112612e4357612e42612c5f565b5b8135612e53848260208601612dec565b91505092915050565b60008060008060808587031215612e7657612e756129bd565b5b6000612e8487828801612a10565b945050602085013567ffffffffffffffff811115612ea557612ea46129c2565b5b612eb187828801612d79565b935050604085013567ffffffffffffffff811115612ed257612ed16129c2565b5b612ede87828801612d79565b925050606085013567ffffffffffffffff811115612eff57612efe6129c2565b5b612f0b87828801612e2e565b91505092959194509250565b600080600080600060a08688031215612f3357612f326129bd565b5b6000612f4188828901612a10565b9550506020612f5288828901612a10565b945050604086013567ffffffffffffffff811115612f7357612f726129c2565b5b612f7f88828901612d79565b935050606086013567ffffffffffffffff811115612fa057612f9f6129c2565b5b612fac88828901612d79565b925050608086013567ffffffffffffffff811115612fcd57612fcc6129c2565b5b612fd988828901612e2e565b9150509295509295909350565b600067ffffffffffffffff82111561300157613000612c64565b5b602082029050602081019050919050565b600061302561302084612fe6565b612cc4565b9050808382526020820190506020840283018581111561304857613047612d0b565b5b835b81811015613071578061305d8882612a10565b84526020840193505060208101905061304a565b5050509392505050565b600082601f8301126130905761308f612c5f565b5b81356130a0848260208601613012565b91505092915050565b600080604083850312156130c0576130bf6129bd565b5b600083013567ffffffffffffffff8111156130de576130dd6129c2565b5b6130ea8582860161307b565b925050602083013567ffffffffffffffff81111561310b5761310a6129c2565b5b61311785828601612d79565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61315681612a25565b82525050565b6000613168838361314d565b60208301905092915050565b6000602082019050919050565b600061318c82613121565b613196818561312c565b93506131a18361313d565b8060005b838110156131d25781516131b9888261315c565b97506131c483613174565b9250506001810190506131a5565b5085935050505092915050565b600060208201905081810360008301526131f98184613181565b905092915050565b60008060006060848603121561321a576132196129bd565b5b600061322886828701612a10565b935050602084013567ffffffffffffffff811115613249576132486129c2565b5b61325586828701612d79565b925050604084013567ffffffffffffffff811115613276576132756129c2565b5b61328286828701612d79565b9150509250925092565b600080600080608085870312156132a6576132a56129bd565b5b60006132b487828801612a10565b94505060206132c587828801612a46565b93505060406132d687828801612a46565b925050606085013567ffffffffffffffff8111156132f7576132f66129c2565b5b61330387828801612e2e565b91505092959194509250565b600067ffffffffffffffff82111561332a57613329612c64565b5b61333382612bc6565b9050602081019050919050565b600061335361334e8461330f565b612cc4565b90508281526020810184848401111561336f5761336e612da7565b5b61337a848285612ddd565b509392505050565b600082601f83011261339757613396612c5f565b5b81356133a7848260208601613340565b91505092915050565b600080604083850312156133c7576133c66129bd565b5b60006133d585828601612a46565b925050602083013567ffffffffffffffff8111156133f6576133f56129c2565b5b61340285828601613382565b9150509250929050565b613415816129e7565b82525050565b6000602082019050613430600083018461340c565b92915050565b60006020828403121561344c5761344b6129bd565b5b600082013567ffffffffffffffff81111561346a576134696129c2565b5b61347684828501613382565b91505092915050565b61348881612b4a565b811461349357600080fd5b50565b6000813590506134a58161347f565b92915050565b600080604083850312156134c2576134c16129bd565b5b60006134d085828601612a10565b92505060206134e185828601613496565b9150509250929050565b60008060408385031215613502576135016129bd565b5b600061351085828601612a10565b925050602061352185828601612a10565b9150509250929050565b600080600080600060a08688031215613547576135466129bd565b5b600061355588828901612a10565b955050602061356688828901612a10565b945050604061357788828901612a46565b935050606061358888828901612a46565b925050608086013567ffffffffffffffff8111156135a9576135a86129c2565b5b6135b588828901612e2e565b9150509295509295909350565b6000602082840312156135d8576135d76129bd565b5b60006135e684828501612a10565b91505092915050565b600080600060608486031215613608576136076129bd565b5b600061361686828701612a10565b935050602061362786828701612a46565b925050604061363886828701612a46565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061369e602a83612b8b565b91506136a982613642565b604082019050919050565b600060208201905081810360008301526136cd81613691565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061371b57607f821691505b60208210810361372e5761372d6136d4565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613790602e83612b8b565b915061379b82613734565b604082019050919050565b600060208201905081810360008301526137bf81613783565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613822602983612b8b565b915061382d826137c6565b604082019050919050565b6000602082019050818103600083015261385181613815565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c182612a25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138f3576138f2613887565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613923565b61396a8683613923565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139a76139a261399d84612a25565b613982565b612a25565b9050919050565b6000819050919050565b6139c18361398c565b6139d56139cd826139ae565b848454613930565b825550505050565b600090565b6139ea6139dd565b6139f58184846139b8565b505050565b5b81811015613a1957613a0e6000826139e2565b6001810190506139fb565b5050565b601f821115613a5e57613a2f816138fe565b613a3884613913565b81016020851015613a47578190505b613a5b613a5385613913565b8301826139fa565b50505b505050565b600082821c905092915050565b6000613a8160001984600802613a63565b1980831691505092915050565b6000613a9a8383613a70565b9150826002028217905092915050565b613ab382612b80565b67ffffffffffffffff811115613acc57613acb612c64565b5b613ad68254613703565b613ae1828285613a1d565b600060209050601f831160018114613b145760008415613b02578287015190505b613b0c8582613a8e565b865550613b74565b601f198416613b22866138fe565b60005b82811015613b4a57848901518255600182019150602085019450602081019050613b25565b86831015613b675784890151613b63601f891682613a70565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bd8602683612b8b565b9150613be382613b7c565b604082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b6000613c1982612a25565b9150613c2483612a25565b9250828201905080821115613c3c57613c3b613887565b5b92915050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000613c9e602883612b8b565b9150613ca982613c42565b604082019050919050565b60006020820190508181036000830152613ccd81613c91565b9050919050565b600081905092915050565b60008154613cec81613703565b613cf68186613cd4565b94506001821660008114613d115760018114613d2657613d59565b60ff1983168652811515820286019350613d59565b613d2f856138fe565b60005b83811015613d5157815481890152600182019150602081019050613d32565b838801955050505b50505092915050565b6000613d6d82612b80565b613d778185613cd4565b9350613d87818560208601612b9c565b80840191505092915050565b6000613d9f8285613cdf565b9150613dab8284613d62565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ded602083612b8b565b9150613df882613db7565b602082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602183612b8b565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f11602883612b8b565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b60006040820190508181036000830152613f618185613181565b90508181036020830152613f758184613181565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fda602583612b8b565b9150613fe582613f7e565b604082019050919050565b6000602082019050818103600083015261400981613fcd565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061406c602a83612b8b565b915061407782614010565b604082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140fe602383612b8b565b9150614109826140a2565b604082019050919050565b6000602082019050818103600083015261412d816140f1565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614190602483612b8b565b915061419b82614134565b604082019050919050565b600060208201905081810360008301526141bf81614183565b9050919050565b60006040820190506141db6000830185612a9b565b6141e86020830184612a9b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061424b602983612b8b565b9150614256826141ef565b604082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006142a882614281565b6142b2818561428c565b93506142c2818560208601612b9c565b6142cb81612bc6565b840191505092915050565b600060a0820190506142eb600083018861340c565b6142f8602083018761340c565b818103604083015261430a8186613181565b9050818103606083015261431e8185613181565b90508181036080830152614332818461429d565b90509695505050505050565b60008151905061434d81612af1565b92915050565b600060208284031215614369576143686129bd565b5b60006143778482850161433e565b91505092915050565b60008160e01c9050919050565b600060033d11156143ac5760046000803e6143a9600051614380565b90505b90565b600060443d1061443c576143c16129b3565b60043d036004823e80513d602482011167ffffffffffffffff821117156143e957505061443c565b808201805167ffffffffffffffff811115614407575050505061443c565b80602083010160043d03850181111561442457505050505061443c565b61443382602001850186612c93565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061449b603483612b8b565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061452d602883612b8b565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b600060a082019050614578600083018861340c565b614585602083018761340c565b6145926040830186612a9b565b61459f6060830185612a9b565b81810360808301526145b1818461429d565b9050969550505050505056fea2646970667358221220ffe6cad28a2ce9438695c3e66b13a5b5f468d028b7219553081b5111a5a2fda264736f6c6343000810003368747470733a2f2f6973636172696f742e6e65742f746f6b656e732f7b69647d2e6a736f6e68747470733a2f2f6973636172696f742e6e65742f746f6b656e732f636f6c6c656374696f6e2e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102105760003560e01c806380d6edc011610125578063a89a2973116100ad578063e985e9c51161007c578063e985e9c5146105e3578063f242432a14610613578063f268e7bf1461062f578063f2fde38b1461064d578063f5298aca1461066957610210565b8063a89a297314610559578063bd85b03914610577578063db625479146105a7578063e8a3d485146105c557610210565b806395d89b41116100f457806395d89b41146104c55780639ef90b6f146104e3578063a03eebaa14610501578063a22cb4651461051f578063a5fc21f91461053b57610210565b806380d6edc014610451578063862440e21461046f5780638da5cb5b1461048b578063938e3d7b146104a957610210565b8063403426b3116101a8578063578246071161017757806357824607146103d35780636b20c454146103f1578063715018a61461040d578063731133e91461041757806373fe21c01461043357610210565b8063403426b3146103375780634e1273f4146103555780634f558e79146103855780635762b0ab146103b557610210565b80630adb9a44116101e45780630adb9a44146102b15780630e89341c146102cf5780631f7fdffa146102ff5780632eb2c2d61461031b57610210565b8062fdd58e1461021557806301ffc9a714610245578063030c52321461027557806306fdde0314610293575b600080fd5b61022f600480360381019061022a9190612a5b565b610685565b60405161023c9190612aaa565b60405180910390f35b61025f600480360381019061025a9190612b1d565b61074d565b60405161026c9190612b65565b60405180910390f35b61027d61082f565b60405161028a9190612aaa565b60405180910390f35b61029b610834565b6040516102a89190612c10565b60405180910390f35b6102b96108c2565b6040516102c69190612aaa565b60405180910390f35b6102e960048036038101906102e49190612c32565b6108c7565b6040516102f69190612c10565b60405180910390f35b61031960048036038101906103149190612e5c565b6108d9565b005b61033560048036038101906103309190612f17565b6108f3565b005b61033f610994565b60405161034c9190612aaa565b60405180910390f35b61036f600480360381019061036a91906130a9565b610999565b60405161037c91906131df565b60405180910390f35b61039f600480360381019061039a9190612c32565b610ab2565b6040516103ac9190612b65565b60405180910390f35b6103bd610ac6565b6040516103ca9190612aaa565b60405180910390f35b6103db610acb565b6040516103e89190612aaa565b60405180910390f35b61040b60048036038101906104069190613201565b610ad0565b005b610415610b6d565b005b610431600480360381019061042c919061328c565b610b81565b005b61043b610b9b565b6040516104489190612aaa565b60405180910390f35b610459610ba0565b6040516104669190612aaa565b60405180910390f35b610489600480360381019061048491906133b0565b610ba5565b005b610493610bbb565b6040516104a0919061341b565b60405180910390f35b6104c360048036038101906104be9190613436565b610be5565b005b6104cd610c00565b6040516104da9190612c10565b60405180910390f35b6104eb610c8e565b6040516104f89190612aaa565b60405180910390f35b610509610c93565b6040516105169190612aaa565b60405180910390f35b610539600480360381019061053491906134ab565b610c98565b005b610543610cae565b6040516105509190612aaa565b60405180910390f35b610561610cb3565b60405161056e9190612aaa565b60405180910390f35b610591600480360381019061058c9190612c32565b610cb8565b60405161059e9190612aaa565b60405180910390f35b6105af610cd5565b6040516105bc9190612aaa565b60405180910390f35b6105cd610cda565b6040516105da9190612c10565b60405180910390f35b6105fd60048036038101906105f891906134eb565b610d6c565b60405161060a9190612b65565b60405180910390f35b61062d6004803603810190610628919061352b565b610e00565b005b610637610ea1565b6040516106449190612aaa565b60405180910390f35b610667600480360381019061066291906135c2565b610ea6565b005b610683600480360381019061067e91906135ef565b610f29565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec906136b4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108285750610827826111c1565b5b9050919050565b600881565b6007805461084190613703565b80601f016020809104026020016040519081016040528092919081815260200182805461086d90613703565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b600681565b60606108d28261122b565b9050919050565b6108e1611310565b6108ed8484848461138e565b50505050565b6108fb6115ba565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061094157506109408561093b6115ba565b610d6c565b5b610980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610977906137a6565b60405180910390fd5b61098d85858585856115c2565b5050505050565b600481565b606081518351146109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613838565b60405180910390fd5b6000835167ffffffffffffffff8111156109fc576109fb612c64565b5b604051908082528060200260200182016040528015610a2a5781602001602082028036833780820191505090505b50905060005b8451811015610aa757610a77858281518110610a4f57610a4e613858565b5b6020026020010151858381518110610a6a57610a69613858565b5b6020026020010151610685565b828281518110610a8a57610a89613858565b5b60200260200101818152505080610aa0906138b6565b9050610a30565b508091505092915050565b600080610abe83610cb8565b119050919050565b600181565b600a81565b610ad86115ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b1e5750610b1d83610b186115ba565b610d6c565b5b610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b54906137a6565b60405180910390fd5b610b688383836118e3565b505050565b610b75611310565b610b7f6000611bb1565b565b610b89611310565b610b9584848484611c77565b50505050565b600581565b600981565b610bad611310565b610bb78282611e27565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bed611310565b8060099081610bfc9190613aaa565b5050565b60088054610c0d90613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3990613703565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b505050505081565b608081565b600181565b610caa610ca36115ba565b8383611e8c565b5050565b600081565b600281565b600060046000838152602001908152602001600020549050919050565b600381565b606060098054610ce990613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1590613703565b8015610d625780601f10610d3757610100808354040283529160200191610d62565b820191906000526020600020905b815481529060010190602001808311610d4557829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e086115ba565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e4e5750610e4d85610e486115ba565b610d6c565b5b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906137a6565b60405180910390fd5b610e9a8585858585611ff8565b5050505050565b600781565b610eae611310565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613bee565b60405180910390fd5b610f2681611bb1565b50565b610f316115ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f775750610f7683610f716115ba565b610d6c565b5b610fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fad906137a6565b60405180910390fd5b610fc1838383612293565b505050565b610fd48686868686866111b9565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036110855760005b83518110156110835782818151811061102757611026613858565b5b60200260200101516004600086848151811061104657611045613858565b5b60200260200101518152602001908152602001600020600082825461106b9190613c0e565b925050819055508061107c906138b6565b905061100b565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361118e5760005b835181101561118c5760008482815181106110da576110d9613858565b5b6020026020010151905060008483815181106110f9576110f8613858565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590613cb4565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080611185906138b6565b90506110bc565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060066000848152602001908152602001600020805461124d90613703565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613703565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b5050505050905060008151116112e4576112df836124d9565b611308565b6005816040516020016112f8929190613d93565b6040516020818303038152906040525b915050919050565b6113186115ba565b73ffffffffffffffffffffffffffffffffffffffff16611336610bbb565b73ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613e03565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490613e95565b60405180910390fd5b8151835114611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613f27565b60405180910390fd5b600061144b6115ba565b905061145c8160008787878761256d565b60005b84518110156115155783818151811061147b5761147a613858565b5b602002602001015160008087848151811061149957611498613858565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fb9190613c0e565b92505081905550808061150d906138b6565b91505061145f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161158d929190613f47565b60405180910390a46115a481600087878787612583565b6115b38160008787878761258b565b5050505050565b600033905090565b8151835114611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613f27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613ff0565b60405180910390fd5b600061167f6115ba565b905061168f81878787878761256d565b60005b84518110156118405760008582815181106116b0576116af613858565b5b6020026020010151905060008583815181106116cf576116ce613858565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790614082565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118259190613c0e565b9250508190555050505080611839906138b6565b9050611692565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118b7929190613f47565b60405180910390a46118cd818787878787612583565b6118db81878787878761258b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614114565b60405180910390fd5b8051825114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613f27565b60405180910390fd5b60006119a06115ba565b90506119c08185600086866040518060200160405280600081525061256d565b60005b8351811015611b0d5760008482815181106119e1576119e0613858565b5b602002602001015190506000848381518110611a00576119ff613858565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a98906141a6565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b05906138b6565b9150506119c3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b85929190613f47565b60405180910390a4611bab81856000868660405180602001604052806000815250612583565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613e95565b60405180910390fd5b6000611cf06115ba565b90506000611cfd85612762565b90506000611d0a85612762565b9050611d1b8360008985858961256d565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7a9190613c0e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611df89291906141c6565b60405180910390a4611e0f83600089858589612583565b611e1e836000898989896127dc565b50505050505050565b80600660008481526020019081526020016000209081611e479190613aaa565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b611e73846108c7565b604051611e809190612c10565b60405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190614261565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611feb9190612b65565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613ff0565b60405180910390fd5b60006120716115ba565b9050600061207e85612762565b9050600061208b85612762565b905061209b83898985858961256d565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614082565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e79190613c0e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516122649291906141c6565b60405180910390a461227a848a8a86868a612583565b612288848a8a8a8a8a6127dc565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990614114565b60405180910390fd5b600061230c6115ba565b9050600061231984612762565b9050600061232684612762565b90506123468387600085856040518060200160405280600081525061256d565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d4906141a6565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516124aa9291906141c6565b60405180910390a46124d084886000868660405180602001604052806000815250612583565b50505050505050565b6060600280546124e890613703565b80601f016020809104026020016040519081016040528092919081815260200182805461251490613703565b80156125615780601f1061253657610100808354040283529160200191612561565b820191906000526020600020905b81548152906001019060200180831161254457829003601f168201915b50505050509050919050565b61257b868686868686610fc6565b505050505050565b505050505050565b6125aa8473ffffffffffffffffffffffffffffffffffffffff16611196565b1561275a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125f09594939291906142d6565b6020604051808303816000875af192505050801561262c57506040513d601f19601f820116820180604052508101906126299190614353565b60015b6126d15761263861438d565b806308c379a003612694575061264c6143af565b806126575750612696565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b9190612c10565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906144b1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614543565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561278157612780612c64565b5b6040519080825280602002602001820160405280156127af5781602001602082028036833780820191505090505b50905082816000815181106127c7576127c6613858565b5b60200260200101818152505080915050919050565b6127fb8473ffffffffffffffffffffffffffffffffffffffff16611196565b156129ab578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612841959493929190614563565b6020604051808303816000875af192505050801561287d57506040513d601f19601f8201168201806040525081019061287a9190614353565b60015b6129225761288961438d565b806308c379a0036128e5575061289d6143af565b806128a857506128e7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9190612c10565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612919906144b1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614543565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129f2826129c7565b9050919050565b612a02816129e7565b8114612a0d57600080fd5b50565b600081359050612a1f816129f9565b92915050565b6000819050919050565b612a3881612a25565b8114612a4357600080fd5b50565b600081359050612a5581612a2f565b92915050565b60008060408385031215612a7257612a716129bd565b5b6000612a8085828601612a10565b9250506020612a9185828601612a46565b9150509250929050565b612aa481612a25565b82525050565b6000602082019050612abf6000830184612a9b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612afa81612ac5565b8114612b0557600080fd5b50565b600081359050612b1781612af1565b92915050565b600060208284031215612b3357612b326129bd565b5b6000612b4184828501612b08565b91505092915050565b60008115159050919050565b612b5f81612b4a565b82525050565b6000602082019050612b7a6000830184612b56565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bba578082015181840152602081019050612b9f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612be282612b80565b612bec8185612b8b565b9350612bfc818560208601612b9c565b612c0581612bc6565b840191505092915050565b60006020820190508181036000830152612c2a8184612bd7565b905092915050565b600060208284031215612c4857612c476129bd565b5b6000612c5684828501612a46565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c9c82612bc6565b810181811067ffffffffffffffff82111715612cbb57612cba612c64565b5b80604052505050565b6000612cce6129b3565b9050612cda8282612c93565b919050565b600067ffffffffffffffff821115612cfa57612cf9612c64565b5b602082029050602081019050919050565b600080fd5b6000612d23612d1e84612cdf565b612cc4565b90508083825260208201905060208402830185811115612d4657612d45612d0b565b5b835b81811015612d6f5780612d5b8882612a46565b845260208401935050602081019050612d48565b5050509392505050565b600082601f830112612d8e57612d8d612c5f565b5b8135612d9e848260208601612d10565b91505092915050565b600080fd5b600067ffffffffffffffff821115612dc757612dc6612c64565b5b612dd082612bc6565b9050602081019050919050565b82818337600083830152505050565b6000612dff612dfa84612dac565b612cc4565b905082815260208101848484011115612e1b57612e1a612da7565b5b612e26848285612ddd565b509392505050565b600082601f830112612e4357612e42612c5f565b5b8135612e53848260208601612dec565b91505092915050565b60008060008060808587031215612e7657612e756129bd565b5b6000612e8487828801612a10565b945050602085013567ffffffffffffffff811115612ea557612ea46129c2565b5b612eb187828801612d79565b935050604085013567ffffffffffffffff811115612ed257612ed16129c2565b5b612ede87828801612d79565b925050606085013567ffffffffffffffff811115612eff57612efe6129c2565b5b612f0b87828801612e2e565b91505092959194509250565b600080600080600060a08688031215612f3357612f326129bd565b5b6000612f4188828901612a10565b9550506020612f5288828901612a10565b945050604086013567ffffffffffffffff811115612f7357612f726129c2565b5b612f7f88828901612d79565b935050606086013567ffffffffffffffff811115612fa057612f9f6129c2565b5b612fac88828901612d79565b925050608086013567ffffffffffffffff811115612fcd57612fcc6129c2565b5b612fd988828901612e2e565b9150509295509295909350565b600067ffffffffffffffff82111561300157613000612c64565b5b602082029050602081019050919050565b600061302561302084612fe6565b612cc4565b9050808382526020820190506020840283018581111561304857613047612d0b565b5b835b81811015613071578061305d8882612a10565b84526020840193505060208101905061304a565b5050509392505050565b600082601f8301126130905761308f612c5f565b5b81356130a0848260208601613012565b91505092915050565b600080604083850312156130c0576130bf6129bd565b5b600083013567ffffffffffffffff8111156130de576130dd6129c2565b5b6130ea8582860161307b565b925050602083013567ffffffffffffffff81111561310b5761310a6129c2565b5b61311785828601612d79565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61315681612a25565b82525050565b6000613168838361314d565b60208301905092915050565b6000602082019050919050565b600061318c82613121565b613196818561312c565b93506131a18361313d565b8060005b838110156131d25781516131b9888261315c565b97506131c483613174565b9250506001810190506131a5565b5085935050505092915050565b600060208201905081810360008301526131f98184613181565b905092915050565b60008060006060848603121561321a576132196129bd565b5b600061322886828701612a10565b935050602084013567ffffffffffffffff811115613249576132486129c2565b5b61325586828701612d79565b925050604084013567ffffffffffffffff811115613276576132756129c2565b5b61328286828701612d79565b9150509250925092565b600080600080608085870312156132a6576132a56129bd565b5b60006132b487828801612a10565b94505060206132c587828801612a46565b93505060406132d687828801612a46565b925050606085013567ffffffffffffffff8111156132f7576132f66129c2565b5b61330387828801612e2e565b91505092959194509250565b600067ffffffffffffffff82111561332a57613329612c64565b5b61333382612bc6565b9050602081019050919050565b600061335361334e8461330f565b612cc4565b90508281526020810184848401111561336f5761336e612da7565b5b61337a848285612ddd565b509392505050565b600082601f83011261339757613396612c5f565b5b81356133a7848260208601613340565b91505092915050565b600080604083850312156133c7576133c66129bd565b5b60006133d585828601612a46565b925050602083013567ffffffffffffffff8111156133f6576133f56129c2565b5b61340285828601613382565b9150509250929050565b613415816129e7565b82525050565b6000602082019050613430600083018461340c565b92915050565b60006020828403121561344c5761344b6129bd565b5b600082013567ffffffffffffffff81111561346a576134696129c2565b5b61347684828501613382565b91505092915050565b61348881612b4a565b811461349357600080fd5b50565b6000813590506134a58161347f565b92915050565b600080604083850312156134c2576134c16129bd565b5b60006134d085828601612a10565b92505060206134e185828601613496565b9150509250929050565b60008060408385031215613502576135016129bd565b5b600061351085828601612a10565b925050602061352185828601612a10565b9150509250929050565b600080600080600060a08688031215613547576135466129bd565b5b600061355588828901612a10565b955050602061356688828901612a10565b945050604061357788828901612a46565b935050606061358888828901612a46565b925050608086013567ffffffffffffffff8111156135a9576135a86129c2565b5b6135b588828901612e2e565b9150509295509295909350565b6000602082840312156135d8576135d76129bd565b5b60006135e684828501612a10565b91505092915050565b600080600060608486031215613608576136076129bd565b5b600061361686828701612a10565b935050602061362786828701612a46565b925050604061363886828701612a46565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061369e602a83612b8b565b91506136a982613642565b604082019050919050565b600060208201905081810360008301526136cd81613691565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061371b57607f821691505b60208210810361372e5761372d6136d4565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613790602e83612b8b565b915061379b82613734565b604082019050919050565b600060208201905081810360008301526137bf81613783565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613822602983612b8b565b915061382d826137c6565b604082019050919050565b6000602082019050818103600083015261385181613815565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c182612a25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138f3576138f2613887565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613923565b61396a8683613923565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139a76139a261399d84612a25565b613982565b612a25565b9050919050565b6000819050919050565b6139c18361398c565b6139d56139cd826139ae565b848454613930565b825550505050565b600090565b6139ea6139dd565b6139f58184846139b8565b505050565b5b81811015613a1957613a0e6000826139e2565b6001810190506139fb565b5050565b601f821115613a5e57613a2f816138fe565b613a3884613913565b81016020851015613a47578190505b613a5b613a5385613913565b8301826139fa565b50505b505050565b600082821c905092915050565b6000613a8160001984600802613a63565b1980831691505092915050565b6000613a9a8383613a70565b9150826002028217905092915050565b613ab382612b80565b67ffffffffffffffff811115613acc57613acb612c64565b5b613ad68254613703565b613ae1828285613a1d565b600060209050601f831160018114613b145760008415613b02578287015190505b613b0c8582613a8e565b865550613b74565b601f198416613b22866138fe565b60005b82811015613b4a57848901518255600182019150602085019450602081019050613b25565b86831015613b675784890151613b63601f891682613a70565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bd8602683612b8b565b9150613be382613b7c565b604082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b6000613c1982612a25565b9150613c2483612a25565b9250828201905080821115613c3c57613c3b613887565b5b92915050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000613c9e602883612b8b565b9150613ca982613c42565b604082019050919050565b60006020820190508181036000830152613ccd81613c91565b9050919050565b600081905092915050565b60008154613cec81613703565b613cf68186613cd4565b94506001821660008114613d115760018114613d2657613d59565b60ff1983168652811515820286019350613d59565b613d2f856138fe565b60005b83811015613d5157815481890152600182019150602081019050613d32565b838801955050505b50505092915050565b6000613d6d82612b80565b613d778185613cd4565b9350613d87818560208601612b9c565b80840191505092915050565b6000613d9f8285613cdf565b9150613dab8284613d62565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ded602083612b8b565b9150613df882613db7565b602082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602183612b8b565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f11602883612b8b565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b60006040820190508181036000830152613f618185613181565b90508181036020830152613f758184613181565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fda602583612b8b565b9150613fe582613f7e565b604082019050919050565b6000602082019050818103600083015261400981613fcd565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061406c602a83612b8b565b915061407782614010565b604082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140fe602383612b8b565b9150614109826140a2565b604082019050919050565b6000602082019050818103600083015261412d816140f1565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614190602483612b8b565b915061419b82614134565b604082019050919050565b600060208201905081810360008301526141bf81614183565b9050919050565b60006040820190506141db6000830185612a9b565b6141e86020830184612a9b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061424b602983612b8b565b9150614256826141ef565b604082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006142a882614281565b6142b2818561428c565b93506142c2818560208601612b9c565b6142cb81612bc6565b840191505092915050565b600060a0820190506142eb600083018861340c565b6142f8602083018761340c565b818103604083015261430a8186613181565b9050818103606083015261431e8185613181565b90508181036080830152614332818461429d565b90509695505050505050565b60008151905061434d81612af1565b92915050565b600060208284031215614369576143686129bd565b5b60006143778482850161433e565b91505092915050565b60008160e01c9050919050565b600060033d11156143ac5760046000803e6143a9600051614380565b90505b90565b600060443d1061443c576143c16129b3565b60043d036004823e80513d602482011167ffffffffffffffff821117156143e957505061443c565b808201805167ffffffffffffffff811115614407575050505061443c565b80602083010160043d03850181111561442457505050505061443c565b61443382602001850186612c93565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061449b603483612b8b565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061452d602883612b8b565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b600060a082019050614578600083018861340c565b614585602083018761340c565b6145926040830186612a9b565b61459f6060830185612a9b565b81810360808301526145b1818461429d565b9050969550505050505056fea2646970667358221220ffe6cad28a2ce9438695c3e66b13a5b5f468d028b7219553081b5111a5a2fda264736f6c63430008100033

Deployed Bytecode Sourcemap

50359:2879:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24762:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23785:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50913:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51047:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50819:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52227:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52743:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26705:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50735:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25158:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44775:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50603:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51001:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43569:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42084:103;;;:::i;:::-;;52564:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50778:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50956:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52394:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41436:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52073:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51072:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50463:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50515:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25755:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50560:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50652:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44564:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50693:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51968:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25982:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26222:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50866:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42342:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43235:326;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24762:230;24848:7;24895:1;24876:21;;:7;:21;;;24868:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24962:9;:13;24972:2;24962:13;;;;;;;;;;;:22;24976:7;24962:22;;;;;;;;;;;;;;;;24955:29;;24762:230;;;;:::o;23785:310::-;23887:4;23939:26;23924:41;;;:11;:41;;;;:110;;;;23997:37;23982:52;;;:11;:52;;;;23924:110;:163;;;;24051:36;24075:11;24051:23;:36::i;:::-;23924:163;23904:183;;23785:310;;;:::o;50913:36::-;50948:1;50913:36;:::o;51047:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50819:40::-;50858:1;50819:40;:::o;52227:159::-;52315:13;52348:30;52370:7;52348:21;:30::i;:::-;52341:37;;52227:159;;;:::o;52743:193::-;41322:13;:11;:13::i;:::-;52894:34:::1;52905:2;52909:3;52914:7;52923:4;52894:10;:34::i;:::-;52743:193:::0;;;;:::o;26705:438::-;26946:12;:10;:12::i;:::-;26938:20;;:4;:20;;;:60;;;;26962:36;26979:4;26985:12;:10;:12::i;:::-;26962:16;:36::i;:::-;26938:60;26916:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27083:52;27106:4;27112:2;27116:3;27121:7;27130:4;27083:22;:52::i;:::-;26705:438;;;;;:::o;50735:36::-;50770:1;50735:36;:::o;25158:524::-;25314:16;25375:3;:10;25356:8;:15;:29;25348:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25444:30;25491:8;:15;25477:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25444:63;;25525:9;25520:122;25544:8;:15;25540:1;:19;25520:122;;;25600:30;25610:8;25619:1;25610:11;;;;;;;;:::i;:::-;;;;;;;;25623:3;25627:1;25623:6;;;;;;;;:::i;:::-;;;;;;;;25600:9;:30::i;:::-;25581:13;25595:1;25581:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25561:3;;;;:::i;:::-;;;25520:122;;;;25661:13;25654:20;;;25158:524;;;;:::o;44775:122::-;44832:4;44888:1;44856:29;44882:2;44856:25;:29::i;:::-;:33;44849:40;;44775:122;;;:::o;50603:42::-;50644:1;50603:42;:::o;51001:33::-;51032:2;51001:33;:::o;43569:358::-;43745:12;:10;:12::i;:::-;43734:23;;:7;:23;;;:66;;;;43761:39;43778:7;43787:12;:10;:12::i;:::-;43761:16;:39::i;:::-;43734:66;43712:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43887:32;43898:7;43907:3;43912:6;43887:10;:32::i;:::-;43569:358;;;:::o;42084:103::-;41322:13;:11;:13::i;:::-;42149:30:::1;42176:1;42149:18;:30::i;:::-;42084:103::o:0;52564:171::-;41322:13;:11;:13::i;:::-;52695:32:::1;52701:7;52710:2;52714:6;52722:4;52695:5;:32::i;:::-;52564:171:::0;;;;:::o;50778:34::-;50811:1;50778:34;:::o;50956:38::-;50993:1;50956:38;:::o;52394:162::-;41322:13;:11;:13::i;:::-;52504:44:::1;52530:7;52539:8;52504:25;:44::i;:::-;52394:162:::0;;:::o;41436:87::-;41482:7;41509:6;;;;;;;;;;;41502:13;;41436:87;:::o;52073:146::-;41322:13;:11;:13::i;:::-;52197:14:::1;52182:12;:29;;;;;;:::i;:::-;;52073:146:::0;:::o;51072:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50463:45::-;50505:3;50463:45;:::o;50515:36::-;50550:1;50515:36;:::o;25755:155::-;25850:52;25869:12;:10;:12::i;:::-;25883:8;25893;25850:18;:52::i;:::-;25755:155;;:::o;50560:36::-;50595:1;50560:36;:::o;50652:34::-;50685:1;50652:34;:::o;44564:113::-;44626:7;44653:12;:16;44666:2;44653:16;;;;;;;;;;;;44646:23;;44564:113;;;:::o;50693:35::-;50727:1;50693:35;:::o;51968:97::-;52012:13;52045:12;52038:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51968:97;:::o;25982:168::-;26081:4;26105:18;:27;26124:7;26105:27;;;;;;;;;;;;;;;:37;26133:8;26105:37;;;;;;;;;;;;;;;;;;;;;;;;;26098:44;;25982:168;;;;:::o;26222:406::-;26438:12;:10;:12::i;:::-;26430:20;;:4;:20;;;:60;;;;26454:36;26471:4;26477:12;:10;:12::i;:::-;26454:16;:36::i;:::-;26430:60;26408:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26575:45;26593:4;26599:2;26603;26607:6;26615:4;26575:17;:45::i;:::-;26222:406;;;;;:::o;50866:40::-;50905:1;50866:40;:::o;42342:201::-;41322:13;:11;:13::i;:::-;42451:1:::1;42431:22;;:8;:22;;::::0;42423:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42507:28;42526:8;42507:18;:28::i;:::-;42342:201:::0;:::o;43235:326::-;43386:12;:10;:12::i;:::-;43375:23;;:7;:23;;;:66;;;;43402:39;43419:7;43428:12;:10;:12::i;:::-;43402:16;:39::i;:::-;43375:66;43353:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43528:25;43534:7;43543:2;43547:5;43528;:25::i;:::-;43235:326;;;:::o;44972:931::-;45211:66;45238:8;45248:4;45254:2;45258:3;45263:7;45272:4;45211:26;:66::i;:::-;45310:1;45294:18;;:4;:18;;;45290:160;;45334:9;45329:110;45353:3;:10;45349:1;:14;45329:110;;;45413:7;45421:1;45413:10;;;;;;;;:::i;:::-;;;;;;;;45389:12;:20;45402:3;45406:1;45402:6;;;;;;;;:::i;:::-;;;;;;;;45389:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;45365:3;;;;:::i;:::-;;;45329:110;;;;45290:160;45480:1;45466:16;;:2;:16;;;45462:434;;45504:9;45499:386;45523:3;:10;45519:1;:14;45499:386;;;45559:10;45572:3;45576:1;45572:6;;;;;;;;:::i;:::-;;;;;;;;45559:19;;45597:14;45614:7;45622:1;45614:10;;;;;;;;:::i;:::-;;;;;;;;45597:27;;45643:14;45660:12;:16;45673:2;45660:16;;;;;;;;;;;;45643:33;;45713:6;45703;:16;;45695:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45844:6;45835;:15;45816:12;:16;45829:2;45816:16;;;;;;;;;;;:34;;;;45540:345;;;45535:3;;;;:::i;:::-;;;45499:386;;;;45462:434;44972:931;;;;;;:::o;12860:326::-;12920:4;13177:1;13155:7;:19;;;:23;13148:30;;12860:326;;;:::o;37105:221::-;;;;;;;:::o;22632:157::-;22717:4;22756:25;22741:40;;;:11;:40;;;;22734:47;;22632:157;;;:::o;49561:351::-;49629:13;49655:22;49680:10;:19;49691:7;49680:19;;;;;;;;;;;49655:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49835:1;49816:8;49810:22;:26;:94;;49886:18;49896:7;49886:9;:18::i;:::-;49810:94;;;49863:8;49873;49846:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49810:94;49803:101;;;49561:351;;;:::o;41601:132::-;41676:12;:10;:12::i;:::-;41665:23;;:7;:5;:7::i;:::-;:23;;;41657:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41601:132::o;32535:813::-;32727:1;32713:16;;:2;:16;;;32705:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32800:7;:14;32786:3;:10;:28;32778:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32872:16;32891:12;:10;:12::i;:::-;32872:31;;32916:66;32937:8;32955:1;32959:2;32963:3;32968:7;32977:4;32916:20;:66::i;:::-;33000:9;32995:103;33019:3;:10;33015:1;:14;32995:103;;;33076:7;33084:1;33076:10;;;;;;;;:::i;:::-;;;;;;;;33051:9;:17;33061:3;33065:1;33061:6;;;;;;;;:::i;:::-;;;;;;;;33051:17;;;;;;;;;;;:21;33069:2;33051:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33031:3;;;;;:::i;:::-;;;;32995:103;;;;33151:2;33115:53;;33147:1;33115:53;;33129:8;33115:53;;;33155:3;33160:7;33115:53;;;;;;;:::i;:::-;;;;;;;;33181:65;33201:8;33219:1;33223:2;33227:3;33232:7;33241:4;33181:19;:65::i;:::-;33259:81;33295:8;33313:1;33317:2;33321:3;33326:7;33335:4;33259:35;:81::i;:::-;32694:654;32535:813;;;;:::o;21651:98::-;21704:7;21731:10;21724:17;;21651:98;:::o;28939:1146::-;29166:7;:14;29152:3;:10;:28;29144:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29258:1;29244:16;;:2;:16;;;29236:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29315:16;29334:12;:10;:12::i;:::-;29315:31;;29359:60;29380:8;29390:4;29396:2;29400:3;29405:7;29414:4;29359:20;:60::i;:::-;29437:9;29432:421;29456:3;:10;29452:1;:14;29432:421;;;29488:10;29501:3;29505:1;29501:6;;;;;;;;:::i;:::-;;;;;;;;29488:19;;29522:14;29539:7;29547:1;29539:10;;;;;;;;:::i;:::-;;;;;;;;29522:27;;29566:19;29588:9;:13;29598:2;29588:13;;;;;;;;;;;:19;29602:4;29588:19;;;;;;;;;;;;;;;;29566:41;;29645:6;29630:11;:21;;29622:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:6;29764:11;:20;29742:9;:13;29752:2;29742:13;;;;;;;;;;;:19;29756:4;29742:19;;;;;;;;;;;;;;;:42;;;;29835:6;29814:9;:13;29824:2;29814:13;;;;;;;;;;;:17;29828:2;29814:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29473:380;;;29468:3;;;;:::i;:::-;;;29432:421;;;;29900:2;29870:47;;29894:4;29870:47;;29884:8;29870:47;;;29904:3;29909:7;29870:47;;;;;;;:::i;:::-;;;;;;;;29930:59;29950:8;29960:4;29966:2;29970:3;29975:7;29984:4;29930:19;:59::i;:::-;30002:75;30038:8;30048:4;30054:2;30058:3;30063:7;30072:4;30002:35;:75::i;:::-;29133:952;28939:1146;;;;;:::o;34704:969::-;34872:1;34856:18;;:4;:18;;;34848:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34947:7;:14;34933:3;:10;:28;34925:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35019:16;35038:12;:10;:12::i;:::-;35019:31;;35063:66;35084:8;35094:4;35108:1;35112:3;35117:7;35063:66;;;;;;;;;;;;:20;:66::i;:::-;35147:9;35142:373;35166:3;:10;35162:1;:14;35142:373;;;35198:10;35211:3;35215:1;35211:6;;;;;;;;:::i;:::-;;;;;;;;35198:19;;35232:14;35249:7;35257:1;35249:10;;;;;;;;:::i;:::-;;;;;;;;35232:27;;35276:19;35298:9;:13;35308:2;35298:13;;;;;;;;;;;:19;35312:4;35298:19;;;;;;;;;;;;;;;;35276:41;;35355:6;35340:11;:21;;35332:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35482:6;35468:11;:20;35446:9;:13;35456:2;35446:13;;;;;;;;;;;:19;35460:4;35446:19;;;;;;;;;;;;;;;:42;;;;35183:332;;;35178:3;;;;;:::i;:::-;;;;35142:373;;;;35570:1;35532:55;;35556:4;35532:55;;35546:8;35532:55;;;35574:3;35579:7;35532:55;;;;;;;:::i;:::-;;;;;;;;35600:65;35620:8;35630:4;35644:1;35648:3;35653:7;35600:65;;;;;;;;;;;;:19;:65::i;:::-;34837:836;34704:969;;;:::o;42703:191::-;42777:16;42796:6;;;;;;;;;;;42777:25;;42822:8;42813:6;;:17;;;;;;;;;;;;;;;;;;42877:8;42846:40;;42867:8;42846:40;;;;;;;;;;;;42766:128;42703:191;:::o;31403:729::-;31570:1;31556:16;;:2;:16;;;31548:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31623:16;31642:12;:10;:12::i;:::-;31623:31;;31665:20;31688:21;31706:2;31688:17;:21::i;:::-;31665:44;;31720:24;31747:25;31765:6;31747:17;:25::i;:::-;31720:52;;31785:66;31806:8;31824:1;31828:2;31832:3;31837:7;31846:4;31785:20;:66::i;:::-;31885:6;31864:9;:13;31874:2;31864:13;;;;;;;;;;;:17;31878:2;31864:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31944:2;31907:52;;31940:1;31907:52;;31922:8;31907:52;;;31948:2;31952:6;31907:52;;;;;;;:::i;:::-;;;;;;;;31972:65;31992:8;32010:1;32014:2;32018:3;32023:7;32032:4;31972:19;:65::i;:::-;32050:74;32081:8;32099:1;32103:2;32107;32111:6;32119:4;32050:30;:74::i;:::-;31537:595;;;31403:729;;;;:::o;49997:166::-;50105:8;50083:10;:19;50094:7;50083:19;;;;;;;;;;;:30;;;;;;:::i;:::-;;50147:7;50129:26;50133:12;50137:7;50133:3;:12::i;:::-;50129:26;;;;;;:::i;:::-;;;;;;;;49997:166;;:::o;35816:331::-;35971:8;35962:17;;:5;:17;;;35954:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36074:8;36036:18;:25;36055:5;36036:25;;;;;;;;;;;;;;;:35;36062:8;36036:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36120:8;36098:41;;36113:5;36098:41;;;36130:8;36098:41;;;;;;:::i;:::-;;;;;;;;35816:331;;;:::o;27607:974::-;27809:1;27795:16;;:2;:16;;;27787:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27866:16;27885:12;:10;:12::i;:::-;27866:31;;27908:20;27931:21;27949:2;27931:17;:21::i;:::-;27908:44;;27963:24;27990:25;28008:6;27990:17;:25::i;:::-;27963:52;;28028:60;28049:8;28059:4;28065:2;28069:3;28074:7;28083:4;28028:20;:60::i;:::-;28101:19;28123:9;:13;28133:2;28123:13;;;;;;;;;;;:19;28137:4;28123:19;;;;;;;;;;;;;;;;28101:41;;28176:6;28161:11;:21;;28153:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28301:6;28287:11;:20;28265:9;:13;28275:2;28265:13;;;;;;;;;;;:19;28279:4;28265:19;;;;;;;;;;;;;;;:42;;;;28350:6;28329:9;:13;28339:2;28329:13;;;;;;;;;;;:17;28343:2;28329:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28405:2;28374:46;;28399:4;28374:46;;28389:8;28374:46;;;28409:2;28413:6;28374:46;;;;;;;:::i;:::-;;;;;;;;28433:59;28453:8;28463:4;28469:2;28473:3;28478:7;28487:4;28433:19;:59::i;:::-;28505:68;28536:8;28546:4;28552:2;28556;28560:6;28568:4;28505:30;:68::i;:::-;27776:805;;;;27607:974;;;;;:::o;33646:808::-;33789:1;33773:18;;:4;:18;;;33765:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33844:16;33863:12;:10;:12::i;:::-;33844:31;;33886:20;33909:21;33927:2;33909:17;:21::i;:::-;33886:44;;33941:24;33968:25;33986:6;33968:17;:25::i;:::-;33941:52;;34006:66;34027:8;34037:4;34051:1;34055:3;34060:7;34006:66;;;;;;;;;;;;:20;:66::i;:::-;34085:19;34107:9;:13;34117:2;34107:13;;;;;;;;;;;:19;34121:4;34107:19;;;;;;;;;;;;;;;;34085:41;;34160:6;34145:11;:21;;34137:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34279:6;34265:11;:20;34243:9;:13;34253:2;34243:13;;;;;;;;;;;:19;34257:4;34243:19;;;;;;;;;;;;;;;:42;;;;34353:1;34314:54;;34339:4;34314:54;;34329:8;34314:54;;;34357:2;34361:6;34314:54;;;;;;;:::i;:::-;;;;;;;;34381:65;34401:8;34411:4;34425:1;34429:3;34434:7;34381:65;;;;;;;;;;;;:19;:65::i;:::-;33754:700;;;;33646:808;;;:::o;24506:105::-;24566:13;24599:4;24592:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24506:105;;;:::o;52944:291::-;53161:66;53188:8;53198:4;53204:2;53208:3;53213:7;53222:4;53161:26;:66::i;:::-;52944:291;;;;;;:::o;38281:220::-;;;;;;;:::o;39261:813::-;39501:15;:2;:13;;;:15::i;:::-;39497:570;;;39554:2;39537:43;;;39581:8;39591:4;39597:3;39602:7;39611:4;39537:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39533:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39929:6;39922:14;;;;;;;;;;;:::i;:::-;;;;;;;;39533:523;;;39978:62;;;;;;;;;;:::i;:::-;;;;;;;;39533:523;39710:48;;;39698:60;;;:8;:60;;;;39694:159;;39783:50;;;;;;;;;;:::i;:::-;;;;;;;;39694:159;39617:251;39497:570;39261:813;;;;;;:::o;40082:198::-;40148:16;40177:22;40216:1;40202:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40177:41;;40240:7;40229:5;40235:1;40229:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40267:5;40260:12;;;40082:198;;;:::o;38509:744::-;38724:15;:2;:13;;;:15::i;:::-;38720:526;;;38777:2;38760:38;;;38799:8;38809:4;38815:2;38819:6;38827:4;38760:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38756:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39108:6;39101:14;;;;;;;;;;;:::i;:::-;;;;;;;;38756:479;;;39157:62;;;;;;;;;;:::i;:::-;;;;;;;;38756:479;38894:43;;;38882:55;;;:8;:55;;;;38878:154;;38962:50;;;;;;;;;;:::i;:::-;;;;;;;;38878:154;38833:214;38720:526;38509:744;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1363::-;8706:6;8714;8722;8730;8779:3;8767:9;8758:7;8754:23;8750:33;8747:120;;;8786:79;;:::i;:::-;8747:120;8906:1;8931:53;8976:7;8967:6;8956:9;8952:22;8931:53;:::i;:::-;8921:63;;8877:117;9061:2;9050:9;9046:18;9033:32;9092:18;9084:6;9081:30;9078:117;;;9114:79;;:::i;:::-;9078:117;9219:78;9289:7;9280:6;9269:9;9265:22;9219:78;:::i;:::-;9209:88;;9004:303;9374:2;9363:9;9359:18;9346:32;9405:18;9397:6;9394:30;9391:117;;;9427:79;;:::i;:::-;9391:117;9532:78;9602:7;9593:6;9582:9;9578:22;9532:78;:::i;:::-;9522:88;;9317:303;9687:2;9676:9;9672:18;9659:32;9718:18;9710:6;9707:30;9704:117;;;9740:79;;:::i;:::-;9704:117;9845:62;9899:7;9890:6;9879:9;9875:22;9845:62;:::i;:::-;9835:72;;9630:287;8561:1363;;;;;;;:::o;9930:1509::-;10084:6;10092;10100;10108;10116;10165:3;10153:9;10144:7;10140:23;10136:33;10133:120;;;10172:79;;:::i;:::-;10133:120;10292:1;10317:53;10362:7;10353:6;10342:9;10338:22;10317:53;:::i;:::-;10307:63;;10263:117;10419:2;10445:53;10490:7;10481:6;10470:9;10466:22;10445:53;:::i;:::-;10435:63;;10390:118;10575:2;10564:9;10560:18;10547:32;10606:18;10598:6;10595:30;10592:117;;;10628:79;;:::i;:::-;10592:117;10733:78;10803:7;10794:6;10783:9;10779:22;10733:78;:::i;:::-;10723:88;;10518:303;10888:2;10877:9;10873:18;10860:32;10919:18;10911:6;10908:30;10905:117;;;10941:79;;:::i;:::-;10905:117;11046:78;11116:7;11107:6;11096:9;11092:22;11046:78;:::i;:::-;11036:88;;10831:303;11201:3;11190:9;11186:19;11173:33;11233:18;11225:6;11222:30;11219:117;;;11255:79;;:::i;:::-;11219:117;11360:62;11414:7;11405:6;11394:9;11390:22;11360:62;:::i;:::-;11350:72;;11144:288;9930:1509;;;;;;;;:::o;11445:311::-;11522:4;11612:18;11604:6;11601:30;11598:56;;;11634:18;;:::i;:::-;11598:56;11684:4;11676:6;11672:17;11664:25;;11744:4;11738;11734:15;11726:23;;11445:311;;;:::o;11779:710::-;11875:5;11900:81;11916:64;11973:6;11916:64;:::i;:::-;11900:81;:::i;:::-;11891:90;;12001:5;12030:6;12023:5;12016:21;12064:4;12057:5;12053:16;12046:23;;12117:4;12109:6;12105:17;12097:6;12093:30;12146:3;12138:6;12135:15;12132:122;;;12165:79;;:::i;:::-;12132:122;12280:6;12263:220;12297:6;12292:3;12289:15;12263:220;;;12372:3;12401:37;12434:3;12422:10;12401:37;:::i;:::-;12396:3;12389:50;12468:4;12463:3;12459:14;12452:21;;12339:144;12323:4;12318:3;12314:14;12307:21;;12263:220;;;12267:21;11881:608;;11779:710;;;;;:::o;12512:370::-;12583:5;12632:3;12625:4;12617:6;12613:17;12609:27;12599:122;;12640:79;;:::i;:::-;12599:122;12757:6;12744:20;12782:94;12872:3;12864:6;12857:4;12849:6;12845:17;12782:94;:::i;:::-;12773:103;;12589:293;12512:370;;;;:::o;12888:894::-;13006:6;13014;13063:2;13051:9;13042:7;13038:23;13034:32;13031:119;;;13069:79;;:::i;:::-;13031:119;13217:1;13206:9;13202:17;13189:31;13247:18;13239:6;13236:30;13233:117;;;13269:79;;:::i;:::-;13233:117;13374:78;13444:7;13435:6;13424:9;13420:22;13374:78;:::i;:::-;13364:88;;13160:302;13529:2;13518:9;13514:18;13501:32;13560:18;13552:6;13549:30;13546:117;;;13582:79;;:::i;:::-;13546:117;13687:78;13757:7;13748:6;13737:9;13733:22;13687:78;:::i;:::-;13677:88;;13472:303;12888:894;;;;;:::o;13788:114::-;13855:6;13889:5;13883:12;13873:22;;13788:114;;;:::o;13908:184::-;14007:11;14041:6;14036:3;14029:19;14081:4;14076:3;14072:14;14057:29;;13908:184;;;;:::o;14098:132::-;14165:4;14188:3;14180:11;;14218:4;14213:3;14209:14;14201:22;;14098:132;;;:::o;14236:108::-;14313:24;14331:5;14313:24;:::i;:::-;14308:3;14301:37;14236:108;;:::o;14350:179::-;14419:10;14440:46;14482:3;14474:6;14440:46;:::i;:::-;14518:4;14513:3;14509:14;14495:28;;14350:179;;;;:::o;14535:113::-;14605:4;14637;14632:3;14628:14;14620:22;;14535:113;;;:::o;14684:732::-;14803:3;14832:54;14880:5;14832:54;:::i;:::-;14902:86;14981:6;14976:3;14902:86;:::i;:::-;14895:93;;15012:56;15062:5;15012:56;:::i;:::-;15091:7;15122:1;15107:284;15132:6;15129:1;15126:13;15107:284;;;15208:6;15202:13;15235:63;15294:3;15279:13;15235:63;:::i;:::-;15228:70;;15321:60;15374:6;15321:60;:::i;:::-;15311:70;;15167:224;15154:1;15151;15147:9;15142:14;;15107:284;;;15111:14;15407:3;15400:10;;14808:608;;;14684:732;;;;:::o;15422:373::-;15565:4;15603:2;15592:9;15588:18;15580:26;;15652:9;15646:4;15642:20;15638:1;15627:9;15623:17;15616:47;15680:108;15783:4;15774:6;15680:108;:::i;:::-;15672:116;;15422:373;;;;:::o;15801:1039::-;15928:6;15936;15944;15993:2;15981:9;15972:7;15968:23;15964:32;15961:119;;;15999:79;;:::i;:::-;15961:119;16119:1;16144:53;16189:7;16180:6;16169:9;16165:22;16144:53;:::i;:::-;16134:63;;16090:117;16274:2;16263:9;16259:18;16246:32;16305:18;16297:6;16294:30;16291:117;;;16327:79;;:::i;:::-;16291:117;16432:78;16502:7;16493:6;16482:9;16478:22;16432:78;:::i;:::-;16422:88;;16217:303;16587:2;16576:9;16572:18;16559:32;16618:18;16610:6;16607:30;16604:117;;;16640:79;;:::i;:::-;16604:117;16745:78;16815:7;16806:6;16795:9;16791:22;16745:78;:::i;:::-;16735:88;;16530:303;15801:1039;;;;;:::o;16846:943::-;16941:6;16949;16957;16965;17014:3;17002:9;16993:7;16989:23;16985:33;16982:120;;;17021:79;;:::i;:::-;16982:120;17141:1;17166:53;17211:7;17202:6;17191:9;17187:22;17166:53;:::i;:::-;17156:63;;17112:117;17268:2;17294:53;17339:7;17330:6;17319:9;17315:22;17294:53;:::i;:::-;17284:63;;17239:118;17396:2;17422:53;17467:7;17458:6;17447:9;17443:22;17422:53;:::i;:::-;17412:63;;17367:118;17552:2;17541:9;17537:18;17524:32;17583:18;17575:6;17572:30;17569:117;;;17605:79;;:::i;:::-;17569:117;17710:62;17764:7;17755:6;17744:9;17740:22;17710:62;:::i;:::-;17700:72;;17495:287;16846:943;;;;;;;:::o;17795:308::-;17857:4;17947:18;17939:6;17936:30;17933:56;;;17969:18;;:::i;:::-;17933:56;18007:29;18029:6;18007:29;:::i;:::-;17999:37;;18091:4;18085;18081:15;18073:23;;17795:308;;;:::o;18109:425::-;18187:5;18212:66;18228:49;18270:6;18228:49;:::i;:::-;18212:66;:::i;:::-;18203:75;;18301:6;18294:5;18287:21;18339:4;18332:5;18328:16;18377:3;18368:6;18363:3;18359:16;18356:25;18353:112;;;18384:79;;:::i;:::-;18353:112;18474:54;18521:6;18516:3;18511;18474:54;:::i;:::-;18193:341;18109:425;;;;;:::o;18554:340::-;18610:5;18659:3;18652:4;18644:6;18640:17;18636:27;18626:122;;18667:79;;:::i;:::-;18626:122;18784:6;18771:20;18809:79;18884:3;18876:6;18869:4;18861:6;18857:17;18809:79;:::i;:::-;18800:88;;18616:278;18554:340;;;;:::o;18900:654::-;18978:6;18986;19035:2;19023:9;19014:7;19010:23;19006:32;19003:119;;;19041:79;;:::i;:::-;19003:119;19161:1;19186:53;19231:7;19222:6;19211:9;19207:22;19186:53;:::i;:::-;19176:63;;19132:117;19316:2;19305:9;19301:18;19288:32;19347:18;19339:6;19336:30;19333:117;;;19369:79;;:::i;:::-;19333:117;19474:63;19529:7;19520:6;19509:9;19505:22;19474:63;:::i;:::-;19464:73;;19259:288;18900:654;;;;;:::o;19560:118::-;19647:24;19665:5;19647:24;:::i;:::-;19642:3;19635:37;19560:118;;:::o;19684:222::-;19777:4;19815:2;19804:9;19800:18;19792:26;;19828:71;19896:1;19885:9;19881:17;19872:6;19828:71;:::i;:::-;19684:222;;;;:::o;19912:509::-;19981:6;20030:2;20018:9;20009:7;20005:23;20001:32;19998:119;;;20036:79;;:::i;:::-;19998:119;20184:1;20173:9;20169:17;20156:31;20214:18;20206:6;20203:30;20200:117;;;20236:79;;:::i;:::-;20200:117;20341:63;20396:7;20387:6;20376:9;20372:22;20341:63;:::i;:::-;20331:73;;20127:287;19912:509;;;;:::o;20427:116::-;20497:21;20512:5;20497:21;:::i;:::-;20490:5;20487:32;20477:60;;20533:1;20530;20523:12;20477:60;20427:116;:::o;20549:133::-;20592:5;20630:6;20617:20;20608:29;;20646:30;20670:5;20646:30;:::i;:::-;20549:133;;;;:::o;20688:468::-;20753:6;20761;20810:2;20798:9;20789:7;20785:23;20781:32;20778:119;;;20816:79;;:::i;:::-;20778:119;20936:1;20961:53;21006:7;20997:6;20986:9;20982:22;20961:53;:::i;:::-;20951:63;;20907:117;21063:2;21089:50;21131:7;21122:6;21111:9;21107:22;21089:50;:::i;:::-;21079:60;;21034:115;20688:468;;;;;:::o;21162:474::-;21230:6;21238;21287:2;21275:9;21266:7;21262:23;21258:32;21255:119;;;21293:79;;:::i;:::-;21255:119;21413:1;21438:53;21483:7;21474:6;21463:9;21459:22;21438:53;:::i;:::-;21428:63;;21384:117;21540:2;21566:53;21611:7;21602:6;21591:9;21587:22;21566:53;:::i;:::-;21556:63;;21511:118;21162:474;;;;;:::o;21642:1089::-;21746:6;21754;21762;21770;21778;21827:3;21815:9;21806:7;21802:23;21798:33;21795:120;;;21834:79;;:::i;:::-;21795:120;21954:1;21979:53;22024:7;22015:6;22004:9;22000:22;21979:53;:::i;:::-;21969:63;;21925:117;22081:2;22107:53;22152:7;22143:6;22132:9;22128:22;22107:53;:::i;:::-;22097:63;;22052:118;22209:2;22235:53;22280:7;22271:6;22260:9;22256:22;22235:53;:::i;:::-;22225:63;;22180:118;22337:2;22363:53;22408:7;22399:6;22388:9;22384:22;22363:53;:::i;:::-;22353:63;;22308:118;22493:3;22482:9;22478:19;22465:33;22525:18;22517:6;22514:30;22511:117;;;22547:79;;:::i;:::-;22511:117;22652:62;22706:7;22697:6;22686:9;22682:22;22652:62;:::i;:::-;22642:72;;22436:288;21642:1089;;;;;;;;:::o;22737:329::-;22796:6;22845:2;22833:9;22824:7;22820:23;22816:32;22813:119;;;22851:79;;:::i;:::-;22813:119;22971:1;22996:53;23041:7;23032:6;23021:9;23017:22;22996:53;:::i;:::-;22986:63;;22942:117;22737:329;;;;:::o;23072:619::-;23149:6;23157;23165;23214:2;23202:9;23193:7;23189:23;23185:32;23182:119;;;23220:79;;:::i;:::-;23182:119;23340:1;23365:53;23410:7;23401:6;23390:9;23386:22;23365:53;:::i;:::-;23355:63;;23311:117;23467:2;23493:53;23538:7;23529:6;23518:9;23514:22;23493:53;:::i;:::-;23483:63;;23438:118;23595:2;23621:53;23666:7;23657:6;23646:9;23642:22;23621:53;:::i;:::-;23611:63;;23566:118;23072:619;;;;;:::o;23697:229::-;23837:34;23833:1;23825:6;23821:14;23814:58;23906:12;23901:2;23893:6;23889:15;23882:37;23697:229;:::o;23932:366::-;24074:3;24095:67;24159:2;24154:3;24095:67;:::i;:::-;24088:74;;24171:93;24260:3;24171:93;:::i;:::-;24289:2;24284:3;24280:12;24273:19;;23932:366;;;:::o;24304:419::-;24470:4;24508:2;24497:9;24493:18;24485:26;;24557:9;24551:4;24547:20;24543:1;24532:9;24528:17;24521:47;24585:131;24711:4;24585:131;:::i;:::-;24577:139;;24304:419;;;:::o;24729:180::-;24777:77;24774:1;24767:88;24874:4;24871:1;24864:15;24898:4;24895:1;24888:15;24915:320;24959:6;24996:1;24990:4;24986:12;24976:22;;25043:1;25037:4;25033:12;25064:18;25054:81;;25120:4;25112:6;25108:17;25098:27;;25054:81;25182:2;25174:6;25171:14;25151:18;25148:38;25145:84;;25201:18;;:::i;:::-;25145:84;24966:269;24915:320;;;:::o;25241:233::-;25381:34;25377:1;25369:6;25365:14;25358:58;25450:16;25445:2;25437:6;25433:15;25426:41;25241:233;:::o;25480:366::-;25622:3;25643:67;25707:2;25702:3;25643:67;:::i;:::-;25636:74;;25719:93;25808:3;25719:93;:::i;:::-;25837:2;25832:3;25828:12;25821:19;;25480:366;;;:::o;25852:419::-;26018:4;26056:2;26045:9;26041:18;26033:26;;26105:9;26099:4;26095:20;26091:1;26080:9;26076:17;26069:47;26133:131;26259:4;26133:131;:::i;:::-;26125:139;;25852:419;;;:::o;26277:228::-;26417:34;26413:1;26405:6;26401:14;26394:58;26486:11;26481:2;26473:6;26469:15;26462:36;26277:228;:::o;26511:366::-;26653:3;26674:67;26738:2;26733:3;26674:67;:::i;:::-;26667:74;;26750:93;26839:3;26750:93;:::i;:::-;26868:2;26863:3;26859:12;26852:19;;26511:366;;;:::o;26883:419::-;27049:4;27087:2;27076:9;27072:18;27064:26;;27136:9;27130:4;27126:20;27122:1;27111:9;27107:17;27100:47;27164:131;27290:4;27164:131;:::i;:::-;27156:139;;26883:419;;;:::o;27308:180::-;27356:77;27353:1;27346:88;27453:4;27450:1;27443:15;27477:4;27474:1;27467:15;27494:180;27542:77;27539:1;27532:88;27639:4;27636:1;27629:15;27663:4;27660:1;27653:15;27680:233;27719:3;27742:24;27760:5;27742:24;:::i;:::-;27733:33;;27788:66;27781:5;27778:77;27775:103;;27858:18;;:::i;:::-;27775:103;27905:1;27898:5;27894:13;27887:20;;27680:233;;;:::o;27919:141::-;27968:4;27991:3;27983:11;;28014:3;28011:1;28004:14;28048:4;28045:1;28035:18;28027:26;;27919:141;;;:::o;28066:93::-;28103:6;28150:2;28145;28138:5;28134:14;28130:23;28120:33;;28066:93;;;:::o;28165:107::-;28209:8;28259:5;28253:4;28249:16;28228:37;;28165:107;;;;:::o;28278:393::-;28347:6;28397:1;28385:10;28381:18;28420:97;28450:66;28439:9;28420:97;:::i;:::-;28538:39;28568:8;28557:9;28538:39;:::i;:::-;28526:51;;28610:4;28606:9;28599:5;28595:21;28586:30;;28659:4;28649:8;28645:19;28638:5;28635:30;28625:40;;28354:317;;28278:393;;;;;:::o;28677:60::-;28705:3;28726:5;28719:12;;28677:60;;;:::o;28743:142::-;28793:9;28826:53;28844:34;28853:24;28871:5;28853:24;:::i;:::-;28844:34;:::i;:::-;28826:53;:::i;:::-;28813:66;;28743:142;;;:::o;28891:75::-;28934:3;28955:5;28948:12;;28891:75;;;:::o;28972:269::-;29082:39;29113:7;29082:39;:::i;:::-;29143:91;29192:41;29216:16;29192:41;:::i;:::-;29184:6;29177:4;29171:11;29143:91;:::i;:::-;29137:4;29130:105;29048:193;28972:269;;;:::o;29247:73::-;29292:3;29247:73;:::o;29326:189::-;29403:32;;:::i;:::-;29444:65;29502:6;29494;29488:4;29444:65;:::i;:::-;29379:136;29326:189;;:::o;29521:186::-;29581:120;29598:3;29591:5;29588:14;29581:120;;;29652:39;29689:1;29682:5;29652:39;:::i;:::-;29625:1;29618:5;29614:13;29605:22;;29581:120;;;29521:186;;:::o;29713:543::-;29814:2;29809:3;29806:11;29803:446;;;29848:38;29880:5;29848:38;:::i;:::-;29932:29;29950:10;29932:29;:::i;:::-;29922:8;29918:44;30115:2;30103:10;30100:18;30097:49;;;30136:8;30121:23;;30097:49;30159:80;30215:22;30233:3;30215:22;:::i;:::-;30205:8;30201:37;30188:11;30159:80;:::i;:::-;29818:431;;29803:446;29713:543;;;:::o;30262:117::-;30316:8;30366:5;30360:4;30356:16;30335:37;;30262:117;;;;:::o;30385:169::-;30429:6;30462:51;30510:1;30506:6;30498:5;30495:1;30491:13;30462:51;:::i;:::-;30458:56;30543:4;30537;30533:15;30523:25;;30436:118;30385:169;;;;:::o;30559:295::-;30635:4;30781:29;30806:3;30800:4;30781:29;:::i;:::-;30773:37;;30843:3;30840:1;30836:11;30830:4;30827:21;30819:29;;30559:295;;;;:::o;30859:1395::-;30976:37;31009:3;30976:37;:::i;:::-;31078:18;31070:6;31067:30;31064:56;;;31100:18;;:::i;:::-;31064:56;31144:38;31176:4;31170:11;31144:38;:::i;:::-;31229:67;31289:6;31281;31275:4;31229:67;:::i;:::-;31323:1;31347:4;31334:17;;31379:2;31371:6;31368:14;31396:1;31391:618;;;;32053:1;32070:6;32067:77;;;32119:9;32114:3;32110:19;32104:26;32095:35;;32067:77;32170:67;32230:6;32223:5;32170:67;:::i;:::-;32164:4;32157:81;32026:222;31361:887;;31391:618;31443:4;31439:9;31431:6;31427:22;31477:37;31509:4;31477:37;:::i;:::-;31536:1;31550:208;31564:7;31561:1;31558:14;31550:208;;;31643:9;31638:3;31634:19;31628:26;31620:6;31613:42;31694:1;31686:6;31682:14;31672:24;;31741:2;31730:9;31726:18;31713:31;;31587:4;31584:1;31580:12;31575:17;;31550:208;;;31786:6;31777:7;31774:19;31771:179;;;31844:9;31839:3;31835:19;31829:26;31887:48;31929:4;31921:6;31917:17;31906:9;31887:48;:::i;:::-;31879:6;31872:64;31794:156;31771:179;31996:1;31992;31984:6;31980:14;31976:22;31970:4;31963:36;31398:611;;;31361:887;;30951:1303;;;30859:1395;;:::o;32260:225::-;32400:34;32396:1;32388:6;32384:14;32377:58;32469:8;32464:2;32456:6;32452:15;32445:33;32260:225;:::o;32491:366::-;32633:3;32654:67;32718:2;32713:3;32654:67;:::i;:::-;32647:74;;32730:93;32819:3;32730:93;:::i;:::-;32848:2;32843:3;32839:12;32832:19;;32491:366;;;:::o;32863:419::-;33029:4;33067:2;33056:9;33052:18;33044:26;;33116:9;33110:4;33106:20;33102:1;33091:9;33087:17;33080:47;33144:131;33270:4;33144:131;:::i;:::-;33136:139;;32863:419;;;:::o;33288:191::-;33328:3;33347:20;33365:1;33347:20;:::i;:::-;33342:25;;33381:20;33399:1;33381:20;:::i;:::-;33376:25;;33424:1;33421;33417:9;33410:16;;33445:3;33442:1;33439:10;33436:36;;;33452:18;;:::i;:::-;33436:36;33288:191;;;;:::o;33485:227::-;33625:34;33621:1;33613:6;33609:14;33602:58;33694:10;33689:2;33681:6;33677:15;33670:35;33485:227;:::o;33718:366::-;33860:3;33881:67;33945:2;33940:3;33881:67;:::i;:::-;33874:74;;33957:93;34046:3;33957:93;:::i;:::-;34075:2;34070:3;34066:12;34059:19;;33718:366;;;:::o;34090:419::-;34256:4;34294:2;34283:9;34279:18;34271:26;;34343:9;34337:4;34333:20;34329:1;34318:9;34314:17;34307:47;34371:131;34497:4;34371:131;:::i;:::-;34363:139;;34090:419;;;:::o;34515:148::-;34617:11;34654:3;34639:18;;34515:148;;;;:::o;34693:874::-;34796:3;34833:5;34827:12;34862:36;34888:9;34862:36;:::i;:::-;34914:89;34996:6;34991:3;34914:89;:::i;:::-;34907:96;;35034:1;35023:9;35019:17;35050:1;35045:166;;;;35225:1;35220:341;;;;35012:549;;35045:166;35129:4;35125:9;35114;35110:25;35105:3;35098:38;35191:6;35184:14;35177:22;35169:6;35165:35;35160:3;35156:45;35149:52;;35045:166;;35220:341;35287:38;35319:5;35287:38;:::i;:::-;35347:1;35361:154;35375:6;35372:1;35369:13;35361:154;;;35449:7;35443:14;35439:1;35434:3;35430:11;35423:35;35499:1;35490:7;35486:15;35475:26;;35397:4;35394:1;35390:12;35385:17;;35361:154;;;35544:6;35539:3;35535:16;35528:23;;35227:334;;35012:549;;34800:767;;34693:874;;;;:::o;35573:390::-;35679:3;35707:39;35740:5;35707:39;:::i;:::-;35762:89;35844:6;35839:3;35762:89;:::i;:::-;35755:96;;35860:65;35918:6;35913:3;35906:4;35899:5;35895:16;35860:65;:::i;:::-;35950:6;35945:3;35941:16;35934:23;;35683:280;35573:390;;;;:::o;35969:429::-;36146:3;36168:92;36256:3;36247:6;36168:92;:::i;:::-;36161:99;;36277:95;36368:3;36359:6;36277:95;:::i;:::-;36270:102;;36389:3;36382:10;;35969:429;;;;;:::o;36404:182::-;36544:34;36540:1;36532:6;36528:14;36521:58;36404:182;:::o;36592:366::-;36734:3;36755:67;36819:2;36814:3;36755:67;:::i;:::-;36748:74;;36831:93;36920:3;36831:93;:::i;:::-;36949:2;36944:3;36940:12;36933:19;;36592:366;;;:::o;36964:419::-;37130:4;37168:2;37157:9;37153:18;37145:26;;37217:9;37211:4;37207:20;37203:1;37192:9;37188:17;37181:47;37245:131;37371:4;37245:131;:::i;:::-;37237:139;;36964:419;;;:::o;37389:220::-;37529:34;37525:1;37517:6;37513:14;37506:58;37598:3;37593:2;37585:6;37581:15;37574:28;37389:220;:::o;37615:366::-;37757:3;37778:67;37842:2;37837:3;37778:67;:::i;:::-;37771:74;;37854:93;37943:3;37854:93;:::i;:::-;37972:2;37967:3;37963:12;37956:19;;37615:366;;;:::o;37987:419::-;38153:4;38191:2;38180:9;38176:18;38168:26;;38240:9;38234:4;38230:20;38226:1;38215:9;38211:17;38204:47;38268:131;38394:4;38268:131;:::i;:::-;38260:139;;37987:419;;;:::o;38412:227::-;38552:34;38548:1;38540:6;38536:14;38529:58;38621:10;38616:2;38608:6;38604:15;38597:35;38412:227;:::o;38645:366::-;38787:3;38808:67;38872:2;38867:3;38808:67;:::i;:::-;38801:74;;38884:93;38973:3;38884:93;:::i;:::-;39002:2;38997:3;38993:12;38986:19;;38645:366;;;:::o;39017:419::-;39183:4;39221:2;39210:9;39206:18;39198:26;;39270:9;39264:4;39260:20;39256:1;39245:9;39241:17;39234:47;39298:131;39424:4;39298:131;:::i;:::-;39290:139;;39017:419;;;:::o;39442:634::-;39663:4;39701:2;39690:9;39686:18;39678:26;;39750:9;39744:4;39740:20;39736:1;39725:9;39721:17;39714:47;39778:108;39881:4;39872:6;39778:108;:::i;:::-;39770:116;;39933:9;39927:4;39923:20;39918:2;39907:9;39903:18;39896:48;39961:108;40064:4;40055:6;39961:108;:::i;:::-;39953:116;;39442:634;;;;;:::o;40082:224::-;40222:34;40218:1;40210:6;40206:14;40199:58;40291:7;40286:2;40278:6;40274:15;40267:32;40082:224;:::o;40312:366::-;40454:3;40475:67;40539:2;40534:3;40475:67;:::i;:::-;40468:74;;40551:93;40640:3;40551:93;:::i;:::-;40669:2;40664:3;40660:12;40653:19;;40312:366;;;:::o;40684:419::-;40850:4;40888:2;40877:9;40873:18;40865:26;;40937:9;40931:4;40927:20;40923:1;40912:9;40908:17;40901:47;40965:131;41091:4;40965:131;:::i;:::-;40957:139;;40684:419;;;:::o;41109:229::-;41249:34;41245:1;41237:6;41233:14;41226:58;41318:12;41313:2;41305:6;41301:15;41294:37;41109:229;:::o;41344:366::-;41486:3;41507:67;41571:2;41566:3;41507:67;:::i;:::-;41500:74;;41583:93;41672:3;41583:93;:::i;:::-;41701:2;41696:3;41692:12;41685:19;;41344:366;;;:::o;41716:419::-;41882:4;41920:2;41909:9;41905:18;41897:26;;41969:9;41963:4;41959:20;41955:1;41944:9;41940:17;41933:47;41997:131;42123:4;41997:131;:::i;:::-;41989:139;;41716:419;;;:::o;42141:222::-;42281:34;42277:1;42269:6;42265:14;42258:58;42350:5;42345:2;42337:6;42333:15;42326:30;42141:222;:::o;42369:366::-;42511:3;42532:67;42596:2;42591:3;42532:67;:::i;:::-;42525:74;;42608:93;42697:3;42608:93;:::i;:::-;42726:2;42721:3;42717:12;42710:19;;42369:366;;;:::o;42741:419::-;42907:4;42945:2;42934:9;42930:18;42922:26;;42994:9;42988:4;42984:20;42980:1;42969:9;42965:17;42958:47;43022:131;43148:4;43022:131;:::i;:::-;43014:139;;42741:419;;;:::o;43166:223::-;43306:34;43302:1;43294:6;43290:14;43283:58;43375:6;43370:2;43362:6;43358:15;43351:31;43166:223;:::o;43395:366::-;43537:3;43558:67;43622:2;43617:3;43558:67;:::i;:::-;43551:74;;43634:93;43723:3;43634:93;:::i;:::-;43752:2;43747:3;43743:12;43736:19;;43395:366;;;:::o;43767:419::-;43933:4;43971:2;43960:9;43956:18;43948:26;;44020:9;44014:4;44010:20;44006:1;43995:9;43991:17;43984:47;44048:131;44174:4;44048:131;:::i;:::-;44040:139;;43767:419;;;:::o;44192:332::-;44313:4;44351:2;44340:9;44336:18;44328:26;;44364:71;44432:1;44421:9;44417:17;44408:6;44364:71;:::i;:::-;44445:72;44513:2;44502:9;44498:18;44489:6;44445:72;:::i;:::-;44192:332;;;;;:::o;44530:228::-;44670:34;44666:1;44658:6;44654:14;44647:58;44739:11;44734:2;44726:6;44722:15;44715:36;44530:228;:::o;44764:366::-;44906:3;44927:67;44991:2;44986:3;44927:67;:::i;:::-;44920:74;;45003:93;45092:3;45003:93;:::i;:::-;45121:2;45116:3;45112:12;45105:19;;44764:366;;;:::o;45136:419::-;45302:4;45340:2;45329:9;45325:18;45317:26;;45389:9;45383:4;45379:20;45375:1;45364:9;45360:17;45353:47;45417:131;45543:4;45417:131;:::i;:::-;45409:139;;45136:419;;;:::o;45561:98::-;45612:6;45646:5;45640:12;45630:22;;45561:98;;;:::o;45665:168::-;45748:11;45782:6;45777:3;45770:19;45822:4;45817:3;45813:14;45798:29;;45665:168;;;;:::o;45839:373::-;45925:3;45953:38;45985:5;45953:38;:::i;:::-;46007:70;46070:6;46065:3;46007:70;:::i;:::-;46000:77;;46086:65;46144:6;46139:3;46132:4;46125:5;46121:16;46086:65;:::i;:::-;46176:29;46198:6;46176:29;:::i;:::-;46171:3;46167:39;46160:46;;45929:283;45839:373;;;;:::o;46218:1053::-;46541:4;46579:3;46568:9;46564:19;46556:27;;46593:71;46661:1;46650:9;46646:17;46637:6;46593:71;:::i;:::-;46674:72;46742:2;46731:9;46727:18;46718:6;46674:72;:::i;:::-;46793:9;46787:4;46783:20;46778:2;46767:9;46763:18;46756:48;46821:108;46924:4;46915:6;46821:108;:::i;:::-;46813:116;;46976:9;46970:4;46966:20;46961:2;46950:9;46946:18;46939:48;47004:108;47107:4;47098:6;47004:108;:::i;:::-;46996:116;;47160:9;47154:4;47150:20;47144:3;47133:9;47129:19;47122:49;47188:76;47259:4;47250:6;47188:76;:::i;:::-;47180:84;;46218:1053;;;;;;;;:::o;47277:141::-;47333:5;47364:6;47358:13;47349:22;;47380:32;47406:5;47380:32;:::i;:::-;47277:141;;;;:::o;47424:349::-;47493:6;47542:2;47530:9;47521:7;47517:23;47513:32;47510:119;;;47548:79;;:::i;:::-;47510:119;47668:1;47693:63;47748:7;47739:6;47728:9;47724:22;47693:63;:::i;:::-;47683:73;;47639:127;47424:349;;;;:::o;47779:106::-;47823:8;47872:5;47867:3;47863:15;47842:36;;47779:106;;;:::o;47891:183::-;47926:3;47964:1;47946:16;47943:23;47940:128;;;48002:1;47999;47996;47981:23;48024:34;48055:1;48049:8;48024:34;:::i;:::-;48017:41;;47940:128;47891:183;:::o;48080:711::-;48119:3;48157:4;48139:16;48136:26;48165:5;48133:39;48194:20;;:::i;:::-;48269:1;48251:16;48247:24;48244:1;48238:4;48223:49;48302:4;48296:11;48401:16;48394:4;48386:6;48382:17;48379:39;48346:18;48338:6;48335:30;48319:113;48316:146;;;48447:5;;;;48316:146;48493:6;48487:4;48483:17;48529:3;48523:10;48556:18;48548:6;48545:30;48542:43;;;48578:5;;;;;;48542:43;48626:6;48619:4;48614:3;48610:14;48606:27;48685:1;48667:16;48663:24;48657:4;48653:35;48648:3;48645:44;48642:57;;;48692:5;;;;;;;48642:57;48709;48757:6;48751:4;48747:17;48739:6;48735:30;48729:4;48709:57;:::i;:::-;48782:3;48775:10;;48123:668;;;;;48080:711;;:::o;48797:239::-;48937:34;48933:1;48925:6;48921:14;48914:58;49006:22;49001:2;48993:6;48989:15;48982:47;48797:239;:::o;49042:366::-;49184:3;49205:67;49269:2;49264:3;49205:67;:::i;:::-;49198:74;;49281:93;49370:3;49281:93;:::i;:::-;49399:2;49394:3;49390:12;49383:19;;49042:366;;;:::o;49414:419::-;49580:4;49618:2;49607:9;49603:18;49595:26;;49667:9;49661:4;49657:20;49653:1;49642:9;49638:17;49631:47;49695:131;49821:4;49695:131;:::i;:::-;49687:139;;49414:419;;;:::o;49839:227::-;49979:34;49975:1;49967:6;49963:14;49956:58;50048:10;50043:2;50035:6;50031:15;50024:35;49839:227;:::o;50072:366::-;50214:3;50235:67;50299:2;50294:3;50235:67;:::i;:::-;50228:74;;50311:93;50400:3;50311:93;:::i;:::-;50429:2;50424:3;50420:12;50413:19;;50072:366;;;:::o;50444:419::-;50610:4;50648:2;50637:9;50633:18;50625:26;;50697:9;50691:4;50687:20;50683:1;50672:9;50668:17;50661:47;50725:131;50851:4;50725:131;:::i;:::-;50717:139;;50444:419;;;:::o;50869:751::-;51092:4;51130:3;51119:9;51115:19;51107:27;;51144:71;51212:1;51201:9;51197:17;51188:6;51144:71;:::i;:::-;51225:72;51293:2;51282:9;51278:18;51269:6;51225:72;:::i;:::-;51307;51375:2;51364:9;51360:18;51351:6;51307:72;:::i;:::-;51389;51457:2;51446:9;51442:18;51433:6;51389:72;:::i;:::-;51509:9;51503:4;51499:20;51493:3;51482:9;51478:19;51471:49;51537:76;51608:4;51599:6;51537:76;:::i;:::-;51529:84;;50869:751;;;;;;;;:::o

Swarm Source

ipfs://ffe6cad28a2ce9438695c3e66b13a5b5f468d028b7219553081b5111a5a2fda2
Loading...
Loading
Loading...
Loading
[ 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.