ETH Price: $3,087.85 (-1.48%)

Token

Hangry Animals Member Passes (HANGRYPASS)
 

Overview

Max Total Supply

200 HANGRYPASS

Holders

96

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xfcc7c3c8a9e8362bcb1a47af70bc231a00777217
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:
HangryAnimalsMemberPasses

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-08-28
*/

// SPDX-License-Identifier: MIT
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol

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

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


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

pragma solidity ^0.8.0;


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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


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

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

        _afterTokenTransfer(operator, from, to, ids, amounts, 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);

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

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

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

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

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

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

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

        _afterTokenTransfer(operator, address(0), to, ids, amounts, 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);

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/HangryAnimalsChet.sol


pragma solidity ^0.8.0;



    contract HangryAnimalsMemberPasses is ERC1155, Ownable {
    
    string public name;
    string public symbol;
    string public thisContractURI;

    mapping(uint => string) public tokenURI;

    constructor() ERC1155("") {
        name = "Hangry Animals Member Passes";
        symbol = "HANGRYPASS";
    }

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thisContractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280601c81526020017f48616e67727920416e696d616c73204d656d626572205061737365730000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600a81526020017f48414e475259504153530000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61418f80620003056000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80638da5cb5b116100c3578063c87b56dd1161007c578063c87b56dd14610373578063d81d0a15146103a3578063e8a3d485146103bf578063e985e9c5146103dd578063f242432a1461040d578063f2fde38b146104295761014c565b80638da5cb5b146102c5578063938e3d7b146102e357806395d89b41146102ff578063a22cb4651461031d578063a93115a214610339578063b390c0ab146103575761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780634e1273f414610237578063510f410414610267578063715018a61461028357806383ca4b6f1461028d578063862440e2146102a95761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf578063156e29f6146101ff575b600080fd5b61016b60048036038101906101669190612e18565b610445565b604051610178919061378b565b60405180910390f35b61019b60048036038101906101969190612f9b565b61050e565b6040516101a8919061356e565b60405180910390f35b6101b96105f0565b6040516101c69190613589565b60405180910390f35b6101e960048036038101906101e4919061303e565b61067e565b6040516101f69190613589565b60405180910390f35b61021960048036038101906102149190612e58565b610723565b005b61023560048036038101906102309190612afc565b6107bf565b005b610251600480360381019061024c9190612eab565b610860565b60405161025e9190613515565b60405180910390f35b610281600480360381019061027c9190612ced565b610979565b005b61028b610a22565b005b6102a760048036038101906102a29190612f23565b610aaa565b005b6102c360048036038101906102be919061306b565b610ab9565b005b6102cd610b99565b6040516102da9190613438565b60405180910390f35b6102fd60048036038101906102f89190612ff5565b610bc3565b005b610307610c59565b6040516103149190613589565b60405180910390f35b61033760048036038101906103329190612dd8565b610ce7565b005b610341610cfd565b60405161034e9190613589565b60405180910390f35b610371600480360381019061036c91906130c7565b610d8b565b005b61038d6004803603810190610388919061303e565b610d9a565b60405161039a9190613589565b60405180910390f35b6103bd60048036038101906103b89190612c62565b610e3a565b005b6103c7610ed6565b6040516103d49190613589565b60405180910390f35b6103f760048036038101906103f29190612abc565b610f68565b604051610404919061356e565b60405180910390f35b61042760048036038101906104229190612bcb565b610ffc565b005b610443600480360381019061043e9190612a8f565b61109d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ad906135eb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e957506105e882611195565b5b9050919050565b600480546105fd90613a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461062990613a2b565b80156106765780601f1061064b57610100808354040283529160200191610676565b820191906000526020600020905b81548152906001019060200180831161065957829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461069e90613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90613a2b565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509050919050565b61072b6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610749610b99565b73ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906136eb565b60405180910390fd5b6107ba83838360405180602001604052806000815250611207565b505050565b6107c76111ff565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061080d575061080c856108076111ff565b610f68565b5b61084c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108439061368b565b60405180910390fd5b61085985858585856113b8565b5050505050565b606081518351146108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d9061372b565b60405180910390fd5b6000835167ffffffffffffffff8111156108c3576108c2613b64565b5b6040519080825280602002602001820160405280156108f15781602001602082028036833780820191505090505b50905060005b845181101561096e5761093e85828151811061091657610915613b35565b5b602002602001015185838151811061093157610930613b35565b5b6020026020010151610445565b82828151811061095157610950613b35565b5b6020026020010181815250508061096790613a8e565b90506108f7565b508091505092915050565b6109816111ff565b73ffffffffffffffffffffffffffffffffffffffff1661099f610b99565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906136eb565b60405180910390fd5b610a008585856116da565b610a1b858383604051806020016040528060008152506119a9565b5050505050565b610a2a6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610a48610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906136eb565b60405180910390fd5b610aa86000611bd6565b565b610ab53383836116da565b5050565b610ac16111ff565b73ffffffffffffffffffffffffffffffffffffffff16610adf610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c906136eb565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190610b5c929190612767565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b8d9190613589565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bcb6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610be9610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906136eb565b60405180910390fd5b8060069080519060200190610c55929190612767565b5050565b60058054610c6690613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9290613a2b565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b505050505081565b610cf9610cf26111ff565b8383611c9c565b5050565b60068054610d0a90613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690613a2b565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b505050505081565b610d96338383611e09565b5050565b60076020528060005260406000206000915090508054610db990613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610de590613a2b565b8015610e325780601f10610e0757610100808354040283529160200191610e32565b820191906000526020600020905b815481529060010190602001808311610e1557829003601f168201915b505050505081565b610e426111ff565b73ffffffffffffffffffffffffffffffffffffffff16610e60610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906136eb565b60405180910390fd5b610ed1838383604051806020016040528060008152506119a9565b505050565b606060068054610ee590613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1190613a2b565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110046111ff565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061104a5750611049856110446111ff565b610f68565b5b611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061364b565b60405180910390fd5b6110968585858585612050565b5050505050565b6110a56111ff565b73ffffffffffffffffffffffffffffffffffffffff166110c3610b99565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906136eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111809061360b565b60405180910390fd5b61119281611bd6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e9061376b565b60405180910390fd5b60006112816111ff565b9050600061128e856122ec565b9050600061129b856122ec565b90506112ac83600089858589612366565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461130b919061391f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516113899291906137a6565b60405180910390a46113a08360008989898961236e565b6113af83600089858589612555565b50505050505050565b81518351146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f39061374b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114639061366b565b60405180910390fd5b60006114766111ff565b9050611486818787878787612366565b60005b84518110156116375760008582815181106114a7576114a6613b35565b5b6020026020010151905060008583815181106114c6576114c5613b35565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906136cb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161c919061391f565b925050819055505050508061163090613a8e565b9050611489565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116ae929190613537565b60405180910390a46116c481878787878761255d565b6116d2818787878787612555565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906136ab565b60405180910390fd5b805182511461178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117859061374b565b60405180910390fd5b60006117986111ff565b90506117b881856000868660405180602001604052806000815250612366565b60005b83518110156119055760008482815181106117d9576117d8613b35565b5b6020026020010151905060008483815181106117f8576117f7613b35565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061362b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806118fd90613a8e565b9150506117bb565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161197d929190613537565b60405180910390a46119a381856000868660405180602001604052806000815250612555565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a109061376b565b60405180910390fd5b8151835114611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a549061374b565b60405180910390fd5b6000611a676111ff565b9050611a7881600087878787612366565b60005b8451811015611b3157838181518110611a9757611a96613b35565b5b6020026020010151600080878481518110611ab557611ab4613b35565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b17919061391f565b925050819055508080611b2990613a8e565b915050611a7b565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ba9929190613537565b60405180910390a4611bc08160008787878761255d565b611bcf81600087878787612555565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061370b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dfc919061356e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e70906136ab565b60405180910390fd5b6000611e836111ff565b90506000611e90846122ec565b90506000611e9d846122ec565b9050611ebd83876000858560405180602001604052806000815250612366565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b9061362b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120219291906137a6565b60405180910390a461204784886000868660405180602001604052806000815250612555565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b79061366b565b60405180910390fd5b60006120ca6111ff565b905060006120d7856122ec565b905060006120e4856122ec565b90506120f4838989858589612366565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561218b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612182906136cb565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612240919061391f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516122bd9291906137a6565b60405180910390a46122d3848a8a8a8a8a61236e565b6122e1848a8a86868a612555565b505050505050505050565b60606000600167ffffffffffffffff81111561230b5761230a613b64565b5b6040519080825280602002602001820160405280156123395781602001602082028036833780820191505090505b509050828160008151811061235157612350613b35565b5b60200260200101818152505080915050919050565b505050505050565b61238d8473ffffffffffffffffffffffffffffffffffffffff16612744565b1561254d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d39594939291906134bb565b602060405180830381600087803b1580156123ed57600080fd5b505af192505050801561241e57506040513d601f19601f8201168201806040525081019061241b9190612fc8565b60015b6124c45761242a613b93565b806308c379a01415612487575061243f614067565b8061244a5750612489565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9190613589565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb906135ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461254b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612542906135cb565b60405180910390fd5b505b505050505050565b505050505050565b61257c8473ffffffffffffffffffffffffffffffffffffffff16612744565b1561273c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125c2959493929190613453565b602060405180830381600087803b1580156125dc57600080fd5b505af192505050801561260d57506040513d601f19601f8201168201806040525081019061260a9190612fc8565b60015b6126b357612619613b93565b806308c379a01415612676575061262e614067565b806126395750612678565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d9190613589565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa906135ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906135cb565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461277390613a2b565b90600052602060002090601f01602090048101928261279557600085556127dc565b82601f106127ae57805160ff19168380011785556127dc565b828001600101855582156127dc579182015b828111156127db5782518255916020019190600101906127c0565b5b5090506127e991906127ed565b5090565b5b808211156128065760008160009055506001016127ee565b5090565b600061281d612818846137f4565b6137cf565b905080838252602082019050828560208602820111156128405761283f613bba565b5b60005b858110156128705781612856888261296e565b845260208401935060208301925050600181019050612843565b5050509392505050565b600061288d61288884613820565b6137cf565b905080838252602082019050828560208602820111156128b0576128af613bba565b5b60005b858110156128e057816128c68882612a7a565b8452602084019350602083019250506001810190506128b3565b5050509392505050565b60006128fd6128f88461384c565b6137cf565b90508281526020810184848401111561291957612918613bbf565b5b6129248482856139e9565b509392505050565b600061293f61293a8461387d565b6137cf565b90508281526020810184848401111561295b5761295a613bbf565b5b6129668482856139e9565b509392505050565b60008135905061297d816140fd565b92915050565b600082601f83011261299857612997613bb5565b5b81356129a884826020860161280a565b91505092915050565b600082601f8301126129c6576129c5613bb5565b5b81356129d684826020860161287a565b91505092915050565b6000813590506129ee81614114565b92915050565b600081359050612a038161412b565b92915050565b600081519050612a188161412b565b92915050565b600082601f830112612a3357612a32613bb5565b5b8135612a438482602086016128ea565b91505092915050565b600082601f830112612a6157612a60613bb5565b5b8135612a7184826020860161292c565b91505092915050565b600081359050612a8981614142565b92915050565b600060208284031215612aa557612aa4613bc9565b5b6000612ab38482850161296e565b91505092915050565b60008060408385031215612ad357612ad2613bc9565b5b6000612ae18582860161296e565b9250506020612af28582860161296e565b9150509250929050565b600080600080600060a08688031215612b1857612b17613bc9565b5b6000612b268882890161296e565b9550506020612b378882890161296e565b945050604086013567ffffffffffffffff811115612b5857612b57613bc4565b5b612b64888289016129b1565b935050606086013567ffffffffffffffff811115612b8557612b84613bc4565b5b612b91888289016129b1565b925050608086013567ffffffffffffffff811115612bb257612bb1613bc4565b5b612bbe88828901612a1e565b9150509295509295909350565b600080600080600060a08688031215612be757612be6613bc9565b5b6000612bf58882890161296e565b9550506020612c068882890161296e565b9450506040612c1788828901612a7a565b9350506060612c2888828901612a7a565b925050608086013567ffffffffffffffff811115612c4957612c48613bc4565b5b612c5588828901612a1e565b9150509295509295909350565b600080600060608486031215612c7b57612c7a613bc9565b5b6000612c898682870161296e565b935050602084013567ffffffffffffffff811115612caa57612ca9613bc4565b5b612cb6868287016129b1565b925050604084013567ffffffffffffffff811115612cd757612cd6613bc4565b5b612ce3868287016129b1565b9150509250925092565b600080600080600060a08688031215612d0957612d08613bc9565b5b6000612d178882890161296e565b955050602086013567ffffffffffffffff811115612d3857612d37613bc4565b5b612d44888289016129b1565b945050604086013567ffffffffffffffff811115612d6557612d64613bc4565b5b612d71888289016129b1565b935050606086013567ffffffffffffffff811115612d9257612d91613bc4565b5b612d9e888289016129b1565b925050608086013567ffffffffffffffff811115612dbf57612dbe613bc4565b5b612dcb888289016129b1565b9150509295509295909350565b60008060408385031215612def57612dee613bc9565b5b6000612dfd8582860161296e565b9250506020612e0e858286016129df565b9150509250929050565b60008060408385031215612e2f57612e2e613bc9565b5b6000612e3d8582860161296e565b9250506020612e4e85828601612a7a565b9150509250929050565b600080600060608486031215612e7157612e70613bc9565b5b6000612e7f8682870161296e565b9350506020612e9086828701612a7a565b9250506040612ea186828701612a7a565b9150509250925092565b60008060408385031215612ec257612ec1613bc9565b5b600083013567ffffffffffffffff811115612ee057612edf613bc4565b5b612eec85828601612983565b925050602083013567ffffffffffffffff811115612f0d57612f0c613bc4565b5b612f19858286016129b1565b9150509250929050565b60008060408385031215612f3a57612f39613bc9565b5b600083013567ffffffffffffffff811115612f5857612f57613bc4565b5b612f64858286016129b1565b925050602083013567ffffffffffffffff811115612f8557612f84613bc4565b5b612f91858286016129b1565b9150509250929050565b600060208284031215612fb157612fb0613bc9565b5b6000612fbf848285016129f4565b91505092915050565b600060208284031215612fde57612fdd613bc9565b5b6000612fec84828501612a09565b91505092915050565b60006020828403121561300b5761300a613bc9565b5b600082013567ffffffffffffffff81111561302957613028613bc4565b5b61303584828501612a4c565b91505092915050565b60006020828403121561305457613053613bc9565b5b600061306284828501612a7a565b91505092915050565b6000806040838503121561308257613081613bc9565b5b600061309085828601612a7a565b925050602083013567ffffffffffffffff8111156130b1576130b0613bc4565b5b6130bd85828601612a4c565b9150509250929050565b600080604083850312156130de576130dd613bc9565b5b60006130ec85828601612a7a565b92505060206130fd85828601612a7a565b9150509250929050565b6000613113838361341a565b60208301905092915050565b61312881613975565b82525050565b6000613139826138be565b61314381856138ec565b935061314e836138ae565b8060005b8381101561317f5781516131668882613107565b9750613171836138df565b925050600181019050613152565b5085935050505092915050565b61319581613987565b82525050565b60006131a6826138c9565b6131b081856138fd565b93506131c08185602086016139f8565b6131c981613bce565b840191505092915050565b60006131df826138d4565b6131e9818561390e565b93506131f98185602086016139f8565b61320281613bce565b840191505092915050565b600061321a60348361390e565b915061322582613bec565b604082019050919050565b600061323d60288361390e565b915061324882613c3b565b604082019050919050565b6000613260602b8361390e565b915061326b82613c8a565b604082019050919050565b600061328360268361390e565b915061328e82613cd9565b604082019050919050565b60006132a660248361390e565b91506132b182613d28565b604082019050919050565b60006132c960298361390e565b91506132d482613d77565b604082019050919050565b60006132ec60258361390e565b91506132f782613dc6565b604082019050919050565b600061330f60328361390e565b915061331a82613e15565b604082019050919050565b600061333260238361390e565b915061333d82613e64565b604082019050919050565b6000613355602a8361390e565b915061336082613eb3565b604082019050919050565b600061337860208361390e565b915061338382613f02565b602082019050919050565b600061339b60298361390e565b91506133a682613f2b565b604082019050919050565b60006133be60298361390e565b91506133c982613f7a565b604082019050919050565b60006133e160288361390e565b91506133ec82613fc9565b604082019050919050565b600061340460218361390e565b915061340f82614018565b604082019050919050565b613423816139df565b82525050565b613432816139df565b82525050565b600060208201905061344d600083018461311f565b92915050565b600060a082019050613468600083018861311f565b613475602083018761311f565b8181036040830152613487818661312e565b9050818103606083015261349b818561312e565b905081810360808301526134af818461319b565b90509695505050505050565b600060a0820190506134d0600083018861311f565b6134dd602083018761311f565b6134ea6040830186613429565b6134f76060830185613429565b8181036080830152613509818461319b565b90509695505050505050565b6000602082019050818103600083015261352f818461312e565b905092915050565b60006040820190508181036000830152613551818561312e565b90508181036020830152613565818461312e565b90509392505050565b6000602082019050613583600083018461318c565b92915050565b600060208201905081810360008301526135a381846131d4565b905092915050565b600060208201905081810360008301526135c48161320d565b9050919050565b600060208201905081810360008301526135e481613230565b9050919050565b6000602082019050818103600083015261360481613253565b9050919050565b6000602082019050818103600083015261362481613276565b9050919050565b6000602082019050818103600083015261364481613299565b9050919050565b60006020820190508181036000830152613664816132bc565b9050919050565b60006020820190508181036000830152613684816132df565b9050919050565b600060208201905081810360008301526136a481613302565b9050919050565b600060208201905081810360008301526136c481613325565b9050919050565b600060208201905081810360008301526136e481613348565b9050919050565b600060208201905081810360008301526137048161336b565b9050919050565b600060208201905081810360008301526137248161338e565b9050919050565b60006020820190508181036000830152613744816133b1565b9050919050565b60006020820190508181036000830152613764816133d4565b9050919050565b60006020820190508181036000830152613784816133f7565b9050919050565b60006020820190506137a06000830184613429565b92915050565b60006040820190506137bb6000830185613429565b6137c86020830184613429565b9392505050565b60006137d96137ea565b90506137e58282613a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561380f5761380e613b64565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561383b5761383a613b64565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561386757613866613b64565b5b61387082613bce565b9050602081019050919050565b600067ffffffffffffffff82111561389857613897613b64565b5b6138a182613bce565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061392a826139df565b9150613935836139df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561396a57613969613ad7565b5b828201905092915050565b6000613980826139bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a165780820151818401526020810190506139fb565b83811115613a25576000848401525b50505050565b60006002820490506001821680613a4357607f821691505b60208210811415613a5757613a56613b06565b5b50919050565b613a6682613bce565b810181811067ffffffffffffffff82111715613a8557613a84613b64565b5b80604052505050565b6000613a99826139df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613acc57613acb613ad7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613bb25760046000803e613baf600051613bdf565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614077576140fa565b61407f6137ea565b60043d036004823e80513d602482011167ffffffffffffffff821117156140a75750506140fa565b808201805167ffffffffffffffff8111156140c557505050506140fa565b80602083010160043d0385018111156140e25750505050506140fa565b6140f182602001850186613a5d565b82955050505050505b90565b61410681613975565b811461411157600080fd5b50565b61411d81613987565b811461412857600080fd5b50565b61413481613993565b811461413f57600080fd5b50565b61414b816139df565b811461415657600080fd5b5056fea2646970667358221220bd4b7c4f900ea41f67cabff80ea017f4885c099d43268010884a97e6e365bb0c64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014c5760003560e01c80638da5cb5b116100c3578063c87b56dd1161007c578063c87b56dd14610373578063d81d0a15146103a3578063e8a3d485146103bf578063e985e9c5146103dd578063f242432a1461040d578063f2fde38b146104295761014c565b80638da5cb5b146102c5578063938e3d7b146102e357806395d89b41146102ff578063a22cb4651461031d578063a93115a214610339578063b390c0ab146103575761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780634e1273f414610237578063510f410414610267578063715018a61461028357806383ca4b6f1461028d578063862440e2146102a95761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf578063156e29f6146101ff575b600080fd5b61016b60048036038101906101669190612e18565b610445565b604051610178919061378b565b60405180910390f35b61019b60048036038101906101969190612f9b565b61050e565b6040516101a8919061356e565b60405180910390f35b6101b96105f0565b6040516101c69190613589565b60405180910390f35b6101e960048036038101906101e4919061303e565b61067e565b6040516101f69190613589565b60405180910390f35b61021960048036038101906102149190612e58565b610723565b005b61023560048036038101906102309190612afc565b6107bf565b005b610251600480360381019061024c9190612eab565b610860565b60405161025e9190613515565b60405180910390f35b610281600480360381019061027c9190612ced565b610979565b005b61028b610a22565b005b6102a760048036038101906102a29190612f23565b610aaa565b005b6102c360048036038101906102be919061306b565b610ab9565b005b6102cd610b99565b6040516102da9190613438565b60405180910390f35b6102fd60048036038101906102f89190612ff5565b610bc3565b005b610307610c59565b6040516103149190613589565b60405180910390f35b61033760048036038101906103329190612dd8565b610ce7565b005b610341610cfd565b60405161034e9190613589565b60405180910390f35b610371600480360381019061036c91906130c7565b610d8b565b005b61038d6004803603810190610388919061303e565b610d9a565b60405161039a9190613589565b60405180910390f35b6103bd60048036038101906103b89190612c62565b610e3a565b005b6103c7610ed6565b6040516103d49190613589565b60405180910390f35b6103f760048036038101906103f29190612abc565b610f68565b604051610404919061356e565b60405180910390f35b61042760048036038101906104229190612bcb565b610ffc565b005b610443600480360381019061043e9190612a8f565b61109d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ad906135eb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e957506105e882611195565b5b9050919050565b600480546105fd90613a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461062990613a2b565b80156106765780601f1061064b57610100808354040283529160200191610676565b820191906000526020600020905b81548152906001019060200180831161065957829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461069e90613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90613a2b565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509050919050565b61072b6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610749610b99565b73ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906136eb565b60405180910390fd5b6107ba83838360405180602001604052806000815250611207565b505050565b6107c76111ff565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061080d575061080c856108076111ff565b610f68565b5b61084c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108439061368b565b60405180910390fd5b61085985858585856113b8565b5050505050565b606081518351146108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d9061372b565b60405180910390fd5b6000835167ffffffffffffffff8111156108c3576108c2613b64565b5b6040519080825280602002602001820160405280156108f15781602001602082028036833780820191505090505b50905060005b845181101561096e5761093e85828151811061091657610915613b35565b5b602002602001015185838151811061093157610930613b35565b5b6020026020010151610445565b82828151811061095157610950613b35565b5b6020026020010181815250508061096790613a8e565b90506108f7565b508091505092915050565b6109816111ff565b73ffffffffffffffffffffffffffffffffffffffff1661099f610b99565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906136eb565b60405180910390fd5b610a008585856116da565b610a1b858383604051806020016040528060008152506119a9565b5050505050565b610a2a6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610a48610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906136eb565b60405180910390fd5b610aa86000611bd6565b565b610ab53383836116da565b5050565b610ac16111ff565b73ffffffffffffffffffffffffffffffffffffffff16610adf610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c906136eb565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190610b5c929190612767565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b8d9190613589565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bcb6111ff565b73ffffffffffffffffffffffffffffffffffffffff16610be9610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906136eb565b60405180910390fd5b8060069080519060200190610c55929190612767565b5050565b60058054610c6690613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9290613a2b565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b505050505081565b610cf9610cf26111ff565b8383611c9c565b5050565b60068054610d0a90613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690613a2b565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b505050505081565b610d96338383611e09565b5050565b60076020528060005260406000206000915090508054610db990613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610de590613a2b565b8015610e325780601f10610e0757610100808354040283529160200191610e32565b820191906000526020600020905b815481529060010190602001808311610e1557829003601f168201915b505050505081565b610e426111ff565b73ffffffffffffffffffffffffffffffffffffffff16610e60610b99565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906136eb565b60405180910390fd5b610ed1838383604051806020016040528060008152506119a9565b505050565b606060068054610ee590613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1190613a2b565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110046111ff565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061104a5750611049856110446111ff565b610f68565b5b611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061364b565b60405180910390fd5b6110968585858585612050565b5050505050565b6110a56111ff565b73ffffffffffffffffffffffffffffffffffffffff166110c3610b99565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906136eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111809061360b565b60405180910390fd5b61119281611bd6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e9061376b565b60405180910390fd5b60006112816111ff565b9050600061128e856122ec565b9050600061129b856122ec565b90506112ac83600089858589612366565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461130b919061391f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516113899291906137a6565b60405180910390a46113a08360008989898961236e565b6113af83600089858589612555565b50505050505050565b81518351146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f39061374b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114639061366b565b60405180910390fd5b60006114766111ff565b9050611486818787878787612366565b60005b84518110156116375760008582815181106114a7576114a6613b35565b5b6020026020010151905060008583815181106114c6576114c5613b35565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906136cb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161c919061391f565b925050819055505050508061163090613a8e565b9050611489565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116ae929190613537565b60405180910390a46116c481878787878761255d565b6116d2818787878787612555565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906136ab565b60405180910390fd5b805182511461178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117859061374b565b60405180910390fd5b60006117986111ff565b90506117b881856000868660405180602001604052806000815250612366565b60005b83518110156119055760008482815181106117d9576117d8613b35565b5b6020026020010151905060008483815181106117f8576117f7613b35565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061362b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806118fd90613a8e565b9150506117bb565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161197d929190613537565b60405180910390a46119a381856000868660405180602001604052806000815250612555565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a109061376b565b60405180910390fd5b8151835114611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a549061374b565b60405180910390fd5b6000611a676111ff565b9050611a7881600087878787612366565b60005b8451811015611b3157838181518110611a9757611a96613b35565b5b6020026020010151600080878481518110611ab557611ab4613b35565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b17919061391f565b925050819055508080611b2990613a8e565b915050611a7b565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ba9929190613537565b60405180910390a4611bc08160008787878761255d565b611bcf81600087878787612555565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061370b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dfc919061356e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e70906136ab565b60405180910390fd5b6000611e836111ff565b90506000611e90846122ec565b90506000611e9d846122ec565b9050611ebd83876000858560405180602001604052806000815250612366565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b9061362b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120219291906137a6565b60405180910390a461204784886000868660405180602001604052806000815250612555565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b79061366b565b60405180910390fd5b60006120ca6111ff565b905060006120d7856122ec565b905060006120e4856122ec565b90506120f4838989858589612366565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561218b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612182906136cb565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612240919061391f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516122bd9291906137a6565b60405180910390a46122d3848a8a8a8a8a61236e565b6122e1848a8a86868a612555565b505050505050505050565b60606000600167ffffffffffffffff81111561230b5761230a613b64565b5b6040519080825280602002602001820160405280156123395781602001602082028036833780820191505090505b509050828160008151811061235157612350613b35565b5b60200260200101818152505080915050919050565b505050505050565b61238d8473ffffffffffffffffffffffffffffffffffffffff16612744565b1561254d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d39594939291906134bb565b602060405180830381600087803b1580156123ed57600080fd5b505af192505050801561241e57506040513d601f19601f8201168201806040525081019061241b9190612fc8565b60015b6124c45761242a613b93565b806308c379a01415612487575061243f614067565b8061244a5750612489565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9190613589565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb906135ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461254b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612542906135cb565b60405180910390fd5b505b505050505050565b505050505050565b61257c8473ffffffffffffffffffffffffffffffffffffffff16612744565b1561273c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125c2959493929190613453565b602060405180830381600087803b1580156125dc57600080fd5b505af192505050801561260d57506040513d601f19601f8201168201806040525081019061260a9190612fc8565b60015b6126b357612619613b93565b806308c379a01415612676575061262e614067565b806126395750612678565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d9190613589565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa906135ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906135cb565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461277390613a2b565b90600052602060002090601f01602090048101928261279557600085556127dc565b82601f106127ae57805160ff19168380011785556127dc565b828001600101855582156127dc579182015b828111156127db5782518255916020019190600101906127c0565b5b5090506127e991906127ed565b5090565b5b808211156128065760008160009055506001016127ee565b5090565b600061281d612818846137f4565b6137cf565b905080838252602082019050828560208602820111156128405761283f613bba565b5b60005b858110156128705781612856888261296e565b845260208401935060208301925050600181019050612843565b5050509392505050565b600061288d61288884613820565b6137cf565b905080838252602082019050828560208602820111156128b0576128af613bba565b5b60005b858110156128e057816128c68882612a7a565b8452602084019350602083019250506001810190506128b3565b5050509392505050565b60006128fd6128f88461384c565b6137cf565b90508281526020810184848401111561291957612918613bbf565b5b6129248482856139e9565b509392505050565b600061293f61293a8461387d565b6137cf565b90508281526020810184848401111561295b5761295a613bbf565b5b6129668482856139e9565b509392505050565b60008135905061297d816140fd565b92915050565b600082601f83011261299857612997613bb5565b5b81356129a884826020860161280a565b91505092915050565b600082601f8301126129c6576129c5613bb5565b5b81356129d684826020860161287a565b91505092915050565b6000813590506129ee81614114565b92915050565b600081359050612a038161412b565b92915050565b600081519050612a188161412b565b92915050565b600082601f830112612a3357612a32613bb5565b5b8135612a438482602086016128ea565b91505092915050565b600082601f830112612a6157612a60613bb5565b5b8135612a7184826020860161292c565b91505092915050565b600081359050612a8981614142565b92915050565b600060208284031215612aa557612aa4613bc9565b5b6000612ab38482850161296e565b91505092915050565b60008060408385031215612ad357612ad2613bc9565b5b6000612ae18582860161296e565b9250506020612af28582860161296e565b9150509250929050565b600080600080600060a08688031215612b1857612b17613bc9565b5b6000612b268882890161296e565b9550506020612b378882890161296e565b945050604086013567ffffffffffffffff811115612b5857612b57613bc4565b5b612b64888289016129b1565b935050606086013567ffffffffffffffff811115612b8557612b84613bc4565b5b612b91888289016129b1565b925050608086013567ffffffffffffffff811115612bb257612bb1613bc4565b5b612bbe88828901612a1e565b9150509295509295909350565b600080600080600060a08688031215612be757612be6613bc9565b5b6000612bf58882890161296e565b9550506020612c068882890161296e565b9450506040612c1788828901612a7a565b9350506060612c2888828901612a7a565b925050608086013567ffffffffffffffff811115612c4957612c48613bc4565b5b612c5588828901612a1e565b9150509295509295909350565b600080600060608486031215612c7b57612c7a613bc9565b5b6000612c898682870161296e565b935050602084013567ffffffffffffffff811115612caa57612ca9613bc4565b5b612cb6868287016129b1565b925050604084013567ffffffffffffffff811115612cd757612cd6613bc4565b5b612ce3868287016129b1565b9150509250925092565b600080600080600060a08688031215612d0957612d08613bc9565b5b6000612d178882890161296e565b955050602086013567ffffffffffffffff811115612d3857612d37613bc4565b5b612d44888289016129b1565b945050604086013567ffffffffffffffff811115612d6557612d64613bc4565b5b612d71888289016129b1565b935050606086013567ffffffffffffffff811115612d9257612d91613bc4565b5b612d9e888289016129b1565b925050608086013567ffffffffffffffff811115612dbf57612dbe613bc4565b5b612dcb888289016129b1565b9150509295509295909350565b60008060408385031215612def57612dee613bc9565b5b6000612dfd8582860161296e565b9250506020612e0e858286016129df565b9150509250929050565b60008060408385031215612e2f57612e2e613bc9565b5b6000612e3d8582860161296e565b9250506020612e4e85828601612a7a565b9150509250929050565b600080600060608486031215612e7157612e70613bc9565b5b6000612e7f8682870161296e565b9350506020612e9086828701612a7a565b9250506040612ea186828701612a7a565b9150509250925092565b60008060408385031215612ec257612ec1613bc9565b5b600083013567ffffffffffffffff811115612ee057612edf613bc4565b5b612eec85828601612983565b925050602083013567ffffffffffffffff811115612f0d57612f0c613bc4565b5b612f19858286016129b1565b9150509250929050565b60008060408385031215612f3a57612f39613bc9565b5b600083013567ffffffffffffffff811115612f5857612f57613bc4565b5b612f64858286016129b1565b925050602083013567ffffffffffffffff811115612f8557612f84613bc4565b5b612f91858286016129b1565b9150509250929050565b600060208284031215612fb157612fb0613bc9565b5b6000612fbf848285016129f4565b91505092915050565b600060208284031215612fde57612fdd613bc9565b5b6000612fec84828501612a09565b91505092915050565b60006020828403121561300b5761300a613bc9565b5b600082013567ffffffffffffffff81111561302957613028613bc4565b5b61303584828501612a4c565b91505092915050565b60006020828403121561305457613053613bc9565b5b600061306284828501612a7a565b91505092915050565b6000806040838503121561308257613081613bc9565b5b600061309085828601612a7a565b925050602083013567ffffffffffffffff8111156130b1576130b0613bc4565b5b6130bd85828601612a4c565b9150509250929050565b600080604083850312156130de576130dd613bc9565b5b60006130ec85828601612a7a565b92505060206130fd85828601612a7a565b9150509250929050565b6000613113838361341a565b60208301905092915050565b61312881613975565b82525050565b6000613139826138be565b61314381856138ec565b935061314e836138ae565b8060005b8381101561317f5781516131668882613107565b9750613171836138df565b925050600181019050613152565b5085935050505092915050565b61319581613987565b82525050565b60006131a6826138c9565b6131b081856138fd565b93506131c08185602086016139f8565b6131c981613bce565b840191505092915050565b60006131df826138d4565b6131e9818561390e565b93506131f98185602086016139f8565b61320281613bce565b840191505092915050565b600061321a60348361390e565b915061322582613bec565b604082019050919050565b600061323d60288361390e565b915061324882613c3b565b604082019050919050565b6000613260602b8361390e565b915061326b82613c8a565b604082019050919050565b600061328360268361390e565b915061328e82613cd9565b604082019050919050565b60006132a660248361390e565b91506132b182613d28565b604082019050919050565b60006132c960298361390e565b91506132d482613d77565b604082019050919050565b60006132ec60258361390e565b91506132f782613dc6565b604082019050919050565b600061330f60328361390e565b915061331a82613e15565b604082019050919050565b600061333260238361390e565b915061333d82613e64565b604082019050919050565b6000613355602a8361390e565b915061336082613eb3565b604082019050919050565b600061337860208361390e565b915061338382613f02565b602082019050919050565b600061339b60298361390e565b91506133a682613f2b565b604082019050919050565b60006133be60298361390e565b91506133c982613f7a565b604082019050919050565b60006133e160288361390e565b91506133ec82613fc9565b604082019050919050565b600061340460218361390e565b915061340f82614018565b604082019050919050565b613423816139df565b82525050565b613432816139df565b82525050565b600060208201905061344d600083018461311f565b92915050565b600060a082019050613468600083018861311f565b613475602083018761311f565b8181036040830152613487818661312e565b9050818103606083015261349b818561312e565b905081810360808301526134af818461319b565b90509695505050505050565b600060a0820190506134d0600083018861311f565b6134dd602083018761311f565b6134ea6040830186613429565b6134f76060830185613429565b8181036080830152613509818461319b565b90509695505050505050565b6000602082019050818103600083015261352f818461312e565b905092915050565b60006040820190508181036000830152613551818561312e565b90508181036020830152613565818461312e565b90509392505050565b6000602082019050613583600083018461318c565b92915050565b600060208201905081810360008301526135a381846131d4565b905092915050565b600060208201905081810360008301526135c48161320d565b9050919050565b600060208201905081810360008301526135e481613230565b9050919050565b6000602082019050818103600083015261360481613253565b9050919050565b6000602082019050818103600083015261362481613276565b9050919050565b6000602082019050818103600083015261364481613299565b9050919050565b60006020820190508181036000830152613664816132bc565b9050919050565b60006020820190508181036000830152613684816132df565b9050919050565b600060208201905081810360008301526136a481613302565b9050919050565b600060208201905081810360008301526136c481613325565b9050919050565b600060208201905081810360008301526136e481613348565b9050919050565b600060208201905081810360008301526137048161336b565b9050919050565b600060208201905081810360008301526137248161338e565b9050919050565b60006020820190508181036000830152613744816133b1565b9050919050565b60006020820190508181036000830152613764816133d4565b9050919050565b60006020820190508181036000830152613784816133f7565b9050919050565b60006020820190506137a06000830184613429565b92915050565b60006040820190506137bb6000830185613429565b6137c86020830184613429565b9392505050565b60006137d96137ea565b90506137e58282613a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561380f5761380e613b64565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561383b5761383a613b64565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561386757613866613b64565b5b61387082613bce565b9050602081019050919050565b600067ffffffffffffffff82111561389857613897613b64565b5b6138a182613bce565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061392a826139df565b9150613935836139df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561396a57613969613ad7565b5b828201905092915050565b6000613980826139bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a165780820151818401526020810190506139fb565b83811115613a25576000848401525b50505050565b60006002820490506001821680613a4357607f821691505b60208210811415613a5757613a56613b06565b5b50919050565b613a6682613bce565b810181811067ffffffffffffffff82111715613a8557613a84613b64565b5b80604052505050565b6000613a99826139df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613acc57613acb613ad7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613bb25760046000803e613baf600051613bdf565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614077576140fa565b61407f6137ea565b60043d036004823e80513d602482011167ffffffffffffffff821117156140a75750506140fa565b808201805167ffffffffffffffff8111156140c557505050506140fa565b80602083010160043d0385018111156140e25750505050506140fa565b6140f182602001850186613a5d565b82955050505050505b90565b61410681613975565b811461411157600080fd5b50565b61411d81613987565b811461412857600080fd5b50565b61413481613993565b811461413f57600080fd5b50565b61414b816139df565b811461415657600080fd5b5056fea2646970667358221220bd4b7c4f900ea41f67cabff80ea017f4885c099d43268010884a97e6e365bb0c64736f6c63430008070033

Deployed Bytecode Sourcemap

39346:1618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23885:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22908:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39414:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40619:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39674:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25824:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24282:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40194:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2743:103;;;:::i;:::-;;40057:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40477:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2092:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40842:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39439:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24879:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39466:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39952:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39504:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39799:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40734:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25106:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25346:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3001:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23885:231;23971:7;24018:1;23999:21;;:7;:21;;;;23991:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24086:9;:13;24096:2;24086:13;;;;;;;;;;;:22;24100:7;24086:22;;;;;;;;;;;;;;;;24079:29;;23885:231;;;;:::o;22908:310::-;23010:4;23062:26;23047:41;;;:11;:41;;;;:110;;;;23120:37;23105:52;;;:11;:52;;;;23047:110;:163;;;;23174:36;23198:11;23174:23;:36::i;:::-;23047:163;23027:183;;22908:310;;;:::o;39414:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40619:107::-;40672:13;40705:8;:13;40714:3;40705:13;;;;;;;;;;;40698:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40619:107;;;:::o;39674:117::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39755:28:::1;39761:3;39766;39771:7;39755:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;39674:117:::0;;;:::o;25824:442::-;26065:12;:10;:12::i;:::-;26057:20;;:4;:20;;;:60;;;;26081:36;26098:4;26104:12;:10;:12::i;:::-;26081:16;:36::i;:::-;26057:60;26035:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26206:52;26229:4;26235:2;26239:3;26244:7;26253:4;26206:22;:52::i;:::-;25824:442;;;;;:::o;24282:524::-;24438:16;24499:3;:10;24480:8;:15;:29;24472:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24568:30;24615:8;:15;24601:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24568:63;;24649:9;24644:122;24668:8;:15;24664:1;:19;24644:122;;;24724:30;24734:8;24743:1;24734:11;;;;;;;;:::i;:::-;;;;;;;;24747:3;24751:1;24747:6;;;;;;;;:::i;:::-;;;;;;;;24724:9;:30::i;:::-;24705:13;24719:1;24705:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24685:3;;;;:::i;:::-;;;24644:122;;;;24785:13;24778:20;;;24282:524;;;;:::o;40194:275::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40364:41:::1;40375:5;40382:8;40392:12;40364:10;:41::i;:::-;40416:45;40427:5;40434:8;40444:12;40416:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;40194:275:::0;;;;;:::o;2743:103::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2808:30:::1;2835:1;2808:18;:30::i;:::-;2743:103::o:0;40057:129::-;40140:38;40151:10;40163:4;40169:8;40140:10;:38::i;:::-;40057:129;;:::o;40477:134::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40569:4:::1;40553:8;:13;40562:3;40553:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;40599:3;40589:14;40593:4;40589:14;;;;;;:::i;:::-;;;;;;;;40477:134:::0;;:::o;2092:87::-;2138:7;2165:6;;;;;;;;;;;2158:13;;2092:87;:::o;40842:119::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40941:12:::1;40923:15;:30;;;;;;;;;;;;:::i;:::-;;40842:119:::0;:::o;39439:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24879:155::-;24974:52;24993:12;:10;:12::i;:::-;25007:8;25017;24974:18;:52::i;:::-;24879:155;;:::o;39466:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39952:97::-;40010:31;40016:10;40028:3;40033:7;40010:5;:31::i;:::-;39952:97;;:::o;39504:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39799:145::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39901:35:::1;39912:3;39917:4;39923:8;39901:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;39799:145:::0;;;:::o;40734:100::-;40778:13;40811:15;40804:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40734:100;:::o;25106:168::-;25205:4;25229:18;:27;25248:7;25229:27;;;;;;;;;;;;;;;:37;25257:8;25229:37;;;;;;;;;;;;;;;;;;;;;;;;;25222:44;;25106:168;;;;:::o;25346:401::-;25562:12;:10;:12::i;:::-;25554:20;;:4;:20;;;:60;;;;25578:36;25595:4;25601:12;:10;:12::i;:::-;25578:16;:36::i;:::-;25554:60;25532:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25694:45;25712:4;25718:2;25722;25726:6;25734:4;25694:17;:45::i;:::-;25346:401;;;;;:::o;3001:201::-;2323:12;:10;:12::i;:::-;2312:23;;:7;:5;:7::i;:::-;:23;;;2304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3110:1:::1;3090:22;;:8;:22;;;;3082:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3166:28;3185:8;3166:18;:28::i;:::-;3001:201:::0;:::o;14004:157::-;14089:4;14128:25;14113:40;;;:11;:40;;;;14106:47;;14004:157;;;:::o;763:98::-;816:7;843:10;836:17;;763:98;:::o;30526:729::-;30693:1;30679:16;;:2;:16;;;;30671:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30746:16;30765:12;:10;:12::i;:::-;30746:31;;30788:20;30811:21;30829:2;30811:17;:21::i;:::-;30788:44;;30843:24;30870:25;30888:6;30870:17;:25::i;:::-;30843:52;;30908:66;30929:8;30947:1;30951:2;30955:3;30960:7;30969:4;30908:20;:66::i;:::-;31008:6;30987:9;:13;30997:2;30987:13;;;;;;;;;;;:17;31001:2;30987:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31067:2;31030:52;;31063:1;31030:52;;31045:8;31030:52;;;31071:2;31075:6;31030:52;;;;;;;:::i;:::-;;;;;;;;31095:74;31126:8;31144:1;31148:2;31152;31156:6;31164:4;31095:30;:74::i;:::-;31182:65;31202:8;31220:1;31224:2;31228:3;31233:7;31242:4;31182:19;:65::i;:::-;30660:595;;;30526:729;;;;:::o;28062:1146::-;28289:7;:14;28275:3;:10;:28;28267:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28381:1;28367:16;;:2;:16;;;;28359:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28438:16;28457:12;:10;:12::i;:::-;28438:31;;28482:60;28503:8;28513:4;28519:2;28523:3;28528:7;28537:4;28482:20;:60::i;:::-;28560:9;28555:421;28579:3;:10;28575:1;:14;28555:421;;;28611:10;28624:3;28628:1;28624:6;;;;;;;;:::i;:::-;;;;;;;;28611:19;;28645:14;28662:7;28670:1;28662:10;;;;;;;;:::i;:::-;;;;;;;;28645:27;;28689:19;28711:9;:13;28721:2;28711:13;;;;;;;;;;;:19;28725:4;28711:19;;;;;;;;;;;;;;;;28689:41;;28768:6;28753:11;:21;;28745:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28901:6;28887:11;:20;28865:9;:13;28875:2;28865:13;;;;;;;;;;;:19;28879:4;28865:19;;;;;;;;;;;;;;;:42;;;;28958:6;28937:9;:13;28947:2;28937:13;;;;;;;;;;;:17;28951:2;28937:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28596:380;;;28591:3;;;;:::i;:::-;;;28555:421;;;;29023:2;28993:47;;29017:4;28993:47;;29007:8;28993:47;;;29027:3;29032:7;28993:47;;;;;;;:::i;:::-;;;;;;;;29053:75;29089:8;29099:4;29105:2;29109:3;29114:7;29123:4;29053:35;:75::i;:::-;29141:59;29161:8;29171:4;29177:2;29181:3;29186:7;29195:4;29141:19;:59::i;:::-;28256:952;28062:1146;;;;;:::o;33685:969::-;33853:1;33837:18;;:4;:18;;;;33829:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33928:7;:14;33914:3;:10;:28;33906:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34000:16;34019:12;:10;:12::i;:::-;34000:31;;34044:66;34065:8;34075:4;34089:1;34093:3;34098:7;34044:66;;;;;;;;;;;;:20;:66::i;:::-;34128:9;34123:373;34147:3;:10;34143:1;:14;34123:373;;;34179:10;34192:3;34196:1;34192:6;;;;;;;;:::i;:::-;;;;;;;;34179:19;;34213:14;34230:7;34238:1;34230:10;;;;;;;;:::i;:::-;;;;;;;;34213:27;;34257:19;34279:9;:13;34289:2;34279:13;;;;;;;;;;;:19;34293:4;34279:19;;;;;;;;;;;;;;;;34257:41;;34336:6;34321:11;:21;;34313:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34463:6;34449:11;:20;34427:9;:13;34437:2;34427:13;;;;;;;;;;;:19;34441:4;34427:19;;;;;;;;;;;;;;;:42;;;;34164:332;;;34159:3;;;;;:::i;:::-;;;;34123:373;;;;34551:1;34513:55;;34537:4;34513:55;;34527:8;34513:55;;;34555:3;34560:7;34513:55;;;;;;;:::i;:::-;;;;;;;;34581:65;34601:8;34611:4;34625:1;34629:3;34634:7;34581:65;;;;;;;;;;;;:19;:65::i;:::-;33818:836;33685:969;;;:::o;31611:813::-;31803:1;31789:16;;:2;:16;;;;31781:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31876:7;:14;31862:3;:10;:28;31854:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31948:16;31967:12;:10;:12::i;:::-;31948:31;;31992:66;32013:8;32031:1;32035:2;32039:3;32044:7;32053:4;31992:20;:66::i;:::-;32076:9;32071:103;32095:3;:10;32091:1;:14;32071:103;;;32152:7;32160:1;32152:10;;;;;;;;:::i;:::-;;;;;;;;32127:9;:17;32137:3;32141:1;32137:6;;;;;;;;:::i;:::-;;;;;;;;32127:17;;;;;;;;;;;:21;32145:2;32127:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32107:3;;;;;:::i;:::-;;;;32071:103;;;;32227:2;32191:53;;32223:1;32191:53;;32205:8;32191:53;;;32231:3;32236:7;32191:53;;;;;;;:::i;:::-;;;;;;;;32257:81;32293:8;32311:1;32315:2;32319:3;32324:7;32333:4;32257:35;:81::i;:::-;32351:65;32371:8;32389:1;32393:2;32397:3;32402:7;32411:4;32351:19;:65::i;:::-;31770:654;31611:813;;;;:::o;3362:191::-;3436:16;3455:6;;;;;;;;;;;3436:25;;3481:8;3472:6;;:17;;;;;;;;;;;;;;;;;;3536:8;3505:40;;3526:8;3505:40;;;;;;;;;;;;3425:128;3362:191;:::o;34796:331::-;34951:8;34942:17;;:5;:17;;;;34934:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35054:8;35016:18;:25;35035:5;35016:25;;;;;;;;;;;;;;;:35;35042:8;35016:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35100:8;35078:41;;35093:5;35078:41;;;35110:8;35078:41;;;;;;:::i;:::-;;;;;;;;34796:331;;;:::o;32674:808::-;32817:1;32801:18;;:4;:18;;;;32793:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32872:16;32891:12;:10;:12::i;:::-;32872:31;;32914:20;32937:21;32955:2;32937:17;:21::i;:::-;32914:44;;32969:24;32996:25;33014:6;32996:17;:25::i;:::-;32969:52;;33034:66;33055:8;33065:4;33079:1;33083:3;33088:7;33034:66;;;;;;;;;;;;:20;:66::i;:::-;33113:19;33135:9;:13;33145:2;33135:13;;;;;;;;;;;:19;33149:4;33135:19;;;;;;;;;;;;;;;;33113:41;;33188:6;33173:11;:21;;33165:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33307:6;33293:11;:20;33271:9;:13;33281:2;33271:13;;;;;;;;;;;:19;33285:4;33271:19;;;;;;;;;;;;;;;:42;;;;33381:1;33342:54;;33367:4;33342:54;;33357:8;33342:54;;;33385:2;33389:6;33342:54;;;;;;;:::i;:::-;;;;;;;;33409:65;33429:8;33439:4;33453:1;33457:3;33462:7;33409:65;;;;;;;;;;;;:19;:65::i;:::-;32782:700;;;;32674:808;;;:::o;26730:974::-;26932:1;26918:16;;:2;:16;;;;26910:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26989:16;27008:12;:10;:12::i;:::-;26989:31;;27031:20;27054:21;27072:2;27054:17;:21::i;:::-;27031:44;;27086:24;27113:25;27131:6;27113:17;:25::i;:::-;27086:52;;27151:60;27172:8;27182:4;27188:2;27192:3;27197:7;27206:4;27151:20;:60::i;:::-;27224:19;27246:9;:13;27256:2;27246:13;;;;;;;;;;;:19;27260:4;27246:19;;;;;;;;;;;;;;;;27224:41;;27299:6;27284:11;:21;;27276:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27424:6;27410:11;:20;27388:9;:13;27398:2;27388:13;;;;;;;;;;;:19;27402:4;27388:19;;;;;;;;;;;;;;;:42;;;;27473:6;27452:9;:13;27462:2;27452:13;;;;;;;;;;;:17;27466:2;27452:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27528:2;27497:46;;27522:4;27497:46;;27512:8;27497:46;;;27532:2;27536:6;27497:46;;;;;;;:::i;:::-;;;;;;;;27556:68;27587:8;27597:4;27603:2;27607;27611:6;27619:4;27556:30;:68::i;:::-;27637:59;27657:8;27667:4;27673:2;27677:3;27682:7;27691:4;27637:19;:59::i;:::-;26899:805;;;;26730:974;;;;;:::o;39060:198::-;39126:16;39155:22;39194:1;39180:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39155:41;;39218:7;39207:5;39213:1;39207:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39245:5;39238:12;;;39060:198;;;:::o;36083:221::-;;;;;;;:::o;37487:744::-;37702:15;:2;:13;;;:15::i;:::-;37698:526;;;37755:2;37738:38;;;37777:8;37787:4;37793:2;37797:6;37805:4;37738:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37734:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38086:6;38079:14;;;;;;;;;;;:::i;:::-;;;;;;;;37734:479;;;38135:62;;;;;;;;;;:::i;:::-;;;;;;;;37734:479;37872:43;;;37860:55;;;:8;:55;;;;37856:154;;37940:50;;;;;;;;;;:::i;:::-;;;;;;;;37856:154;37811:214;37698:526;37487:744;;;;;;:::o;37259:220::-;;;;;;;:::o;38239:813::-;38479:15;:2;:13;;;:15::i;:::-;38475:570;;;38532:2;38515:43;;;38559:8;38569:4;38575:3;38580:7;38589:4;38515:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38511:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38907:6;38900:14;;;;;;;;;;;:::i;:::-;;;;;;;;38511:523;;;38956:62;;;;;;;;;;:::i;:::-;;;;;;;;38511:523;38688:48;;;38676:60;;;:8;:60;;;;38672:159;;38761:50;;;;;;;;;;:::i;:::-;;;;;;;;38672:159;38595:251;38475:570;38239:813;;;;;;:::o;4846:326::-;4906:4;5163:1;5141:7;:19;;;:23;5134:30;;4846:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:1751::-;9218:6;9226;9234;9242;9250;9299:3;9287:9;9278:7;9274:23;9270:33;9267:120;;;9306:79;;:::i;:::-;9267:120;9426:1;9451:53;9496:7;9487:6;9476:9;9472:22;9451:53;:::i;:::-;9441:63;;9397:117;9581:2;9570:9;9566:18;9553:32;9612:18;9604:6;9601:30;9598:117;;;9634:79;;:::i;:::-;9598:117;9739:78;9809:7;9800:6;9789:9;9785:22;9739:78;:::i;:::-;9729:88;;9524:303;9894:2;9883:9;9879:18;9866:32;9925:18;9917:6;9914:30;9911:117;;;9947:79;;:::i;:::-;9911:117;10052:78;10122:7;10113:6;10102:9;10098:22;10052:78;:::i;:::-;10042:88;;9837:303;10207:2;10196:9;10192:18;10179:32;10238:18;10230:6;10227:30;10224:117;;;10260:79;;:::i;:::-;10224:117;10365:78;10435:7;10426:6;10415:9;10411:22;10365:78;:::i;:::-;10355:88;;10150:303;10520:3;10509:9;10505:19;10492:33;10552:18;10544:6;10541:30;10538:117;;;10574:79;;:::i;:::-;10538:117;10679:78;10749:7;10740:6;10729:9;10725:22;10679:78;:::i;:::-;10669:88;;10463:304;9023:1751;;;;;;;;:::o;10780:468::-;10845:6;10853;10902:2;10890:9;10881:7;10877:23;10873:32;10870:119;;;10908:79;;:::i;:::-;10870:119;11028:1;11053:53;11098:7;11089:6;11078:9;11074:22;11053:53;:::i;:::-;11043:63;;10999:117;11155:2;11181:50;11223:7;11214:6;11203:9;11199:22;11181:50;:::i;:::-;11171:60;;11126:115;10780:468;;;;;:::o;11254:474::-;11322:6;11330;11379:2;11367:9;11358:7;11354:23;11350:32;11347:119;;;11385:79;;:::i;:::-;11347:119;11505:1;11530:53;11575:7;11566:6;11555:9;11551:22;11530:53;:::i;:::-;11520:63;;11476:117;11632:2;11658:53;11703:7;11694:6;11683:9;11679:22;11658:53;:::i;:::-;11648:63;;11603:118;11254:474;;;;;:::o;11734:619::-;11811:6;11819;11827;11876:2;11864:9;11855:7;11851:23;11847:32;11844:119;;;11882:79;;:::i;:::-;11844:119;12002:1;12027:53;12072:7;12063:6;12052:9;12048:22;12027:53;:::i;:::-;12017:63;;11973:117;12129:2;12155:53;12200:7;12191:6;12180:9;12176:22;12155:53;:::i;:::-;12145:63;;12100:118;12257:2;12283:53;12328:7;12319:6;12308:9;12304:22;12283:53;:::i;:::-;12273:63;;12228:118;11734:619;;;;;:::o;12359:894::-;12477:6;12485;12534:2;12522:9;12513:7;12509:23;12505:32;12502:119;;;12540:79;;:::i;:::-;12502:119;12688:1;12677:9;12673:17;12660:31;12718:18;12710:6;12707:30;12704:117;;;12740:79;;:::i;:::-;12704:117;12845:78;12915:7;12906:6;12895:9;12891:22;12845:78;:::i;:::-;12835:88;;12631:302;13000:2;12989:9;12985:18;12972:32;13031:18;13023:6;13020:30;13017:117;;;13053:79;;:::i;:::-;13017:117;13158:78;13228:7;13219:6;13208:9;13204:22;13158:78;:::i;:::-;13148:88;;12943:303;12359:894;;;;;:::o;13259:::-;13377:6;13385;13434:2;13422:9;13413:7;13409:23;13405:32;13402:119;;;13440:79;;:::i;:::-;13402:119;13588:1;13577:9;13573:17;13560:31;13618:18;13610:6;13607:30;13604:117;;;13640:79;;:::i;:::-;13604:117;13745:78;13815:7;13806:6;13795:9;13791:22;13745:78;:::i;:::-;13735:88;;13531:302;13900:2;13889:9;13885:18;13872:32;13931:18;13923:6;13920:30;13917:117;;;13953:79;;:::i;:::-;13917:117;14058:78;14128:7;14119:6;14108:9;14104:22;14058:78;:::i;:::-;14048:88;;13843:303;13259:894;;;;;:::o;14159:327::-;14217:6;14266:2;14254:9;14245:7;14241:23;14237:32;14234:119;;;14272:79;;:::i;:::-;14234:119;14392:1;14417:52;14461:7;14452:6;14441:9;14437:22;14417:52;:::i;:::-;14407:62;;14363:116;14159:327;;;;:::o;14492:349::-;14561:6;14610:2;14598:9;14589:7;14585:23;14581:32;14578:119;;;14616:79;;:::i;:::-;14578:119;14736:1;14761:63;14816:7;14807:6;14796:9;14792:22;14761:63;:::i;:::-;14751:73;;14707:127;14492:349;;;;:::o;14847:509::-;14916:6;14965:2;14953:9;14944:7;14940:23;14936:32;14933:119;;;14971:79;;:::i;:::-;14933:119;15119:1;15108:9;15104:17;15091:31;15149:18;15141:6;15138:30;15135:117;;;15171:79;;:::i;:::-;15135:117;15276:63;15331:7;15322:6;15311:9;15307:22;15276:63;:::i;:::-;15266:73;;15062:287;14847:509;;;;:::o;15362:329::-;15421:6;15470:2;15458:9;15449:7;15445:23;15441:32;15438:119;;;15476:79;;:::i;:::-;15438:119;15596:1;15621:53;15666:7;15657:6;15646:9;15642:22;15621:53;:::i;:::-;15611:63;;15567:117;15362:329;;;;:::o;15697:654::-;15775:6;15783;15832:2;15820:9;15811:7;15807:23;15803:32;15800:119;;;15838:79;;:::i;:::-;15800:119;15958:1;15983:53;16028:7;16019:6;16008:9;16004:22;15983:53;:::i;:::-;15973:63;;15929:117;16113:2;16102:9;16098:18;16085:32;16144:18;16136:6;16133:30;16130:117;;;16166:79;;:::i;:::-;16130:117;16271:63;16326:7;16317:6;16306:9;16302:22;16271:63;:::i;:::-;16261:73;;16056:288;15697:654;;;;;:::o;16357:474::-;16425:6;16433;16482:2;16470:9;16461:7;16457:23;16453:32;16450:119;;;16488:79;;:::i;:::-;16450:119;16608:1;16633:53;16678:7;16669:6;16658:9;16654:22;16633:53;:::i;:::-;16623:63;;16579:117;16735:2;16761:53;16806:7;16797:6;16786:9;16782:22;16761:53;:::i;:::-;16751:63;;16706:118;16357:474;;;;;:::o;16837:179::-;16906:10;16927:46;16969:3;16961:6;16927:46;:::i;:::-;17005:4;17000:3;16996:14;16982:28;;16837:179;;;;:::o;17022:118::-;17109:24;17127:5;17109:24;:::i;:::-;17104:3;17097:37;17022:118;;:::o;17176:732::-;17295:3;17324:54;17372:5;17324:54;:::i;:::-;17394:86;17473:6;17468:3;17394:86;:::i;:::-;17387:93;;17504:56;17554:5;17504:56;:::i;:::-;17583:7;17614:1;17599:284;17624:6;17621:1;17618:13;17599:284;;;17700:6;17694:13;17727:63;17786:3;17771:13;17727:63;:::i;:::-;17720:70;;17813:60;17866:6;17813:60;:::i;:::-;17803:70;;17659:224;17646:1;17643;17639:9;17634:14;;17599:284;;;17603:14;17899:3;17892:10;;17300:608;;;17176:732;;;;:::o;17914:109::-;17995:21;18010:5;17995:21;:::i;:::-;17990:3;17983:34;17914:109;;:::o;18029:360::-;18115:3;18143:38;18175:5;18143:38;:::i;:::-;18197:70;18260:6;18255:3;18197:70;:::i;:::-;18190:77;;18276:52;18321:6;18316:3;18309:4;18302:5;18298:16;18276:52;:::i;:::-;18353:29;18375:6;18353:29;:::i;:::-;18348:3;18344:39;18337:46;;18119:270;18029:360;;;;:::o;18395:364::-;18483:3;18511:39;18544:5;18511:39;:::i;:::-;18566:71;18630:6;18625:3;18566:71;:::i;:::-;18559:78;;18646:52;18691:6;18686:3;18679:4;18672:5;18668:16;18646:52;:::i;:::-;18723:29;18745:6;18723:29;:::i;:::-;18718:3;18714:39;18707:46;;18487:272;18395:364;;;;:::o;18765:366::-;18907:3;18928:67;18992:2;18987:3;18928:67;:::i;:::-;18921:74;;19004:93;19093:3;19004:93;:::i;:::-;19122:2;19117:3;19113:12;19106:19;;18765:366;;;:::o;19137:::-;19279:3;19300:67;19364:2;19359:3;19300:67;:::i;:::-;19293:74;;19376:93;19465:3;19376:93;:::i;:::-;19494:2;19489:3;19485:12;19478:19;;19137:366;;;:::o;19509:::-;19651:3;19672:67;19736:2;19731:3;19672:67;:::i;:::-;19665:74;;19748:93;19837:3;19748:93;:::i;:::-;19866:2;19861:3;19857:12;19850:19;;19509:366;;;:::o;19881:::-;20023:3;20044:67;20108:2;20103:3;20044:67;:::i;:::-;20037:74;;20120:93;20209:3;20120:93;:::i;:::-;20238:2;20233:3;20229:12;20222:19;;19881:366;;;:::o;20253:::-;20395:3;20416:67;20480:2;20475:3;20416:67;:::i;:::-;20409:74;;20492:93;20581:3;20492:93;:::i;:::-;20610:2;20605:3;20601:12;20594:19;;20253:366;;;:::o;20625:::-;20767:3;20788:67;20852:2;20847:3;20788:67;:::i;:::-;20781:74;;20864:93;20953:3;20864:93;:::i;:::-;20982:2;20977:3;20973:12;20966:19;;20625:366;;;:::o;20997:::-;21139:3;21160:67;21224:2;21219:3;21160:67;:::i;:::-;21153:74;;21236:93;21325:3;21236:93;:::i;:::-;21354:2;21349:3;21345:12;21338:19;;20997:366;;;:::o;21369:::-;21511:3;21532:67;21596:2;21591:3;21532:67;:::i;:::-;21525:74;;21608:93;21697:3;21608:93;:::i;:::-;21726:2;21721:3;21717:12;21710:19;;21369:366;;;:::o;21741:::-;21883:3;21904:67;21968:2;21963:3;21904:67;:::i;:::-;21897:74;;21980:93;22069:3;21980:93;:::i;:::-;22098:2;22093:3;22089:12;22082:19;;21741:366;;;:::o;22113:::-;22255:3;22276:67;22340:2;22335:3;22276:67;:::i;:::-;22269:74;;22352:93;22441:3;22352:93;:::i;:::-;22470:2;22465:3;22461:12;22454:19;;22113:366;;;:::o;22485:::-;22627:3;22648:67;22712:2;22707:3;22648:67;:::i;:::-;22641:74;;22724:93;22813:3;22724:93;:::i;:::-;22842:2;22837:3;22833:12;22826:19;;22485:366;;;:::o;22857:::-;22999:3;23020:67;23084:2;23079:3;23020:67;:::i;:::-;23013:74;;23096:93;23185:3;23096:93;:::i;:::-;23214:2;23209:3;23205:12;23198:19;;22857:366;;;:::o;23229:::-;23371:3;23392:67;23456:2;23451:3;23392:67;:::i;:::-;23385:74;;23468:93;23557:3;23468:93;:::i;:::-;23586:2;23581:3;23577:12;23570:19;;23229:366;;;:::o;23601:::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:::-;24115:3;24136:67;24200:2;24195:3;24136:67;:::i;:::-;24129:74;;24212:93;24301:3;24212:93;:::i;:::-;24330:2;24325:3;24321:12;24314:19;;23973:366;;;:::o;24345:108::-;24422:24;24440:5;24422:24;:::i;:::-;24417:3;24410:37;24345:108;;:::o;24459:118::-;24546:24;24564:5;24546:24;:::i;:::-;24541:3;24534:37;24459:118;;:::o;24583:222::-;24676:4;24714:2;24703:9;24699:18;24691:26;;24727:71;24795:1;24784:9;24780:17;24771:6;24727:71;:::i;:::-;24583:222;;;;:::o;24811:1053::-;25134:4;25172:3;25161:9;25157:19;25149:27;;25186:71;25254:1;25243:9;25239:17;25230:6;25186:71;:::i;:::-;25267:72;25335:2;25324:9;25320:18;25311:6;25267:72;:::i;:::-;25386:9;25380:4;25376:20;25371:2;25360:9;25356:18;25349:48;25414:108;25517:4;25508:6;25414:108;:::i;:::-;25406:116;;25569:9;25563:4;25559:20;25554:2;25543:9;25539:18;25532:48;25597:108;25700:4;25691:6;25597:108;:::i;:::-;25589:116;;25753:9;25747:4;25743:20;25737:3;25726:9;25722:19;25715:49;25781:76;25852:4;25843:6;25781:76;:::i;:::-;25773:84;;24811:1053;;;;;;;;:::o;25870:751::-;26093:4;26131:3;26120:9;26116:19;26108:27;;26145:71;26213:1;26202:9;26198:17;26189:6;26145:71;:::i;:::-;26226:72;26294:2;26283:9;26279:18;26270:6;26226:72;:::i;:::-;26308;26376:2;26365:9;26361:18;26352:6;26308:72;:::i;:::-;26390;26458:2;26447:9;26443:18;26434:6;26390:72;:::i;:::-;26510:9;26504:4;26500:20;26494:3;26483:9;26479:19;26472:49;26538:76;26609:4;26600:6;26538:76;:::i;:::-;26530:84;;25870:751;;;;;;;;:::o;26627:373::-;26770:4;26808:2;26797:9;26793:18;26785:26;;26857:9;26851:4;26847:20;26843:1;26832:9;26828:17;26821:47;26885:108;26988:4;26979:6;26885:108;:::i;:::-;26877:116;;26627:373;;;;:::o;27006:634::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:108;27445:4;27436:6;27342:108;:::i;:::-;27334:116;;27497:9;27491:4;27487:20;27482:2;27471:9;27467:18;27460:48;27525:108;27628:4;27619:6;27525:108;:::i;:::-;27517:116;;27006:634;;;;;:::o;27646:210::-;27733:4;27771:2;27760:9;27756:18;27748:26;;27784:65;27846:1;27835:9;27831:17;27822:6;27784:65;:::i;:::-;27646:210;;;;:::o;27862:313::-;27975:4;28013:2;28002:9;27998:18;27990:26;;28062:9;28056:4;28052:20;28048:1;28037:9;28033:17;28026:47;28090:78;28163:4;28154:6;28090:78;:::i;:::-;28082:86;;27862:313;;;;:::o;28181:419::-;28347:4;28385:2;28374:9;28370:18;28362:26;;28434:9;28428:4;28424:20;28420:1;28409:9;28405:17;28398:47;28462:131;28588:4;28462:131;:::i;:::-;28454:139;;28181:419;;;:::o;28606:::-;28772:4;28810:2;28799:9;28795:18;28787:26;;28859:9;28853:4;28849:20;28845:1;28834:9;28830:17;28823:47;28887:131;29013:4;28887:131;:::i;:::-;28879:139;;28606:419;;;:::o;29031:::-;29197:4;29235:2;29224:9;29220:18;29212:26;;29284:9;29278:4;29274:20;29270:1;29259:9;29255:17;29248:47;29312:131;29438:4;29312:131;:::i;:::-;29304:139;;29031:419;;;:::o;29456:::-;29622:4;29660:2;29649:9;29645:18;29637:26;;29709:9;29703:4;29699:20;29695:1;29684:9;29680:17;29673:47;29737:131;29863:4;29737:131;:::i;:::-;29729:139;;29456:419;;;:::o;29881:::-;30047:4;30085:2;30074:9;30070:18;30062:26;;30134:9;30128:4;30124:20;30120:1;30109:9;30105:17;30098:47;30162:131;30288:4;30162:131;:::i;:::-;30154:139;;29881:419;;;:::o;30306:::-;30472:4;30510:2;30499:9;30495:18;30487:26;;30559:9;30553:4;30549:20;30545:1;30534:9;30530:17;30523:47;30587:131;30713:4;30587:131;:::i;:::-;30579:139;;30306:419;;;:::o;30731:::-;30897:4;30935:2;30924:9;30920:18;30912:26;;30984:9;30978:4;30974:20;30970:1;30959:9;30955:17;30948:47;31012:131;31138:4;31012:131;:::i;:::-;31004:139;;30731:419;;;:::o;31156:::-;31322:4;31360:2;31349:9;31345:18;31337:26;;31409:9;31403:4;31399:20;31395:1;31384:9;31380:17;31373:47;31437:131;31563:4;31437:131;:::i;:::-;31429:139;;31156:419;;;:::o;31581:::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31834:9;31828:4;31824:20;31820:1;31809:9;31805:17;31798:47;31862:131;31988:4;31862:131;:::i;:::-;31854:139;;31581:419;;;:::o;32006:::-;32172:4;32210:2;32199:9;32195:18;32187:26;;32259:9;32253:4;32249:20;32245:1;32234:9;32230:17;32223:47;32287:131;32413:4;32287:131;:::i;:::-;32279:139;;32006:419;;;:::o;32431:::-;32597:4;32635:2;32624:9;32620:18;32612:26;;32684:9;32678:4;32674:20;32670:1;32659:9;32655:17;32648:47;32712:131;32838:4;32712:131;:::i;:::-;32704:139;;32431:419;;;:::o;32856:::-;33022:4;33060:2;33049:9;33045:18;33037:26;;33109:9;33103:4;33099:20;33095:1;33084:9;33080:17;33073:47;33137:131;33263:4;33137:131;:::i;:::-;33129:139;;32856:419;;;:::o;33281:::-;33447:4;33485:2;33474:9;33470:18;33462:26;;33534:9;33528:4;33524:20;33520:1;33509:9;33505:17;33498:47;33562:131;33688:4;33562:131;:::i;:::-;33554:139;;33281:419;;;:::o;33706:::-;33872:4;33910:2;33899:9;33895:18;33887:26;;33959:9;33953:4;33949:20;33945:1;33934:9;33930:17;33923:47;33987:131;34113:4;33987:131;:::i;:::-;33979:139;;33706:419;;;:::o;34131:::-;34297:4;34335:2;34324:9;34320:18;34312:26;;34384:9;34378:4;34374:20;34370:1;34359:9;34355:17;34348:47;34412:131;34538:4;34412:131;:::i;:::-;34404:139;;34131:419;;;:::o;34556:222::-;34649:4;34687:2;34676:9;34672:18;34664:26;;34700:71;34768:1;34757:9;34753:17;34744:6;34700:71;:::i;:::-;34556:222;;;;:::o;34784:332::-;34905:4;34943:2;34932:9;34928:18;34920:26;;34956:71;35024:1;35013:9;35009:17;35000:6;34956:71;:::i;:::-;35037:72;35105:2;35094:9;35090:18;35081:6;35037:72;:::i;:::-;34784:332;;;;;:::o;35122:129::-;35156:6;35183:20;;:::i;:::-;35173:30;;35212:33;35240:4;35232:6;35212:33;:::i;:::-;35122:129;;;:::o;35257:75::-;35290:6;35323:2;35317:9;35307:19;;35257:75;:::o;35338:311::-;35415:4;35505:18;35497:6;35494:30;35491:56;;;35527:18;;:::i;:::-;35491:56;35577:4;35569:6;35565:17;35557:25;;35637:4;35631;35627:15;35619:23;;35338:311;;;:::o;35655:::-;35732:4;35822:18;35814:6;35811:30;35808:56;;;35844:18;;:::i;:::-;35808:56;35894:4;35886:6;35882:17;35874:25;;35954:4;35948;35944:15;35936:23;;35655:311;;;:::o;35972:307::-;36033:4;36123:18;36115:6;36112:30;36109:56;;;36145:18;;:::i;:::-;36109:56;36183:29;36205:6;36183:29;:::i;:::-;36175:37;;36267:4;36261;36257:15;36249:23;;35972:307;;;:::o;36285:308::-;36347:4;36437:18;36429:6;36426:30;36423:56;;;36459:18;;:::i;:::-;36423:56;36497:29;36519:6;36497:29;:::i;:::-;36489:37;;36581:4;36575;36571:15;36563:23;;36285:308;;;:::o;36599:132::-;36666:4;36689:3;36681:11;;36719:4;36714:3;36710:14;36702:22;;36599:132;;;:::o;36737:114::-;36804:6;36838:5;36832:12;36822:22;;36737:114;;;:::o;36857:98::-;36908:6;36942:5;36936:12;36926:22;;36857:98;;;:::o;36961:99::-;37013:6;37047:5;37041:12;37031:22;;36961:99;;;:::o;37066:113::-;37136:4;37168;37163:3;37159:14;37151:22;;37066:113;;;:::o;37185:184::-;37284:11;37318:6;37313:3;37306:19;37358:4;37353:3;37349:14;37334:29;;37185:184;;;;:::o;37375:168::-;37458:11;37492:6;37487:3;37480:19;37532:4;37527:3;37523:14;37508:29;;37375:168;;;;:::o;37549:169::-;37633:11;37667:6;37662:3;37655:19;37707:4;37702:3;37698:14;37683:29;;37549:169;;;;:::o;37724:305::-;37764:3;37783:20;37801:1;37783:20;:::i;:::-;37778:25;;37817:20;37835:1;37817:20;:::i;:::-;37812:25;;37971:1;37903:66;37899:74;37896:1;37893:81;37890:107;;;37977:18;;:::i;:::-;37890:107;38021:1;38018;38014:9;38007:16;;37724:305;;;;:::o;38035:96::-;38072:7;38101:24;38119:5;38101:24;:::i;:::-;38090:35;;38035:96;;;:::o;38137:90::-;38171:7;38214:5;38207:13;38200:21;38189:32;;38137:90;;;:::o;38233:149::-;38269:7;38309:66;38302:5;38298:78;38287:89;;38233:149;;;:::o;38388:126::-;38425:7;38465:42;38458:5;38454:54;38443:65;;38388:126;;;:::o;38520:77::-;38557:7;38586:5;38575:16;;38520:77;;;:::o;38603:154::-;38687:6;38682:3;38677;38664:30;38749:1;38740:6;38735:3;38731:16;38724:27;38603:154;;;:::o;38763:307::-;38831:1;38841:113;38855:6;38852:1;38849:13;38841:113;;;38940:1;38935:3;38931:11;38925:18;38921:1;38916:3;38912:11;38905:39;38877:2;38874:1;38870:10;38865:15;;38841:113;;;38972:6;38969:1;38966:13;38963:101;;;39052:1;39043:6;39038:3;39034:16;39027:27;38963:101;38812:258;38763:307;;;:::o;39076:320::-;39120:6;39157:1;39151:4;39147:12;39137:22;;39204:1;39198:4;39194:12;39225:18;39215:81;;39281:4;39273:6;39269:17;39259:27;;39215:81;39343:2;39335:6;39332:14;39312:18;39309:38;39306:84;;;39362:18;;:::i;:::-;39306:84;39127:269;39076:320;;;:::o;39402:281::-;39485:27;39507:4;39485:27;:::i;:::-;39477:6;39473:40;39615:6;39603:10;39600:22;39579:18;39567:10;39564:34;39561:62;39558:88;;;39626:18;;:::i;:::-;39558:88;39666:10;39662:2;39655:22;39445:238;39402:281;;:::o;39689:233::-;39728:3;39751:24;39769:5;39751:24;:::i;:::-;39742:33;;39797:66;39790:5;39787:77;39784:103;;;39867:18;;:::i;:::-;39784:103;39914:1;39907:5;39903:13;39896:20;;39689:233;;;:::o;39928:180::-;39976:77;39973:1;39966:88;40073:4;40070:1;40063:15;40097:4;40094:1;40087:15;40114:180;40162:77;40159:1;40152:88;40259:4;40256:1;40249:15;40283:4;40280:1;40273:15;40300:180;40348:77;40345:1;40338:88;40445:4;40442:1;40435:15;40469:4;40466:1;40459:15;40486:180;40534:77;40531:1;40524:88;40631:4;40628:1;40621:15;40655:4;40652:1;40645:15;40672:183;40707:3;40745:1;40727:16;40724:23;40721:128;;;40783:1;40780;40777;40762:23;40805:34;40836:1;40830:8;40805:34;:::i;:::-;40798:41;;40721:128;40672:183;:::o;40861:117::-;40970:1;40967;40960:12;40984:117;41093:1;41090;41083:12;41107:117;41216:1;41213;41206:12;41230:117;41339:1;41336;41329:12;41353:117;41462:1;41459;41452:12;41476:102;41517:6;41568:2;41564:7;41559:2;41552:5;41548:14;41544:28;41534:38;;41476:102;;;:::o;41584:106::-;41628:8;41677:5;41672:3;41668:15;41647:36;;41584:106;;;:::o;41696:239::-;41836:34;41832:1;41824:6;41820:14;41813:58;41905:22;41900:2;41892:6;41888:15;41881:47;41696:239;:::o;41941:227::-;42081:34;42077:1;42069:6;42065:14;42058:58;42150:10;42145:2;42137:6;42133:15;42126:35;41941:227;:::o;42174:230::-;42314:34;42310:1;42302:6;42298:14;42291:58;42383:13;42378:2;42370:6;42366:15;42359:38;42174:230;:::o;42410:225::-;42550:34;42546:1;42538:6;42534:14;42527:58;42619:8;42614:2;42606:6;42602:15;42595:33;42410:225;:::o;42641:223::-;42781:34;42777:1;42769:6;42765:14;42758:58;42850:6;42845:2;42837:6;42833:15;42826:31;42641:223;:::o;42870:228::-;43010:34;43006:1;42998:6;42994:14;42987:58;43079:11;43074:2;43066:6;43062:15;43055:36;42870:228;:::o;43104:224::-;43244:34;43240:1;43232:6;43228:14;43221:58;43313:7;43308:2;43300:6;43296:15;43289:32;43104:224;:::o;43334:237::-;43474:34;43470:1;43462:6;43458:14;43451:58;43543:20;43538:2;43530:6;43526:15;43519:45;43334:237;:::o;43577:222::-;43717:34;43713:1;43705:6;43701:14;43694:58;43786:5;43781:2;43773:6;43769:15;43762:30;43577:222;:::o;43805:229::-;43945:34;43941:1;43933:6;43929:14;43922:58;44014:12;44009:2;44001:6;43997:15;43990:37;43805:229;:::o;44040:182::-;44180:34;44176:1;44168:6;44164:14;44157:58;44040:182;:::o;44228:228::-;44368:34;44364:1;44356:6;44352:14;44345:58;44437:11;44432:2;44424:6;44420:15;44413:36;44228:228;:::o;44462:::-;44602:34;44598:1;44590:6;44586:14;44579:58;44671:11;44666:2;44658:6;44654:15;44647:36;44462:228;:::o;44696:227::-;44836:34;44832:1;44824:6;44820:14;44813:58;44905:10;44900:2;44892:6;44888:15;44881:35;44696:227;:::o;44929:220::-;45069:34;45065:1;45057:6;45053:14;45046:58;45138:3;45133:2;45125:6;45121:15;45114:28;44929:220;:::o;45155:711::-;45194:3;45232:4;45214:16;45211:26;45208:39;;;45240:5;;45208:39;45269:20;;:::i;:::-;45344:1;45326:16;45322:24;45319:1;45313:4;45298:49;45377:4;45371:11;45476:16;45469:4;45461:6;45457:17;45454:39;45421:18;45413:6;45410:30;45394:113;45391:146;;;45522:5;;;;45391:146;45568:6;45562:4;45558:17;45604:3;45598:10;45631:18;45623:6;45620:30;45617:43;;;45653:5;;;;;;45617:43;45701:6;45694:4;45689:3;45685:14;45681:27;45760:1;45742:16;45738:24;45732:4;45728:35;45723:3;45720:44;45717:57;;;45767:5;;;;;;;45717:57;45784;45832:6;45826:4;45822:17;45814:6;45810:30;45804:4;45784:57;:::i;:::-;45857:3;45850:10;;45198:668;;;;;45155:711;;:::o;45872:122::-;45945:24;45963:5;45945:24;:::i;:::-;45938:5;45935:35;45925:63;;45984:1;45981;45974:12;45925:63;45872:122;:::o;46000:116::-;46070:21;46085:5;46070:21;:::i;:::-;46063:5;46060:32;46050:60;;46106:1;46103;46096:12;46050:60;46000:116;:::o;46122:120::-;46194:23;46211:5;46194:23;:::i;:::-;46187:5;46184:34;46174:62;;46232:1;46229;46222:12;46174:62;46122:120;:::o;46248:122::-;46321:24;46339:5;46321:24;:::i;:::-;46314:5;46311:35;46301:63;;46360:1;46357;46350:12;46301:63;46248:122;:::o

Swarm Source

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