ETH Price: $3,467.14 (+2.34%)
Gas: 10 Gwei

Token

 

Overview

Max Total Supply

0

Holders

573

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
technicalroom.eth
0xb6ea791ee66c6813798743a5e5f11aff170a1eda
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:
EtherjumpBuilderItems

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: @openzeppelin/[email protected]/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        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. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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);

        _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);

        _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();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        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);
    }

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/Contract.sol


pragma solidity ^0.8.0;





contract EtherjumpBuilderItems is ERC1155, Ownable{

    struct Item {
        uint256 cost;
        uint256 supply;
        uint256 minted;
        bytes32 merkleRoot;

        bool exists;
        bool mintable;
        bool whitelist;
    }

    mapping (uint256 => Item) public items;

    string metadataURI;
    string _contractURI;

    constructor() ERC1155("https://api.etherjump.game/builderItemsMetadata/") { // No minting on deployoment
        metadataURI = "https://api.etherjump.game/builderItemsMetadata/";
        _contractURI = "https://api.etherjump.game/builderItemsInfo";
    }

    // Getters
    function getItemInfoFromID(uint256 id) external view returns (Item memory) {
        return items[id];
    }
    function getMetadataURI() external view returns (string memory) {
        return metadataURI;
    }
    function getContractURI() external view returns (string memory) {
        return _contractURI;
    }


    // Minting
    function publicMint(uint256 id, uint256 amount) external payable{
        require(!items[id].whitelist, "Token is whitelisted mint");
        require(items[id].mintable, "Item is not currently mintable");
        require(items[id].exists, "Token doesn't exist");
        require(msg.value >= (amount * items[id].cost), "Insufficient Funds");
        require(items[id].minted + amount <= items[id].supply, "Not enough supply");
        require (msg.sender == tx.origin, ""); // Not mintable through other contracts

        items[id].minted = items[id].minted + amount;


        _mint(msg.sender, id, amount, "");
    }

    function whitelistMint(uint256 id, uint256 amount, bytes32[] calldata proof) external payable{
        require(items[id].whitelist, "Use public mint for this token");
        require(items[id].mintable, "Item is not currently mintable");
        require(MerkleProof.verify(proof, items[id].merkleRoot, keccak256(abi.encodePacked(msg.sender))), "Invalid proof");
        require(items[id].exists, "Token doesn't exist");
        require(msg.value >= (amount * items[id].cost), "Insufficient Funds");
        require(items[id].minted + amount <= items[id].supply, "Not enough supply");
        require (msg.sender == tx.origin, ""); // Not mintable through other contracts

        items[id].minted = items[id].minted + amount;

        _mint(msg.sender, id, amount, "");
    }

    // Airdrop
    function doAirdrop(address[] memory _recipients, uint256[] memory _amountToDrop, uint256 id) public onlyOwner{
        require (_recipients.length == _amountToDrop.length, "Airdrop instructions are not equal");
        for (uint i = 0; i < _recipients.length; i++){
            safeTransferFrom(msg.sender, _recipients[i], id, _amountToDrop[i], "");
        }
    }

    // Burn method
    // For Emergency use / Contract migration
    function burnTokenInAddress(address wallet, uint256 tokenID, uint256 amount) public onlyOwner {
        _burn(wallet, tokenID, amount);
    }
    function massBurnTokensInAddress(address wallet, uint256[] memory tokenIDs, uint256[] memory amounts) public onlyOwner{
        _burnBatch(wallet, tokenIDs, amounts);
    }

    
    //*********
    // Admin
    //*********
    // Team Mint
    function mintTeam(uint256 id, uint256 amount) external onlyOwner {
        require(items[id].exists, "Token doesn't exist");

        items[id].minted = items[id].minted + amount;
        _mint(msg.sender, id, amount, "");
    }

    // Setters
    function setMetadataURI(string memory uri) public onlyOwner {
        metadataURI = uri;
    }
    function setContractURI(string memory uri) public onlyOwner {
        _contractURI = uri;
    }

    // Token modifiers
    function addToken(uint256 id, uint256 cost, uint256 supply, bool mintable) public onlyOwner{
        items[id] = Item(cost, supply, 0, '', true, mintable, false);
    }

    function addWhitelistedToken(uint256 id, uint256 cost, uint256 supply, bool mintable, bytes32 merkleRoot) public onlyOwner{
        items[id] = Item(cost, supply, 0, merkleRoot, true, mintable, true);
 
    }

    function removeToken(uint256 id) public onlyOwner{
        items[id].mintable = false;
        items[id].exists = false;
        items[id].whitelist = false;
    }

    function alterToken(uint256 id, uint256 cost, uint256 supply, bool mintable, bytes32 merkleRoot, bool whitelist) public onlyOwner{
        items[id].cost = cost;
        items[id].supply = supply;
        items[id].merkleRoot = merkleRoot;
        items[id].mintable = mintable;
        items[id].whitelist = false;
    }

    function setTokenWhitelist(uint256 id, bytes32 merkleRoot) public onlyOwner {
        items[id].merkleRoot = merkleRoot;
        items[id].whitelist = true;
    }
    function removeWhitelist(uint256 id) public onlyOwner {
        items[id].whitelist = false;
    }

    function setTokenSupply(uint256 id, uint256 supply) public onlyOwner {
        items[id].supply = supply;
    }
    function setTokenCost(uint256 id, uint256 cost) public onlyOwner {
        items[id].cost = cost;
    }
    function toggleMint(uint256 id) public onlyOwner{
        items[id].mintable = !items[id].mintable;
    }


    // Withdraw money!!!
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "");

        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success, "");
    }



    // Overrides
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return items[id].supply;
    }


    function uri(uint256 id)
    public
    view                
    override
    returns (string memory)
    {
        return
            bytes(metadataURI).length > 0
                ? string(abi.encodePacked(metadataURI, Strings.toString(id)))
                : metadataURI;
    }


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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"bool","name":"mintable","type":"bool"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"bool","name":"mintable","type":"bool"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"addWhitelistedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"bool","name":"mintable","type":"bool"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bool","name":"whitelist","type":"bool"}],"name":"alterToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokenInAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amountToDrop","type":"uint256[]"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"doAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getItemInfoFromID","outputs":[{"components":[{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"mintable","type":"bool"},{"internalType":"bool","name":"whitelist","type":"bool"}],"internalType":"struct EtherjumpBuilderItems.Item","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMetadataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"","type":"uint256"}],"name":"items","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"mintable","type":"bool"},{"internalType":"bool","name":"whitelist","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"massBurnTokensInAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","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":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setTokenCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setTokenSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setTokenWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","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":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405180606001604052806030815260200162006286603091396200003d81620000c860201b60201c565b506200005e62000052620000e460201b60201c565b620000ec60201b60201c565b6040518060600160405280603081526020016200628660309139600590805190602001906200008f929190620001b2565b506040518060600160405280602b8152602001620062b6602b913960069080519060200190620000c1929190620001b2565b50620002c7565b8060029080519060200190620000e0929190620001b2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c09062000262565b90600052602060002090601f016020900481019282620001e4576000855562000230565b82601f10620001ff57805160ff191683800117855562000230565b8280016001018555821562000230579182015b828111156200022f57825182559160200191906001019062000212565b5b5090506200023f919062000243565b5090565b5b808211156200025e57600081600090555060010162000244565b5090565b600060028204905060018216806200027b57607f821691505b6020821081141562000292576200029162000298565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615faf80620002d76000396000f3fe6080604052600436106102035760003560e01c80638da5cb5b11610118578063ca4b4a25116100a0578063eeda03ad1161006f578063eeda03ad14610746578063f209a66f1461076f578063f242432a14610798578063f2fde38b146107c1578063fd112338146107ea57610203565b8063ca4b4a251461068c578063e8a3d485146106b5578063e985e9c5146106e0578063eaaed45d1461071d57610203565b8063ae865ed7116100e7578063ae865ed71461059e578063b7fcca07146105c7578063bd85b039146105f0578063bfb231d21461062d578063c4be5b591461067057610203565b80638da5cb5b14610505578063938e3d7b1461053057806398ae99a814610559578063a22cb4651461057557610203565b806337929eb41161019b57806362118afa1161016a57806362118afa14610434578063715018a61461045d578063750521f51461047457806386a92af71461049d5780638788014c146104c857610203565b806337929eb41461038c5780633ccfd60b146103b75780634e1273f4146103ce578063602e75871461040b57610203565b8063168d07ef116101d7578063168d07ef146102e8578063278d17ad146103115780632eb2c2d61461033a57806336c5d7241461036357610203565b8062fdd58e1461020857806301ffc9a7146102455780630e89341c1461028257806313d22726146102bf575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190614257565b610813565b60405161023c919061522a565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906143ed565b6108dc565b6040516102799190614ed2565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190614490565b6109be565b6040516102b69190614eed565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e191906145b1565b610a99565b005b3480156102f457600080fd5b5061030f600480360381019061030a9190614362565b610bf9565b005b34801561031d57600080fd5b50610338600480360381019061033391906144fd565b610d2e565b005b34801561034657600080fd5b50610361600480360381019061035c9190614026565b610dc9565b005b34801561036f57600080fd5b5061038a60048036038101906103859190614490565b610e6a565b005b34801561039857600080fd5b506103a1610f76565b6040516103ae9190614eed565b60405180910390f35b3480156103c357600080fd5b506103cc611008565b005b3480156103da57600080fd5b506103f560048036038101906103f091906142ea565b61117c565b6040516104029190614e79565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190614490565b611295565b005b34801561044057600080fd5b5061045b60048036038101906104569190614618565b611366565b005b34801561046957600080fd5b506104726114c3565b005b34801561048057600080fd5b5061049b60048036038101906104969190614447565b61154b565b005b3480156104a957600080fd5b506104b26115e1565b6040516104bf9190614eed565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190614490565b611673565b6040516104fc919061520f565b60405180910390f35b34801561051157600080fd5b5061051a611719565b6040516105279190614d9c565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190614447565b611743565b005b610573600480360381019061056e91906144fd565b6117d9565b005b34801561058157600080fd5b5061059c60048036038101906105979190614217565b611aaa565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190614490565b611ac0565b005b3480156105d357600080fd5b506105ee60048036038101906105e991906144fd565b611b6e565b005b3480156105fc57600080fd5b5061061760048036038101906106129190614490565b611ca8565b604051610624919061522a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190614490565b611cc8565b604051610667979695949392919061526e565b60405180910390f35b61068a6004803603810190610685919061453d565b611d31565b005b34801561069857600080fd5b506106b360048036038101906106ae919061418c565b6120ca565b005b3480156106c157600080fd5b506106ca612156565b6040516106d79190614eed565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613fe6565b61217e565b6040516107149190614ed2565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190614693565b612212565b005b34801561075257600080fd5b5061076d600480360381019061076891906144fd565b612344565b005b34801561077b57600080fd5b50610796600480360381019061079191906144bd565b6123df565b005b3480156107a457600080fd5b506107bf60048036038101906107ba91906140f5565b6124a9565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613fb9565b61254a565b005b3480156107f657600080fd5b50610811600480360381019061080c9190614297565b612642565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90614f8f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b757506109b6826126ce565b5b9050919050565b60606000600580546109cf9061562d565b905011610a6657600580546109e39061562d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0f9061562d565b8015610a5c5780601f10610a3157610100808354040283529160200191610a5c565b820191906000526020600020905b815481529060010190602001808311610a3f57829003601f168201915b5050505050610a92565b6005610a7183612738565b604051602001610a82929190614d63565b6040516020818303038152906040525b9050919050565b610aa1612899565b73ffffffffffffffffffffffffffffffffffffffff16610abf611719565b73ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c906150ef565b60405180910390fd5b6040518060e001604052808481526020018381526020016000815260200160008019168152602001600115158152602001821515815260200160001515815250600460008681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff02191690831515021790555090505050505050565b610c01612899565b73ffffffffffffffffffffffffffffffffffffffff16610c1f611719565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c906150ef565b60405180910390fd5b8151835114610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb09061512f565b60405180910390fd5b60005b8351811015610d2857610d1533858381518110610cdc57610cdb6157bb565b5b602002602001015184868581518110610cf857610cf76157bb565b5b6020026020010151604051806020016040528060008152506124a9565b8080610d2090615690565b915050610cbc565b50505050565b610d36612899565b73ffffffffffffffffffffffffffffffffffffffff16610d54611719565b73ffffffffffffffffffffffffffffffffffffffff1614610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906150ef565b60405180910390fd5b8060046000848152602001908152602001600020600101819055505050565b610dd1612899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e175750610e1685610e11612899565b61217e565b5b610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9061508f565b60405180910390fd5b610e6385858585856128a1565b5050505050565b610e72612899565b73ffffffffffffffffffffffffffffffffffffffff16610e90611719565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906150ef565b60405180910390fd5b60006004600083815260200190815260200160002060040160016101000a81548160ff02191690831515021790555060006004600083815260200190815260200160002060040160006101000a81548160ff02191690831515021790555060006004600083815260200190815260200160002060040160026101000a81548160ff02191690831515021790555050565b606060068054610f859061562d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb19061562d565b8015610ffe5780601f10610fd357610100808354040283529160200191610ffe565b820191906000526020600020905b815481529060010190602001808311610fe157829003601f168201915b5050505050905090565b611010612899565b73ffffffffffffffffffffffffffffffffffffffff1661102e611719565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906150ef565b60405180910390fd5b6000479050600081116110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c39061514f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516110f290614d87565b60006040518083038185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b5050905080611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f9061514f565b60405180910390fd5b5050565b606081518351146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906151af565b60405180910390fd5b6000835167ffffffffffffffff8111156111df576111de6157ea565b5b60405190808252806020026020018201604052801561120d5781602001602082028036833780820191505090505b50905060005b845181101561128a5761125a858281518110611232576112316157bb565b5b602002602001015185838151811061124d5761124c6157bb565b5b6020026020010151610813565b82828151811061126d5761126c6157bb565b5b6020026020010181815250508061128390615690565b9050611213565b508091505092915050565b61129d612899565b73ffffffffffffffffffffffffffffffffffffffff166112bb611719565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611308906150ef565b60405180910390fd5b6004600082815260200190815260200160002060040160019054906101000a900460ff16156004600083815260200190815260200160002060040160016101000a81548160ff02191690831515021790555050565b61136e612899565b73ffffffffffffffffffffffffffffffffffffffff1661138c611719565b73ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906150ef565b60405180910390fd5b6040518060e0016040528085815260200184815260200160008152602001828152602001600115158152602001831515815260200160011515815250600460008781526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff0219169083151502179055509050505050505050565b6114cb612899565b73ffffffffffffffffffffffffffffffffffffffff166114e9611719565b73ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906150ef565b60405180910390fd5b6115496000612bb5565b565b611553612899565b73ffffffffffffffffffffffffffffffffffffffff16611571611719565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906150ef565b60405180910390fd5b80600590805190602001906115dd929190613be0565b5050565b6060600580546115f09061562d565b80601f016020809104026020016040519081016040528092919081815260200182805461161c9061562d565b80156116695780601f1061163e57610100808354040283529160200191611669565b820191906000526020600020905b81548152906001019060200180831161164c57829003601f168201915b5050505050905090565b61167b613c66565b600460008381526020019081526020016000206040518060e0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581526020016004820160029054906101000a900460ff1615151515815250509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61174b612899565b73ffffffffffffffffffffffffffffffffffffffff16611769611719565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b6906150ef565b60405180910390fd5b80600690805190602001906117d5929190613be0565b5050565b6004600083815260200190815260200160002060040160029054906101000a900460ff161561183d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118349061502f565b60405180910390fd5b6004600083815260200190815260200160002060040160019054906101000a900460ff166118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061504f565b60405180910390fd5b6004600083815260200190815260200160002060040160009054906101000a900460ff16611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614f2f565b60405180910390fd5b60046000838152602001908152602001600020600001548161192591906154df565b341015611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e9061500f565b60405180910390fd5b60046000838152602001908152602001600020600101548160046000858152602001908152602001600020600201546119a09190615458565b11156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614f6f565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061514f565b60405180910390fd5b806004600084815260200190815260200160002060020154611a719190615458565b6004600084815260200190815260200160002060020181905550611aa633838360405180602001604052806000815250612c7b565b5050565b611abc611ab5612899565b8383612e11565b5050565b611ac8612899565b73ffffffffffffffffffffffffffffffffffffffff16611ae6611719565b73ffffffffffffffffffffffffffffffffffffffff1614611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b33906150ef565b60405180910390fd5b60006004600083815260200190815260200160002060040160026101000a81548160ff02191690831515021790555050565b611b76612899565b73ffffffffffffffffffffffffffffffffffffffff16611b94611719565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be1906150ef565b60405180910390fd5b6004600083815260200190815260200160002060040160009054906101000a900460ff16611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614f2f565b60405180910390fd5b806004600084815260200190815260200160002060020154611c6f9190615458565b6004600084815260200190815260200160002060020181905550611ca433838360405180602001604052806000815250612c7b565b5050565b600060046000838152602001908152602001600020600101549050919050565b60046020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16908060040160029054906101000a900460ff16905087565b6004600085815260200190815260200160002060040160029054906101000a900460ff16611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b9061510f565b60405180910390fd5b6004600085815260200190815260200160002060040160019054906101000a900460ff16611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061504f565b60405180910390fd5b611e7f828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600460008781526020019081526020016000206003015433604051602001611e649190614d31565b60405160208183030381529060405280519060200120612f7e565b611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb59061516f565b60405180910390fd5b6004600085815260200190815260200160002060040160009054906101000a900460ff16611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614f2f565b60405180910390fd5b600460008581526020019081526020016000206000015483611f4391906154df565b341015611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061500f565b60405180910390fd5b6004600085815260200190815260200160002060010154836004600087815260200190815260200160002060020154611fbe9190615458565b1115611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614f6f565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120649061514f565b60405180910390fd5b82600460008681526020019081526020016000206002015461208f9190615458565b60046000868152602001908152602001600020600201819055506120c433858560405180602001604052806000815250612c7b565b50505050565b6120d2612899565b73ffffffffffffffffffffffffffffffffffffffff166120f0611719565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906150ef565b60405180910390fd5b612151838383612f95565b505050565b6060600660405160200161216a9190614d4c565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61221a612899565b73ffffffffffffffffffffffffffffffffffffffff16612238611719565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612285906150ef565b60405180910390fd5b846004600088815260200190815260200160002060000181905550836004600088815260200190815260200160002060010181905550816004600088815260200190815260200160002060030181905550826004600088815260200190815260200160002060040160016101000a81548160ff02191690831515021790555060006004600088815260200190815260200160002060040160026101000a81548160ff021916908315150217905550505050505050565b61234c612899565b73ffffffffffffffffffffffffffffffffffffffff1661236a611719565b73ffffffffffffffffffffffffffffffffffffffff16146123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b7906150ef565b60405180910390fd5b8060046000848152602001908152602001600020600001819055505050565b6123e7612899565b73ffffffffffffffffffffffffffffffffffffffff16612405611719565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906150ef565b60405180910390fd5b80600460008481526020019081526020016000206003018190555060016004600084815260200190815260200160002060040160026101000a81548160ff0219169083151502179055505050565b6124b1612899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806124f757506124f6856124f1612899565b61217e565b5b612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d90614fef565b60405180910390fd5b6125438585858585613246565b5050505050565b612552612899565b73ffffffffffffffffffffffffffffffffffffffff16612570611719565b73ffffffffffffffffffffffffffffffffffffffff16146125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd906150ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90614faf565b60405180910390fd5b61263f81612bb5565b50565b61264a612899565b73ffffffffffffffffffffffffffffffffffffffff16612668611719565b73ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b5906150ef565b60405180910390fd5b6126c98383836134c8565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415612780576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612894565b600082905060005b600082146127b257808061279b90615690565b915050600a826127ab91906154ae565b9150612788565b60008167ffffffffffffffff8111156127ce576127cd6157ea565b5b6040519080825280601f01601f1916602001820160405280156128005781602001600182028036833780820191505090505b5090505b6000851461288d576001826128199190615539565b9150600a8561282891906156fd565b60306128349190615458565b60f81b81838151811061284a576128496157bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561288691906154ae565b9450612804565b8093505050505b919050565b600033905090565b81518351146128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906151cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c9061506f565b60405180910390fd5b600061295f612899565b905061296f8187878787876136e5565b60005b8451811015612b205760008582815181106129905761298f6157bb565b5b6020026020010151905060008583815181106129af576129ae6157bb565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906150cf565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b059190615458565b9250508190555050505080612b1990615690565b9050612972565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612b97929190614e9b565b60405180910390a4612bad8187878787876136ed565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce2906151ef565b60405180910390fd5b6000612cf5612899565b9050612d1681600087612d07886138d4565b612d10886138d4565b876136e5565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d759190615458565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612df3929190615245565b60405180910390a4612e0a8160008787878761394e565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e779061518f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f719190614ed2565b60405180910390a3505050565b600082612f8b8584613b35565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc906150af565b60405180910390fd5b8051825114613049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613040906151cf565b60405180910390fd5b6000613053612899565b9050613073818560008686604051806020016040528060008152506136e5565b60005b83518110156131c0576000848281518110613094576130936157bb565b5b6020026020010151905060008483815181106130b3576130b26157bb565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b90614fcf565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806131b890615690565b915050613076565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051613238929190614e9b565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ad9061506f565b60405180910390fd5b60006132c0612899565b90506132e08187876132d1886138d4565b6132da886138d4565b876136e5565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015613377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336e906150cf565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461342c9190615458565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516134a9929190615245565b60405180910390a46134bf82888888888861394e565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352f906150af565b60405180910390fd5b6000613542612899565b905061357281856000613554876138d4565b61355d876138d4565b604051806020016040528060008152506136e5565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015613609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360090614fcf565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516136d6929190615245565b60405180910390a45050505050565b505050505050565b61370c8473ffffffffffffffffffffffffffffffffffffffff16613b8b565b156138cc578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613752959493929190614db7565b602060405180830381600087803b15801561376c57600080fd5b505af192505050801561379d57506040513d601f19601f8201168201806040525081019061379a919061441a565b60015b613843576137a9615819565b806308c379a0141561380657506137be615e70565b806137c95750613808565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fd9190614eed565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383a90614f0f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146138ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c190614f4f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156138f3576138f26157ea565b5b6040519080825280602002602001820160405280156139215781602001602082028036833780820191505090505b5090508281600081518110613939576139386157bb565b5b60200260200101818152505080915050919050565b61396d8473ffffffffffffffffffffffffffffffffffffffff16613b8b565b15613b2d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016139b3959493929190614e1f565b602060405180830381600087803b1580156139cd57600080fd5b505af19250505080156139fe57506040513d601f19601f820116820180604052508101906139fb919061441a565b60015b613aa457613a0a615819565b806308c379a01415613a675750613a1f615e70565b80613a2a5750613a69565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5e9190614eed565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9b90614f0f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2290614f4f565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015613b8057613b6b82868381518110613b5e57613b5d6157bb565b5b6020026020010151613b9e565b91508080613b7890615690565b915050613b3e565b508091505092915050565b600080823b905060008111915050919050565b6000818310613bb657613bb18284613bc9565b613bc1565b613bc08383613bc9565b5b905092915050565b600082600052816020526040600020905092915050565b828054613bec9061562d565b90600052602060002090601f016020900481019282613c0e5760008555613c55565b82601f10613c2757805160ff1916838001178555613c55565b82800160010185558215613c55579182015b82811115613c54578251825591602001919060010190613c39565b5b509050613c629190613cac565b5090565b6040518060e00160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016000151581526020016000151581525090565b5b80821115613cc5576000816000905550600101613cad565b5090565b6000613cdc613cd784615302565b6152dd565b90508083825260208201905082856020860282011115613cff57613cfe615845565b5b60005b85811015613d2f5781613d158882613e2d565b845260208401935060208301925050600181019050613d02565b5050509392505050565b6000613d4c613d478461532e565b6152dd565b90508083825260208201905082856020860282011115613d6f57613d6e615845565b5b60005b85811015613d9f5781613d858882613fa4565b845260208401935060208301925050600181019050613d72565b5050509392505050565b6000613dbc613db78461535a565b6152dd565b905082815260208101848484011115613dd857613dd761584a565b5b613de38482856155eb565b509392505050565b6000613dfe613df98461538b565b6152dd565b905082815260208101848484011115613e1a57613e1961584a565b5b613e258482856155eb565b509392505050565b600081359050613e3c81615f06565b92915050565b600082601f830112613e5757613e56615840565b5b8135613e67848260208601613cc9565b91505092915050565b60008083601f840112613e8657613e85615840565b5b8235905067ffffffffffffffff811115613ea357613ea261583b565b5b602083019150836020820283011115613ebf57613ebe615845565b5b9250929050565b600082601f830112613edb57613eda615840565b5b8135613eeb848260208601613d39565b91505092915050565b600081359050613f0381615f1d565b92915050565b600081359050613f1881615f34565b92915050565b600081359050613f2d81615f4b565b92915050565b600081519050613f4281615f4b565b92915050565b600082601f830112613f5d57613f5c615840565b5b8135613f6d848260208601613da9565b91505092915050565b600082601f830112613f8b57613f8a615840565b5b8135613f9b848260208601613deb565b91505092915050565b600081359050613fb381615f62565b92915050565b600060208284031215613fcf57613fce615854565b5b6000613fdd84828501613e2d565b91505092915050565b60008060408385031215613ffd57613ffc615854565b5b600061400b85828601613e2d565b925050602061401c85828601613e2d565b9150509250929050565b600080600080600060a0868803121561404257614041615854565b5b600061405088828901613e2d565b955050602061406188828901613e2d565b945050604086013567ffffffffffffffff8111156140825761408161584f565b5b61408e88828901613ec6565b935050606086013567ffffffffffffffff8111156140af576140ae61584f565b5b6140bb88828901613ec6565b925050608086013567ffffffffffffffff8111156140dc576140db61584f565b5b6140e888828901613f48565b9150509295509295909350565b600080600080600060a0868803121561411157614110615854565b5b600061411f88828901613e2d565b955050602061413088828901613e2d565b945050604061414188828901613fa4565b935050606061415288828901613fa4565b925050608086013567ffffffffffffffff8111156141735761417261584f565b5b61417f88828901613f48565b9150509295509295909350565b6000806000606084860312156141a5576141a4615854565b5b60006141b386828701613e2d565b935050602084013567ffffffffffffffff8111156141d4576141d361584f565b5b6141e086828701613ec6565b925050604084013567ffffffffffffffff8111156142015761420061584f565b5b61420d86828701613ec6565b9150509250925092565b6000806040838503121561422e5761422d615854565b5b600061423c85828601613e2d565b925050602061424d85828601613ef4565b9150509250929050565b6000806040838503121561426e5761426d615854565b5b600061427c85828601613e2d565b925050602061428d85828601613fa4565b9150509250929050565b6000806000606084860312156142b0576142af615854565b5b60006142be86828701613e2d565b93505060206142cf86828701613fa4565b92505060406142e086828701613fa4565b9150509250925092565b6000806040838503121561430157614300615854565b5b600083013567ffffffffffffffff81111561431f5761431e61584f565b5b61432b85828601613e42565b925050602083013567ffffffffffffffff81111561434c5761434b61584f565b5b61435885828601613ec6565b9150509250929050565b60008060006060848603121561437b5761437a615854565b5b600084013567ffffffffffffffff8111156143995761439861584f565b5b6143a586828701613e42565b935050602084013567ffffffffffffffff8111156143c6576143c561584f565b5b6143d286828701613ec6565b92505060406143e386828701613fa4565b9150509250925092565b60006020828403121561440357614402615854565b5b600061441184828501613f1e565b91505092915050565b6000602082840312156144305761442f615854565b5b600061443e84828501613f33565b91505092915050565b60006020828403121561445d5761445c615854565b5b600082013567ffffffffffffffff81111561447b5761447a61584f565b5b61448784828501613f76565b91505092915050565b6000602082840312156144a6576144a5615854565b5b60006144b484828501613fa4565b91505092915050565b600080604083850312156144d4576144d3615854565b5b60006144e285828601613fa4565b92505060206144f385828601613f09565b9150509250929050565b6000806040838503121561451457614513615854565b5b600061452285828601613fa4565b925050602061453385828601613fa4565b9150509250929050565b6000806000806060858703121561455757614556615854565b5b600061456587828801613fa4565b945050602061457687828801613fa4565b935050604085013567ffffffffffffffff8111156145975761459661584f565b5b6145a387828801613e70565b925092505092959194509250565b600080600080608085870312156145cb576145ca615854565b5b60006145d987828801613fa4565b94505060206145ea87828801613fa4565b93505060406145fb87828801613fa4565b925050606061460c87828801613ef4565b91505092959194509250565b600080600080600060a0868803121561463457614633615854565b5b600061464288828901613fa4565b955050602061465388828901613fa4565b945050604061466488828901613fa4565b935050606061467588828901613ef4565b925050608061468688828901613f09565b9150509295509295909350565b60008060008060008060c087890312156146b0576146af615854565b5b60006146be89828a01613fa4565b96505060206146cf89828a01613fa4565b95505060406146e089828a01613fa4565b94505060606146f189828a01613ef4565b935050608061470289828a01613f09565b92505060a061471389828a01613ef4565b9150509295509295509295565b600061472c8383614d13565b60208301905092915050565b6147418161556d565b82525050565b6147586147538261556d565b6156d9565b82525050565b6000614769826153e1565b614773818561540f565b935061477e836153bc565b8060005b838110156147af5781516147968882614720565b97506147a183615402565b925050600181019050614782565b5085935050505092915050565b6147c58161557f565b82525050565b6147d48161557f565b82525050565b6147e38161558b565b82525050565b6147f28161558b565b82525050565b6000614803826153ec565b61480d8185615420565b935061481d8185602086016155fa565b61482681615859565b840191505092915050565b600061483c826153f7565b614846818561543c565b93506148568185602086016155fa565b61485f81615859565b840191505092915050565b6000614875826153f7565b61487f818561544d565b935061488f8185602086016155fa565b80840191505092915050565b600081546148a88161562d565b6148b2818661544d565b945060018216600081146148cd57600181146148de57614911565b60ff19831686528186019350614911565b6148e7856153cc565b60005b83811015614909578154818901526001820191506020810190506148ea565b838801955050505b50505092915050565b600061492760348361543c565b915061493282615884565b604082019050919050565b600061494a60138361543c565b9150614955826158d3565b602082019050919050565b600061496d60288361543c565b9150614978826158fc565b604082019050919050565b600061499060118361543c565b915061499b8261594b565b602082019050919050565b60006149b3602b8361543c565b91506149be82615974565b604082019050919050565b60006149d660268361543c565b91506149e1826159c3565b604082019050919050565b60006149f960248361543c565b9150614a0482615a12565b604082019050919050565b6000614a1c60298361543c565b9150614a2782615a61565b604082019050919050565b6000614a3f60128361543c565b9150614a4a82615ab0565b602082019050919050565b6000614a6260198361543c565b9150614a6d82615ad9565b602082019050919050565b6000614a85601e8361543c565b9150614a9082615b02565b602082019050919050565b6000614aa860258361543c565b9150614ab382615b2b565b604082019050919050565b6000614acb60328361543c565b9150614ad682615b7a565b604082019050919050565b6000614aee60238361543c565b9150614af982615bc9565b604082019050919050565b6000614b11602a8361543c565b9150614b1c82615c18565b604082019050919050565b6000614b3460208361543c565b9150614b3f82615c67565b602082019050919050565b6000614b57601e8361543c565b9150614b6282615c90565b602082019050919050565b6000614b7a60228361543c565b9150614b8582615cb9565b604082019050919050565b6000614b9d600083615431565b9150614ba882615d08565b600082019050919050565b6000614bc060008361543c565b9150614bcb82615d08565b600082019050919050565b6000614be3600d8361543c565b9150614bee82615d0b565b602082019050919050565b6000614c0660298361543c565b9150614c1182615d34565b604082019050919050565b6000614c2960298361543c565b9150614c3482615d83565b604082019050919050565b6000614c4c60288361543c565b9150614c5782615dd2565b604082019050919050565b6000614c6f60218361543c565b9150614c7a82615e21565b604082019050919050565b60e082016000820151614c9b6000850182614d13565b506020820151614cae6020850182614d13565b506040820151614cc16040850182614d13565b506060820151614cd460608501826147da565b506080820151614ce760808501826147bc565b5060a0820151614cfa60a08501826147bc565b5060c0820151614d0d60c08501826147bc565b50505050565b614d1c816155e1565b82525050565b614d2b816155e1565b82525050565b6000614d3d8284614747565b60148201915081905092915050565b6000614d58828461489b565b915081905092915050565b6000614d6f828561489b565b9150614d7b828461486a565b91508190509392505050565b6000614d9282614b90565b9150819050919050565b6000602082019050614db16000830184614738565b92915050565b600060a082019050614dcc6000830188614738565b614dd96020830187614738565b8181036040830152614deb818661475e565b90508181036060830152614dff818561475e565b90508181036080830152614e1381846147f8565b90509695505050505050565b600060a082019050614e346000830188614738565b614e416020830187614738565b614e4e6040830186614d22565b614e5b6060830185614d22565b8181036080830152614e6d81846147f8565b90509695505050505050565b60006020820190508181036000830152614e93818461475e565b905092915050565b60006040820190508181036000830152614eb5818561475e565b90508181036020830152614ec9818461475e565b90509392505050565b6000602082019050614ee760008301846147cb565b92915050565b60006020820190508181036000830152614f078184614831565b905092915050565b60006020820190508181036000830152614f288161491a565b9050919050565b60006020820190508181036000830152614f488161493d565b9050919050565b60006020820190508181036000830152614f6881614960565b9050919050565b60006020820190508181036000830152614f8881614983565b9050919050565b60006020820190508181036000830152614fa8816149a6565b9050919050565b60006020820190508181036000830152614fc8816149c9565b9050919050565b60006020820190508181036000830152614fe8816149ec565b9050919050565b6000602082019050818103600083015261500881614a0f565b9050919050565b6000602082019050818103600083015261502881614a32565b9050919050565b6000602082019050818103600083015261504881614a55565b9050919050565b6000602082019050818103600083015261506881614a78565b9050919050565b6000602082019050818103600083015261508881614a9b565b9050919050565b600060208201905081810360008301526150a881614abe565b9050919050565b600060208201905081810360008301526150c881614ae1565b9050919050565b600060208201905081810360008301526150e881614b04565b9050919050565b6000602082019050818103600083015261510881614b27565b9050919050565b6000602082019050818103600083015261512881614b4a565b9050919050565b6000602082019050818103600083015261514881614b6d565b9050919050565b6000602082019050818103600083015261516881614bb3565b9050919050565b6000602082019050818103600083015261518881614bd6565b9050919050565b600060208201905081810360008301526151a881614bf9565b9050919050565b600060208201905081810360008301526151c881614c1c565b9050919050565b600060208201905081810360008301526151e881614c3f565b9050919050565b6000602082019050818103600083015261520881614c62565b9050919050565b600060e0820190506152246000830184614c85565b92915050565b600060208201905061523f6000830184614d22565b92915050565b600060408201905061525a6000830185614d22565b6152676020830184614d22565b9392505050565b600060e082019050615283600083018a614d22565b6152906020830189614d22565b61529d6040830188614d22565b6152aa60608301876147e9565b6152b760808301866147cb565b6152c460a08301856147cb565b6152d160c08301846147cb565b98975050505050505050565b60006152e76152f8565b90506152f3828261565f565b919050565b6000604051905090565b600067ffffffffffffffff82111561531d5761531c6157ea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615349576153486157ea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615375576153746157ea565b5b61537e82615859565b9050602081019050919050565b600067ffffffffffffffff8211156153a6576153a56157ea565b5b6153af82615859565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615463826155e1565b915061546e836155e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154a3576154a261572e565b5b828201905092915050565b60006154b9826155e1565b91506154c4836155e1565b9250826154d4576154d361575d565b5b828204905092915050565b60006154ea826155e1565b91506154f5836155e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561552e5761552d61572e565b5b828202905092915050565b6000615544826155e1565b915061554f836155e1565b9250828210156155625761556161572e565b5b828203905092915050565b6000615578826155c1565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156156185780820151818401526020810190506155fd565b83811115615627576000848401525b50505050565b6000600282049050600182168061564557607f821691505b602082108114156156595761565861578c565b5b50919050565b61566882615859565b810181811067ffffffffffffffff82111715615687576156866157ea565b5b80604052505050565b600061569b826155e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156ce576156cd61572e565b5b600182019050919050565b60006156e4826156eb565b9050919050565b60006156f68261586a565b9050919050565b6000615708826155e1565b9150615713836155e1565b9250826157235761572261575d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156158385760046000803e615835600051615877565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f546f6b656e2069732077686974656c6973746564206d696e7400000000000000600082015250565b7f4974656d206973206e6f742063757272656e746c79206d696e7461626c650000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f557365207075626c6963206d696e7420666f72207468697320746f6b656e0000600082015250565b7f41697264726f7020696e737472756374696f6e7320617265206e6f742065717560008201527f616c000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615e8057615f03565b615e886152f8565b60043d036004823e80513d602482011167ffffffffffffffff82111715615eb0575050615f03565b808201805167ffffffffffffffff811115615ece5750505050615f03565b80602083010160043d038501811115615eeb575050505050615f03565b615efa8260200185018661565f565b82955050505050505b90565b615f0f8161556d565b8114615f1a57600080fd5b50565b615f268161557f565b8114615f3157600080fd5b50565b615f3d8161558b565b8114615f4857600080fd5b50565b615f5481615595565b8114615f5f57600080fd5b50565b615f6b816155e1565b8114615f7657600080fd5b5056fea2646970667358221220219c104c5aeb9c898bc82471b51574e5f1842d1e2dd8d57ca577b04476a6050464736f6c6343000807003368747470733a2f2f6170692e65746865726a756d702e67616d652f6275696c6465724974656d734d657461646174612f68747470733a2f2f6170692e65746865726a756d702e67616d652f6275696c6465724974656d73496e666f

Deployed Bytecode

0x6080604052600436106102035760003560e01c80638da5cb5b11610118578063ca4b4a25116100a0578063eeda03ad1161006f578063eeda03ad14610746578063f209a66f1461076f578063f242432a14610798578063f2fde38b146107c1578063fd112338146107ea57610203565b8063ca4b4a251461068c578063e8a3d485146106b5578063e985e9c5146106e0578063eaaed45d1461071d57610203565b8063ae865ed7116100e7578063ae865ed71461059e578063b7fcca07146105c7578063bd85b039146105f0578063bfb231d21461062d578063c4be5b591461067057610203565b80638da5cb5b14610505578063938e3d7b1461053057806398ae99a814610559578063a22cb4651461057557610203565b806337929eb41161019b57806362118afa1161016a57806362118afa14610434578063715018a61461045d578063750521f51461047457806386a92af71461049d5780638788014c146104c857610203565b806337929eb41461038c5780633ccfd60b146103b75780634e1273f4146103ce578063602e75871461040b57610203565b8063168d07ef116101d7578063168d07ef146102e8578063278d17ad146103115780632eb2c2d61461033a57806336c5d7241461036357610203565b8062fdd58e1461020857806301ffc9a7146102455780630e89341c1461028257806313d22726146102bf575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190614257565b610813565b60405161023c919061522a565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906143ed565b6108dc565b6040516102799190614ed2565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190614490565b6109be565b6040516102b69190614eed565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e191906145b1565b610a99565b005b3480156102f457600080fd5b5061030f600480360381019061030a9190614362565b610bf9565b005b34801561031d57600080fd5b50610338600480360381019061033391906144fd565b610d2e565b005b34801561034657600080fd5b50610361600480360381019061035c9190614026565b610dc9565b005b34801561036f57600080fd5b5061038a60048036038101906103859190614490565b610e6a565b005b34801561039857600080fd5b506103a1610f76565b6040516103ae9190614eed565b60405180910390f35b3480156103c357600080fd5b506103cc611008565b005b3480156103da57600080fd5b506103f560048036038101906103f091906142ea565b61117c565b6040516104029190614e79565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190614490565b611295565b005b34801561044057600080fd5b5061045b60048036038101906104569190614618565b611366565b005b34801561046957600080fd5b506104726114c3565b005b34801561048057600080fd5b5061049b60048036038101906104969190614447565b61154b565b005b3480156104a957600080fd5b506104b26115e1565b6040516104bf9190614eed565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190614490565b611673565b6040516104fc919061520f565b60405180910390f35b34801561051157600080fd5b5061051a611719565b6040516105279190614d9c565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190614447565b611743565b005b610573600480360381019061056e91906144fd565b6117d9565b005b34801561058157600080fd5b5061059c60048036038101906105979190614217565b611aaa565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190614490565b611ac0565b005b3480156105d357600080fd5b506105ee60048036038101906105e991906144fd565b611b6e565b005b3480156105fc57600080fd5b5061061760048036038101906106129190614490565b611ca8565b604051610624919061522a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190614490565b611cc8565b604051610667979695949392919061526e565b60405180910390f35b61068a6004803603810190610685919061453d565b611d31565b005b34801561069857600080fd5b506106b360048036038101906106ae919061418c565b6120ca565b005b3480156106c157600080fd5b506106ca612156565b6040516106d79190614eed565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613fe6565b61217e565b6040516107149190614ed2565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190614693565b612212565b005b34801561075257600080fd5b5061076d600480360381019061076891906144fd565b612344565b005b34801561077b57600080fd5b50610796600480360381019061079191906144bd565b6123df565b005b3480156107a457600080fd5b506107bf60048036038101906107ba91906140f5565b6124a9565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613fb9565b61254a565b005b3480156107f657600080fd5b50610811600480360381019061080c9190614297565b612642565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90614f8f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b757506109b6826126ce565b5b9050919050565b60606000600580546109cf9061562d565b905011610a6657600580546109e39061562d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0f9061562d565b8015610a5c5780601f10610a3157610100808354040283529160200191610a5c565b820191906000526020600020905b815481529060010190602001808311610a3f57829003601f168201915b5050505050610a92565b6005610a7183612738565b604051602001610a82929190614d63565b6040516020818303038152906040525b9050919050565b610aa1612899565b73ffffffffffffffffffffffffffffffffffffffff16610abf611719565b73ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c906150ef565b60405180910390fd5b6040518060e001604052808481526020018381526020016000815260200160008019168152602001600115158152602001821515815260200160001515815250600460008681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff02191690831515021790555090505050505050565b610c01612899565b73ffffffffffffffffffffffffffffffffffffffff16610c1f611719565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c906150ef565b60405180910390fd5b8151835114610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb09061512f565b60405180910390fd5b60005b8351811015610d2857610d1533858381518110610cdc57610cdb6157bb565b5b602002602001015184868581518110610cf857610cf76157bb565b5b6020026020010151604051806020016040528060008152506124a9565b8080610d2090615690565b915050610cbc565b50505050565b610d36612899565b73ffffffffffffffffffffffffffffffffffffffff16610d54611719565b73ffffffffffffffffffffffffffffffffffffffff1614610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906150ef565b60405180910390fd5b8060046000848152602001908152602001600020600101819055505050565b610dd1612899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e175750610e1685610e11612899565b61217e565b5b610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9061508f565b60405180910390fd5b610e6385858585856128a1565b5050505050565b610e72612899565b73ffffffffffffffffffffffffffffffffffffffff16610e90611719565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906150ef565b60405180910390fd5b60006004600083815260200190815260200160002060040160016101000a81548160ff02191690831515021790555060006004600083815260200190815260200160002060040160006101000a81548160ff02191690831515021790555060006004600083815260200190815260200160002060040160026101000a81548160ff02191690831515021790555050565b606060068054610f859061562d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb19061562d565b8015610ffe5780601f10610fd357610100808354040283529160200191610ffe565b820191906000526020600020905b815481529060010190602001808311610fe157829003601f168201915b5050505050905090565b611010612899565b73ffffffffffffffffffffffffffffffffffffffff1661102e611719565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906150ef565b60405180910390fd5b6000479050600081116110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c39061514f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516110f290614d87565b60006040518083038185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b5050905080611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f9061514f565b60405180910390fd5b5050565b606081518351146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906151af565b60405180910390fd5b6000835167ffffffffffffffff8111156111df576111de6157ea565b5b60405190808252806020026020018201604052801561120d5781602001602082028036833780820191505090505b50905060005b845181101561128a5761125a858281518110611232576112316157bb565b5b602002602001015185838151811061124d5761124c6157bb565b5b6020026020010151610813565b82828151811061126d5761126c6157bb565b5b6020026020010181815250508061128390615690565b9050611213565b508091505092915050565b61129d612899565b73ffffffffffffffffffffffffffffffffffffffff166112bb611719565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611308906150ef565b60405180910390fd5b6004600082815260200190815260200160002060040160019054906101000a900460ff16156004600083815260200190815260200160002060040160016101000a81548160ff02191690831515021790555050565b61136e612899565b73ffffffffffffffffffffffffffffffffffffffff1661138c611719565b73ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906150ef565b60405180910390fd5b6040518060e0016040528085815260200184815260200160008152602001828152602001600115158152602001831515815260200160011515815250600460008781526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff0219169083151502179055509050505050505050565b6114cb612899565b73ffffffffffffffffffffffffffffffffffffffff166114e9611719565b73ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906150ef565b60405180910390fd5b6115496000612bb5565b565b611553612899565b73ffffffffffffffffffffffffffffffffffffffff16611571611719565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906150ef565b60405180910390fd5b80600590805190602001906115dd929190613be0565b5050565b6060600580546115f09061562d565b80601f016020809104026020016040519081016040528092919081815260200182805461161c9061562d565b80156116695780601f1061163e57610100808354040283529160200191611669565b820191906000526020600020905b81548152906001019060200180831161164c57829003601f168201915b5050505050905090565b61167b613c66565b600460008381526020019081526020016000206040518060e0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581526020016004820160029054906101000a900460ff1615151515815250509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61174b612899565b73ffffffffffffffffffffffffffffffffffffffff16611769611719565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b6906150ef565b60405180910390fd5b80600690805190602001906117d5929190613be0565b5050565b6004600083815260200190815260200160002060040160029054906101000a900460ff161561183d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118349061502f565b60405180910390fd5b6004600083815260200190815260200160002060040160019054906101000a900460ff166118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061504f565b60405180910390fd5b6004600083815260200190815260200160002060040160009054906101000a900460ff16611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614f2f565b60405180910390fd5b60046000838152602001908152602001600020600001548161192591906154df565b341015611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e9061500f565b60405180910390fd5b60046000838152602001908152602001600020600101548160046000858152602001908152602001600020600201546119a09190615458565b11156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614f6f565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061514f565b60405180910390fd5b806004600084815260200190815260200160002060020154611a719190615458565b6004600084815260200190815260200160002060020181905550611aa633838360405180602001604052806000815250612c7b565b5050565b611abc611ab5612899565b8383612e11565b5050565b611ac8612899565b73ffffffffffffffffffffffffffffffffffffffff16611ae6611719565b73ffffffffffffffffffffffffffffffffffffffff1614611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b33906150ef565b60405180910390fd5b60006004600083815260200190815260200160002060040160026101000a81548160ff02191690831515021790555050565b611b76612899565b73ffffffffffffffffffffffffffffffffffffffff16611b94611719565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be1906150ef565b60405180910390fd5b6004600083815260200190815260200160002060040160009054906101000a900460ff16611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614f2f565b60405180910390fd5b806004600084815260200190815260200160002060020154611c6f9190615458565b6004600084815260200190815260200160002060020181905550611ca433838360405180602001604052806000815250612c7b565b5050565b600060046000838152602001908152602001600020600101549050919050565b60046020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16908060040160029054906101000a900460ff16905087565b6004600085815260200190815260200160002060040160029054906101000a900460ff16611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b9061510f565b60405180910390fd5b6004600085815260200190815260200160002060040160019054906101000a900460ff16611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061504f565b60405180910390fd5b611e7f828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600460008781526020019081526020016000206003015433604051602001611e649190614d31565b60405160208183030381529060405280519060200120612f7e565b611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb59061516f565b60405180910390fd5b6004600085815260200190815260200160002060040160009054906101000a900460ff16611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614f2f565b60405180910390fd5b600460008581526020019081526020016000206000015483611f4391906154df565b341015611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061500f565b60405180910390fd5b6004600085815260200190815260200160002060010154836004600087815260200190815260200160002060020154611fbe9190615458565b1115611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614f6f565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120649061514f565b60405180910390fd5b82600460008681526020019081526020016000206002015461208f9190615458565b60046000868152602001908152602001600020600201819055506120c433858560405180602001604052806000815250612c7b565b50505050565b6120d2612899565b73ffffffffffffffffffffffffffffffffffffffff166120f0611719565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906150ef565b60405180910390fd5b612151838383612f95565b505050565b6060600660405160200161216a9190614d4c565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61221a612899565b73ffffffffffffffffffffffffffffffffffffffff16612238611719565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612285906150ef565b60405180910390fd5b846004600088815260200190815260200160002060000181905550836004600088815260200190815260200160002060010181905550816004600088815260200190815260200160002060030181905550826004600088815260200190815260200160002060040160016101000a81548160ff02191690831515021790555060006004600088815260200190815260200160002060040160026101000a81548160ff021916908315150217905550505050505050565b61234c612899565b73ffffffffffffffffffffffffffffffffffffffff1661236a611719565b73ffffffffffffffffffffffffffffffffffffffff16146123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b7906150ef565b60405180910390fd5b8060046000848152602001908152602001600020600001819055505050565b6123e7612899565b73ffffffffffffffffffffffffffffffffffffffff16612405611719565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906150ef565b60405180910390fd5b80600460008481526020019081526020016000206003018190555060016004600084815260200190815260200160002060040160026101000a81548160ff0219169083151502179055505050565b6124b1612899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806124f757506124f6856124f1612899565b61217e565b5b612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d90614fef565b60405180910390fd5b6125438585858585613246565b5050505050565b612552612899565b73ffffffffffffffffffffffffffffffffffffffff16612570611719565b73ffffffffffffffffffffffffffffffffffffffff16146125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd906150ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90614faf565b60405180910390fd5b61263f81612bb5565b50565b61264a612899565b73ffffffffffffffffffffffffffffffffffffffff16612668611719565b73ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b5906150ef565b60405180910390fd5b6126c98383836134c8565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415612780576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612894565b600082905060005b600082146127b257808061279b90615690565b915050600a826127ab91906154ae565b9150612788565b60008167ffffffffffffffff8111156127ce576127cd6157ea565b5b6040519080825280601f01601f1916602001820160405280156128005781602001600182028036833780820191505090505b5090505b6000851461288d576001826128199190615539565b9150600a8561282891906156fd565b60306128349190615458565b60f81b81838151811061284a576128496157bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561288691906154ae565b9450612804565b8093505050505b919050565b600033905090565b81518351146128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906151cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c9061506f565b60405180910390fd5b600061295f612899565b905061296f8187878787876136e5565b60005b8451811015612b205760008582815181106129905761298f6157bb565b5b6020026020010151905060008583815181106129af576129ae6157bb565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906150cf565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b059190615458565b9250508190555050505080612b1990615690565b9050612972565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612b97929190614e9b565b60405180910390a4612bad8187878787876136ed565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce2906151ef565b60405180910390fd5b6000612cf5612899565b9050612d1681600087612d07886138d4565b612d10886138d4565b876136e5565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d759190615458565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612df3929190615245565b60405180910390a4612e0a8160008787878761394e565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e779061518f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f719190614ed2565b60405180910390a3505050565b600082612f8b8584613b35565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc906150af565b60405180910390fd5b8051825114613049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613040906151cf565b60405180910390fd5b6000613053612899565b9050613073818560008686604051806020016040528060008152506136e5565b60005b83518110156131c0576000848281518110613094576130936157bb565b5b6020026020010151905060008483815181106130b3576130b26157bb565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b90614fcf565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806131b890615690565b915050613076565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051613238929190614e9b565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ad9061506f565b60405180910390fd5b60006132c0612899565b90506132e08187876132d1886138d4565b6132da886138d4565b876136e5565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015613377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336e906150cf565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461342c9190615458565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516134a9929190615245565b60405180910390a46134bf82888888888861394e565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352f906150af565b60405180910390fd5b6000613542612899565b905061357281856000613554876138d4565b61355d876138d4565b604051806020016040528060008152506136e5565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015613609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360090614fcf565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516136d6929190615245565b60405180910390a45050505050565b505050505050565b61370c8473ffffffffffffffffffffffffffffffffffffffff16613b8b565b156138cc578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613752959493929190614db7565b602060405180830381600087803b15801561376c57600080fd5b505af192505050801561379d57506040513d601f19601f8201168201806040525081019061379a919061441a565b60015b613843576137a9615819565b806308c379a0141561380657506137be615e70565b806137c95750613808565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fd9190614eed565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383a90614f0f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146138ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c190614f4f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156138f3576138f26157ea565b5b6040519080825280602002602001820160405280156139215781602001602082028036833780820191505090505b5090508281600081518110613939576139386157bb565b5b60200260200101818152505080915050919050565b61396d8473ffffffffffffffffffffffffffffffffffffffff16613b8b565b15613b2d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016139b3959493929190614e1f565b602060405180830381600087803b1580156139cd57600080fd5b505af19250505080156139fe57506040513d601f19601f820116820180604052508101906139fb919061441a565b60015b613aa457613a0a615819565b806308c379a01415613a675750613a1f615e70565b80613a2a5750613a69565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5e9190614eed565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9b90614f0f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2290614f4f565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015613b8057613b6b82868381518110613b5e57613b5d6157bb565b5b6020026020010151613b9e565b91508080613b7890615690565b915050613b3e565b508091505092915050565b600080823b905060008111915050919050565b6000818310613bb657613bb18284613bc9565b613bc1565b613bc08383613bc9565b5b905092915050565b600082600052816020526040600020905092915050565b828054613bec9061562d565b90600052602060002090601f016020900481019282613c0e5760008555613c55565b82601f10613c2757805160ff1916838001178555613c55565b82800160010185558215613c55579182015b82811115613c54578251825591602001919060010190613c39565b5b509050613c629190613cac565b5090565b6040518060e00160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016000151581526020016000151581525090565b5b80821115613cc5576000816000905550600101613cad565b5090565b6000613cdc613cd784615302565b6152dd565b90508083825260208201905082856020860282011115613cff57613cfe615845565b5b60005b85811015613d2f5781613d158882613e2d565b845260208401935060208301925050600181019050613d02565b5050509392505050565b6000613d4c613d478461532e565b6152dd565b90508083825260208201905082856020860282011115613d6f57613d6e615845565b5b60005b85811015613d9f5781613d858882613fa4565b845260208401935060208301925050600181019050613d72565b5050509392505050565b6000613dbc613db78461535a565b6152dd565b905082815260208101848484011115613dd857613dd761584a565b5b613de38482856155eb565b509392505050565b6000613dfe613df98461538b565b6152dd565b905082815260208101848484011115613e1a57613e1961584a565b5b613e258482856155eb565b509392505050565b600081359050613e3c81615f06565b92915050565b600082601f830112613e5757613e56615840565b5b8135613e67848260208601613cc9565b91505092915050565b60008083601f840112613e8657613e85615840565b5b8235905067ffffffffffffffff811115613ea357613ea261583b565b5b602083019150836020820283011115613ebf57613ebe615845565b5b9250929050565b600082601f830112613edb57613eda615840565b5b8135613eeb848260208601613d39565b91505092915050565b600081359050613f0381615f1d565b92915050565b600081359050613f1881615f34565b92915050565b600081359050613f2d81615f4b565b92915050565b600081519050613f4281615f4b565b92915050565b600082601f830112613f5d57613f5c615840565b5b8135613f6d848260208601613da9565b91505092915050565b600082601f830112613f8b57613f8a615840565b5b8135613f9b848260208601613deb565b91505092915050565b600081359050613fb381615f62565b92915050565b600060208284031215613fcf57613fce615854565b5b6000613fdd84828501613e2d565b91505092915050565b60008060408385031215613ffd57613ffc615854565b5b600061400b85828601613e2d565b925050602061401c85828601613e2d565b9150509250929050565b600080600080600060a0868803121561404257614041615854565b5b600061405088828901613e2d565b955050602061406188828901613e2d565b945050604086013567ffffffffffffffff8111156140825761408161584f565b5b61408e88828901613ec6565b935050606086013567ffffffffffffffff8111156140af576140ae61584f565b5b6140bb88828901613ec6565b925050608086013567ffffffffffffffff8111156140dc576140db61584f565b5b6140e888828901613f48565b9150509295509295909350565b600080600080600060a0868803121561411157614110615854565b5b600061411f88828901613e2d565b955050602061413088828901613e2d565b945050604061414188828901613fa4565b935050606061415288828901613fa4565b925050608086013567ffffffffffffffff8111156141735761417261584f565b5b61417f88828901613f48565b9150509295509295909350565b6000806000606084860312156141a5576141a4615854565b5b60006141b386828701613e2d565b935050602084013567ffffffffffffffff8111156141d4576141d361584f565b5b6141e086828701613ec6565b925050604084013567ffffffffffffffff8111156142015761420061584f565b5b61420d86828701613ec6565b9150509250925092565b6000806040838503121561422e5761422d615854565b5b600061423c85828601613e2d565b925050602061424d85828601613ef4565b9150509250929050565b6000806040838503121561426e5761426d615854565b5b600061427c85828601613e2d565b925050602061428d85828601613fa4565b9150509250929050565b6000806000606084860312156142b0576142af615854565b5b60006142be86828701613e2d565b93505060206142cf86828701613fa4565b92505060406142e086828701613fa4565b9150509250925092565b6000806040838503121561430157614300615854565b5b600083013567ffffffffffffffff81111561431f5761431e61584f565b5b61432b85828601613e42565b925050602083013567ffffffffffffffff81111561434c5761434b61584f565b5b61435885828601613ec6565b9150509250929050565b60008060006060848603121561437b5761437a615854565b5b600084013567ffffffffffffffff8111156143995761439861584f565b5b6143a586828701613e42565b935050602084013567ffffffffffffffff8111156143c6576143c561584f565b5b6143d286828701613ec6565b92505060406143e386828701613fa4565b9150509250925092565b60006020828403121561440357614402615854565b5b600061441184828501613f1e565b91505092915050565b6000602082840312156144305761442f615854565b5b600061443e84828501613f33565b91505092915050565b60006020828403121561445d5761445c615854565b5b600082013567ffffffffffffffff81111561447b5761447a61584f565b5b61448784828501613f76565b91505092915050565b6000602082840312156144a6576144a5615854565b5b60006144b484828501613fa4565b91505092915050565b600080604083850312156144d4576144d3615854565b5b60006144e285828601613fa4565b92505060206144f385828601613f09565b9150509250929050565b6000806040838503121561451457614513615854565b5b600061452285828601613fa4565b925050602061453385828601613fa4565b9150509250929050565b6000806000806060858703121561455757614556615854565b5b600061456587828801613fa4565b945050602061457687828801613fa4565b935050604085013567ffffffffffffffff8111156145975761459661584f565b5b6145a387828801613e70565b925092505092959194509250565b600080600080608085870312156145cb576145ca615854565b5b60006145d987828801613fa4565b94505060206145ea87828801613fa4565b93505060406145fb87828801613fa4565b925050606061460c87828801613ef4565b91505092959194509250565b600080600080600060a0868803121561463457614633615854565b5b600061464288828901613fa4565b955050602061465388828901613fa4565b945050604061466488828901613fa4565b935050606061467588828901613ef4565b925050608061468688828901613f09565b9150509295509295909350565b60008060008060008060c087890312156146b0576146af615854565b5b60006146be89828a01613fa4565b96505060206146cf89828a01613fa4565b95505060406146e089828a01613fa4565b94505060606146f189828a01613ef4565b935050608061470289828a01613f09565b92505060a061471389828a01613ef4565b9150509295509295509295565b600061472c8383614d13565b60208301905092915050565b6147418161556d565b82525050565b6147586147538261556d565b6156d9565b82525050565b6000614769826153e1565b614773818561540f565b935061477e836153bc565b8060005b838110156147af5781516147968882614720565b97506147a183615402565b925050600181019050614782565b5085935050505092915050565b6147c58161557f565b82525050565b6147d48161557f565b82525050565b6147e38161558b565b82525050565b6147f28161558b565b82525050565b6000614803826153ec565b61480d8185615420565b935061481d8185602086016155fa565b61482681615859565b840191505092915050565b600061483c826153f7565b614846818561543c565b93506148568185602086016155fa565b61485f81615859565b840191505092915050565b6000614875826153f7565b61487f818561544d565b935061488f8185602086016155fa565b80840191505092915050565b600081546148a88161562d565b6148b2818661544d565b945060018216600081146148cd57600181146148de57614911565b60ff19831686528186019350614911565b6148e7856153cc565b60005b83811015614909578154818901526001820191506020810190506148ea565b838801955050505b50505092915050565b600061492760348361543c565b915061493282615884565b604082019050919050565b600061494a60138361543c565b9150614955826158d3565b602082019050919050565b600061496d60288361543c565b9150614978826158fc565b604082019050919050565b600061499060118361543c565b915061499b8261594b565b602082019050919050565b60006149b3602b8361543c565b91506149be82615974565b604082019050919050565b60006149d660268361543c565b91506149e1826159c3565b604082019050919050565b60006149f960248361543c565b9150614a0482615a12565b604082019050919050565b6000614a1c60298361543c565b9150614a2782615a61565b604082019050919050565b6000614a3f60128361543c565b9150614a4a82615ab0565b602082019050919050565b6000614a6260198361543c565b9150614a6d82615ad9565b602082019050919050565b6000614a85601e8361543c565b9150614a9082615b02565b602082019050919050565b6000614aa860258361543c565b9150614ab382615b2b565b604082019050919050565b6000614acb60328361543c565b9150614ad682615b7a565b604082019050919050565b6000614aee60238361543c565b9150614af982615bc9565b604082019050919050565b6000614b11602a8361543c565b9150614b1c82615c18565b604082019050919050565b6000614b3460208361543c565b9150614b3f82615c67565b602082019050919050565b6000614b57601e8361543c565b9150614b6282615c90565b602082019050919050565b6000614b7a60228361543c565b9150614b8582615cb9565b604082019050919050565b6000614b9d600083615431565b9150614ba882615d08565b600082019050919050565b6000614bc060008361543c565b9150614bcb82615d08565b600082019050919050565b6000614be3600d8361543c565b9150614bee82615d0b565b602082019050919050565b6000614c0660298361543c565b9150614c1182615d34565b604082019050919050565b6000614c2960298361543c565b9150614c3482615d83565b604082019050919050565b6000614c4c60288361543c565b9150614c5782615dd2565b604082019050919050565b6000614c6f60218361543c565b9150614c7a82615e21565b604082019050919050565b60e082016000820151614c9b6000850182614d13565b506020820151614cae6020850182614d13565b506040820151614cc16040850182614d13565b506060820151614cd460608501826147da565b506080820151614ce760808501826147bc565b5060a0820151614cfa60a08501826147bc565b5060c0820151614d0d60c08501826147bc565b50505050565b614d1c816155e1565b82525050565b614d2b816155e1565b82525050565b6000614d3d8284614747565b60148201915081905092915050565b6000614d58828461489b565b915081905092915050565b6000614d6f828561489b565b9150614d7b828461486a565b91508190509392505050565b6000614d9282614b90565b9150819050919050565b6000602082019050614db16000830184614738565b92915050565b600060a082019050614dcc6000830188614738565b614dd96020830187614738565b8181036040830152614deb818661475e565b90508181036060830152614dff818561475e565b90508181036080830152614e1381846147f8565b90509695505050505050565b600060a082019050614e346000830188614738565b614e416020830187614738565b614e4e6040830186614d22565b614e5b6060830185614d22565b8181036080830152614e6d81846147f8565b90509695505050505050565b60006020820190508181036000830152614e93818461475e565b905092915050565b60006040820190508181036000830152614eb5818561475e565b90508181036020830152614ec9818461475e565b90509392505050565b6000602082019050614ee760008301846147cb565b92915050565b60006020820190508181036000830152614f078184614831565b905092915050565b60006020820190508181036000830152614f288161491a565b9050919050565b60006020820190508181036000830152614f488161493d565b9050919050565b60006020820190508181036000830152614f6881614960565b9050919050565b60006020820190508181036000830152614f8881614983565b9050919050565b60006020820190508181036000830152614fa8816149a6565b9050919050565b60006020820190508181036000830152614fc8816149c9565b9050919050565b60006020820190508181036000830152614fe8816149ec565b9050919050565b6000602082019050818103600083015261500881614a0f565b9050919050565b6000602082019050818103600083015261502881614a32565b9050919050565b6000602082019050818103600083015261504881614a55565b9050919050565b6000602082019050818103600083015261506881614a78565b9050919050565b6000602082019050818103600083015261508881614a9b565b9050919050565b600060208201905081810360008301526150a881614abe565b9050919050565b600060208201905081810360008301526150c881614ae1565b9050919050565b600060208201905081810360008301526150e881614b04565b9050919050565b6000602082019050818103600083015261510881614b27565b9050919050565b6000602082019050818103600083015261512881614b4a565b9050919050565b6000602082019050818103600083015261514881614b6d565b9050919050565b6000602082019050818103600083015261516881614bb3565b9050919050565b6000602082019050818103600083015261518881614bd6565b9050919050565b600060208201905081810360008301526151a881614bf9565b9050919050565b600060208201905081810360008301526151c881614c1c565b9050919050565b600060208201905081810360008301526151e881614c3f565b9050919050565b6000602082019050818103600083015261520881614c62565b9050919050565b600060e0820190506152246000830184614c85565b92915050565b600060208201905061523f6000830184614d22565b92915050565b600060408201905061525a6000830185614d22565b6152676020830184614d22565b9392505050565b600060e082019050615283600083018a614d22565b6152906020830189614d22565b61529d6040830188614d22565b6152aa60608301876147e9565b6152b760808301866147cb565b6152c460a08301856147cb565b6152d160c08301846147cb565b98975050505050505050565b60006152e76152f8565b90506152f3828261565f565b919050565b6000604051905090565b600067ffffffffffffffff82111561531d5761531c6157ea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615349576153486157ea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615375576153746157ea565b5b61537e82615859565b9050602081019050919050565b600067ffffffffffffffff8211156153a6576153a56157ea565b5b6153af82615859565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615463826155e1565b915061546e836155e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154a3576154a261572e565b5b828201905092915050565b60006154b9826155e1565b91506154c4836155e1565b9250826154d4576154d361575d565b5b828204905092915050565b60006154ea826155e1565b91506154f5836155e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561552e5761552d61572e565b5b828202905092915050565b6000615544826155e1565b915061554f836155e1565b9250828210156155625761556161572e565b5b828203905092915050565b6000615578826155c1565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156156185780820151818401526020810190506155fd565b83811115615627576000848401525b50505050565b6000600282049050600182168061564557607f821691505b602082108114156156595761565861578c565b5b50919050565b61566882615859565b810181811067ffffffffffffffff82111715615687576156866157ea565b5b80604052505050565b600061569b826155e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156ce576156cd61572e565b5b600182019050919050565b60006156e4826156eb565b9050919050565b60006156f68261586a565b9050919050565b6000615708826155e1565b9150615713836155e1565b9250826157235761572261575d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156158385760046000803e615835600051615877565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f546f6b656e2069732077686974656c6973746564206d696e7400000000000000600082015250565b7f4974656d206973206e6f742063757272656e746c79206d696e7461626c650000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f557365207075626c6963206d696e7420666f72207468697320746f6b656e0000600082015250565b7f41697264726f7020696e737472756374696f6e7320617265206e6f742065717560008201527f616c000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615e8057615f03565b615e886152f8565b60043d036004823e80513d602482011167ffffffffffffffff82111715615eb0575050615f03565b808201805167ffffffffffffffff811115615ece5750505050615f03565b80602083010160043d038501811115615eeb575050505050615f03565b615efa8260200185018661565f565b82955050505050505b90565b615f0f8161556d565b8114615f1a57600080fd5b50565b615f268161557f565b8114615f3157600080fd5b50565b615f3d8161558b565b8114615f4857600080fd5b50565b615f5481615595565b8114615f5f57600080fd5b50565b615f6b816155e1565b8114615f7657600080fd5b5056fea2646970667358221220219c104c5aeb9c898bc82471b51574e5f1842d1e2dd8d57ca577b04476a6050464736f6c63430008070033

Deployed Bytecode Sourcemap

48715:6214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35140:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34163:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54446:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52495:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51159:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53681:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37079:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52892:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49581:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54054:239;;;;;;;;;;;;;:::i;:::-;;35537:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53911:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52673:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14726:103;;;;;;;;;;;;;:::i;:::-;;52264:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49474:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49358:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14075:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52366:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49709:631;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36134:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53573:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52007:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54323:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48977:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;50348:787;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51753:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54745:181;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36361:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53067:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53800:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53402:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36601:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14984:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51604:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35140:231;35226:7;35273:1;35254:21;;:7;:21;;;;35246:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;35341:9;:13;35351:2;35341:13;;;;;;;;;;;:22;35355:7;35341:22;;;;;;;;;;;;;;;;35334:29;;35140:231;;;;:::o;34163:310::-;34265:4;34317:26;34302:41;;;:11;:41;;;;:110;;;;34375:37;34360:52;;;:11;:52;;;;34302:110;:163;;;;34429:36;34453:11;34429:23;:36::i;:::-;34302:163;34282:183;;34163:310;;;:::o;54446:289::-;54537:13;54616:1;54594:11;54588:25;;;;;:::i;:::-;;;:29;:139;;54716:11;54588:139;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54661:11;54674:20;54691:2;54674:16;:20::i;:::-;54644:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54588:139;54568:159;;54446:289;;;:::o;52495:170::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52609:48:::1;;;;;;;;52614:4;52609:48;;;;52620:6;52609:48;;;;52628:1;52609:48;;;;;::::0;::::1;;;;;;52635:4;52609:48;;;;;;52641:8;52609:48;;;;;;52651:5;52609:48;;;;::::0;52597:5:::1;:9;52603:2;52597:9;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52495:170:::0;;;;:::o;51159:370::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51310:13:::1;:20;51288:11;:18;:42;51279:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;51385:6;51380:142;51401:11;:18;51397:1;:22;51380:142;;;51440:70;51457:10;51469:11;51481:1;51469:14;;;;;;;;:::i;:::-;;;;;;;;51485:2;51489:13;51503:1;51489:16;;;;;;;;:::i;:::-;;;;;;;;51440:70;;;;;;;;;;;::::0;:16:::1;:70::i;:::-;51421:3;;;;;:::i;:::-;;;;51380:142;;;;51159:370:::0;;;:::o;53681:113::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53780:6:::1;53761:5;:9;53767:2;53761:9;;;;;;;;;;;:16;;:25;;;;53681:113:::0;;:::o;37079:442::-;37320:12;:10;:12::i;:::-;37312:20;;:4;:20;;;:60;;;;37336:36;37353:4;37359:12;:10;:12::i;:::-;37336:16;:36::i;:::-;37312:60;37290:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;37461:52;37484:4;37490:2;37494:3;37499:7;37508:4;37461:22;:52::i;:::-;37079:442;;;;;:::o;52892:167::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52973:5:::1;52952;:9;52958:2;52952:9;;;;;;;;;;;:18;;;:26;;;;;;;;;;;;;;;;;;53008:5;52989;:9;52995:2;52989:9;;;;;;;;;;;:16;;;:24;;;;;;;;;;;;;;;;;;53046:5;53024;:9;53030:2;53024:9;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;52892:167:::0;:::o;49581:102::-;49630:13;49663:12;49656:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49581:102;:::o;54054:239::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54104:15:::1;54122:21;54104:39;;54172:1;54162:7;:11;54154:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;54192:12;54218:10;54210:24;;54242:7;54210:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54191:63;;;54273:7;54265:20;;;;;;;;;;;;:::i;:::-;;;;;;;;;54093:200;;54054:239::o:0;35537:524::-;35693:16;35754:3;:10;35735:8;:15;:29;35727:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35823:30;35870:8;:15;35856:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35823:63;;35904:9;35899:122;35923:8;:15;35919:1;:19;35899:122;;;35979:30;35989:8;35998:1;35989:11;;;;;;;;:::i;:::-;;;;;;;;36002:3;36006:1;36002:6;;;;;;;;:::i;:::-;;;;;;;;35979:9;:30::i;:::-;35960:13;35974:1;35960:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;35940:3;;;;:::i;:::-;;;35899:122;;;;36040:13;36033:20;;;35537:524;;;;:::o;53911:107::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53992:5:::1;:9;53998:2;53992:9;;;;;;;;;;;:18;;;;;;;;;;;;53991:19;53970:5;:9;53976:2;53970:9;;;;;;;;;;;:18;;;:40;;;;;;;;;;;;;;;;;;53911:107:::0;:::o;52673:211::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52818:55:::1;;;;;;;;52823:4;52818:55;;;;52829:6;52818:55;;;;52837:1;52818:55;;;;52840:10;52818:55;;;;52852:4;52818:55;;;;;;52858:8;52818:55;;;;;;52868:4;52818:55;;;;::::0;52806:5:::1;:9;52812:2;52806:9;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52673:211:::0;;;;;:::o;14726:103::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14791:30:::1;14818:1;14791:18;:30::i;:::-;14726:103::o:0;52264:96::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52349:3:::1;52335:11;:17;;;;;;;;;;;;:::i;:::-;;52264:96:::0;:::o;49474:101::-;49523:13;49556:11;49549:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49474:101;:::o;49358:110::-;49420:11;;:::i;:::-;49451:5;:9;49457:2;49451:9;;;;;;;;;;;49444:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49358:110;;;:::o;14075:87::-;14121:7;14148:6;;;;;;;;;;;14141:13;;14075:87;:::o;52366:97::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52452:3:::1;52437:12;:18;;;;;;;;;;;;:::i;:::-;;52366:97:::0;:::o;49709:631::-;49793:5;:9;49799:2;49793:9;;;;;;;;;;;:19;;;;;;;;;;;;49792:20;49784:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;49861:5;:9;49867:2;49861:9;;;;;;;;;;;:18;;;;;;;;;;;;49853:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;49933:5;:9;49939:2;49933:9;;;;;;;;;;;:16;;;;;;;;;;;;49925:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50015:5;:9;50021:2;50015:9;;;;;;;;;;;:14;;;50006:6;:23;;;;:::i;:::-;49992:9;:38;;49984:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50101:5;:9;50107:2;50101:9;;;;;;;;;;;:16;;;50091:6;50072:5;:9;50078:2;50072:9;;;;;;;;;;;:16;;;:25;;;;:::i;:::-;:45;;50064:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50173:9;50159:23;;:10;:23;;;50150:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;50278:6;50259:5;:9;50265:2;50259:9;;;;;;;;;;;:16;;;:25;;;;:::i;:::-;50240:5;:9;50246:2;50240:9;;;;;;;;;;;:16;;:44;;;;50299:33;50305:10;50317:2;50321:6;50299:33;;;;;;;;;;;;:5;:33::i;:::-;49709:631;;:::o;36134:155::-;36229:52;36248:12;:10;:12::i;:::-;36262:8;36272;36229:18;:52::i;:::-;36134:155;;:::o;53573:100::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53660:5:::1;53638;:9;53644:2;53638:9;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;53573:100:::0;:::o;52007:233::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52091:5:::1;:9;52097:2;52091:9;;;;;;;;;;;:16;;;;;;;;;;;;52083:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52182:6;52163:5;:9;52169:2;52163:9;;;;;;;;;;;:16;;;:25;;;;:::i;:::-;52144:5;:9;52150:2;52144:9;;;;;;;;;;;:16;;:44;;;;52199:33;52205:10;52217:2;52221:6;52199:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;52007:233:::0;;:::o;54323:113::-;54385:7;54412:5;:9;54418:2;54412:9;;;;;;;;;;;:16;;;54405:23;;54323:113;;;:::o;48977:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50348:787::-;50460:5;:9;50466:2;50460:9;;;;;;;;;;;:19;;;;;;;;;;;;50452:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50533:5;:9;50539:2;50533:9;;;;;;;;;;;:18;;;;;;;;;;;;50525:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50605:88;50624:5;;50605:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50631:5;:9;50637:2;50631:9;;;;;;;;;;;:20;;;50680:10;50663:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;50653:39;;;;;;50605:18;:88::i;:::-;50597:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;50730:5;:9;50736:2;50730:9;;;;;;;;;;;:16;;;;;;;;;;;;50722:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50812:5;:9;50818:2;50812:9;;;;;;;;;;;:14;;;50803:6;:23;;;;:::i;:::-;50789:9;:38;;50781:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50898:5;:9;50904:2;50898:9;;;;;;;;;;;:16;;;50888:6;50869:5;:9;50875:2;50869:9;;;;;;;;;;;:16;;;:25;;;;:::i;:::-;:45;;50861:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50970:9;50956:23;;:10;:23;;;50947:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;51075:6;51056:5;:9;51062:2;51056:9;;;;;;;;;;;:16;;;:25;;;;:::i;:::-;51037:5;:9;51043:2;51037:9;;;;;;;;;;;:16;;:44;;;;51094:33;51100:10;51112:2;51116:6;51094:33;;;;;;;;;;;;:5;:33::i;:::-;50348:787;;;;:::o;51753:174::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51882:37:::1;51893:6;51901:8;51911:7;51882:10;:37::i;:::-;51753:174:::0;;;:::o;54745:181::-;54789:13;54879:12;54844:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;54815:103;;54745:181;:::o;36361:168::-;36460:4;36484:18;:27;36503:7;36484:27;;;;;;;;;;;;;;;:37;36512:8;36484:37;;;;;;;;;;;;;;;;;;;;;;;;;36477:44;;36361:168;;;;:::o;53067:327::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53224:4:::1;53207:5;:9;53213:2;53207:9;;;;;;;;;;;:14;;:21;;;;53258:6;53239:5;:9;53245:2;53239:9;;;;;;;;;;;:16;;:25;;;;53298:10;53275:5;:9;53281:2;53275:9;;;;;;;;;;;:20;;:33;;;;53340:8;53319:5;:9;53325:2;53319:9;;;;;;;;;;;:18;;;:29;;;;;;;;;;;;;;;;;;53381:5;53359;:9;53365:2;53359:9;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;53067:327:::0;;;;;;:::o;53800:105::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53893:4:::1;53876:5;:9;53882:2;53876:9;;;;;;;;;;;:14;;:21;;;;53800:105:::0;;:::o;53402:165::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53512:10:::1;53489:5;:9;53495:2;53489:9;;;;;;;;;;;:20;;:33;;;;53555:4;53533:5;:9;53539:2;53533:9;;;;;;;;;;;:19;;;:26;;;;;;;;;;;;;;;;;;53402:165:::0;;:::o;36601:401::-;36817:12;:10;:12::i;:::-;36809:20;;:4;:20;;;:60;;;;36833:36;36850:4;36856:12;:10;:12::i;:::-;36833:16;:36::i;:::-;36809:60;36787:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;36949:45;36967:4;36973:2;36977;36981:6;36989:4;36949:17;:45::i;:::-;36601:401;;;;;:::o;14984:201::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15093:1:::1;15073:22;;:8;:22;;;;15065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15149:28;15168:8;15149:18;:28::i;:::-;14984:201:::0;:::o;51604:143::-;14306:12;:10;:12::i;:::-;14295:23;;:7;:5;:7::i;:::-;:23;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51709:30:::1;51715:6;51723:7;51732:6;51709:5;:30::i;:::-;51604:143:::0;;;:::o;25494:157::-;25579:4;25618:25;25603:40;;;:11;:40;;;;25596:47;;25494:157;;;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;12793:98::-;12846:7;12873:10;12866:17;;12793:98;:::o;39163:1074::-;39390:7;:14;39376:3;:10;:28;39368:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39482:1;39468:16;;:2;:16;;;;39460:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39539:16;39558:12;:10;:12::i;:::-;39539:31;;39583:60;39604:8;39614:4;39620:2;39624:3;39629:7;39638:4;39583:20;:60::i;:::-;39661:9;39656:421;39680:3;:10;39676:1;:14;39656:421;;;39712:10;39725:3;39729:1;39725:6;;;;;;;;:::i;:::-;;;;;;;;39712:19;;39746:14;39763:7;39771:1;39763:10;;;;;;;;:::i;:::-;;;;;;;;39746:27;;39790:19;39812:9;:13;39822:2;39812:13;;;;;;;;;;;:19;39826:4;39812:19;;;;;;;;;;;;;;;;39790:41;;39869:6;39854:11;:21;;39846:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40002:6;39988:11;:20;39966:9;:13;39976:2;39966:13;;;;;;;;;;;:19;39980:4;39966:19;;;;;;;;;;;;;;;:42;;;;40059:6;40038:9;:13;40048:2;40038:13;;;;;;;;;;;:17;40052:2;40038:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;39697:380;;;39692:3;;;;:::i;:::-;;;39656:421;;;;40124:2;40094:47;;40118:4;40094:47;;40108:8;40094:47;;;40128:3;40133:7;40094:47;;;;;;;:::i;:::-;;;;;;;;40154:75;40190:8;40200:4;40206:2;40210:3;40215:7;40224:4;40154:35;:75::i;:::-;39357:880;39163:1074;;;;;:::o;15345:191::-;15419:16;15438:6;;;;;;;;;;;15419:25;;15464:8;15455:6;;:17;;;;;;;;;;;;;;;;;;15519:8;15488:40;;15509:8;15488:40;;;;;;;;;;;;15408:128;15345:191;:::o;41555:569::-;41722:1;41708:16;;:2;:16;;;;41700:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41775:16;41794:12;:10;:12::i;:::-;41775:31;;41819:102;41840:8;41858:1;41862:2;41866:21;41884:2;41866:17;:21::i;:::-;41889:25;41907:6;41889:17;:25::i;:::-;41916:4;41819:20;:102::i;:::-;41955:6;41934:9;:13;41944:2;41934:13;;;;;;;;;;;:17;41948:2;41934:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;42014:2;41977:52;;42010:1;41977:52;;41992:8;41977:52;;;42018:2;42022:6;41977:52;;;;;;;:::i;:::-;;;;;;;;42042:74;42073:8;42091:1;42095:2;42099;42103:6;42111:4;42042:30;:74::i;:::-;41689:435;41555:569;;;;:::o;45349:331::-;45504:8;45495:17;;:5;:17;;;;45487:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45607:8;45569:18;:25;45588:5;45569:25;;;;;;;;;;;;;;;:35;45595:8;45569:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45653:8;45631:41;;45646:5;45631:41;;;45663:8;45631:41;;;;;;:::i;:::-;;;;;;;;45349:331;;;:::o;3769:190::-;3894:4;3947;3918:25;3931:5;3938:4;3918:12;:25::i;:::-;:33;3911:40;;3769:190;;;;;:::o;44316:891::-;44484:1;44468:18;;:4;:18;;;;44460:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44559:7;:14;44545:3;:10;:28;44537:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44631:16;44650:12;:10;:12::i;:::-;44631:31;;44675:66;44696:8;44706:4;44720:1;44724:3;44729:7;44675:66;;;;;;;;;;;;:20;:66::i;:::-;44759:9;44754:373;44778:3;:10;44774:1;:14;44754:373;;;44810:10;44823:3;44827:1;44823:6;;;;;;;;:::i;:::-;;;;;;;;44810:19;;44844:14;44861:7;44869:1;44861:10;;;;;;;;:::i;:::-;;;;;;;;44844:27;;44888:19;44910:9;:13;44920:2;44910:13;;;;;;;;;;;:19;44924:4;44910:19;;;;;;;;;;;;;;;;44888:41;;44967:6;44952:11;:21;;44944:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45094:6;45080:11;:20;45058:9;:13;45068:2;45058:13;;;;;;;;;;;:19;45072:4;45058:19;;;;;;;;;;;;;;;:42;;;;44795:332;;;44790:3;;;;;:::i;:::-;;;;44754:373;;;;45182:1;45144:55;;45168:4;45144:55;;45158:8;45144:55;;;45186:3;45191:7;45144:55;;;;;;;:::i;:::-;;;;;;;;44449:758;44316:891;;;:::o;37985:820::-;38187:1;38173:16;;:2;:16;;;;38165:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38244:16;38263:12;:10;:12::i;:::-;38244:31;;38288:96;38309:8;38319:4;38325:2;38329:21;38347:2;38329:17;:21::i;:::-;38352:25;38370:6;38352:17;:25::i;:::-;38379:4;38288:20;:96::i;:::-;38397:19;38419:9;:13;38429:2;38419:13;;;;;;;;;;;:19;38433:4;38419:19;;;;;;;;;;;;;;;;38397:41;;38472:6;38457:11;:21;;38449:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38597:6;38583:11;:20;38561:9;:13;38571:2;38561:13;;;;;;;;;;;:19;38575:4;38561:19;;;;;;;;;;;;;;;:42;;;;38646:6;38625:9;:13;38635:2;38625:13;;;;;;;;;;;:17;38639:2;38625:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;38701:2;38670:46;;38695:4;38670:46;;38685:8;38670:46;;;38705:2;38709:6;38670:46;;;;;;;:::i;:::-;;;;;;;;38729:68;38760:8;38770:4;38776:2;38780;38784:6;38792:4;38729:30;:68::i;:::-;38154:651;;37985:820;;;;;:::o;43465:648::-;43608:1;43592:18;;:4;:18;;;;43584:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43663:16;43682:12;:10;:12::i;:::-;43663:31;;43707:102;43728:8;43738:4;43752:1;43756:21;43774:2;43756:17;:21::i;:::-;43779:25;43797:6;43779:17;:25::i;:::-;43707:102;;;;;;;;;;;;:20;:102::i;:::-;43822:19;43844:9;:13;43854:2;43844:13;;;;;;;;;;;:19;43858:4;43844:19;;;;;;;;;;;;;;;;43822:41;;43897:6;43882:11;:21;;43874:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44016:6;44002:11;:20;43980:9;:13;43990:2;43980:13;;;;;;;;;;;:19;43994:4;43980:19;;;;;;;;;;;;;;;:42;;;;44090:1;44051:54;;44076:4;44051:54;;44066:8;44051:54;;;44094:2;44098:6;44051:54;;;;;;;:::i;:::-;;;;;;;;43573:540;;43465:648;;;:::o;46636:221::-;;;;;;;:::o;47617:813::-;47857:15;:2;:13;;;:15::i;:::-;47853:570;;;47910:2;47893:43;;;47937:8;47947:4;47953:3;47958:7;47967:4;47893:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47889:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;48285:6;48278:14;;;;;;;;;;;:::i;:::-;;;;;;;;47889:523;;;48334:62;;;;;;;;;;:::i;:::-;;;;;;;;47889:523;48066:48;;;48054:60;;;:8;:60;;;;48050:159;;48139:50;;;;;;;;;;:::i;:::-;;;;;;;;48050:159;47973:251;47853:570;47617:813;;;;;;:::o;48438:198::-;48504:16;48533:22;48572:1;48558:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48533:41;;48596:7;48585:5;48591:1;48585:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;48623:5;48616:12;;;48438:198;;;:::o;46865:744::-;47080:15;:2;:13;;;:15::i;:::-;47076:526;;;47133:2;47116:38;;;47155:8;47165:4;47171:2;47175:6;47183:4;47116:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47112:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;47464:6;47457:14;;;;;;;;;;;:::i;:::-;;;;;;;;47112:479;;;47513:62;;;;;;;;;;:::i;:::-;;;;;;;;47112:479;47250:43;;;47238:55;;;:8;:55;;;;47234:154;;47318:50;;;;;;;;;;:::i;:::-;;;;;;;;47234:154;47189:214;47076:526;46865:744;;;;;;:::o;4636:296::-;4719:7;4739:20;4762:4;4739:27;;4782:9;4777:118;4801:5;:12;4797:1;:16;4777:118;;;4850:33;4860:12;4874:5;4880:1;4874:8;;;;;;;;:::i;:::-;;;;;;;;4850:9;:33::i;:::-;4835:48;;4815:3;;;;;:::i;:::-;;;;4777:118;;;;4912:12;4905:19;;;4636:296;;;;:::o;16369:387::-;16429:4;16637:12;16704:7;16692:20;16684:28;;16747:1;16740:4;:8;16733:15;;;16369:387;;;:::o;11676:149::-;11739:7;11770:1;11766;:5;:51;;11797:20;11812:1;11815;11797:14;:20::i;:::-;11766:51;;;11774:20;11789:1;11792;11774:14;:20::i;:::-;11766:51;11759:58;;11676:149;;;;:::o;11833:268::-;11901:13;12008:1;12002:4;11995:15;12037:1;12031:4;12024:15;12078:4;12072;12062:21;12053:30;;11833:268;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:568::-;2959:8;2969:6;3019:3;3012:4;3004:6;3000:17;2996:27;2986:122;;3027:79;;:::i;:::-;2986:122;3140:6;3127:20;3117:30;;3170:18;3162:6;3159:30;3156:117;;;3192:79;;:::i;:::-;3156:117;3306:4;3298:6;3294:17;3282:29;;3360:3;3352:4;3344:6;3340:17;3330:8;3326:32;3323:41;3320:128;;;3367:79;;:::i;:::-;3320:128;2886:568;;;;;:::o;3477:370::-;3548:5;3597:3;3590:4;3582:6;3578:17;3574:27;3564:122;;3605:79;;:::i;:::-;3564:122;3722:6;3709:20;3747:94;3837:3;3829:6;3822:4;3814:6;3810:17;3747:94;:::i;:::-;3738:103;;3554:293;3477:370;;;;:::o;3853:133::-;3896:5;3934:6;3921:20;3912:29;;3950:30;3974:5;3950:30;:::i;:::-;3853:133;;;;:::o;3992:139::-;4038:5;4076:6;4063:20;4054:29;;4092:33;4119:5;4092:33;:::i;:::-;3992:139;;;;:::o;4137:137::-;4182:5;4220:6;4207:20;4198:29;;4236:32;4262:5;4236:32;:::i;:::-;4137:137;;;;:::o;4280:141::-;4336:5;4367:6;4361:13;4352:22;;4383:32;4409:5;4383:32;:::i;:::-;4280:141;;;;:::o;4440:338::-;4495:5;4544:3;4537:4;4529:6;4525:17;4521:27;4511:122;;4552:79;;:::i;:::-;4511:122;4669:6;4656:20;4694:78;4768:3;4760:6;4753:4;4745:6;4741:17;4694:78;:::i;:::-;4685:87;;4501:277;4440:338;;;;:::o;4798:340::-;4854:5;4903:3;4896:4;4888:6;4884:17;4880:27;4870:122;;4911:79;;:::i;:::-;4870:122;5028:6;5015:20;5053:79;5128:3;5120:6;5113:4;5105:6;5101:17;5053:79;:::i;:::-;5044:88;;4860:278;4798:340;;;;:::o;5144:139::-;5190:5;5228:6;5215:20;5206:29;;5244:33;5271:5;5244:33;:::i;:::-;5144:139;;;;:::o;5289:329::-;5348:6;5397:2;5385:9;5376:7;5372:23;5368:32;5365:119;;;5403:79;;:::i;:::-;5365:119;5523:1;5548:53;5593:7;5584:6;5573:9;5569:22;5548:53;:::i;:::-;5538:63;;5494:117;5289:329;;;;:::o;5624:474::-;5692:6;5700;5749:2;5737:9;5728:7;5724:23;5720:32;5717:119;;;5755:79;;:::i;:::-;5717:119;5875:1;5900:53;5945:7;5936:6;5925:9;5921:22;5900:53;:::i;:::-;5890:63;;5846:117;6002:2;6028:53;6073:7;6064:6;6053:9;6049:22;6028:53;:::i;:::-;6018:63;;5973:118;5624:474;;;;;:::o;6104:1509::-;6258:6;6266;6274;6282;6290;6339:3;6327:9;6318:7;6314:23;6310:33;6307:120;;;6346:79;;:::i;:::-;6307:120;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6749:2;6738:9;6734:18;6721:32;6780:18;6772:6;6769:30;6766:117;;;6802:79;;:::i;:::-;6766:117;6907:78;6977:7;6968:6;6957:9;6953:22;6907:78;:::i;:::-;6897:88;;6692:303;7062:2;7051:9;7047:18;7034:32;7093:18;7085:6;7082:30;7079:117;;;7115:79;;:::i;:::-;7079:117;7220:78;7290:7;7281:6;7270:9;7266:22;7220:78;:::i;:::-;7210:88;;7005:303;7375:3;7364:9;7360:19;7347:33;7407:18;7399:6;7396:30;7393:117;;;7429:79;;:::i;:::-;7393:117;7534:62;7588:7;7579:6;7568:9;7564:22;7534:62;:::i;:::-;7524:72;;7318:288;6104:1509;;;;;;;;:::o;7619:1089::-;7723:6;7731;7739;7747;7755;7804:3;7792:9;7783:7;7779:23;7775:33;7772:120;;;7811:79;;:::i;:::-;7772:120;7931:1;7956:53;8001:7;7992:6;7981:9;7977:22;7956:53;:::i;:::-;7946:63;;7902:117;8058:2;8084:53;8129:7;8120:6;8109:9;8105:22;8084:53;:::i;:::-;8074:63;;8029:118;8186:2;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8157:118;8314:2;8340:53;8385:7;8376:6;8365:9;8361:22;8340:53;:::i;:::-;8330:63;;8285:118;8470:3;8459:9;8455:19;8442:33;8502:18;8494:6;8491:30;8488:117;;;8524:79;;:::i;:::-;8488:117;8629:62;8683:7;8674:6;8663:9;8659:22;8629:62;:::i;:::-;8619:72;;8413:288;7619:1089;;;;;;;;:::o;8714:1039::-;8841:6;8849;8857;8906:2;8894:9;8885:7;8881:23;8877:32;8874:119;;;8912:79;;:::i;:::-;8874:119;9032:1;9057:53;9102:7;9093:6;9082:9;9078:22;9057:53;:::i;:::-;9047:63;;9003:117;9187:2;9176:9;9172:18;9159:32;9218:18;9210:6;9207:30;9204:117;;;9240:79;;:::i;:::-;9204:117;9345:78;9415:7;9406:6;9395:9;9391:22;9345:78;:::i;:::-;9335:88;;9130:303;9500:2;9489:9;9485:18;9472:32;9531:18;9523:6;9520:30;9517:117;;;9553:79;;:::i;:::-;9517:117;9658:78;9728:7;9719:6;9708:9;9704:22;9658:78;:::i;:::-;9648:88;;9443:303;8714:1039;;;;;:::o;9759:468::-;9824:6;9832;9881:2;9869:9;9860:7;9856:23;9852:32;9849:119;;;9887:79;;:::i;:::-;9849:119;10007:1;10032:53;10077:7;10068:6;10057:9;10053:22;10032:53;:::i;:::-;10022:63;;9978:117;10134:2;10160:50;10202:7;10193:6;10182:9;10178:22;10160:50;:::i;:::-;10150:60;;10105:115;9759:468;;;;;:::o;10233:474::-;10301:6;10309;10358:2;10346:9;10337:7;10333:23;10329:32;10326:119;;;10364:79;;:::i;:::-;10326:119;10484:1;10509:53;10554:7;10545:6;10534:9;10530:22;10509:53;:::i;:::-;10499:63;;10455:117;10611:2;10637:53;10682:7;10673:6;10662:9;10658:22;10637:53;:::i;:::-;10627:63;;10582:118;10233:474;;;;;:::o;10713:619::-;10790:6;10798;10806;10855:2;10843:9;10834:7;10830:23;10826:32;10823:119;;;10861:79;;:::i;:::-;10823:119;10981:1;11006:53;11051:7;11042:6;11031:9;11027:22;11006:53;:::i;:::-;10996:63;;10952:117;11108:2;11134:53;11179:7;11170:6;11159:9;11155:22;11134:53;:::i;:::-;11124:63;;11079:118;11236:2;11262:53;11307:7;11298:6;11287:9;11283:22;11262:53;:::i;:::-;11252:63;;11207:118;10713:619;;;;;:::o;11338:894::-;11456:6;11464;11513:2;11501:9;11492:7;11488:23;11484:32;11481:119;;;11519:79;;:::i;:::-;11481:119;11667:1;11656:9;11652:17;11639:31;11697:18;11689:6;11686:30;11683:117;;;11719:79;;:::i;:::-;11683:117;11824:78;11894:7;11885:6;11874:9;11870:22;11824:78;:::i;:::-;11814:88;;11610:302;11979:2;11968:9;11964:18;11951:32;12010:18;12002:6;11999:30;11996:117;;;12032:79;;:::i;:::-;11996:117;12137:78;12207:7;12198:6;12187:9;12183:22;12137:78;:::i;:::-;12127:88;;11922:303;11338:894;;;;;:::o;12238:1039::-;12365:6;12373;12381;12430:2;12418:9;12409:7;12405:23;12401:32;12398:119;;;12436:79;;:::i;:::-;12398:119;12584:1;12573:9;12569:17;12556:31;12614:18;12606:6;12603:30;12600:117;;;12636:79;;:::i;:::-;12600:117;12741:78;12811:7;12802:6;12791:9;12787:22;12741:78;:::i;:::-;12731:88;;12527:302;12896:2;12885:9;12881:18;12868:32;12927:18;12919:6;12916:30;12913:117;;;12949:79;;:::i;:::-;12913:117;13054:78;13124:7;13115:6;13104:9;13100:22;13054:78;:::i;:::-;13044:88;;12839:303;13181:2;13207:53;13252:7;13243:6;13232:9;13228:22;13207:53;:::i;:::-;13197:63;;13152:118;12238:1039;;;;;:::o;13283:327::-;13341:6;13390:2;13378:9;13369:7;13365:23;13361:32;13358:119;;;13396:79;;:::i;:::-;13358:119;13516:1;13541:52;13585:7;13576:6;13565:9;13561:22;13541:52;:::i;:::-;13531:62;;13487:116;13283:327;;;;:::o;13616:349::-;13685:6;13734:2;13722:9;13713:7;13709:23;13705:32;13702:119;;;13740:79;;:::i;:::-;13702:119;13860:1;13885:63;13940:7;13931:6;13920:9;13916:22;13885:63;:::i;:::-;13875:73;;13831:127;13616:349;;;;:::o;13971:509::-;14040:6;14089:2;14077:9;14068:7;14064:23;14060:32;14057:119;;;14095:79;;:::i;:::-;14057:119;14243:1;14232:9;14228:17;14215:31;14273:18;14265:6;14262:30;14259:117;;;14295:79;;:::i;:::-;14259:117;14400:63;14455:7;14446:6;14435:9;14431:22;14400:63;:::i;:::-;14390:73;;14186:287;13971:509;;;;:::o;14486:329::-;14545:6;14594:2;14582:9;14573:7;14569:23;14565:32;14562:119;;;14600:79;;:::i;:::-;14562:119;14720:1;14745:53;14790:7;14781:6;14770:9;14766:22;14745:53;:::i;:::-;14735:63;;14691:117;14486:329;;;;:::o;14821:474::-;14889:6;14897;14946:2;14934:9;14925:7;14921:23;14917:32;14914:119;;;14952:79;;:::i;:::-;14914:119;15072:1;15097:53;15142:7;15133:6;15122:9;15118:22;15097:53;:::i;:::-;15087:63;;15043:117;15199:2;15225:53;15270:7;15261:6;15250:9;15246:22;15225:53;:::i;:::-;15215:63;;15170:118;14821:474;;;;;:::o;15301:::-;15369:6;15377;15426:2;15414:9;15405:7;15401:23;15397:32;15394:119;;;15432:79;;:::i;:::-;15394:119;15552:1;15577:53;15622:7;15613:6;15602:9;15598:22;15577:53;:::i;:::-;15567:63;;15523:117;15679:2;15705:53;15750:7;15741:6;15730:9;15726:22;15705:53;:::i;:::-;15695:63;;15650:118;15301:474;;;;;:::o;15781:849::-;15885:6;15893;15901;15909;15958:2;15946:9;15937:7;15933:23;15929:32;15926:119;;;15964:79;;:::i;:::-;15926:119;16084:1;16109:53;16154:7;16145:6;16134:9;16130:22;16109:53;:::i;:::-;16099:63;;16055:117;16211:2;16237:53;16282:7;16273:6;16262:9;16258:22;16237:53;:::i;:::-;16227:63;;16182:118;16367:2;16356:9;16352:18;16339:32;16398:18;16390:6;16387:30;16384:117;;;16420:79;;:::i;:::-;16384:117;16533:80;16605:7;16596:6;16585:9;16581:22;16533:80;:::i;:::-;16515:98;;;;16310:313;15781:849;;;;;;;:::o;16636:759::-;16719:6;16727;16735;16743;16792:3;16780:9;16771:7;16767:23;16763:33;16760:120;;;16799:79;;:::i;:::-;16760:120;16919:1;16944:53;16989:7;16980:6;16969:9;16965:22;16944:53;:::i;:::-;16934:63;;16890:117;17046:2;17072:53;17117:7;17108:6;17097:9;17093:22;17072:53;:::i;:::-;17062:63;;17017:118;17174:2;17200:53;17245:7;17236:6;17225:9;17221:22;17200:53;:::i;:::-;17190:63;;17145:118;17302:2;17328:50;17370:7;17361:6;17350:9;17346:22;17328:50;:::i;:::-;17318:60;;17273:115;16636:759;;;;;;;:::o;17401:905::-;17493:6;17501;17509;17517;17525;17574:3;17562:9;17553:7;17549:23;17545:33;17542:120;;;17581:79;;:::i;:::-;17542:120;17701:1;17726:53;17771:7;17762:6;17751:9;17747:22;17726:53;:::i;:::-;17716:63;;17672:117;17828:2;17854:53;17899:7;17890:6;17879:9;17875:22;17854:53;:::i;:::-;17844:63;;17799:118;17956:2;17982:53;18027:7;18018:6;18007:9;18003:22;17982:53;:::i;:::-;17972:63;;17927:118;18084:2;18110:50;18152:7;18143:6;18132:9;18128:22;18110:50;:::i;:::-;18100:60;;18055:115;18209:3;18236:53;18281:7;18272:6;18261:9;18257:22;18236:53;:::i;:::-;18226:63;;18180:119;17401:905;;;;;;;;:::o;18312:1045::-;18410:6;18418;18426;18434;18442;18450;18499:3;18487:9;18478:7;18474:23;18470:33;18467:120;;;18506:79;;:::i;:::-;18467:120;18626:1;18651:53;18696:7;18687:6;18676:9;18672:22;18651:53;:::i;:::-;18641:63;;18597:117;18753:2;18779:53;18824:7;18815:6;18804:9;18800:22;18779:53;:::i;:::-;18769:63;;18724:118;18881:2;18907:53;18952:7;18943:6;18932:9;18928:22;18907:53;:::i;:::-;18897:63;;18852:118;19009:2;19035:50;19077:7;19068:6;19057:9;19053:22;19035:50;:::i;:::-;19025:60;;18980:115;19134:3;19161:53;19206:7;19197:6;19186:9;19182:22;19161:53;:::i;:::-;19151:63;;19105:119;19263:3;19290:50;19332:7;19323:6;19312:9;19308:22;19290:50;:::i;:::-;19280:60;;19234:116;18312:1045;;;;;;;;:::o;19363:179::-;19432:10;19453:46;19495:3;19487:6;19453:46;:::i;:::-;19531:4;19526:3;19522:14;19508:28;;19363:179;;;;:::o;19548:118::-;19635:24;19653:5;19635:24;:::i;:::-;19630:3;19623:37;19548:118;;:::o;19672:157::-;19777:45;19797:24;19815:5;19797:24;:::i;:::-;19777:45;:::i;:::-;19772:3;19765:58;19672:157;;:::o;19865:732::-;19984:3;20013:54;20061:5;20013:54;:::i;:::-;20083:86;20162:6;20157:3;20083:86;:::i;:::-;20076:93;;20193:56;20243:5;20193:56;:::i;:::-;20272:7;20303:1;20288:284;20313:6;20310:1;20307:13;20288:284;;;20389:6;20383:13;20416:63;20475:3;20460:13;20416:63;:::i;:::-;20409:70;;20502:60;20555:6;20502:60;:::i;:::-;20492:70;;20348:224;20335:1;20332;20328:9;20323:14;;20288:284;;;20292:14;20588:3;20581:10;;19989:608;;;19865:732;;;;:::o;20603:99::-;20674:21;20689:5;20674:21;:::i;:::-;20669:3;20662:34;20603:99;;:::o;20708:109::-;20789:21;20804:5;20789:21;:::i;:::-;20784:3;20777:34;20708:109;;:::o;20823:108::-;20900:24;20918:5;20900:24;:::i;:::-;20895:3;20888:37;20823:108;;:::o;20937:118::-;21024:24;21042:5;21024:24;:::i;:::-;21019:3;21012:37;20937:118;;:::o;21061:360::-;21147:3;21175:38;21207:5;21175:38;:::i;:::-;21229:70;21292:6;21287:3;21229:70;:::i;:::-;21222:77;;21308:52;21353:6;21348:3;21341:4;21334:5;21330:16;21308:52;:::i;:::-;21385:29;21407:6;21385:29;:::i;:::-;21380:3;21376:39;21369:46;;21151:270;21061:360;;;;:::o;21427:364::-;21515:3;21543:39;21576:5;21543:39;:::i;:::-;21598:71;21662:6;21657:3;21598:71;:::i;:::-;21591:78;;21678:52;21723:6;21718:3;21711:4;21704:5;21700:16;21678:52;:::i;:::-;21755:29;21777:6;21755:29;:::i;:::-;21750:3;21746:39;21739:46;;21519:272;21427:364;;;;:::o;21797:377::-;21903:3;21931:39;21964:5;21931:39;:::i;:::-;21986:89;22068:6;22063:3;21986:89;:::i;:::-;21979:96;;22084:52;22129:6;22124:3;22117:4;22110:5;22106:16;22084:52;:::i;:::-;22161:6;22156:3;22152:16;22145:23;;21907:267;21797:377;;;;:::o;22204:845::-;22307:3;22344:5;22338:12;22373:36;22399:9;22373:36;:::i;:::-;22425:89;22507:6;22502:3;22425:89;:::i;:::-;22418:96;;22545:1;22534:9;22530:17;22561:1;22556:137;;;;22707:1;22702:341;;;;22523:520;;22556:137;22640:4;22636:9;22625;22621:25;22616:3;22609:38;22676:6;22671:3;22667:16;22660:23;;22556:137;;22702:341;22769:38;22801:5;22769:38;:::i;:::-;22829:1;22843:154;22857:6;22854:1;22851:13;22843:154;;;22931:7;22925:14;22921:1;22916:3;22912:11;22905:35;22981:1;22972:7;22968:15;22957:26;;22879:4;22876:1;22872:12;22867:17;;22843:154;;;23026:6;23021:3;23017:16;23010:23;;22709:334;;22523:520;;22311:738;;22204:845;;;;:::o;23055:366::-;23197:3;23218:67;23282:2;23277:3;23218:67;:::i;:::-;23211:74;;23294:93;23383:3;23294:93;:::i;:::-;23412:2;23407:3;23403:12;23396:19;;23055:366;;;:::o;23427:::-;23569:3;23590:67;23654:2;23649:3;23590:67;:::i;:::-;23583:74;;23666:93;23755:3;23666:93;:::i;:::-;23784:2;23779:3;23775:12;23768:19;;23427:366;;;:::o;23799:::-;23941:3;23962:67;24026:2;24021:3;23962:67;:::i;:::-;23955:74;;24038:93;24127:3;24038:93;:::i;:::-;24156:2;24151:3;24147:12;24140:19;;23799:366;;;:::o;24171:::-;24313:3;24334:67;24398:2;24393:3;24334:67;:::i;:::-;24327:74;;24410:93;24499:3;24410:93;:::i;:::-;24528:2;24523:3;24519:12;24512:19;;24171:366;;;:::o;24543:::-;24685:3;24706:67;24770:2;24765:3;24706:67;:::i;:::-;24699:74;;24782:93;24871:3;24782:93;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24543:366;;;:::o;24915:::-;25057:3;25078:67;25142:2;25137:3;25078:67;:::i;:::-;25071:74;;25154:93;25243:3;25154:93;:::i;:::-;25272:2;25267:3;25263:12;25256:19;;24915:366;;;:::o;25287:::-;25429:3;25450:67;25514:2;25509:3;25450:67;:::i;:::-;25443:74;;25526:93;25615:3;25526:93;:::i;:::-;25644:2;25639:3;25635:12;25628:19;;25287:366;;;:::o;25659:::-;25801:3;25822:67;25886:2;25881:3;25822:67;:::i;:::-;25815:74;;25898:93;25987:3;25898:93;:::i;:::-;26016:2;26011:3;26007:12;26000:19;;25659:366;;;:::o;26031:::-;26173:3;26194:67;26258:2;26253:3;26194:67;:::i;:::-;26187:74;;26270:93;26359:3;26270:93;:::i;:::-;26388:2;26383:3;26379:12;26372:19;;26031:366;;;:::o;26403:::-;26545:3;26566:67;26630:2;26625:3;26566:67;:::i;:::-;26559:74;;26642:93;26731:3;26642:93;:::i;:::-;26760:2;26755:3;26751:12;26744:19;;26403:366;;;:::o;26775:::-;26917:3;26938:67;27002:2;26997:3;26938:67;:::i;:::-;26931:74;;27014:93;27103:3;27014:93;:::i;:::-;27132:2;27127:3;27123:12;27116:19;;26775:366;;;:::o;27147:::-;27289:3;27310:67;27374:2;27369:3;27310:67;:::i;:::-;27303:74;;27386:93;27475:3;27386:93;:::i;:::-;27504:2;27499:3;27495:12;27488:19;;27147:366;;;:::o;27519:::-;27661:3;27682:67;27746:2;27741:3;27682:67;:::i;:::-;27675:74;;27758:93;27847:3;27758:93;:::i;:::-;27876:2;27871:3;27867:12;27860:19;;27519:366;;;:::o;27891:::-;28033:3;28054:67;28118:2;28113:3;28054:67;:::i;:::-;28047:74;;28130:93;28219:3;28130:93;:::i;:::-;28248:2;28243:3;28239:12;28232:19;;27891:366;;;:::o;28263:::-;28405:3;28426:67;28490:2;28485:3;28426:67;:::i;:::-;28419:74;;28502:93;28591:3;28502:93;:::i;:::-;28620:2;28615:3;28611:12;28604:19;;28263:366;;;:::o;28635:::-;28777:3;28798:67;28862:2;28857:3;28798:67;:::i;:::-;28791:74;;28874:93;28963:3;28874:93;:::i;:::-;28992:2;28987:3;28983:12;28976:19;;28635:366;;;:::o;29007:::-;29149:3;29170:67;29234:2;29229:3;29170:67;:::i;:::-;29163:74;;29246:93;29335:3;29246:93;:::i;:::-;29364:2;29359:3;29355:12;29348:19;;29007:366;;;:::o;29379:::-;29521:3;29542:67;29606:2;29601:3;29542:67;:::i;:::-;29535:74;;29618:93;29707:3;29618:93;:::i;:::-;29736:2;29731:3;29727:12;29720:19;;29379:366;;;:::o;29751:398::-;29910:3;29931:83;30012:1;30007:3;29931:83;:::i;:::-;29924:90;;30023:93;30112:3;30023:93;:::i;:::-;30141:1;30136:3;30132:11;30125:18;;29751:398;;;:::o;30155:364::-;30297:3;30318:66;30382:1;30377:3;30318:66;:::i;:::-;30311:73;;30393:93;30482:3;30393:93;:::i;:::-;30511:1;30506:3;30502:11;30495:18;;30155:364;;;:::o;30525:366::-;30667:3;30688:67;30752:2;30747:3;30688:67;:::i;:::-;30681:74;;30764:93;30853:3;30764:93;:::i;:::-;30882:2;30877:3;30873:12;30866:19;;30525:366;;;:::o;30897:::-;31039:3;31060:67;31124:2;31119:3;31060:67;:::i;:::-;31053:74;;31136:93;31225:3;31136:93;:::i;:::-;31254:2;31249:3;31245:12;31238:19;;30897:366;;;:::o;31269:::-;31411:3;31432:67;31496:2;31491:3;31432:67;:::i;:::-;31425:74;;31508:93;31597:3;31508:93;:::i;:::-;31626:2;31621:3;31617:12;31610:19;;31269:366;;;:::o;31641:::-;31783:3;31804:67;31868:2;31863:3;31804:67;:::i;:::-;31797:74;;31880:93;31969:3;31880:93;:::i;:::-;31998:2;31993:3;31989:12;31982:19;;31641:366;;;:::o;32013:::-;32155:3;32176:67;32240:2;32235:3;32176:67;:::i;:::-;32169:74;;32252:93;32341:3;32252:93;:::i;:::-;32370:2;32365:3;32361:12;32354:19;;32013:366;;;:::o;32463:1374::-;32604:4;32599:3;32595:14;32691:4;32684:5;32680:16;32674:23;32710:63;32767:4;32762:3;32758:14;32744:12;32710:63;:::i;:::-;32619:164;32867:4;32860:5;32856:16;32850:23;32886:63;32943:4;32938:3;32934:14;32920:12;32886:63;:::i;:::-;32793:166;33043:4;33036:5;33032:16;33026:23;33062:63;33119:4;33114:3;33110:14;33096:12;33062:63;:::i;:::-;32969:166;33223:4;33216:5;33212:16;33206:23;33242:63;33299:4;33294:3;33290:14;33276:12;33242:63;:::i;:::-;33145:170;33399:4;33392:5;33388:16;33382:23;33418:57;33469:4;33464:3;33460:14;33446:12;33418:57;:::i;:::-;33325:160;33571:4;33564:5;33560:16;33554:23;33590:57;33641:4;33636:3;33632:14;33618:12;33590:57;:::i;:::-;33495:162;33744:4;33737:5;33733:16;33727:23;33763:57;33814:4;33809:3;33805:14;33791:12;33763:57;:::i;:::-;33667:163;32573:1264;32463:1374;;:::o;33843:108::-;33920:24;33938:5;33920:24;:::i;:::-;33915:3;33908:37;33843:108;;:::o;33957:118::-;34044:24;34062:5;34044:24;:::i;:::-;34039:3;34032:37;33957:118;;:::o;34081:256::-;34193:3;34208:75;34279:3;34270:6;34208:75;:::i;:::-;34308:2;34303:3;34299:12;34292:19;;34328:3;34321:10;;34081:256;;;;:::o;34343:269::-;34472:3;34494:92;34582:3;34573:6;34494:92;:::i;:::-;34487:99;;34603:3;34596:10;;34343:269;;;;:::o;34618:429::-;34795:3;34817:92;34905:3;34896:6;34817:92;:::i;:::-;34810:99;;34926:95;35017:3;35008:6;34926:95;:::i;:::-;34919:102;;35038:3;35031:10;;34618:429;;;;;:::o;35053:379::-;35237:3;35259:147;35402:3;35259:147;:::i;:::-;35252:154;;35423:3;35416:10;;35053:379;;;:::o;35438:222::-;35531:4;35569:2;35558:9;35554:18;35546:26;;35582:71;35650:1;35639:9;35635:17;35626:6;35582:71;:::i;:::-;35438:222;;;;:::o;35666:1053::-;35989:4;36027:3;36016:9;36012:19;36004:27;;36041:71;36109:1;36098:9;36094:17;36085:6;36041:71;:::i;:::-;36122:72;36190:2;36179:9;36175:18;36166:6;36122:72;:::i;:::-;36241:9;36235:4;36231:20;36226:2;36215:9;36211:18;36204:48;36269:108;36372:4;36363:6;36269:108;:::i;:::-;36261:116;;36424:9;36418:4;36414:20;36409:2;36398:9;36394:18;36387:48;36452:108;36555:4;36546:6;36452:108;:::i;:::-;36444:116;;36608:9;36602:4;36598:20;36592:3;36581:9;36577:19;36570:49;36636:76;36707:4;36698:6;36636:76;:::i;:::-;36628:84;;35666:1053;;;;;;;;:::o;36725:751::-;36948:4;36986:3;36975:9;36971:19;36963:27;;37000:71;37068:1;37057:9;37053:17;37044:6;37000:71;:::i;:::-;37081:72;37149:2;37138:9;37134:18;37125:6;37081:72;:::i;:::-;37163;37231:2;37220:9;37216:18;37207:6;37163:72;:::i;:::-;37245;37313:2;37302:9;37298:18;37289:6;37245:72;:::i;:::-;37365:9;37359:4;37355:20;37349:3;37338:9;37334:19;37327:49;37393:76;37464:4;37455:6;37393:76;:::i;:::-;37385:84;;36725:751;;;;;;;;:::o;37482:373::-;37625:4;37663:2;37652:9;37648:18;37640:26;;37712:9;37706:4;37702:20;37698:1;37687:9;37683:17;37676:47;37740:108;37843:4;37834:6;37740:108;:::i;:::-;37732:116;;37482:373;;;;:::o;37861:634::-;38082:4;38120:2;38109:9;38105:18;38097:26;;38169:9;38163:4;38159:20;38155:1;38144:9;38140:17;38133:47;38197:108;38300:4;38291:6;38197:108;:::i;:::-;38189:116;;38352:9;38346:4;38342:20;38337:2;38326:9;38322:18;38315:48;38380:108;38483:4;38474:6;38380:108;:::i;:::-;38372:116;;37861:634;;;;;:::o;38501:210::-;38588:4;38626:2;38615:9;38611:18;38603:26;;38639:65;38701:1;38690:9;38686:17;38677:6;38639:65;:::i;:::-;38501:210;;;;:::o;38717:313::-;38830:4;38868:2;38857:9;38853:18;38845:26;;38917:9;38911:4;38907:20;38903:1;38892:9;38888:17;38881:47;38945:78;39018:4;39009:6;38945:78;:::i;:::-;38937:86;;38717:313;;;;:::o;39036:419::-;39202:4;39240:2;39229:9;39225:18;39217:26;;39289:9;39283:4;39279:20;39275:1;39264:9;39260:17;39253:47;39317:131;39443:4;39317:131;:::i;:::-;39309:139;;39036:419;;;:::o;39461:::-;39627:4;39665:2;39654:9;39650:18;39642:26;;39714:9;39708:4;39704:20;39700:1;39689:9;39685:17;39678:47;39742:131;39868:4;39742:131;:::i;:::-;39734:139;;39461:419;;;:::o;39886:::-;40052:4;40090:2;40079:9;40075:18;40067:26;;40139:9;40133:4;40129:20;40125:1;40114:9;40110:17;40103:47;40167:131;40293:4;40167:131;:::i;:::-;40159:139;;39886:419;;;:::o;40311:::-;40477:4;40515:2;40504:9;40500:18;40492:26;;40564:9;40558:4;40554:20;40550:1;40539:9;40535:17;40528:47;40592:131;40718:4;40592:131;:::i;:::-;40584:139;;40311:419;;;:::o;40736:::-;40902:4;40940:2;40929:9;40925:18;40917:26;;40989:9;40983:4;40979:20;40975:1;40964:9;40960:17;40953:47;41017:131;41143:4;41017:131;:::i;:::-;41009:139;;40736:419;;;:::o;41161:::-;41327:4;41365:2;41354:9;41350:18;41342:26;;41414:9;41408:4;41404:20;41400:1;41389:9;41385:17;41378:47;41442:131;41568:4;41442:131;:::i;:::-;41434:139;;41161:419;;;:::o;41586:::-;41752:4;41790:2;41779:9;41775:18;41767:26;;41839:9;41833:4;41829:20;41825:1;41814:9;41810:17;41803:47;41867:131;41993:4;41867:131;:::i;:::-;41859:139;;41586:419;;;:::o;42011:::-;42177:4;42215:2;42204:9;42200:18;42192:26;;42264:9;42258:4;42254:20;42250:1;42239:9;42235:17;42228:47;42292:131;42418:4;42292:131;:::i;:::-;42284:139;;42011:419;;;:::o;42436:::-;42602:4;42640:2;42629:9;42625:18;42617:26;;42689:9;42683:4;42679:20;42675:1;42664:9;42660:17;42653:47;42717:131;42843:4;42717:131;:::i;:::-;42709:139;;42436:419;;;:::o;42861:::-;43027:4;43065:2;43054:9;43050:18;43042:26;;43114:9;43108:4;43104:20;43100:1;43089:9;43085:17;43078:47;43142:131;43268:4;43142:131;:::i;:::-;43134:139;;42861:419;;;:::o;43286:::-;43452:4;43490:2;43479:9;43475:18;43467:26;;43539:9;43533:4;43529:20;43525:1;43514:9;43510:17;43503:47;43567:131;43693:4;43567:131;:::i;:::-;43559:139;;43286:419;;;:::o;43711:::-;43877:4;43915:2;43904:9;43900:18;43892:26;;43964:9;43958:4;43954:20;43950:1;43939:9;43935:17;43928:47;43992:131;44118:4;43992:131;:::i;:::-;43984:139;;43711:419;;;:::o;44136:::-;44302:4;44340:2;44329:9;44325:18;44317:26;;44389:9;44383:4;44379:20;44375:1;44364:9;44360:17;44353:47;44417:131;44543:4;44417:131;:::i;:::-;44409:139;;44136:419;;;:::o;44561:::-;44727:4;44765:2;44754:9;44750:18;44742:26;;44814:9;44808:4;44804:20;44800:1;44789:9;44785:17;44778:47;44842:131;44968:4;44842:131;:::i;:::-;44834:139;;44561:419;;;:::o;44986:::-;45152:4;45190:2;45179:9;45175:18;45167:26;;45239:9;45233:4;45229:20;45225:1;45214:9;45210:17;45203:47;45267:131;45393:4;45267:131;:::i;:::-;45259:139;;44986:419;;;:::o;45411:::-;45577:4;45615:2;45604:9;45600:18;45592:26;;45664:9;45658:4;45654:20;45650:1;45639:9;45635:17;45628:47;45692:131;45818:4;45692:131;:::i;:::-;45684:139;;45411:419;;;:::o;45836:::-;46002:4;46040:2;46029:9;46025:18;46017:26;;46089:9;46083:4;46079:20;46075:1;46064:9;46060:17;46053:47;46117:131;46243:4;46117:131;:::i;:::-;46109:139;;45836:419;;;:::o;46261:::-;46427:4;46465:2;46454:9;46450:18;46442:26;;46514:9;46508:4;46504:20;46500:1;46489:9;46485:17;46478:47;46542:131;46668:4;46542:131;:::i;:::-;46534:139;;46261:419;;;:::o;46686:::-;46852:4;46890:2;46879:9;46875:18;46867:26;;46939:9;46933:4;46929:20;46925:1;46914:9;46910:17;46903:47;46967:131;47093:4;46967:131;:::i;:::-;46959:139;;46686:419;;;:::o;47111:::-;47277:4;47315:2;47304:9;47300:18;47292:26;;47364:9;47358:4;47354:20;47350:1;47339:9;47335:17;47328:47;47392:131;47518:4;47392:131;:::i;:::-;47384:139;;47111:419;;;:::o;47536:::-;47702:4;47740:2;47729:9;47725:18;47717:26;;47789:9;47783:4;47779:20;47775:1;47764:9;47760:17;47753:47;47817:131;47943:4;47817:131;:::i;:::-;47809:139;;47536:419;;;:::o;47961:::-;48127:4;48165:2;48154:9;48150:18;48142:26;;48214:9;48208:4;48204:20;48200:1;48189:9;48185:17;48178:47;48242:131;48368:4;48242:131;:::i;:::-;48234:139;;47961:419;;;:::o;48386:::-;48552:4;48590:2;48579:9;48575:18;48567:26;;48639:9;48633:4;48629:20;48625:1;48614:9;48610:17;48603:47;48667:131;48793:4;48667:131;:::i;:::-;48659:139;;48386:419;;;:::o;48811:::-;48977:4;49015:2;49004:9;49000:18;48992:26;;49064:9;49058:4;49054:20;49050:1;49039:9;49035:17;49028:47;49092:131;49218:4;49092:131;:::i;:::-;49084:139;;48811:419;;;:::o;49236:311::-;49373:4;49411:3;49400:9;49396:19;49388:27;;49425:115;49537:1;49526:9;49522:17;49513:6;49425:115;:::i;:::-;49236:311;;;;:::o;49553:222::-;49646:4;49684:2;49673:9;49669:18;49661:26;;49697:71;49765:1;49754:9;49750:17;49741:6;49697:71;:::i;:::-;49553:222;;;;:::o;49781:332::-;49902:4;49940:2;49929:9;49925:18;49917:26;;49953:71;50021:1;50010:9;50006:17;49997:6;49953:71;:::i;:::-;50034:72;50102:2;50091:9;50087:18;50078:6;50034:72;:::i;:::-;49781:332;;;;;:::o;50119:850::-;50362:4;50400:3;50389:9;50385:19;50377:27;;50414:71;50482:1;50471:9;50467:17;50458:6;50414:71;:::i;:::-;50495:72;50563:2;50552:9;50548:18;50539:6;50495:72;:::i;:::-;50577;50645:2;50634:9;50630:18;50621:6;50577:72;:::i;:::-;50659;50727:2;50716:9;50712:18;50703:6;50659:72;:::i;:::-;50741:67;50803:3;50792:9;50788:19;50779:6;50741:67;:::i;:::-;50818;50880:3;50869:9;50865:19;50856:6;50818:67;:::i;:::-;50895;50957:3;50946:9;50942:19;50933:6;50895:67;:::i;:::-;50119:850;;;;;;;;;;:::o;50975:129::-;51009:6;51036:20;;:::i;:::-;51026:30;;51065:33;51093:4;51085:6;51065:33;:::i;:::-;50975:129;;;:::o;51110:75::-;51143:6;51176:2;51170:9;51160:19;;51110:75;:::o;51191:311::-;51268:4;51358:18;51350:6;51347:30;51344:56;;;51380:18;;:::i;:::-;51344:56;51430:4;51422:6;51418:17;51410:25;;51490:4;51484;51480:15;51472:23;;51191:311;;;:::o;51508:::-;51585:4;51675:18;51667:6;51664:30;51661:56;;;51697:18;;:::i;:::-;51661:56;51747:4;51739:6;51735:17;51727:25;;51807:4;51801;51797:15;51789:23;;51508:311;;;:::o;51825:307::-;51886:4;51976:18;51968:6;51965:30;51962:56;;;51998:18;;:::i;:::-;51962:56;52036:29;52058:6;52036:29;:::i;:::-;52028:37;;52120:4;52114;52110:15;52102:23;;51825:307;;;:::o;52138:308::-;52200:4;52290:18;52282:6;52279:30;52276:56;;;52312:18;;:::i;:::-;52276:56;52350:29;52372:6;52350:29;:::i;:::-;52342:37;;52434:4;52428;52424:15;52416:23;;52138:308;;;:::o;52452:132::-;52519:4;52542:3;52534:11;;52572:4;52567:3;52563:14;52555:22;;52452:132;;;:::o;52590:141::-;52639:4;52662:3;52654:11;;52685:3;52682:1;52675:14;52719:4;52716:1;52706:18;52698:26;;52590:141;;;:::o;52737:114::-;52804:6;52838:5;52832:12;52822:22;;52737:114;;;:::o;52857:98::-;52908:6;52942:5;52936:12;52926:22;;52857:98;;;:::o;52961:99::-;53013:6;53047:5;53041:12;53031:22;;52961:99;;;:::o;53066:113::-;53136:4;53168;53163:3;53159:14;53151:22;;53066:113;;;:::o;53185:184::-;53284:11;53318:6;53313:3;53306:19;53358:4;53353:3;53349:14;53334:29;;53185:184;;;;:::o;53375:168::-;53458:11;53492:6;53487:3;53480:19;53532:4;53527:3;53523:14;53508:29;;53375:168;;;;:::o;53549:147::-;53650:11;53687:3;53672:18;;53549:147;;;;:::o;53702:169::-;53786:11;53820:6;53815:3;53808:19;53860:4;53855:3;53851:14;53836:29;;53702:169;;;;:::o;53877:148::-;53979:11;54016:3;54001:18;;53877:148;;;;:::o;54031:305::-;54071:3;54090:20;54108:1;54090:20;:::i;:::-;54085:25;;54124:20;54142:1;54124:20;:::i;:::-;54119:25;;54278:1;54210:66;54206:74;54203:1;54200:81;54197:107;;;54284:18;;:::i;:::-;54197:107;54328:1;54325;54321:9;54314:16;;54031:305;;;;:::o;54342:185::-;54382:1;54399:20;54417:1;54399:20;:::i;:::-;54394:25;;54433:20;54451:1;54433:20;:::i;:::-;54428:25;;54472:1;54462:35;;54477:18;;:::i;:::-;54462:35;54519:1;54516;54512:9;54507:14;;54342:185;;;;:::o;54533:348::-;54573:7;54596:20;54614:1;54596:20;:::i;:::-;54591:25;;54630:20;54648:1;54630:20;:::i;:::-;54625:25;;54818:1;54750:66;54746:74;54743:1;54740:81;54735:1;54728:9;54721:17;54717:105;54714:131;;;54825:18;;:::i;:::-;54714:131;54873:1;54870;54866:9;54855:20;;54533:348;;;;:::o;54887:191::-;54927:4;54947:20;54965:1;54947:20;:::i;:::-;54942:25;;54981:20;54999:1;54981:20;:::i;:::-;54976:25;;55020:1;55017;55014:8;55011:34;;;55025:18;;:::i;:::-;55011:34;55070:1;55067;55063:9;55055:17;;54887:191;;;;:::o;55084:96::-;55121:7;55150:24;55168:5;55150:24;:::i;:::-;55139:35;;55084:96;;;:::o;55186:90::-;55220:7;55263:5;55256:13;55249:21;55238:32;;55186:90;;;:::o;55282:77::-;55319:7;55348:5;55337:16;;55282:77;;;:::o;55365:149::-;55401:7;55441:66;55434:5;55430:78;55419:89;;55365:149;;;:::o;55520:126::-;55557:7;55597:42;55590:5;55586:54;55575:65;;55520:126;;;:::o;55652:77::-;55689:7;55718:5;55707:16;;55652:77;;;:::o;55735:154::-;55819:6;55814:3;55809;55796:30;55881:1;55872:6;55867:3;55863:16;55856:27;55735:154;;;:::o;55895:307::-;55963:1;55973:113;55987:6;55984:1;55981:13;55973:113;;;56072:1;56067:3;56063:11;56057:18;56053:1;56048:3;56044:11;56037:39;56009:2;56006:1;56002:10;55997:15;;55973:113;;;56104:6;56101:1;56098:13;56095:101;;;56184:1;56175:6;56170:3;56166:16;56159:27;56095:101;55944:258;55895:307;;;:::o;56208:320::-;56252:6;56289:1;56283:4;56279:12;56269:22;;56336:1;56330:4;56326:12;56357:18;56347:81;;56413:4;56405:6;56401:17;56391:27;;56347:81;56475:2;56467:6;56464:14;56444:18;56441:38;56438:84;;;56494:18;;:::i;:::-;56438:84;56259:269;56208:320;;;:::o;56534:281::-;56617:27;56639:4;56617:27;:::i;:::-;56609:6;56605:40;56747:6;56735:10;56732:22;56711:18;56699:10;56696:34;56693:62;56690:88;;;56758:18;;:::i;:::-;56690:88;56798:10;56794:2;56787:22;56577:238;56534:281;;:::o;56821:233::-;56860:3;56883:24;56901:5;56883:24;:::i;:::-;56874:33;;56929:66;56922:5;56919:77;56916:103;;;56999:18;;:::i;:::-;56916:103;57046:1;57039:5;57035:13;57028:20;;56821:233;;;:::o;57060:100::-;57099:7;57128:26;57148:5;57128:26;:::i;:::-;57117:37;;57060:100;;;:::o;57166:94::-;57205:7;57234:20;57248:5;57234:20;:::i;:::-;57223:31;;57166:94;;;:::o;57266:176::-;57298:1;57315:20;57333:1;57315:20;:::i;:::-;57310:25;;57349:20;57367:1;57349:20;:::i;:::-;57344:25;;57388:1;57378:35;;57393:18;;:::i;:::-;57378:35;57434:1;57431;57427:9;57422:14;;57266:176;;;;:::o;57448:180::-;57496:77;57493:1;57486:88;57593:4;57590:1;57583:15;57617:4;57614:1;57607:15;57634:180;57682:77;57679:1;57672:88;57779:4;57776:1;57769:15;57803:4;57800:1;57793:15;57820:180;57868:77;57865:1;57858:88;57965:4;57962:1;57955:15;57989:4;57986:1;57979:15;58006:180;58054:77;58051:1;58044:88;58151:4;58148:1;58141:15;58175:4;58172:1;58165:15;58192:180;58240:77;58237:1;58230:88;58337:4;58334:1;58327:15;58361:4;58358:1;58351:15;58378:183;58413:3;58451:1;58433:16;58430:23;58427:128;;;58489:1;58486;58483;58468:23;58511:34;58542:1;58536:8;58511:34;:::i;:::-;58504:41;;58427:128;58378:183;:::o;58567:117::-;58676:1;58673;58666:12;58690:117;58799:1;58796;58789:12;58813:117;58922:1;58919;58912:12;58936:117;59045:1;59042;59035:12;59059:117;59168:1;59165;59158:12;59182:117;59291:1;59288;59281:12;59305:102;59346:6;59397:2;59393:7;59388:2;59381:5;59377:14;59373:28;59363:38;;59305:102;;;:::o;59413:94::-;59446:8;59494:5;59490:2;59486:14;59465:35;;59413:94;;;:::o;59513:106::-;59557:8;59606:5;59601:3;59597:15;59576:36;;59513:106;;;:::o;59625:239::-;59765:34;59761:1;59753:6;59749:14;59742:58;59834:22;59829:2;59821:6;59817:15;59810:47;59625:239;:::o;59870:169::-;60010:21;60006:1;59998:6;59994:14;59987:45;59870:169;:::o;60045:227::-;60185:34;60181:1;60173:6;60169:14;60162:58;60254:10;60249:2;60241:6;60237:15;60230:35;60045:227;:::o;60278:167::-;60418:19;60414:1;60406:6;60402:14;60395:43;60278:167;:::o;60451:230::-;60591:34;60587:1;60579:6;60575:14;60568:58;60660:13;60655:2;60647:6;60643:15;60636:38;60451:230;:::o;60687:225::-;60827:34;60823:1;60815:6;60811:14;60804:58;60896:8;60891:2;60883:6;60879:15;60872:33;60687:225;:::o;60918:223::-;61058:34;61054:1;61046:6;61042:14;61035:58;61127:6;61122:2;61114:6;61110:15;61103:31;60918:223;:::o;61147:228::-;61287:34;61283:1;61275:6;61271:14;61264:58;61356:11;61351:2;61343:6;61339:15;61332:36;61147:228;:::o;61381:168::-;61521:20;61517:1;61509:6;61505:14;61498:44;61381:168;:::o;61555:175::-;61695:27;61691:1;61683:6;61679:14;61672:51;61555:175;:::o;61736:180::-;61876:32;61872:1;61864:6;61860:14;61853:56;61736:180;:::o;61922:224::-;62062:34;62058:1;62050:6;62046:14;62039:58;62131:7;62126:2;62118:6;62114:15;62107:32;61922:224;:::o;62152:237::-;62292:34;62288:1;62280:6;62276:14;62269:58;62361:20;62356:2;62348:6;62344:15;62337:45;62152:237;:::o;62395:222::-;62535:34;62531:1;62523:6;62519:14;62512:58;62604:5;62599:2;62591:6;62587:15;62580:30;62395:222;:::o;62623:229::-;62763:34;62759:1;62751:6;62747:14;62740:58;62832:12;62827:2;62819:6;62815:15;62808:37;62623:229;:::o;62858:182::-;62998:34;62994:1;62986:6;62982:14;62975:58;62858:182;:::o;63046:180::-;63186:32;63182:1;63174:6;63170:14;63163:56;63046:180;:::o;63232:221::-;63372:34;63368:1;63360:6;63356:14;63349:58;63441:4;63436:2;63428:6;63424:15;63417:29;63232:221;:::o;63459:114::-;;:::o;63579:163::-;63719:15;63715:1;63707:6;63703:14;63696:39;63579:163;:::o;63748:228::-;63888:34;63884:1;63876:6;63872:14;63865:58;63957:11;63952:2;63944:6;63940:15;63933:36;63748:228;:::o;63982:::-;64122:34;64118:1;64110:6;64106:14;64099:58;64191:11;64186:2;64178:6;64174:15;64167:36;63982:228;:::o;64216:227::-;64356:34;64352:1;64344:6;64340:14;64333:58;64425:10;64420:2;64412:6;64408:15;64401:35;64216:227;:::o;64449:220::-;64589:34;64585:1;64577:6;64573:14;64566:58;64658:3;64653:2;64645:6;64641:15;64634:28;64449:220;:::o;64675:711::-;64714:3;64752:4;64734:16;64731:26;64728:39;;;64760:5;;64728:39;64789:20;;:::i;:::-;64864:1;64846:16;64842:24;64839:1;64833:4;64818:49;64897:4;64891:11;64996:16;64989:4;64981:6;64977:17;64974:39;64941:18;64933:6;64930:30;64914:113;64911:146;;;65042:5;;;;64911:146;65088:6;65082:4;65078:17;65124:3;65118:10;65151:18;65143:6;65140:30;65137:43;;;65173:5;;;;;;65137:43;65221:6;65214:4;65209:3;65205:14;65201:27;65280:1;65262:16;65258:24;65252:4;65248:35;65243:3;65240:44;65237:57;;;65287:5;;;;;;;65237:57;65304;65352:6;65346:4;65342:17;65334:6;65330:30;65324:4;65304:57;:::i;:::-;65377:3;65370:10;;64718:668;;;;;64675:711;;:::o;65392:122::-;65465:24;65483:5;65465:24;:::i;:::-;65458:5;65455:35;65445:63;;65504:1;65501;65494:12;65445:63;65392:122;:::o;65520:116::-;65590:21;65605:5;65590:21;:::i;:::-;65583:5;65580:32;65570:60;;65626:1;65623;65616:12;65570:60;65520:116;:::o;65642:122::-;65715:24;65733:5;65715:24;:::i;:::-;65708:5;65705:35;65695:63;;65754:1;65751;65744:12;65695:63;65642:122;:::o;65770:120::-;65842:23;65859:5;65842:23;:::i;:::-;65835:5;65832:34;65822:62;;65880:1;65877;65870:12;65822:62;65770:120;:::o;65896:122::-;65969:24;65987:5;65969:24;:::i;:::-;65962:5;65959:35;65949:63;;66008:1;66005;65998:12;65949:63;65896:122;:::o

Swarm Source

ipfs://219c104c5aeb9c898bc82471b51574e5f1842d1e2dd8d57ca577b04476a60504
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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