ETH Price: $2,438.14 (+4.62%)

Token

 

Overview

Max Total Supply

8

Holders

7

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x191F0efC18454A91685Bd50308307dcA6227a2bf
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:
Metacauses

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts 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/contracts/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/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts 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/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts 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/Metacauses.sol


/*
 _____ ______   _______  _________  ________  ________  ________  ___  ___  ________  _______   ________      
|\   _ \  _   \|\  ___ \|\___   ___\\   __  \|\   ____\|\   __  \|\  \|\  \|\   ____\|\  ___ \ |\   ____\     
\ \  \\\__\ \  \ \   __/\|___ \  \_\ \  \|\  \ \  \___|\ \  \|\  \ \  \\\  \ \  \___|\ \   __/|\ \  \___|_    
 \ \  \\|__| \  \ \  \_|/__  \ \  \ \ \   __  \ \  \    \ \   __  \ \  \\\  \ \_____  \ \  \_|/_\ \_____  \   
  \ \  \    \ \  \ \  \_|\ \  \ \  \ \ \  \ \  \ \  \____\ \  \ \  \ \  \\\  \|____|\  \ \  \_|\ \|____|\  \  
   \ \__\    \ \__\ \_______\  \ \__\ \ \__\ \__\ \_______\ \__\ \__\ \_______\____\_\  \ \_______\____\_\  \ 
    \|__|     \|__|\|_______|   \|__|  \|__|\|__|\|_______|\|__|\|__|\|_______|\_________\|_______|\_________\
                                                                              \|_________|        \|_________|
                                                                                                              
*/

pragma solidity ^0.8.7;




contract Metacauses is ERC1155, Ownable {
   /*******************************************************
    *@dev: Sale Status incase Contract needs to be paused.*
    *******************************************************/
    bool public pause = false; 
    /******************************************************
     *     @dev: Creation of price rates and tier IDs     *
     ******************************************************/
    uint256 public constant BRONZE_PRICE = 0.01 ether;
    uint256 public constant SILVER_PRICE = 0.03 ether;
    uint256 public constant GOLD_PRICE = 0.07 ether;
    uint256 public constant PLAT_PRICE = 0.15 ether;
    uint256 public constant DIAMOND_PRICE = 0.25 ether;

    uint256 public constant BRONZE_ID = 1; 
    uint256 public constant SILVER_ID = 2; 
    uint256 public constant GOLD_ID = 3;
    uint256 public constant PLAT_ID = 4;
    uint256 public constant DIAMOND_ID = 5;


    constructor() ERC1155("https://ipfs.io/ipfs/QmRvccL8mQdWGdXwTf3d4u8F6R11nWysH75LFE23NCKELj/{id}.json") {}

    /******************************************************
     *@dev: Start of the mint functions based on the tier.*
     ******************************************************/


    function bronzeMint(uint256 id, uint256 amount) public payable {
        require(id == BRONZE_ID, "Not the correct token for this mint function.");
        require(!pause, "Sale is not live!");
        require(amount > 0, "You must mint atleast one token."); 
        require(msg.value >= amount * BRONZE_PRICE, "Insufficent Funds!"); 

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

    function silverMint(uint256 id, uint256 amount) public payable {
        require(id == SILVER_ID, "Not the correct token for this mint function.");
        require(!pause, "Sale is not live!");
        require(amount > 0, "You must mint atleast one token."); 
        require(msg.value >= amount * SILVER_PRICE, "Insufficent Funds!"); 

        _mint(msg.sender, id, amount, ""); 
    }
    function goldMint(uint256 id, uint256 amount) public payable {
        require(id == GOLD_ID, "Not the correct token for this mint function.");
        require(!pause, "Sale is not live!");
        require(amount > 0, "You must mint atleast one token."); 
        require(msg.value >= amount * GOLD_PRICE, "Insufficent Funds!"); 

        _mint(msg.sender, id, amount, ""); 
    }
    function platMint(uint256 id, uint256 amount) public payable {
        require(id == PLAT_ID, "Not the correct token for this mint function.");
        require(!pause, "Sale is not live!");
        require(amount > 0, "You must mint atleast one token."); 
        require(msg.value >= amount * PLAT_PRICE, "Insufficent Funds!"); 

        _mint(msg.sender, id, amount, ""); 
    }
    function diamondMint(uint256 id, uint256 amount) public payable {
        require(id == DIAMOND_ID, "Not the correct token for this mint function.");
        require(!pause, "Sale is not live!");
        require(amount > 0, "You must mint atleast one token."); 
        require(msg.value >= amount * DIAMOND_PRICE, "Insufficent Funds!"); 

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

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

    function paused(bool _state) external onlyOwner {
        pause = _state;
    }

    /***********************************************************
     *@dev: Concatenation of the URI to coordinate with Opensea*
     ***********************************************************/

    function uri(uint256 _tokenid) override public pure returns (string memory) {
        return string(
            abi.encodePacked(
                "https://ipfs.io/ipfs/QmRvccL8mQdWGdXwTf3d4u8F6R11nWysH75LFE23NCKELj/",
                Strings.toString(_tokenid),".json")
        );
    }

    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance); 
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"BRONZE_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRONZE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DIAMOND_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DIAMOND_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOLD_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOLD_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAT_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILVER_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILVER_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bronzeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"diamondMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"goldMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"paused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"platMint","outputs":[],"stateMutability":"payable","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":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"silverMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenid","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060800160405280604d81526020016200431a604d913962000058816200007f60201b60201c565b50620000796200006d6200009b60201b60201c565b620000a360201b60201c565b6200027e565b80600290805190602001906200009792919062000169565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001779062000219565b90600052602060002090601f0160209004810192826200019b5760008555620001e7565b82601f10620001b657805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e6578251825591602001919060010190620001c9565b5b509050620001f69190620001fa565b5090565b5b8082111562000215576000816000905550600101620001fb565b5090565b600060028204905060018216806200023257607f821691505b602082108114156200024957620002486200024f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61408c806200028e6000396000f3fe6080604052600436106101cc5760003560e01c80638456cb59116100f7578063b84c185e11610095578063e985e9c511610064578063e985e9c5146105fc578063f1cbf59c14610639578063f242432a14610664578063f2fde38b1461068d576101cc565b8063b84c185e14610550578063c0fbed021461057b578063d04e24da146105a6578063e18ce34a146105d1576101cc565b8063a56538e0116100d1578063a56538e0146104d1578063a5ae5222146104fc578063a6feed8e14610518578063b7a5b86414610534576101cc565b80638456cb59146104525780638da5cb5b1461047d578063a22cb465146104a8576101cc565b8063485580461161016f578063715018a61161013e578063715018a6146103cb5780637d00aa97146103e25780638281b3ac146103fe578063837150cf14610429576101cc565b8063485580461461031c5780634e1273f4146103475780635dbc6d6c14610384578063639d3f06146103af576101cc565b80630344a7fe116101ab5780630344a7fe146102745780630e89341c1461029f5780632eb2c2d6146102dc5780633ccfd60b14610305576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612af1565b6106b6565b6040516102059190613494565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612bd6565b61077f565b6040516102429190613237565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612c30565b610861565b005b34801561028057600080fd5b506102896108e9565b6040516102969190613494565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612c79565b6108f5565b6040516102d39190613252565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe919061294b565b610926565b005b34801561031157600080fd5b5061031a6109c7565b005b34801561032857600080fd5b50610331610a93565b60405161033e9190613494565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612b31565b610a98565b60405161037b91906131de565b60405180910390f35b34801561039057600080fd5b50610399610bb1565b6040516103a69190613494565b60405180910390f35b6103c960048036038101906103c49190612ca6565b610bbc565b005b3480156103d757600080fd5b506103e0610d06565b005b6103fc60048036038101906103f79190612ca6565b610d8e565b005b34801561040a57600080fd5b50610413610ed8565b6040516104209190613494565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612ba9565b610ee3565b005b34801561045e57600080fd5b50610467610f7c565b6040516104749190613237565b60405180910390f35b34801561048957600080fd5b50610492610f8f565b60405161049f9190613101565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ab1565b610fb9565b005b3480156104dd57600080fd5b506104e6610fcf565b6040516104f39190613494565b60405180910390f35b61051660048036038101906105119190612ca6565b610fd4565b005b610532600480360381019061052d9190612ca6565b61111e565b005b61054e60048036038101906105499190612ca6565b611269565b005b34801561055c57600080fd5b506105656113b4565b6040516105729190613494565b60405180910390f35b34801561058757600080fd5b506105906113b9565b60405161059d9190613494565b60405180910390f35b3480156105b257600080fd5b506105bb6113c4565b6040516105c89190613494565b60405180910390f35b3480156105dd57600080fd5b506105e66113d0565b6040516105f39190613494565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e919061290b565b6113d5565b6040516106309190613237565b60405180910390f35b34801561064557600080fd5b5061064e611469565b60405161065b9190613494565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612a1a565b61146e565b005b34801561069957600080fd5b506106b460048036038101906106af91906128de565b61150f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e906132b4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085a575061085982611607565b5b9050919050565b610869611671565b73ffffffffffffffffffffffffffffffffffffffff16610887610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490613394565b60405180910390fd5b6108e681611679565b50565b670214e8348c4f000081565b606061090082611693565b60405160200161091091906130d4565b6040516020818303038152906040529050919050565b61092e611671565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061097457506109738561096e611671565b6113d5565b5b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613354565b60405180910390fd5b6109c085858585856117f4565b5050505050565b6109cf611671565b73ffffffffffffffffffffffffffffffffffffffff166109ed610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90613394565b60405180910390fd5b610a4b610f8f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a90573d6000803e3d6000fd5b50565b600481565b60608151835114610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613434565b60405180910390fd5b6000835167ffffffffffffffff811115610afb57610afa613997565b5b604051908082528060200260200182016040528015610b295781602001602082028036833780820191505090505b50905060005b8451811015610ba657610b76858281518110610b4e57610b4d613968565b5b6020026020010151858381518110610b6957610b68613968565b5b60200260200101516106b6565b828281518110610b8957610b88613968565b5b60200260200101818152505080610b9f90613861565b9050610b2f565b508091505092915050565b666a94d74f43000081565b60028214610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690613314565b60405180910390fd5b600360149054906101000a900460ff1615610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c46906133f4565b60405180910390fd5b60008111610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c89906133b4565b60405180910390fd5b666a94d74f43000081610ca591906136ba565b341015610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde906133d4565b60405180910390fd5b610d0233838360405180602001604052806000815250611b08565b5050565b610d0e611671565b73ffffffffffffffffffffffffffffffffffffffff16610d2c610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990613394565b60405180910390fd5b610d8c6000611c9e565b565b60018214610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890613314565b60405180910390fd5b600360149054906101000a900460ff1615610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e18906133f4565b60405180910390fd5b60008111610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906133b4565b60405180910390fd5b662386f26fc1000081610e7791906136ba565b341015610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906133d4565b60405180910390fd5b610ed433838360405180602001604052806000815250611b08565b5050565b66f8b0a10e47000081565b610eeb611671565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690613394565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b600360149054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fcb610fc4611671565b8383611d64565b5050565b600281565b60038214611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613314565b60405180910390fd5b600360149054906101000a900460ff1615611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906133f4565b60405180910390fd5b600081116110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906133b4565b60405180910390fd5b66f8b0a10e470000816110bd91906136ba565b3410156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f6906133d4565b60405180910390fd5b61111a33838360405180602001604052806000815250611b08565b5050565b60048214611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613314565b60405180910390fd5b600360149054906101000a900460ff16156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906133f4565b60405180910390fd5b600081116111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906133b4565b60405180910390fd5b670214e8348c4f00008161120891906136ba565b34101561124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906133d4565b60405180910390fd5b61126533838360405180602001604052806000815250611b08565b5050565b600582146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613314565b60405180910390fd5b600360149054906101000a900460ff16156112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f3906133f4565b60405180910390fd5b6000811161133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906133b4565b60405180910390fd5b6703782dace9d900008161135391906136ba565b341015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c906133d4565b60405180910390fd5b6113b033838360405180602001604052806000815250611b08565b5050565b600581565b662386f26fc1000081565b6703782dace9d9000081565b600381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600181565b611476611671565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bc57506114bb856114b6611671565b6113d5565b5b6114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906132f4565b60405180910390fd5b6115088585858585611ed1565b5050505050565b611517611671565b73ffffffffffffffffffffffffffffffffffffffff16611535610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f2906132d4565b60405180910390fd5b61160481611c9e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061168f9291906125b6565b5050565b606060008214156116db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117ef565b600082905060005b6000821461170d5780806116f690613861565b915050600a826117069190613689565b91506116e3565b60008167ffffffffffffffff81111561172957611728613997565b5b6040519080825280601f01601f19166020018201604052801561175b5781602001600182028036833780820191505090505b5090505b600085146117e8576001826117749190613714565b9150600a8561178391906138aa565b603061178f9190613633565b60f81b8183815181106117a5576117a4613968565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117e19190613689565b945061175f565b8093505050505b919050565b8151835114611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613334565b60405180910390fd5b60006118b2611671565b90506118c2818787878787612153565b60005b8451811015611a735760008582815181106118e3576118e2613968565b5b60200260200101519050600085838151811061190257611901613968565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613374565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a589190613633565b9250508190555050505080611a6c90613861565b90506118c5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611aea929190613200565b60405180910390a4611b0081878787878761215b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613474565b60405180910390fd5b6000611b82611671565b9050611ba381600087611b9488612342565b611b9d88612342565b87612153565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c029190613633565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c809291906134af565b60405180910390a4611c97816000878787876123bc565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613414565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ec49190613237565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613334565b60405180910390fd5b6000611f4b611671565b9050611f6b818787611f5c88612342565b611f6588612342565b87612153565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613374565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b79190613633565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121349291906134af565b60405180910390a461214a8288888888886123bc565b50505050505050565b505050505050565b61217a8473ffffffffffffffffffffffffffffffffffffffff166125a3565b1561233a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121c095949392919061311c565b602060405180830381600087803b1580156121da57600080fd5b505af192505050801561220b57506040513d601f19601f820116820180604052508101906122089190612c03565b60015b6122b1576122176139c6565b806308c379a01415612274575061222c613f64565b806122375750612276565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9190613252565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890613274565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90613294565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561236157612360613997565b5b60405190808252806020026020018201604052801561238f5781602001602082028036833780820191505090505b50905082816000815181106123a7576123a6613968565b5b60200260200101818152505080915050919050565b6123db8473ffffffffffffffffffffffffffffffffffffffff166125a3565b1561259b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612421959493929190613184565b602060405180830381600087803b15801561243b57600080fd5b505af192505050801561246c57506040513d601f19601f820116820180604052508101906124699190612c03565b60015b612512576124786139c6565b806308c379a014156124d5575061248d613f64565b8061249857506124d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc9190613252565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613274565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090613294565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125c2906137fe565b90600052602060002090601f0160209004810192826125e4576000855561262b565b82601f106125fd57805160ff191683800117855561262b565b8280016001018555821561262b579182015b8281111561262a57825182559160200191906001019061260f565b5b509050612638919061263c565b5090565b5b8082111561265557600081600090555060010161263d565b5090565b600061266c612667846134fd565b6134d8565b9050808382526020820190508285602086028201111561268f5761268e6139ed565b5b60005b858110156126bf57816126a588826127bd565b845260208401935060208301925050600181019050612692565b5050509392505050565b60006126dc6126d784613529565b6134d8565b905080838252602082019050828560208602820111156126ff576126fe6139ed565b5b60005b8581101561272f578161271588826128c9565b845260208401935060208301925050600181019050612702565b5050509392505050565b600061274c61274784613555565b6134d8565b905082815260208101848484011115612768576127676139f2565b5b6127738482856137bc565b509392505050565b600061278e61278984613586565b6134d8565b9050828152602081018484840111156127aa576127a96139f2565b5b6127b58482856137bc565b509392505050565b6000813590506127cc81613ffa565b92915050565b600082601f8301126127e7576127e66139e8565b5b81356127f7848260208601612659565b91505092915050565b600082601f830112612815576128146139e8565b5b81356128258482602086016126c9565b91505092915050565b60008135905061283d81614011565b92915050565b60008135905061285281614028565b92915050565b60008151905061286781614028565b92915050565b600082601f830112612882576128816139e8565b5b8135612892848260208601612739565b91505092915050565b600082601f8301126128b0576128af6139e8565b5b81356128c084826020860161277b565b91505092915050565b6000813590506128d88161403f565b92915050565b6000602082840312156128f4576128f36139fc565b5b6000612902848285016127bd565b91505092915050565b60008060408385031215612922576129216139fc565b5b6000612930858286016127bd565b9250506020612941858286016127bd565b9150509250929050565b600080600080600060a08688031215612967576129666139fc565b5b6000612975888289016127bd565b9550506020612986888289016127bd565b945050604086013567ffffffffffffffff8111156129a7576129a66139f7565b5b6129b388828901612800565b935050606086013567ffffffffffffffff8111156129d4576129d36139f7565b5b6129e088828901612800565b925050608086013567ffffffffffffffff811115612a0157612a006139f7565b5b612a0d8882890161286d565b9150509295509295909350565b600080600080600060a08688031215612a3657612a356139fc565b5b6000612a44888289016127bd565b9550506020612a55888289016127bd565b9450506040612a66888289016128c9565b9350506060612a77888289016128c9565b925050608086013567ffffffffffffffff811115612a9857612a976139f7565b5b612aa48882890161286d565b9150509295509295909350565b60008060408385031215612ac857612ac76139fc565b5b6000612ad6858286016127bd565b9250506020612ae78582860161282e565b9150509250929050565b60008060408385031215612b0857612b076139fc565b5b6000612b16858286016127bd565b9250506020612b27858286016128c9565b9150509250929050565b60008060408385031215612b4857612b476139fc565b5b600083013567ffffffffffffffff811115612b6657612b656139f7565b5b612b72858286016127d2565b925050602083013567ffffffffffffffff811115612b9357612b926139f7565b5b612b9f85828601612800565b9150509250929050565b600060208284031215612bbf57612bbe6139fc565b5b6000612bcd8482850161282e565b91505092915050565b600060208284031215612bec57612beb6139fc565b5b6000612bfa84828501612843565b91505092915050565b600060208284031215612c1957612c186139fc565b5b6000612c2784828501612858565b91505092915050565b600060208284031215612c4657612c456139fc565b5b600082013567ffffffffffffffff811115612c6457612c636139f7565b5b612c708482850161289b565b91505092915050565b600060208284031215612c8f57612c8e6139fc565b5b6000612c9d848285016128c9565b91505092915050565b60008060408385031215612cbd57612cbc6139fc565b5b6000612ccb858286016128c9565b9250506020612cdc858286016128c9565b9150509250929050565b6000612cf283836130b6565b60208301905092915050565b612d0781613748565b82525050565b6000612d18826135c7565b612d2281856135f5565b9350612d2d836135b7565b8060005b83811015612d5e578151612d458882612ce6565b9750612d50836135e8565b925050600181019050612d31565b5085935050505092915050565b612d748161375a565b82525050565b6000612d85826135d2565b612d8f8185613606565b9350612d9f8185602086016137cb565b612da881613a01565b840191505092915050565b6000612dbe826135dd565b612dc88185613617565b9350612dd88185602086016137cb565b612de181613a01565b840191505092915050565b6000612df7826135dd565b612e018185613628565b9350612e118185602086016137cb565b80840191505092915050565b6000612e2a603483613617565b9150612e3582613a1f565b604082019050919050565b6000612e4d602883613617565b9150612e5882613a6e565b604082019050919050565b6000612e70602b83613617565b9150612e7b82613abd565b604082019050919050565b6000612e93604483613628565b9150612e9e82613b0c565b604482019050919050565b6000612eb6602683613617565b9150612ec182613b81565b604082019050919050565b6000612ed9602983613617565b9150612ee482613bd0565b604082019050919050565b6000612efc602d83613617565b9150612f0782613c1f565b604082019050919050565b6000612f1f602583613617565b9150612f2a82613c6e565b604082019050919050565b6000612f42603283613617565b9150612f4d82613cbd565b604082019050919050565b6000612f65602a83613617565b9150612f7082613d0c565b604082019050919050565b6000612f88600583613628565b9150612f9382613d5b565b600582019050919050565b6000612fab602083613617565b9150612fb682613d84565b602082019050919050565b6000612fce602083613617565b9150612fd982613dad565b602082019050919050565b6000612ff1601283613617565b9150612ffc82613dd6565b602082019050919050565b6000613014601183613617565b915061301f82613dff565b602082019050919050565b6000613037602983613617565b915061304282613e28565b604082019050919050565b600061305a602983613617565b915061306582613e77565b604082019050919050565b600061307d602883613617565b915061308882613ec6565b604082019050919050565b60006130a0602183613617565b91506130ab82613f15565b604082019050919050565b6130bf816137b2565b82525050565b6130ce816137b2565b82525050565b60006130df82612e86565b91506130eb8284612dec565b91506130f682612f7b565b915081905092915050565b60006020820190506131166000830184612cfe565b92915050565b600060a0820190506131316000830188612cfe565b61313e6020830187612cfe565b81810360408301526131508186612d0d565b905081810360608301526131648185612d0d565b905081810360808301526131788184612d7a565b90509695505050505050565b600060a0820190506131996000830188612cfe565b6131a66020830187612cfe565b6131b360408301866130c5565b6131c060608301856130c5565b81810360808301526131d28184612d7a565b90509695505050505050565b600060208201905081810360008301526131f88184612d0d565b905092915050565b6000604082019050818103600083015261321a8185612d0d565b9050818103602083015261322e8184612d0d565b90509392505050565b600060208201905061324c6000830184612d6b565b92915050565b6000602082019050818103600083015261326c8184612db3565b905092915050565b6000602082019050818103600083015261328d81612e1d565b9050919050565b600060208201905081810360008301526132ad81612e40565b9050919050565b600060208201905081810360008301526132cd81612e63565b9050919050565b600060208201905081810360008301526132ed81612ea9565b9050919050565b6000602082019050818103600083015261330d81612ecc565b9050919050565b6000602082019050818103600083015261332d81612eef565b9050919050565b6000602082019050818103600083015261334d81612f12565b9050919050565b6000602082019050818103600083015261336d81612f35565b9050919050565b6000602082019050818103600083015261338d81612f58565b9050919050565b600060208201905081810360008301526133ad81612f9e565b9050919050565b600060208201905081810360008301526133cd81612fc1565b9050919050565b600060208201905081810360008301526133ed81612fe4565b9050919050565b6000602082019050818103600083015261340d81613007565b9050919050565b6000602082019050818103600083015261342d8161302a565b9050919050565b6000602082019050818103600083015261344d8161304d565b9050919050565b6000602082019050818103600083015261346d81613070565b9050919050565b6000602082019050818103600083015261348d81613093565b9050919050565b60006020820190506134a960008301846130c5565b92915050565b60006040820190506134c460008301856130c5565b6134d160208301846130c5565b9392505050565b60006134e26134f3565b90506134ee8282613830565b919050565b6000604051905090565b600067ffffffffffffffff82111561351857613517613997565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561354457613543613997565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135705761356f613997565b5b61357982613a01565b9050602081019050919050565b600067ffffffffffffffff8211156135a1576135a0613997565b5b6135aa82613a01565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061363e826137b2565b9150613649836137b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561367e5761367d6138db565b5b828201905092915050565b6000613694826137b2565b915061369f836137b2565b9250826136af576136ae61390a565b5b828204905092915050565b60006136c5826137b2565b91506136d0836137b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613709576137086138db565b5b828202905092915050565b600061371f826137b2565b915061372a836137b2565b92508282101561373d5761373c6138db565b5b828203905092915050565b600061375382613792565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137e95780820151818401526020810190506137ce565b838111156137f8576000848401525b50505050565b6000600282049050600182168061381657607f821691505b6020821081141561382a57613829613939565b5b50919050565b61383982613a01565b810181811067ffffffffffffffff8211171561385857613857613997565b5b80604052505050565b600061386c826137b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561389f5761389e6138db565b5b600182019050919050565b60006138b5826137b2565b91506138c0836137b2565b9250826138d0576138cf61390a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139e55760046000803e6139e2600051613a12565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f697066732e696f2f697066732f516d527663634c386d516460008201527f57476458775466336434753846365231316e5779734837354c464532334e434b60208201527f454c6a2f00000000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6f742074686520636f727265637420746f6b656e20666f722074686973206d60008201527f696e742066756e6374696f6e2e00000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75206d757374206d696e742061746c65617374206f6e6520746f6b656e2e600082015250565b7f496e737566666963656e742046756e6473210000000000000000000000000000600082015250565b7f53616c65206973206e6f74206c69766521000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613f7457613ff7565b613f7c6134f3565b60043d036004823e80513d602482011167ffffffffffffffff82111715613fa4575050613ff7565b808201805167ffffffffffffffff811115613fc25750505050613ff7565b80602083010160043d038501811115613fdf575050505050613ff7565b613fee82602001850186613830565b82955050505050505b90565b61400381613748565b811461400e57600080fd5b50565b61401a8161375a565b811461402557600080fd5b50565b61403181613766565b811461403c57600080fd5b50565b614048816137b2565b811461405357600080fd5b5056fea26469706673582212202d9b9d4bbdecf7580b8629a0e268ff045292942a574d04057628bb83a3fe736c64736f6c6343000807003368747470733a2f2f697066732e696f2f697066732f516d527663634c386d516457476458775466336434753846365231316e5779734837354c464532334e434b454c6a2f7b69647d2e6a736f6e

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c80638456cb59116100f7578063b84c185e11610095578063e985e9c511610064578063e985e9c5146105fc578063f1cbf59c14610639578063f242432a14610664578063f2fde38b1461068d576101cc565b8063b84c185e14610550578063c0fbed021461057b578063d04e24da146105a6578063e18ce34a146105d1576101cc565b8063a56538e0116100d1578063a56538e0146104d1578063a5ae5222146104fc578063a6feed8e14610518578063b7a5b86414610534576101cc565b80638456cb59146104525780638da5cb5b1461047d578063a22cb465146104a8576101cc565b8063485580461161016f578063715018a61161013e578063715018a6146103cb5780637d00aa97146103e25780638281b3ac146103fe578063837150cf14610429576101cc565b8063485580461461031c5780634e1273f4146103475780635dbc6d6c14610384578063639d3f06146103af576101cc565b80630344a7fe116101ab5780630344a7fe146102745780630e89341c1461029f5780632eb2c2d6146102dc5780633ccfd60b14610305576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612af1565b6106b6565b6040516102059190613494565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612bd6565b61077f565b6040516102429190613237565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612c30565b610861565b005b34801561028057600080fd5b506102896108e9565b6040516102969190613494565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612c79565b6108f5565b6040516102d39190613252565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe919061294b565b610926565b005b34801561031157600080fd5b5061031a6109c7565b005b34801561032857600080fd5b50610331610a93565b60405161033e9190613494565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612b31565b610a98565b60405161037b91906131de565b60405180910390f35b34801561039057600080fd5b50610399610bb1565b6040516103a69190613494565b60405180910390f35b6103c960048036038101906103c49190612ca6565b610bbc565b005b3480156103d757600080fd5b506103e0610d06565b005b6103fc60048036038101906103f79190612ca6565b610d8e565b005b34801561040a57600080fd5b50610413610ed8565b6040516104209190613494565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612ba9565b610ee3565b005b34801561045e57600080fd5b50610467610f7c565b6040516104749190613237565b60405180910390f35b34801561048957600080fd5b50610492610f8f565b60405161049f9190613101565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ab1565b610fb9565b005b3480156104dd57600080fd5b506104e6610fcf565b6040516104f39190613494565b60405180910390f35b61051660048036038101906105119190612ca6565b610fd4565b005b610532600480360381019061052d9190612ca6565b61111e565b005b61054e60048036038101906105499190612ca6565b611269565b005b34801561055c57600080fd5b506105656113b4565b6040516105729190613494565b60405180910390f35b34801561058757600080fd5b506105906113b9565b60405161059d9190613494565b60405180910390f35b3480156105b257600080fd5b506105bb6113c4565b6040516105c89190613494565b60405180910390f35b3480156105dd57600080fd5b506105e66113d0565b6040516105f39190613494565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e919061290b565b6113d5565b6040516106309190613237565b60405180910390f35b34801561064557600080fd5b5061064e611469565b60405161065b9190613494565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612a1a565b61146e565b005b34801561069957600080fd5b506106b460048036038101906106af91906128de565b61150f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e906132b4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085a575061085982611607565b5b9050919050565b610869611671565b73ffffffffffffffffffffffffffffffffffffffff16610887610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490613394565b60405180910390fd5b6108e681611679565b50565b670214e8348c4f000081565b606061090082611693565b60405160200161091091906130d4565b6040516020818303038152906040529050919050565b61092e611671565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061097457506109738561096e611671565b6113d5565b5b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613354565b60405180910390fd5b6109c085858585856117f4565b5050505050565b6109cf611671565b73ffffffffffffffffffffffffffffffffffffffff166109ed610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90613394565b60405180910390fd5b610a4b610f8f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a90573d6000803e3d6000fd5b50565b600481565b60608151835114610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613434565b60405180910390fd5b6000835167ffffffffffffffff811115610afb57610afa613997565b5b604051908082528060200260200182016040528015610b295781602001602082028036833780820191505090505b50905060005b8451811015610ba657610b76858281518110610b4e57610b4d613968565b5b6020026020010151858381518110610b6957610b68613968565b5b60200260200101516106b6565b828281518110610b8957610b88613968565b5b60200260200101818152505080610b9f90613861565b9050610b2f565b508091505092915050565b666a94d74f43000081565b60028214610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690613314565b60405180910390fd5b600360149054906101000a900460ff1615610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c46906133f4565b60405180910390fd5b60008111610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c89906133b4565b60405180910390fd5b666a94d74f43000081610ca591906136ba565b341015610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde906133d4565b60405180910390fd5b610d0233838360405180602001604052806000815250611b08565b5050565b610d0e611671565b73ffffffffffffffffffffffffffffffffffffffff16610d2c610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990613394565b60405180910390fd5b610d8c6000611c9e565b565b60018214610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890613314565b60405180910390fd5b600360149054906101000a900460ff1615610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e18906133f4565b60405180910390fd5b60008111610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906133b4565b60405180910390fd5b662386f26fc1000081610e7791906136ba565b341015610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906133d4565b60405180910390fd5b610ed433838360405180602001604052806000815250611b08565b5050565b66f8b0a10e47000081565b610eeb611671565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690613394565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b600360149054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fcb610fc4611671565b8383611d64565b5050565b600281565b60038214611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613314565b60405180910390fd5b600360149054906101000a900460ff1615611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906133f4565b60405180910390fd5b600081116110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906133b4565b60405180910390fd5b66f8b0a10e470000816110bd91906136ba565b3410156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f6906133d4565b60405180910390fd5b61111a33838360405180602001604052806000815250611b08565b5050565b60048214611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613314565b60405180910390fd5b600360149054906101000a900460ff16156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906133f4565b60405180910390fd5b600081116111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906133b4565b60405180910390fd5b670214e8348c4f00008161120891906136ba565b34101561124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906133d4565b60405180910390fd5b61126533838360405180602001604052806000815250611b08565b5050565b600582146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613314565b60405180910390fd5b600360149054906101000a900460ff16156112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f3906133f4565b60405180910390fd5b6000811161133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906133b4565b60405180910390fd5b6703782dace9d900008161135391906136ba565b341015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c906133d4565b60405180910390fd5b6113b033838360405180602001604052806000815250611b08565b5050565b600581565b662386f26fc1000081565b6703782dace9d9000081565b600381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600181565b611476611671565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bc57506114bb856114b6611671565b6113d5565b5b6114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906132f4565b60405180910390fd5b6115088585858585611ed1565b5050505050565b611517611671565b73ffffffffffffffffffffffffffffffffffffffff16611535610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f2906132d4565b60405180910390fd5b61160481611c9e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061168f9291906125b6565b5050565b606060008214156116db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117ef565b600082905060005b6000821461170d5780806116f690613861565b915050600a826117069190613689565b91506116e3565b60008167ffffffffffffffff81111561172957611728613997565b5b6040519080825280601f01601f19166020018201604052801561175b5781602001600182028036833780820191505090505b5090505b600085146117e8576001826117749190613714565b9150600a8561178391906138aa565b603061178f9190613633565b60f81b8183815181106117a5576117a4613968565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117e19190613689565b945061175f565b8093505050505b919050565b8151835114611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613334565b60405180910390fd5b60006118b2611671565b90506118c2818787878787612153565b60005b8451811015611a735760008582815181106118e3576118e2613968565b5b60200260200101519050600085838151811061190257611901613968565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613374565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a589190613633565b9250508190555050505080611a6c90613861565b90506118c5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611aea929190613200565b60405180910390a4611b0081878787878761215b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613474565b60405180910390fd5b6000611b82611671565b9050611ba381600087611b9488612342565b611b9d88612342565b87612153565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c029190613633565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c809291906134af565b60405180910390a4611c97816000878787876123bc565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613414565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ec49190613237565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613334565b60405180910390fd5b6000611f4b611671565b9050611f6b818787611f5c88612342565b611f6588612342565b87612153565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613374565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b79190613633565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121349291906134af565b60405180910390a461214a8288888888886123bc565b50505050505050565b505050505050565b61217a8473ffffffffffffffffffffffffffffffffffffffff166125a3565b1561233a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121c095949392919061311c565b602060405180830381600087803b1580156121da57600080fd5b505af192505050801561220b57506040513d601f19601f820116820180604052508101906122089190612c03565b60015b6122b1576122176139c6565b806308c379a01415612274575061222c613f64565b806122375750612276565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9190613252565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890613274565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90613294565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561236157612360613997565b5b60405190808252806020026020018201604052801561238f5781602001602082028036833780820191505090505b50905082816000815181106123a7576123a6613968565b5b60200260200101818152505080915050919050565b6123db8473ffffffffffffffffffffffffffffffffffffffff166125a3565b1561259b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612421959493929190613184565b602060405180830381600087803b15801561243b57600080fd5b505af192505050801561246c57506040513d601f19601f820116820180604052508101906124699190612c03565b60015b612512576124786139c6565b806308c379a014156124d5575061248d613f64565b8061249857506124d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc9190613252565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613274565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090613294565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125c2906137fe565b90600052602060002090601f0160209004810192826125e4576000855561262b565b82601f106125fd57805160ff191683800117855561262b565b8280016001018555821561262b579182015b8281111561262a57825182559160200191906001019061260f565b5b509050612638919061263c565b5090565b5b8082111561265557600081600090555060010161263d565b5090565b600061266c612667846134fd565b6134d8565b9050808382526020820190508285602086028201111561268f5761268e6139ed565b5b60005b858110156126bf57816126a588826127bd565b845260208401935060208301925050600181019050612692565b5050509392505050565b60006126dc6126d784613529565b6134d8565b905080838252602082019050828560208602820111156126ff576126fe6139ed565b5b60005b8581101561272f578161271588826128c9565b845260208401935060208301925050600181019050612702565b5050509392505050565b600061274c61274784613555565b6134d8565b905082815260208101848484011115612768576127676139f2565b5b6127738482856137bc565b509392505050565b600061278e61278984613586565b6134d8565b9050828152602081018484840111156127aa576127a96139f2565b5b6127b58482856137bc565b509392505050565b6000813590506127cc81613ffa565b92915050565b600082601f8301126127e7576127e66139e8565b5b81356127f7848260208601612659565b91505092915050565b600082601f830112612815576128146139e8565b5b81356128258482602086016126c9565b91505092915050565b60008135905061283d81614011565b92915050565b60008135905061285281614028565b92915050565b60008151905061286781614028565b92915050565b600082601f830112612882576128816139e8565b5b8135612892848260208601612739565b91505092915050565b600082601f8301126128b0576128af6139e8565b5b81356128c084826020860161277b565b91505092915050565b6000813590506128d88161403f565b92915050565b6000602082840312156128f4576128f36139fc565b5b6000612902848285016127bd565b91505092915050565b60008060408385031215612922576129216139fc565b5b6000612930858286016127bd565b9250506020612941858286016127bd565b9150509250929050565b600080600080600060a08688031215612967576129666139fc565b5b6000612975888289016127bd565b9550506020612986888289016127bd565b945050604086013567ffffffffffffffff8111156129a7576129a66139f7565b5b6129b388828901612800565b935050606086013567ffffffffffffffff8111156129d4576129d36139f7565b5b6129e088828901612800565b925050608086013567ffffffffffffffff811115612a0157612a006139f7565b5b612a0d8882890161286d565b9150509295509295909350565b600080600080600060a08688031215612a3657612a356139fc565b5b6000612a44888289016127bd565b9550506020612a55888289016127bd565b9450506040612a66888289016128c9565b9350506060612a77888289016128c9565b925050608086013567ffffffffffffffff811115612a9857612a976139f7565b5b612aa48882890161286d565b9150509295509295909350565b60008060408385031215612ac857612ac76139fc565b5b6000612ad6858286016127bd565b9250506020612ae78582860161282e565b9150509250929050565b60008060408385031215612b0857612b076139fc565b5b6000612b16858286016127bd565b9250506020612b27858286016128c9565b9150509250929050565b60008060408385031215612b4857612b476139fc565b5b600083013567ffffffffffffffff811115612b6657612b656139f7565b5b612b72858286016127d2565b925050602083013567ffffffffffffffff811115612b9357612b926139f7565b5b612b9f85828601612800565b9150509250929050565b600060208284031215612bbf57612bbe6139fc565b5b6000612bcd8482850161282e565b91505092915050565b600060208284031215612bec57612beb6139fc565b5b6000612bfa84828501612843565b91505092915050565b600060208284031215612c1957612c186139fc565b5b6000612c2784828501612858565b91505092915050565b600060208284031215612c4657612c456139fc565b5b600082013567ffffffffffffffff811115612c6457612c636139f7565b5b612c708482850161289b565b91505092915050565b600060208284031215612c8f57612c8e6139fc565b5b6000612c9d848285016128c9565b91505092915050565b60008060408385031215612cbd57612cbc6139fc565b5b6000612ccb858286016128c9565b9250506020612cdc858286016128c9565b9150509250929050565b6000612cf283836130b6565b60208301905092915050565b612d0781613748565b82525050565b6000612d18826135c7565b612d2281856135f5565b9350612d2d836135b7565b8060005b83811015612d5e578151612d458882612ce6565b9750612d50836135e8565b925050600181019050612d31565b5085935050505092915050565b612d748161375a565b82525050565b6000612d85826135d2565b612d8f8185613606565b9350612d9f8185602086016137cb565b612da881613a01565b840191505092915050565b6000612dbe826135dd565b612dc88185613617565b9350612dd88185602086016137cb565b612de181613a01565b840191505092915050565b6000612df7826135dd565b612e018185613628565b9350612e118185602086016137cb565b80840191505092915050565b6000612e2a603483613617565b9150612e3582613a1f565b604082019050919050565b6000612e4d602883613617565b9150612e5882613a6e565b604082019050919050565b6000612e70602b83613617565b9150612e7b82613abd565b604082019050919050565b6000612e93604483613628565b9150612e9e82613b0c565b604482019050919050565b6000612eb6602683613617565b9150612ec182613b81565b604082019050919050565b6000612ed9602983613617565b9150612ee482613bd0565b604082019050919050565b6000612efc602d83613617565b9150612f0782613c1f565b604082019050919050565b6000612f1f602583613617565b9150612f2a82613c6e565b604082019050919050565b6000612f42603283613617565b9150612f4d82613cbd565b604082019050919050565b6000612f65602a83613617565b9150612f7082613d0c565b604082019050919050565b6000612f88600583613628565b9150612f9382613d5b565b600582019050919050565b6000612fab602083613617565b9150612fb682613d84565b602082019050919050565b6000612fce602083613617565b9150612fd982613dad565b602082019050919050565b6000612ff1601283613617565b9150612ffc82613dd6565b602082019050919050565b6000613014601183613617565b915061301f82613dff565b602082019050919050565b6000613037602983613617565b915061304282613e28565b604082019050919050565b600061305a602983613617565b915061306582613e77565b604082019050919050565b600061307d602883613617565b915061308882613ec6565b604082019050919050565b60006130a0602183613617565b91506130ab82613f15565b604082019050919050565b6130bf816137b2565b82525050565b6130ce816137b2565b82525050565b60006130df82612e86565b91506130eb8284612dec565b91506130f682612f7b565b915081905092915050565b60006020820190506131166000830184612cfe565b92915050565b600060a0820190506131316000830188612cfe565b61313e6020830187612cfe565b81810360408301526131508186612d0d565b905081810360608301526131648185612d0d565b905081810360808301526131788184612d7a565b90509695505050505050565b600060a0820190506131996000830188612cfe565b6131a66020830187612cfe565b6131b360408301866130c5565b6131c060608301856130c5565b81810360808301526131d28184612d7a565b90509695505050505050565b600060208201905081810360008301526131f88184612d0d565b905092915050565b6000604082019050818103600083015261321a8185612d0d565b9050818103602083015261322e8184612d0d565b90509392505050565b600060208201905061324c6000830184612d6b565b92915050565b6000602082019050818103600083015261326c8184612db3565b905092915050565b6000602082019050818103600083015261328d81612e1d565b9050919050565b600060208201905081810360008301526132ad81612e40565b9050919050565b600060208201905081810360008301526132cd81612e63565b9050919050565b600060208201905081810360008301526132ed81612ea9565b9050919050565b6000602082019050818103600083015261330d81612ecc565b9050919050565b6000602082019050818103600083015261332d81612eef565b9050919050565b6000602082019050818103600083015261334d81612f12565b9050919050565b6000602082019050818103600083015261336d81612f35565b9050919050565b6000602082019050818103600083015261338d81612f58565b9050919050565b600060208201905081810360008301526133ad81612f9e565b9050919050565b600060208201905081810360008301526133cd81612fc1565b9050919050565b600060208201905081810360008301526133ed81612fe4565b9050919050565b6000602082019050818103600083015261340d81613007565b9050919050565b6000602082019050818103600083015261342d8161302a565b9050919050565b6000602082019050818103600083015261344d8161304d565b9050919050565b6000602082019050818103600083015261346d81613070565b9050919050565b6000602082019050818103600083015261348d81613093565b9050919050565b60006020820190506134a960008301846130c5565b92915050565b60006040820190506134c460008301856130c5565b6134d160208301846130c5565b9392505050565b60006134e26134f3565b90506134ee8282613830565b919050565b6000604051905090565b600067ffffffffffffffff82111561351857613517613997565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561354457613543613997565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135705761356f613997565b5b61357982613a01565b9050602081019050919050565b600067ffffffffffffffff8211156135a1576135a0613997565b5b6135aa82613a01565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061363e826137b2565b9150613649836137b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561367e5761367d6138db565b5b828201905092915050565b6000613694826137b2565b915061369f836137b2565b9250826136af576136ae61390a565b5b828204905092915050565b60006136c5826137b2565b91506136d0836137b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613709576137086138db565b5b828202905092915050565b600061371f826137b2565b915061372a836137b2565b92508282101561373d5761373c6138db565b5b828203905092915050565b600061375382613792565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137e95780820151818401526020810190506137ce565b838111156137f8576000848401525b50505050565b6000600282049050600182168061381657607f821691505b6020821081141561382a57613829613939565b5b50919050565b61383982613a01565b810181811067ffffffffffffffff8211171561385857613857613997565b5b80604052505050565b600061386c826137b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561389f5761389e6138db565b5b600182019050919050565b60006138b5826137b2565b91506138c0836137b2565b9250826138d0576138cf61390a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139e55760046000803e6139e2600051613a12565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f697066732e696f2f697066732f516d527663634c386d516460008201527f57476458775466336434753846365231316e5779734837354c464532334e434b60208201527f454c6a2f00000000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6f742074686520636f727265637420746f6b656e20666f722074686973206d60008201527f696e742066756e6374696f6e2e00000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75206d757374206d696e742061746c65617374206f6e6520746f6b656e2e600082015250565b7f496e737566666963656e742046756e6473210000000000000000000000000000600082015250565b7f53616c65206973206e6f74206c69766521000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613f7457613ff7565b613f7c6134f3565b60043d036004823e80513d602482011167ffffffffffffffff82111715613fa4575050613ff7565b808201805167ffffffffffffffff811115613fc25750505050613ff7565b80602083010160043d038501811115613fdf575050505050613ff7565b613fee82602001850186613830565b82955050505050505b90565b61400381613748565b811461400e57600080fd5b50565b61401a8161375a565b811461402557600080fd5b50565b61403181613766565b811461403c57600080fd5b50565b614048816137b2565b811461405357600080fd5b5056fea26469706673582212202d9b9d4bbdecf7580b8629a0e268ff045292942a574d04057628bb83a3fe736c64736f6c63430008070033

Deployed Bytecode Sourcemap

39917:4042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25324:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24347:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43158:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40531:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43546:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27263:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43847:107;;;;;;;;;;;;;:::i;:::-;;40776:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25721:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40421:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41569:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4905:103;;;;;;;;;;;;;:::i;:::-;;41168:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40477:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43256:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40148:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4254:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26318:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40689:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41968:387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42754:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40818:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40365:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40585:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40734:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26545:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40644:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26785:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5163:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25324:231;25410:7;25457:1;25438:21;;:7;:21;;;;25430:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25525:9;:13;25535:2;25525:13;;;;;;;;;;;:22;25539:7;25525:22;;;;;;;;;;;;;;;;25518:29;;25324:231;;;;:::o;24347:310::-;24449:4;24501:26;24486:41;;;:11;:41;;;;:110;;;;24559:37;24544:52;;;:11;:52;;;;24486:110;:163;;;;24613:36;24637:11;24613:23;:36::i;:::-;24486:163;24466:183;;24347:310;;;:::o;43158:90::-;4485:12;:10;:12::i;:::-;4474:23;;:7;:5;:7::i;:::-;:23;;;4466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43224:15:::1;43232:6;43224:7;:15::i;:::-;43158:90:::0;:::o;40531:47::-;40568:10;40531:47;:::o;43546:293::-;43607:13;43785:26;43802:8;43785:16;:26::i;:::-;43661:159;;;;;;;;:::i;:::-;;;;;;;;;;;;;43633:198;;43546:293;;;:::o;27263:442::-;27504:12;:10;:12::i;:::-;27496:20;;:4;:20;;;:60;;;;27520:36;27537:4;27543:12;:10;:12::i;:::-;27520:16;:36::i;:::-;27496:60;27474:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27645:52;27668:4;27674:2;27678:3;27683:7;27692:4;27645:22;:52::i;:::-;27263:442;;;;;:::o;43847:107::-;4485:12;:10;:12::i;:::-;4474:23;;:7;:5;:7::i;:::-;:23;;;4466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43905:7:::1;:5;:7::i;:::-;43897:25;;:48;43923:21;43897:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43847:107::o:0;40776:35::-;40810:1;40776:35;:::o;25721:524::-;25877:16;25938:3;:10;25919:8;:15;:29;25911:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26007:30;26054:8;:15;26040:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26007:63;;26088:9;26083:122;26107:8;:15;26103:1;:19;26083:122;;;26163:30;26173:8;26182:1;26173:11;;;;;;;;:::i;:::-;;;;;;;;26186:3;26190:1;26186:6;;;;;;;;:::i;:::-;;;;;;;;26163:9;:30::i;:::-;26144:13;26158:1;26144:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26124:3;;;;:::i;:::-;;;26083:122;;;;26224:13;26217:20;;;25721:524;;;;:::o;40421:49::-;40460:10;40421:49;:::o;41569:393::-;40725:1;41651:2;:15;41643:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41736:5;;;;;;;;;;;41735:6;41727:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;41791:1;41782:6;:10;41774:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40460:10;41862:6;:21;;;;:::i;:::-;41849:9;:34;;41841:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41920:33;41926:10;41938:2;41942:6;41920:33;;;;;;;;;;;;:5;:33::i;:::-;41569:393;;:::o;4905:103::-;4485:12;:10;:12::i;:::-;4474:23;;:7;:5;:7::i;:::-;:23;;;4466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4970:30:::1;4997:1;4970:18;:30::i;:::-;4905:103::o:0;41168:393::-;40680:1;41250:2;:15;41242:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41335:5;;;;;;;;;;;41334:6;41326:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;41390:1;41381:6;:10;41373:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40404:10;41461:6;:21;;;;:::i;:::-;41448:9;:34;;41440:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41519:33;41525:10;41537:2;41541:6;41519:33;;;;;;;;;;;;:5;:33::i;:::-;41168:393;;:::o;40477:47::-;40514:10;40477:47;:::o;43256:81::-;4485:12;:10;:12::i;:::-;4474:23;;:7;:5;:7::i;:::-;:23;;;4466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43323:6:::1;43315:5;;:14;;;;;;;;;;;;;;;;;;43256:81:::0;:::o;40148:25::-;;;;;;;;;;;;;:::o;4254:87::-;4300:7;4327:6;;;;;;;;;;;4320:13;;4254:87;:::o;26318:155::-;26413:52;26432:12;:10;:12::i;:::-;26446:8;26456;26413:18;:52::i;:::-;26318:155;;:::o;40689:37::-;40725:1;40689:37;:::o;41968:387::-;40768:1;42048:2;:13;42040:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:5;;;;;;;;;;;42130:6;42122:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42186:1;42177:6;:10;42169:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40514:10;42257:6;:19;;;;:::i;:::-;42244:9;:32;;42236:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42313:33;42319:10;42331:2;42335:6;42313:33;;;;;;;;;;;;:5;:33::i;:::-;41968:387;;:::o;42361:::-;40810:1;42441:2;:13;42433:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42524:5;;;;;;;;;;;42523:6;42515:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42579:1;42570:6;:10;42562:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40568:10;42650:6;:19;;;;:::i;:::-;42637:9;:32;;42629:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42706:33;42712:10;42724:2;42728:6;42706:33;;;;;;;;;;;;:5;:33::i;:::-;42361:387;;:::o;42754:396::-;40855:1;42837:2;:16;42829:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42923:5;;;;;;;;;;;42922:6;42914:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42978:1;42969:6;:10;42961:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40625:10;43049:6;:22;;;;:::i;:::-;43036:9;:35;;43028:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43108:33;43114:10;43126:2;43130:6;43108:33;;;;;;;;;;;;:5;:33::i;:::-;42754:396;;:::o;40818:38::-;40855:1;40818:38;:::o;40365:49::-;40404:10;40365:49;:::o;40585:50::-;40625:10;40585:50;:::o;40734:35::-;40768:1;40734:35;:::o;26545:168::-;26644:4;26668:18;:27;26687:7;26668:27;;;;;;;;;;;;;;;:37;26696:8;26668:37;;;;;;;;;;;;;;;;;;;;;;;;;26661:44;;26545:168;;;;:::o;40644:37::-;40680:1;40644:37;:::o;26785:401::-;27001:12;:10;:12::i;:::-;26993:20;;:4;:20;;;:60;;;;27017:36;27034:4;27040:12;:10;:12::i;:::-;27017:16;:36::i;:::-;26993:60;26971:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27133:45;27151:4;27157:2;27161;27165:6;27173:4;27133:17;:45::i;:::-;26785:401;;;;;:::o;5163:201::-;4485:12;:10;:12::i;:::-;4474:23;;:7;:5;:7::i;:::-;:23;;;4466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5272:1:::1;5252:22;;:8;:22;;;;5244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5328:28;5347:8;5328:18;:28::i;:::-;5163:201:::0;:::o;15655:157::-;15740:4;15779:25;15764:40;;;:11;:40;;;;15757:47;;15655:157;;;:::o;2978:98::-;3031:7;3058:10;3051:17;;2978:98;:::o;31265:88::-;31339:6;31332:4;:13;;;;;;;;;;;;:::i;:::-;;31265:88;:::o;540:723::-;596:13;826:1;817:5;:10;813:53;;;844:10;;;;;;;;;;;;;;;;;;;;;813:53;876:12;891:5;876:20;;907:14;932:78;947:1;939:4;:9;932:78;;965:8;;;;;:::i;:::-;;;;996:2;988:10;;;;;:::i;:::-;;;932:78;;;1020:19;1052:6;1042:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1020:39;;1070:154;1086:1;1077:5;:10;1070:154;;1114:1;1104:11;;;;;:::i;:::-;;;1181:2;1173:5;:10;;;;:::i;:::-;1160:2;:24;;;;:::i;:::-;1147:39;;1130:6;1137;1130:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1210:2;1201:11;;;;;:::i;:::-;;;1070:154;;;1248:6;1234:21;;;;;540:723;;;;:::o;29347:1074::-;29574:7;:14;29560:3;:10;:28;29552:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29666:1;29652:16;;:2;:16;;;;29644:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29723:16;29742:12;:10;:12::i;:::-;29723:31;;29767:60;29788:8;29798:4;29804:2;29808:3;29813:7;29822:4;29767:20;:60::i;:::-;29845:9;29840:421;29864:3;:10;29860:1;:14;29840:421;;;29896:10;29909:3;29913:1;29909:6;;;;;;;;:::i;:::-;;;;;;;;29896:19;;29930:14;29947:7;29955:1;29947:10;;;;;;;;:::i;:::-;;;;;;;;29930:27;;29974:19;29996:9;:13;30006:2;29996:13;;;;;;;;;;;:19;30010:4;29996:19;;;;;;;;;;;;;;;;29974:41;;30053:6;30038:11;:21;;30030:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30186:6;30172:11;:20;30150:9;:13;30160:2;30150:13;;;;;;;;;;;:19;30164:4;30150:19;;;;;;;;;;;;;;;:42;;;;30243:6;30222:9;:13;30232:2;30222:13;;;;;;;;;;;:17;30236:2;30222:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29881:380;;;29876:3;;;;:::i;:::-;;;29840:421;;;;30308:2;30278:47;;30302:4;30278:47;;30292:8;30278:47;;;30312:3;30317:7;30278:47;;;;;;;:::i;:::-;;;;;;;;30338:75;30374:8;30384:4;30390:2;30394:3;30399:7;30408:4;30338:35;:75::i;:::-;29541:880;29347:1074;;;;;:::o;31739:569::-;31906:1;31892:16;;:2;:16;;;;31884:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31959:16;31978:12;:10;:12::i;:::-;31959:31;;32003:102;32024:8;32042:1;32046:2;32050:21;32068:2;32050:17;:21::i;:::-;32073:25;32091:6;32073:17;:25::i;:::-;32100:4;32003:20;:102::i;:::-;32139:6;32118:9;:13;32128:2;32118:13;;;;;;;;;;;:17;32132:2;32118:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32198:2;32161:52;;32194:1;32161:52;;32176:8;32161:52;;;32202:2;32206:6;32161:52;;;;;;;:::i;:::-;;;;;;;;32226:74;32257:8;32275:1;32279:2;32283;32287:6;32295:4;32226:30;:74::i;:::-;31873:435;31739:569;;;;:::o;5524:191::-;5598:16;5617:6;;;;;;;;;;;5598:25;;5643:8;5634:6;;:17;;;;;;;;;;;;;;;;;;5698:8;5667:40;;5688:8;5667:40;;;;;;;;;;;;5587:128;5524:191;:::o;35533:331::-;35688:8;35679:17;;:5;:17;;;;35671:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35791:8;35753:18;:25;35772:5;35753:25;;;;;;;;;;;;;;;:35;35779:8;35753:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35837:8;35815:41;;35830:5;35815:41;;;35847:8;35815:41;;;;;;:::i;:::-;;;;;;;;35533:331;;;:::o;28169:820::-;28371:1;28357:16;;:2;:16;;;;28349:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28428:16;28447:12;:10;:12::i;:::-;28428:31;;28472:96;28493:8;28503:4;28509:2;28513:21;28531:2;28513:17;:21::i;:::-;28536:25;28554:6;28536:17;:25::i;:::-;28563:4;28472:20;:96::i;:::-;28581:19;28603:9;:13;28613:2;28603:13;;;;;;;;;;;:19;28617:4;28603:19;;;;;;;;;;;;;;;;28581:41;;28656:6;28641:11;:21;;28633:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28781:6;28767:11;:20;28745:9;:13;28755:2;28745:13;;;;;;;;;;;:19;28759:4;28745:19;;;;;;;;;;;;;;;:42;;;;28830:6;28809:9;:13;28819:2;28809:13;;;;;;;;;;;:17;28823:2;28809:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28885:2;28854:46;;28879:4;28854:46;;28869:8;28854:46;;;28889:2;28893:6;28854:46;;;;;;;:::i;:::-;;;;;;;;28913:68;28944:8;28954:4;28960:2;28964;28968:6;28976:4;28913:30;:68::i;:::-;28338:651;;28169:820;;;;;:::o;36820:221::-;;;;;;;:::o;37801:813::-;38041:15;:2;:13;;;:15::i;:::-;38037:570;;;38094:2;38077:43;;;38121:8;38131:4;38137:3;38142:7;38151:4;38077:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38073:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38469:6;38462:14;;;;;;;;;;;:::i;:::-;;;;;;;;38073:523;;;38518:62;;;;;;;;;;:::i;:::-;;;;;;;;38073:523;38250:48;;;38238:60;;;:8;:60;;;;38234:159;;38323:50;;;;;;;;;;:::i;:::-;;;;;;;;38234:159;38157:251;38037:570;37801:813;;;;;;:::o;38622:198::-;38688:16;38717:22;38756:1;38742:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38717:41;;38780:7;38769:5;38775:1;38769:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38807:5;38800:12;;;38622:198;;;:::o;37049:744::-;37264:15;:2;:13;;;:15::i;:::-;37260:526;;;37317:2;37300:38;;;37339:8;37349:4;37355:2;37359:6;37367:4;37300:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37296:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37648:6;37641:14;;;;;;;;;;;:::i;:::-;;;;;;;;37296:479;;;37697:62;;;;;;;;;;:::i;:::-;;;;;;;;37296:479;37434:43;;;37422:55;;;:8;:55;;;;37418:154;;37502:50;;;;;;;;;;:::i;:::-;;;;;;;;37418:154;37373:214;37260:526;37049:744;;;;;;:::o;6542:387::-;6602:4;6810:12;6877:7;6865:20;6857:28;;6920:1;6913:4;:8;6906:15;;;6542:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:323::-;9888:6;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10063:1;10088:50;10130:7;10121:6;10110:9;10106:22;10088:50;:::i;:::-;10078:60;;10034:114;9832:323;;;;:::o;10161:327::-;10219:6;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:52;10463:7;10454:6;10443:9;10439:22;10419:52;:::i;:::-;10409:62;;10365:116;10161:327;;;;:::o;10494:349::-;10563:6;10612:2;10600:9;10591:7;10587:23;10583:32;10580:119;;;10618:79;;:::i;:::-;10580:119;10738:1;10763:63;10818:7;10809:6;10798:9;10794:22;10763:63;:::i;:::-;10753:73;;10709:127;10494:349;;;;:::o;10849:509::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11121:1;11110:9;11106:17;11093:31;11151:18;11143:6;11140:30;11137:117;;;11173:79;;:::i;:::-;11137:117;11278:63;11333:7;11324:6;11313:9;11309:22;11278:63;:::i;:::-;11268:73;;11064:287;10849:509;;;;:::o;11364:329::-;11423:6;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:53;11668:7;11659:6;11648:9;11644:22;11623:53;:::i;:::-;11613:63;;11569:117;11364:329;;;;:::o;11699:474::-;11767:6;11775;11824:2;11812:9;11803:7;11799:23;11795:32;11792:119;;;11830:79;;:::i;:::-;11792:119;11950:1;11975:53;12020:7;12011:6;12000:9;11996:22;11975:53;:::i;:::-;11965:63;;11921:117;12077:2;12103:53;12148:7;12139:6;12128:9;12124:22;12103:53;:::i;:::-;12093:63;;12048:118;11699:474;;;;;:::o;12179:179::-;12248:10;12269:46;12311:3;12303:6;12269:46;:::i;:::-;12347:4;12342:3;12338:14;12324:28;;12179:179;;;;:::o;12364:118::-;12451:24;12469:5;12451:24;:::i;:::-;12446:3;12439:37;12364:118;;:::o;12518:732::-;12637:3;12666:54;12714:5;12666:54;:::i;:::-;12736:86;12815:6;12810:3;12736:86;:::i;:::-;12729:93;;12846:56;12896:5;12846:56;:::i;:::-;12925:7;12956:1;12941:284;12966:6;12963:1;12960:13;12941:284;;;13042:6;13036:13;13069:63;13128:3;13113:13;13069:63;:::i;:::-;13062:70;;13155:60;13208:6;13155:60;:::i;:::-;13145:70;;13001:224;12988:1;12985;12981:9;12976:14;;12941:284;;;12945:14;13241:3;13234:10;;12642:608;;;12518:732;;;;:::o;13256:109::-;13337:21;13352:5;13337:21;:::i;:::-;13332:3;13325:34;13256:109;;:::o;13371:360::-;13457:3;13485:38;13517:5;13485:38;:::i;:::-;13539:70;13602:6;13597:3;13539:70;:::i;:::-;13532:77;;13618:52;13663:6;13658:3;13651:4;13644:5;13640:16;13618:52;:::i;:::-;13695:29;13717:6;13695:29;:::i;:::-;13690:3;13686:39;13679:46;;13461:270;13371:360;;;;:::o;13737:364::-;13825:3;13853:39;13886:5;13853:39;:::i;:::-;13908:71;13972:6;13967:3;13908:71;:::i;:::-;13901:78;;13988:52;14033:6;14028:3;14021:4;14014:5;14010:16;13988:52;:::i;:::-;14065:29;14087:6;14065:29;:::i;:::-;14060:3;14056:39;14049:46;;13829:272;13737:364;;;;:::o;14107:377::-;14213:3;14241:39;14274:5;14241:39;:::i;:::-;14296:89;14378:6;14373:3;14296:89;:::i;:::-;14289:96;;14394:52;14439:6;14434:3;14427:4;14420:5;14416:16;14394:52;:::i;:::-;14471:6;14466:3;14462:16;14455:23;;14217:267;14107:377;;;;:::o;14490:366::-;14632:3;14653:67;14717:2;14712:3;14653:67;:::i;:::-;14646:74;;14729:93;14818:3;14729:93;:::i;:::-;14847:2;14842:3;14838:12;14831:19;;14490:366;;;:::o;14862:::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;14862:366;;;:::o;15234:::-;15376:3;15397:67;15461:2;15456:3;15397:67;:::i;:::-;15390:74;;15473:93;15562:3;15473:93;:::i;:::-;15591:2;15586:3;15582:12;15575:19;;15234:366;;;:::o;15606:402::-;15766:3;15787:85;15869:2;15864:3;15787:85;:::i;:::-;15780:92;;15881:93;15970:3;15881:93;:::i;:::-;15999:2;15994:3;15990:12;15983:19;;15606:402;;;:::o;16014:366::-;16156:3;16177:67;16241:2;16236:3;16177:67;:::i;:::-;16170:74;;16253:93;16342:3;16253:93;:::i;:::-;16371:2;16366:3;16362:12;16355:19;;16014:366;;;:::o;16386:::-;16528:3;16549:67;16613:2;16608:3;16549:67;:::i;:::-;16542:74;;16625:93;16714:3;16625:93;:::i;:::-;16743:2;16738:3;16734:12;16727:19;;16386:366;;;:::o;16758:::-;16900:3;16921:67;16985:2;16980:3;16921:67;:::i;:::-;16914:74;;16997:93;17086:3;16997:93;:::i;:::-;17115:2;17110:3;17106:12;17099:19;;16758:366;;;:::o;17130:::-;17272:3;17293:67;17357:2;17352:3;17293:67;:::i;:::-;17286:74;;17369:93;17458:3;17369:93;:::i;:::-;17487:2;17482:3;17478:12;17471:19;;17130:366;;;:::o;17502:::-;17644:3;17665:67;17729:2;17724:3;17665:67;:::i;:::-;17658:74;;17741:93;17830:3;17741:93;:::i;:::-;17859:2;17854:3;17850:12;17843:19;;17502:366;;;:::o;17874:::-;18016:3;18037:67;18101:2;18096:3;18037:67;:::i;:::-;18030:74;;18113:93;18202:3;18113:93;:::i;:::-;18231:2;18226:3;18222:12;18215:19;;17874:366;;;:::o;18246:400::-;18406:3;18427:84;18509:1;18504:3;18427:84;:::i;:::-;18420:91;;18520:93;18609:3;18520:93;:::i;:::-;18638:1;18633:3;18629:11;18622:18;;18246:400;;;:::o;18652:366::-;18794:3;18815:67;18879:2;18874:3;18815:67;:::i;:::-;18808:74;;18891:93;18980:3;18891:93;:::i;:::-;19009:2;19004:3;19000:12;18993:19;;18652:366;;;:::o;19024:::-;19166:3;19187:67;19251:2;19246:3;19187:67;:::i;:::-;19180:74;;19263:93;19352:3;19263:93;:::i;:::-;19381:2;19376:3;19372:12;19365:19;;19024:366;;;:::o;19396:::-;19538:3;19559:67;19623:2;19618:3;19559:67;:::i;:::-;19552:74;;19635:93;19724:3;19635:93;:::i;:::-;19753:2;19748:3;19744:12;19737:19;;19396:366;;;:::o;19768:::-;19910:3;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19768:366;;;:::o;20140:::-;20282:3;20303:67;20367:2;20362:3;20303:67;:::i;:::-;20296:74;;20379:93;20468:3;20379:93;:::i;:::-;20497:2;20492:3;20488:12;20481:19;;20140:366;;;:::o;20512:::-;20654:3;20675:67;20739:2;20734:3;20675:67;:::i;:::-;20668:74;;20751:93;20840:3;20751:93;:::i;:::-;20869:2;20864:3;20860:12;20853:19;;20512:366;;;:::o;20884:::-;21026:3;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20884:366;;;:::o;21256:::-;21398:3;21419:67;21483:2;21478:3;21419:67;:::i;:::-;21412:74;;21495:93;21584:3;21495:93;:::i;:::-;21613:2;21608:3;21604:12;21597:19;;21256:366;;;:::o;21628:108::-;21705:24;21723:5;21705:24;:::i;:::-;21700:3;21693:37;21628:108;;:::o;21742:118::-;21829:24;21847:5;21829:24;:::i;:::-;21824:3;21817:37;21742:118;;:::o;21866:807::-;22200:3;22222:148;22366:3;22222:148;:::i;:::-;22215:155;;22387:95;22478:3;22469:6;22387:95;:::i;:::-;22380:102;;22499:148;22643:3;22499:148;:::i;:::-;22492:155;;22664:3;22657:10;;21866:807;;;;:::o;22679:222::-;22772:4;22810:2;22799:9;22795:18;22787:26;;22823:71;22891:1;22880:9;22876:17;22867:6;22823:71;:::i;:::-;22679:222;;;;:::o;22907:1053::-;23230:4;23268:3;23257:9;23253:19;23245:27;;23282:71;23350:1;23339:9;23335:17;23326:6;23282:71;:::i;:::-;23363:72;23431:2;23420:9;23416:18;23407:6;23363:72;:::i;:::-;23482:9;23476:4;23472:20;23467:2;23456:9;23452:18;23445:48;23510:108;23613:4;23604:6;23510:108;:::i;:::-;23502:116;;23665:9;23659:4;23655:20;23650:2;23639:9;23635:18;23628:48;23693:108;23796:4;23787:6;23693:108;:::i;:::-;23685:116;;23849:9;23843:4;23839:20;23833:3;23822:9;23818:19;23811:49;23877:76;23948:4;23939:6;23877:76;:::i;:::-;23869:84;;22907:1053;;;;;;;;:::o;23966:751::-;24189:4;24227:3;24216:9;24212:19;24204:27;;24241:71;24309:1;24298:9;24294:17;24285:6;24241:71;:::i;:::-;24322:72;24390:2;24379:9;24375:18;24366:6;24322:72;:::i;:::-;24404;24472:2;24461:9;24457:18;24448:6;24404:72;:::i;:::-;24486;24554:2;24543:9;24539:18;24530:6;24486:72;:::i;:::-;24606:9;24600:4;24596:20;24590:3;24579:9;24575:19;24568:49;24634:76;24705:4;24696:6;24634:76;:::i;:::-;24626:84;;23966:751;;;;;;;;:::o;24723:373::-;24866:4;24904:2;24893:9;24889:18;24881:26;;24953:9;24947:4;24943:20;24939:1;24928:9;24924:17;24917:47;24981:108;25084:4;25075:6;24981:108;:::i;:::-;24973:116;;24723:373;;;;:::o;25102:634::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25410:9;25404:4;25400:20;25396:1;25385:9;25381:17;25374:47;25438:108;25541:4;25532:6;25438:108;:::i;:::-;25430:116;;25593:9;25587:4;25583:20;25578:2;25567:9;25563:18;25556:48;25621:108;25724:4;25715:6;25621:108;:::i;:::-;25613:116;;25102:634;;;;;:::o;25742:210::-;25829:4;25867:2;25856:9;25852:18;25844:26;;25880:65;25942:1;25931:9;25927:17;25918:6;25880:65;:::i;:::-;25742:210;;;;:::o;25958:313::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:78;26259:4;26250:6;26186:78;:::i;:::-;26178:86;;25958:313;;;;:::o;26277:419::-;26443:4;26481:2;26470:9;26466:18;26458:26;;26530:9;26524:4;26520:20;26516:1;26505:9;26501:17;26494:47;26558:131;26684:4;26558:131;:::i;:::-;26550:139;;26277:419;;;:::o;26702:::-;26868:4;26906:2;26895:9;26891:18;26883:26;;26955:9;26949:4;26945:20;26941:1;26930:9;26926:17;26919:47;26983:131;27109:4;26983:131;:::i;:::-;26975:139;;26702:419;;;:::o;27127:::-;27293:4;27331:2;27320:9;27316:18;27308:26;;27380:9;27374:4;27370:20;27366:1;27355:9;27351:17;27344:47;27408:131;27534:4;27408:131;:::i;:::-;27400:139;;27127:419;;;:::o;27552:::-;27718:4;27756:2;27745:9;27741:18;27733:26;;27805:9;27799:4;27795:20;27791:1;27780:9;27776:17;27769:47;27833:131;27959:4;27833:131;:::i;:::-;27825:139;;27552:419;;;:::o;27977:::-;28143:4;28181:2;28170:9;28166:18;28158:26;;28230:9;28224:4;28220:20;28216:1;28205:9;28201:17;28194:47;28258:131;28384:4;28258:131;:::i;:::-;28250:139;;27977:419;;;:::o;28402:::-;28568:4;28606:2;28595:9;28591:18;28583:26;;28655:9;28649:4;28645:20;28641:1;28630:9;28626:17;28619:47;28683:131;28809:4;28683:131;:::i;:::-;28675:139;;28402:419;;;:::o;28827:::-;28993:4;29031:2;29020:9;29016:18;29008:26;;29080:9;29074:4;29070:20;29066:1;29055:9;29051:17;29044:47;29108:131;29234:4;29108:131;:::i;:::-;29100:139;;28827:419;;;:::o;29252:::-;29418:4;29456:2;29445:9;29441:18;29433:26;;29505:9;29499:4;29495:20;29491:1;29480:9;29476:17;29469:47;29533:131;29659:4;29533:131;:::i;:::-;29525:139;;29252:419;;;:::o;29677:::-;29843:4;29881:2;29870:9;29866:18;29858:26;;29930:9;29924:4;29920:20;29916:1;29905:9;29901:17;29894:47;29958:131;30084:4;29958:131;:::i;:::-;29950:139;;29677:419;;;:::o;30102:::-;30268:4;30306:2;30295:9;30291:18;30283:26;;30355:9;30349:4;30345:20;30341:1;30330:9;30326:17;30319:47;30383:131;30509:4;30383:131;:::i;:::-;30375:139;;30102:419;;;:::o;30527:::-;30693:4;30731:2;30720:9;30716:18;30708:26;;30780:9;30774:4;30770:20;30766:1;30755:9;30751:17;30744:47;30808:131;30934:4;30808:131;:::i;:::-;30800:139;;30527:419;;;:::o;30952:::-;31118:4;31156:2;31145:9;31141:18;31133:26;;31205:9;31199:4;31195:20;31191:1;31180:9;31176:17;31169:47;31233:131;31359:4;31233:131;:::i;:::-;31225:139;;30952:419;;;:::o;31377:::-;31543:4;31581:2;31570:9;31566:18;31558:26;;31630:9;31624:4;31620:20;31616:1;31605:9;31601:17;31594:47;31658:131;31784:4;31658:131;:::i;:::-;31650:139;;31377:419;;;:::o;31802:::-;31968:4;32006:2;31995:9;31991:18;31983:26;;32055:9;32049:4;32045:20;32041:1;32030:9;32026:17;32019:47;32083:131;32209:4;32083:131;:::i;:::-;32075:139;;31802:419;;;:::o;32227:::-;32393:4;32431:2;32420:9;32416:18;32408:26;;32480:9;32474:4;32470:20;32466:1;32455:9;32451:17;32444:47;32508:131;32634:4;32508:131;:::i;:::-;32500:139;;32227:419;;;:::o;32652:::-;32818:4;32856:2;32845:9;32841:18;32833:26;;32905:9;32899:4;32895:20;32891:1;32880:9;32876:17;32869:47;32933:131;33059:4;32933:131;:::i;:::-;32925:139;;32652:419;;;:::o;33077:::-;33243:4;33281:2;33270:9;33266:18;33258:26;;33330:9;33324:4;33320:20;33316:1;33305:9;33301:17;33294:47;33358:131;33484:4;33358:131;:::i;:::-;33350:139;;33077:419;;;:::o;33502:222::-;33595:4;33633:2;33622:9;33618:18;33610:26;;33646:71;33714:1;33703:9;33699:17;33690:6;33646:71;:::i;:::-;33502:222;;;;:::o;33730:332::-;33851:4;33889:2;33878:9;33874:18;33866:26;;33902:71;33970:1;33959:9;33955:17;33946:6;33902:71;:::i;:::-;33983:72;34051:2;34040:9;34036:18;34027:6;33983:72;:::i;:::-;33730:332;;;;;:::o;34068:129::-;34102:6;34129:20;;:::i;:::-;34119:30;;34158:33;34186:4;34178:6;34158:33;:::i;:::-;34068:129;;;:::o;34203:75::-;34236:6;34269:2;34263:9;34253:19;;34203:75;:::o;34284:311::-;34361:4;34451:18;34443:6;34440:30;34437:56;;;34473:18;;:::i;:::-;34437:56;34523:4;34515:6;34511:17;34503:25;;34583:4;34577;34573:15;34565:23;;34284:311;;;:::o;34601:::-;34678:4;34768:18;34760:6;34757:30;34754:56;;;34790:18;;:::i;:::-;34754:56;34840:4;34832:6;34828:17;34820:25;;34900:4;34894;34890:15;34882:23;;34601:311;;;:::o;34918:307::-;34979:4;35069:18;35061:6;35058:30;35055:56;;;35091:18;;:::i;:::-;35055:56;35129:29;35151:6;35129:29;:::i;:::-;35121:37;;35213:4;35207;35203:15;35195:23;;34918:307;;;:::o;35231:308::-;35293:4;35383:18;35375:6;35372:30;35369:56;;;35405:18;;:::i;:::-;35369:56;35443:29;35465:6;35443:29;:::i;:::-;35435:37;;35527:4;35521;35517:15;35509:23;;35231:308;;;:::o;35545:132::-;35612:4;35635:3;35627:11;;35665:4;35660:3;35656:14;35648:22;;35545:132;;;:::o;35683:114::-;35750:6;35784:5;35778:12;35768:22;;35683:114;;;:::o;35803:98::-;35854:6;35888:5;35882:12;35872:22;;35803:98;;;:::o;35907:99::-;35959:6;35993:5;35987:12;35977:22;;35907:99;;;:::o;36012:113::-;36082:4;36114;36109:3;36105:14;36097:22;;36012:113;;;:::o;36131:184::-;36230:11;36264:6;36259:3;36252:19;36304:4;36299:3;36295:14;36280:29;;36131:184;;;;:::o;36321:168::-;36404:11;36438:6;36433:3;36426:19;36478:4;36473:3;36469:14;36454:29;;36321:168;;;;:::o;36495:169::-;36579:11;36613:6;36608:3;36601:19;36653:4;36648:3;36644:14;36629:29;;36495:169;;;;:::o;36670:148::-;36772:11;36809:3;36794:18;;36670:148;;;;:::o;36824:305::-;36864:3;36883:20;36901:1;36883:20;:::i;:::-;36878:25;;36917:20;36935:1;36917:20;:::i;:::-;36912:25;;37071:1;37003:66;36999:74;36996:1;36993:81;36990:107;;;37077:18;;:::i;:::-;36990:107;37121:1;37118;37114:9;37107:16;;36824:305;;;;:::o;37135:185::-;37175:1;37192:20;37210:1;37192:20;:::i;:::-;37187:25;;37226:20;37244:1;37226:20;:::i;:::-;37221:25;;37265:1;37255:35;;37270:18;;:::i;:::-;37255:35;37312:1;37309;37305:9;37300:14;;37135:185;;;;:::o;37326:348::-;37366:7;37389:20;37407:1;37389:20;:::i;:::-;37384:25;;37423:20;37441:1;37423:20;:::i;:::-;37418:25;;37611:1;37543:66;37539:74;37536:1;37533:81;37528:1;37521:9;37514:17;37510:105;37507:131;;;37618:18;;:::i;:::-;37507:131;37666:1;37663;37659:9;37648:20;;37326:348;;;;:::o;37680:191::-;37720:4;37740:20;37758:1;37740:20;:::i;:::-;37735:25;;37774:20;37792:1;37774:20;:::i;:::-;37769:25;;37813:1;37810;37807:8;37804:34;;;37818:18;;:::i;:::-;37804:34;37863:1;37860;37856:9;37848:17;;37680:191;;;;:::o;37877:96::-;37914:7;37943:24;37961:5;37943:24;:::i;:::-;37932:35;;37877:96;;;:::o;37979:90::-;38013:7;38056:5;38049:13;38042:21;38031:32;;37979:90;;;:::o;38075:149::-;38111:7;38151:66;38144:5;38140:78;38129:89;;38075:149;;;:::o;38230:126::-;38267:7;38307:42;38300:5;38296:54;38285:65;;38230:126;;;:::o;38362:77::-;38399:7;38428:5;38417:16;;38362:77;;;:::o;38445:154::-;38529:6;38524:3;38519;38506:30;38591:1;38582:6;38577:3;38573:16;38566:27;38445:154;;;:::o;38605:307::-;38673:1;38683:113;38697:6;38694:1;38691:13;38683:113;;;38782:1;38777:3;38773:11;38767:18;38763:1;38758:3;38754:11;38747:39;38719:2;38716:1;38712:10;38707:15;;38683:113;;;38814:6;38811:1;38808:13;38805:101;;;38894:1;38885:6;38880:3;38876:16;38869:27;38805:101;38654:258;38605:307;;;:::o;38918:320::-;38962:6;38999:1;38993:4;38989:12;38979:22;;39046:1;39040:4;39036:12;39067:18;39057:81;;39123:4;39115:6;39111:17;39101:27;;39057:81;39185:2;39177:6;39174:14;39154:18;39151:38;39148:84;;;39204:18;;:::i;:::-;39148:84;38969:269;38918:320;;;:::o;39244:281::-;39327:27;39349:4;39327:27;:::i;:::-;39319:6;39315:40;39457:6;39445:10;39442:22;39421:18;39409:10;39406:34;39403:62;39400:88;;;39468:18;;:::i;:::-;39400:88;39508:10;39504:2;39497:22;39287:238;39244:281;;:::o;39531:233::-;39570:3;39593:24;39611:5;39593:24;:::i;:::-;39584:33;;39639:66;39632:5;39629:77;39626:103;;;39709:18;;:::i;:::-;39626:103;39756:1;39749:5;39745:13;39738:20;;39531:233;;;:::o;39770:176::-;39802:1;39819:20;39837:1;39819:20;:::i;:::-;39814:25;;39853:20;39871:1;39853:20;:::i;:::-;39848:25;;39892:1;39882:35;;39897:18;;:::i;:::-;39882:35;39938:1;39935;39931:9;39926:14;;39770:176;;;;:::o;39952:180::-;40000:77;39997:1;39990:88;40097:4;40094:1;40087:15;40121:4;40118:1;40111:15;40138:180;40186:77;40183:1;40176:88;40283:4;40280:1;40273:15;40307:4;40304:1;40297:15;40324:180;40372:77;40369:1;40362:88;40469:4;40466:1;40459:15;40493:4;40490:1;40483:15;40510:180;40558:77;40555:1;40548:88;40655:4;40652:1;40645:15;40679:4;40676:1;40669:15;40696:180;40744:77;40741:1;40734:88;40841:4;40838:1;40831:15;40865:4;40862:1;40855:15;40882:183;40917:3;40955:1;40937:16;40934:23;40931:128;;;40993:1;40990;40987;40972:23;41015:34;41046:1;41040:8;41015:34;:::i;:::-;41008:41;;40931:128;40882:183;:::o;41071:117::-;41180:1;41177;41170:12;41194:117;41303:1;41300;41293:12;41317:117;41426:1;41423;41416:12;41440:117;41549:1;41546;41539:12;41563:117;41672:1;41669;41662:12;41686:102;41727:6;41778:2;41774:7;41769:2;41762:5;41758:14;41754:28;41744:38;;41686:102;;;:::o;41794:106::-;41838:8;41887:5;41882:3;41878:15;41857:36;;41794:106;;;:::o;41906:239::-;42046:34;42042:1;42034:6;42030:14;42023:58;42115:22;42110:2;42102:6;42098:15;42091:47;41906:239;:::o;42151:227::-;42291:34;42287:1;42279:6;42275:14;42268:58;42360:10;42355:2;42347:6;42343:15;42336:35;42151:227;:::o;42384:230::-;42524:34;42520:1;42512:6;42508:14;42501:58;42593:13;42588:2;42580:6;42576:15;42569:38;42384:230;:::o;42620:304::-;42760:34;42756:1;42748:6;42744:14;42737:58;42833:34;42828:2;42820:6;42816:15;42809:59;42906:6;42901:2;42893:6;42889:15;42882:31;42620:304;:::o;42934:237::-;43078:34;43074:1;43066:6;43062:14;43055:58;43151:8;43146:2;43138:6;43134:15;43127:33;42934:237;:::o;43181:240::-;43325:34;43321:1;43313:6;43309:14;43302:58;43398:11;43393:2;43385:6;43381:15;43374:36;43181:240;:::o;43431:244::-;43575:34;43571:1;43563:6;43559:14;43552:58;43648:15;43643:2;43635:6;43631:15;43624:40;43431:244;:::o;43685:236::-;43829:34;43825:1;43817:6;43813:14;43806:58;43902:7;43897:2;43889:6;43885:15;43878:32;43685:236;:::o;43931:249::-;44075:34;44071:1;44063:6;44059:14;44052:58;44148:20;44143:2;44135:6;44131:15;44124:45;43931:249;:::o;44190:241::-;44334:34;44330:1;44322:6;44318:14;44311:58;44407:12;44402:2;44394:6;44390:15;44383:37;44190:241;:::o;44441:163::-;44585:7;44581:1;44573:6;44569:14;44562:31;44441:163;:::o;44614:190::-;44758:34;44754:1;44746:6;44742:14;44735:58;44614:190;:::o;44814:::-;44958:34;44954:1;44946:6;44942:14;44935:58;44814:190;:::o;45014:176::-;45158:20;45154:1;45146:6;45142:14;45135:44;45014:176;:::o;45200:175::-;45344:19;45340:1;45332:6;45328:14;45321:43;45200:175;:::o;45385:240::-;45529:34;45525:1;45517:6;45513:14;45506:58;45602:11;45597:2;45589:6;45585:15;45578:36;45385:240;:::o;45635:::-;45779:34;45775:1;45767:6;45763:14;45756:58;45852:11;45847:2;45839:6;45835:15;45828:36;45635:240;:::o;45885:239::-;46029:34;46025:1;46017:6;46013:14;46006:58;46102:10;46097:2;46089:6;46085:15;46078:35;45885:239;:::o;46134:232::-;46278:34;46274:1;46266:6;46262:14;46255:58;46351:3;46346:2;46338:6;46334:15;46327:28;46134:232;:::o;46376:783::-;46415:3;46457:4;46439:16;46436:26;46433:39;;;46465:5;;46433:39;46498:20;;:::i;:::-;46577:1;46559:16;46555:24;46552:1;46546:4;46531:49;46614:4;46608:11;46725:16;46718:4;46710:6;46706:17;46703:39;46666:18;46658:6;46655:30;46635:125;46632:166;;;46779:5;;;;46632:166;46833:6;46827:4;46823:17;46873:3;46867:10;46904:18;46896:6;46893:30;46890:43;;;46926:5;;;;;;46890:43;46978:6;46971:4;46966:3;46962:14;46958:27;47041:1;47023:16;47019:24;47013:4;47009:35;47004:3;47001:44;46998:57;;;47048:5;;;;;;;46998:57;47069;47117:6;47111:4;47107:17;47099:6;47095:30;47089:4;47069:57;:::i;:::-;47146:3;47139:10;;46419:740;;;;;46376:783;;:::o;47169:130::-;47246:24;47264:5;47246:24;:::i;:::-;47239:5;47236:35;47226:63;;47285:1;47282;47275:12;47226:63;47169:130;:::o;47309:124::-;47383:21;47398:5;47383:21;:::i;:::-;47376:5;47373:32;47363:60;;47419:1;47416;47409:12;47363:60;47309:124;:::o;47443:128::-;47519:23;47536:5;47519:23;:::i;:::-;47512:5;47509:34;47499:62;;47557:1;47554;47547:12;47499:62;47443:128;:::o;47581:130::-;47658:24;47676:5;47658:24;:::i;:::-;47651:5;47648:35;47638:63;;47697:1;47694;47687:12;47638:63;47581:130;:::o

Swarm Source

ipfs://2d9b9d4bbdecf7580b8629a0e268ff045292942a574d04057628bb83a3fe736c
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.