ETH Price: $3,358.40 (-2.75%)
Gas: 4 Gwei

Token

Super Creators - Gen Z (SCGENZ)
 

Overview

Max Total Supply

5,555 SCGENZ

Holders

1,563

Market

Volume (24H)

0.0499 ETH

Min Price (24H)

$167.58 @ 0.049900 ETH

Max Price (24H)

$167.58 @ 0.049900 ETH
Balance
1 SCGENZ
0xcf86b3a45654FD54810ea19ea31b9cf104DA349e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The SuperCreators - Gen Z are a collection of 5,555 unique digital collectibles living on the Ethereum blockchain. The SuperCreators - Gen Z are spawned from their SuperCreators parents, the SuperCreators Origins, and carry on the mission of bridging the gap between the metaphysical and physical.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SuperCreatorsGenZ

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-07
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

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

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

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @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, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/SuperCreatorsGenZ.sol



pragma solidity >=0.7.0 <0.9.0;






contract SuperCreatorsGenZ is ERC721Enumerable, Ownable,Pausable {
    using Strings for uint256;
       
    string public baseURI;
    string public notRevealedUri;
    string public baseExtension = ".json";
    uint256 public Price = 0.01 ether;
    
    uint256 public maxGenCount = 5500; 
    uint256 public maxSuperBabiesCount = 55; 

    uint256 public maxMintTokens = 5;

    bytes32 public merkleRoot;
    bytes32 public merkleRootSuperBabies;
    
    uint256 private superBabiesMinted = 0;
    uint256 public requireTokenForSuperBabies=5;

    bool public revealed = false;
    bool public publicSale =  false;
    bool public superBabiesSale = false;
           
    event mintLog(uint256 scid,address minter,uint256 _type);
    event superBabiesLog(uint256[] usedTokens, uint256 SBid,address minter);
    
    
  constructor() ERC721("Super Creators - Gen Z", "SCGENZ") {
    setNotRevealedURI("ipfs://QmQZnvLSJbm54kE89C4zxdc35uVdJGMHb8jioNEpQznwJ3");
    setBaseURI("ipfs://");
    
  }

    // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public functions
  function mint(uint256 _noOfTokens,bytes32[] calldata _merkleProof) public whenNotPaused payable {
    uint256 supply = totalSupply();
    require(_noOfTokens > 0);
    require(supply + _noOfTokens <= maxGenCount);
    

      if (msg.sender != owner()) {
        require(_noOfTokens <= maxMintTokens);
        require(maxMintTokens >= balanceOf(msg.sender) +_noOfTokens ,"Not eligible to mint this allocation." ); 
        require(publicSale,"Public sale has not started yet.");
        require(msg.value >= Price * _noOfTokens ,"Not enough ethers to mint NFTs.");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf),"ADDRESS_NOT_ELIGIBLE_FOR_ALLOW_LIST");
      }

      for (uint256 i = 1; i <= _noOfTokens; i++) {
        _safeMint(msg.sender, supply+i);
        emit mintLog (supply+i, msg.sender,0);
      
    }
   
  }
   
   function superBabiesMint(uint256[] memory babiesTokens,bytes32[] calldata _merkleProof)public whenNotPaused{
    uint256 SuperBabiesId = maxGenCount + superBabiesMinted;
    require(maxMintTokens >= balanceOf(msg.sender)+1 ,"Not eligible to mint this allocation." );
    require(superBabiesSale,"Super Babies sale not started");
    require(superBabiesMinted<=maxSuperBabiesCount,"All super babies minted");
    require(requireTokenForSuperBabies <= babiesTokens.length,"Require token less for mint super babies");
    bytes32 leafSB = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify(_merkleProof, merkleRootSuperBabies, leafSB),"ADDRESS_NOT_ELIGIBLE_FOR_ALLOW_LIST");

    for (uint256 i = 0; i < babiesTokens.length; i++) {
      require(ownerOf(babiesTokens[i]) == msg.sender, "Cannot interact with a SuperCreators you do not own.");
    }
    _safeMint(msg.sender, SuperBabiesId+1);
     superBabiesMinted = superBabiesMinted+1;
    emit superBabiesLog(babiesTokens,SuperBabiesId,msg.sender);
   }
  
  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner functions
  
  function pause() public onlyOwner {
        _pause();
    }

  function unpause() public onlyOwner {
      _unpause();
    }

  function reveal(bool _state) public onlyOwner {
      revealed = _state;
  }
  
  function publicSaleStarted(bool _state) public onlyOwner{
    publicSale = _state;
  }

  function setSuperBabiesSale(bool _state) public onlyOwner{
    superBabiesSale  = _state;
  }

  function setPrice(uint256 _newPrice) public onlyOwner {
    Price = _newPrice;
  }

  function setMaxMintPerWallet(uint256 _newmaxMintTokens) public onlyOwner {
    maxMintTokens = _newmaxMintTokens;
  } 

  function setSuperBabySupplyLimit(uint256 _newLimit) public onlyOwner {
    maxSuperBabiesCount = _newLimit;
  } 

  function setNumTokensRquiredForSuperBabyMint(uint256 _newNumTokens) public onlyOwner {
    requireTokenForSuperBabies = _newNumTokens;
  } 
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

    function setBabySupplyLimit(uint256 _newLimit) public onlyOwner() {
        maxGenCount = _newLimit;
    }


  function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
  }
  function setMerkleRootSuperBabies(bytes32 _merkleRoot) external onlyOwner {
        merkleRootSuperBabies = _merkleRoot;
  }
  
 function withdraw() public payable onlyOwner {
	     uint balance = address(this).balance;
	     require(balance > 0, "Not enough Ether to withdraw!");
	     (bool success, ) = (msg.sender).call{value: balance}("");
	     require(success, "Transaction failed.");
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"scid","type":"uint256"},{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"}],"name":"mintLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"usedTokens","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"SBid","type":"uint256"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"superBabiesLog","type":"event"},{"inputs":[],"name":"Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSuperBabiesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootSuperBabies","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_noOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"publicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requireTokenForSuperBabies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setBabySupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintTokens","type":"uint256"}],"name":"setMaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRootSuperBabies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newNumTokens","type":"uint256"}],"name":"setNumTokensRquiredForSuperBabyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setSuperBabiesSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setSuperBabySupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"babiesTokens","type":"uint256[]"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"superBabiesMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superBabiesSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200005192919062000475565b50662386f26fc10000600e5561157c600f5560376010556005601155600060145560056015556000601660006101000a81548160ff0219169083151502179055506000601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff021916908315150217905550348015620000d557600080fd5b506040518060400160405280601681526020017f53757065722043726561746f7273202d2047656e205a000000000000000000008152506040518060400160405280600681526020017f534347454e5a000000000000000000000000000000000000000000000000000081525081600090805190602001906200015a92919062000475565b5080600190805190602001906200017392919062000475565b505050620001966200018a6200022760201b60201c565b6200022f60201b60201c565b6000600a60146101000a81548160ff021916908315150217905550620001db604051806060016040528060358152602001620062f260359139620002f560201b60201c565b620002216040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250620003a060201b60201c565b6200060d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003056200022760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032b6200044b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037b906200054c565b60405180910390fd5b80600c90805190602001906200039c92919062000475565b5050565b620003b06200022760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d66200044b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200042f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000426906200054c565b60405180910390fd5b80600b90805190602001906200044792919062000475565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000483906200057f565b90600052602060002090601f016020900481019282620004a75760008555620004f3565b82601f10620004c257805160ff1916838001178555620004f3565b82800160010185558215620004f3579182015b82811115620004f2578251825591602001919060010190620004d5565b5b50905062000502919062000506565b5090565b5b808211156200052157600081600090555060010162000507565b5090565b6000620005346020836200056e565b91506200054182620005e4565b602082019050919050565b60006020820190508181036000830152620005678162000525565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200059857607f821691505b60208210811415620005af57620005ae620005b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615cd5806200061d6000396000f3fe6080604052600436106102e45760003560e01c80636c0360eb11610190578063afdf6134116100dc578063c87b56dd11610095578063ec912c831161006f578063ec912c8314610ae2578063ef046bbb14610b0d578063f2c4ce1e14610b38578063f2fde38b14610b61576102e4565b8063c87b56dd14610a3f578063df4a091a14610a7c578063e985e9c514610aa5576102e4565b8063afdf613414610950578063b442409514610979578063b88d4fde146109a4578063ba41b0c6146109cd578063c45cf437146109e9578063c668286214610a14576102e4565b80638c851e5f11610149578063940cd05b11610123578063940cd05b146108a857806395d89b41146108d15780639dfde201146108fc578063a22cb46514610927576102e4565b80638c851e5f1461082b5780638da5cb5b1461085457806391b7f5ed1461087f576102e4565b80636c0360eb146107435780636d61b1051461076e57806370a0823114610797578063715018a6146107d45780637cb64759146107eb5780638456cb5914610814576102e4565b80633950d1d81161024f5780634f6ccce711610208578063560d0343116101e2578063560d0343146106895780635c975abb146106b25780636352211e146106dd57806367e191d51461071a576102e4565b80634f6ccce7146105f8578063518302271461063557806355f804b314610660576102e4565b80633950d1d81461051f5780633ccfd60b146105485780633f4ba83a1461055257806342842e0e14610569578063438b63001461059257806347450e06146105cf576102e4565b806323b872dd116102a157806323b872dd1461040d57806329dc3ce1146104365780632eb4a7ab146104615780632f745c591461048c5780633299c120146104c957806333bc1c5c146104f4576102e4565b806301ffc9a7146102e957806306fdde0314610326578063081812fc14610351578063081c8c441461038e578063095ea7b3146103b957806318160ddd146103e2575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b919061421a565b610b8a565b60405161031d9190614ab8565b60405180910390f35b34801561033257600080fd5b5061033b610c04565b6040516103489190614aee565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906142bd565b610c96565b60405161038591906149f1565b60405180910390f35b34801561039a57600080fd5b506103a3610d1b565b6040516103b09190614aee565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190614104565b610da9565b005b3480156103ee57600080fd5b506103f7610ec1565b6040516104049190614ed0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613fee565b610ece565b005b34801561044257600080fd5b5061044b610f2e565b6040516104589190614ed0565b60405180910390f35b34801561046d57600080fd5b50610476610f34565b6040516104839190614ad3565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190614104565b610f3a565b6040516104c09190614ed0565b60405180910390f35b3480156104d557600080fd5b506104de610fdf565b6040516104eb9190614ed0565b60405180910390f35b34801561050057600080fd5b50610509610fe5565b6040516105169190614ab8565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906141c0565b610ff8565b005b610550611091565b005b34801561055e57600080fd5b50610567611205565b005b34801561057557600080fd5b50610590600480360381019061058b9190613fee565b61128b565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613f81565b6112ab565b6040516105c69190614a58565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614144565b611359565b005b34801561060457600080fd5b5061061f600480360381019061061a91906142bd565b6116bf565b60405161062c9190614ed0565b60405180910390f35b34801561064157600080fd5b5061064a611730565b6040516106579190614ab8565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614274565b611743565b005b34801561069557600080fd5b506106b060048036038101906106ab91906142bd565b6117d9565b005b3480156106be57600080fd5b506106c761185f565b6040516106d49190614ab8565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff91906142bd565b611876565b60405161071191906149f1565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906142bd565b611928565b005b34801561074f57600080fd5b506107586119ae565b6040516107659190614aee565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141ed565b611a3c565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613f81565b611ac2565b6040516107cb9190614ed0565b60405180910390f35b3480156107e057600080fd5b506107e9611b7a565b005b3480156107f757600080fd5b50610812600480360381019061080d91906141ed565b611c02565b005b34801561082057600080fd5b50610829611c88565b005b34801561083757600080fd5b50610852600480360381019061084d91906141c0565b611d0e565b005b34801561086057600080fd5b50610869611da7565b60405161087691906149f1565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a191906142bd565b611dd1565b005b3480156108b457600080fd5b506108cf60048036038101906108ca91906141c0565b611e57565b005b3480156108dd57600080fd5b506108e6611ef0565b6040516108f39190614aee565b60405180910390f35b34801561090857600080fd5b50610911611f82565b60405161091e9190614ed0565b60405180910390f35b34801561093357600080fd5b5061094e600480360381019061094991906140c4565b611f88565b005b34801561095c57600080fd5b50610977600480360381019061097291906142bd565b611f9e565b005b34801561098557600080fd5b5061098e612024565b60405161099b9190614ab8565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614041565b612037565b005b6109e760048036038101906109e291906142ea565b612099565b005b3480156109f557600080fd5b506109fe612392565b604051610a0b9190614ed0565b60405180910390f35b348015610a2057600080fd5b50610a29612398565b604051610a369190614aee565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906142bd565b612426565b604051610a739190614aee565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e91906142bd565b61257f565b005b348015610ab157600080fd5b50610acc6004803603810190610ac79190613fae565b612605565b604051610ad99190614ab8565b60405180910390f35b348015610aee57600080fd5b50610af7612699565b604051610b049190614ed0565b60405180910390f35b348015610b1957600080fd5b50610b2261269f565b604051610b2f9190614ad3565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614274565b6126a5565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190613f81565b61273b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfd5750610bfc82612833565b5b9050919050565b606060008054610c1390615258565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3f90615258565b8015610c8c5780601f10610c6157610100808354040283529160200191610c8c565b820191906000526020600020905b815481529060010190602001808311610c6f57829003601f168201915b5050505050905090565b6000610ca182612915565b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614d90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610d2890615258565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5490615258565b8015610da15780601f10610d7657610100808354040283529160200191610da1565b820191906000526020600020905b815481529060010190602001808311610d8457829003601f168201915b505050505081565b6000610db482611876565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614df0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e44612981565b73ffffffffffffffffffffffffffffffffffffffff161480610e735750610e7281610e6d612981565b612605565b5b610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614cf0565b60405180910390fd5b610ebc8383612989565b505050565b6000600880549050905090565b610edf610ed9612981565b82612a42565b610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590614e30565b60405180910390fd5b610f29838383612b20565b505050565b60105481565b60125481565b6000610f4583611ac2565b8210610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614b50565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b601660019054906101000a900460ff1681565b611000612981565b73ffffffffffffffffffffffffffffffffffffffff1661101e611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90614db0565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b611099612981565b73ffffffffffffffffffffffffffffffffffffffff166110b7611da7565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490614db0565b60405180910390fd5b600047905060008111611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614e90565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161117b906149dc565b60006040518083038185875af1925050503d80600081146111b8576040519150601f19603f3d011682016040523d82523d6000602084013e6111bd565b606091505b5050905080611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890614b30565b60405180910390fd5b5050565b61120d612981565b73ffffffffffffffffffffffffffffffffffffffff1661122b611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890614db0565b60405180910390fd5b611289612d87565b565b6112a683838360405180602001604052806000815250612037565b505050565b606060006112b883611ac2565b905060008167ffffffffffffffff8111156112d6576112d5615444565b5b6040519080825280602002602001820160405280156113045781602001602082028036833780820191505090505b50905060005b8281101561134e5761131c8582610f3a565b82828151811061132f5761132e615415565b5b6020026020010181815250508080611346906152bb565b91505061130a565b508092505050919050565b61136161185f565b156113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890614cd0565b60405180910390fd5b6000601454600f546113b39190615071565b905060016113c033611ac2565b6113ca9190615071565b601154101561140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590614c10565b60405180910390fd5b601660029054906101000a900460ff1661145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614cb0565b60405180910390fd5b60105460145411156114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614c70565b60405180910390fd5b835160155411156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614e50565b60405180910390fd5b6000336040516020016114fd9190614990565b604051602081830303815290604052805190602001209050611563848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135483612e29565b6115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614e10565b60405180910390fd5b60005b8551811015611651573373ffffffffffffffffffffffffffffffffffffffff166115e88783815181106115db576115da615415565b5b6020026020010151611876565b73ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590614d70565b60405180910390fd5b8080611649906152bb565b9150506115a5565b50611668336001846116639190615071565b612e40565b60016014546116779190615071565b6014819055507f2a3a1039c09ba8d844f648ef296a6c1055ce3e9c7cc8bf451e09ffaad07085118583336040516116b093929190614a7a565b60405180910390a15050505050565b60006116c9610ec1565b821061170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190614e70565b60405180910390fd5b6008828154811061171e5761171d615415565b5b90600052602060002001549050919050565b601660009054906101000a900460ff1681565b61174b612981565b73ffffffffffffffffffffffffffffffffffffffff16611769611da7565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690614db0565b60405180910390fd5b80600b90805190602001906117d5929190613c8c565b5050565b6117e1612981565b73ffffffffffffffffffffffffffffffffffffffff166117ff611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614db0565b60405180910390fd5b8060108190555050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614d30565b60405180910390fd5b80915050919050565b611930612981565b73ffffffffffffffffffffffffffffffffffffffff1661194e611da7565b73ffffffffffffffffffffffffffffffffffffffff16146119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614db0565b60405180910390fd5b80600f8190555050565b600b80546119bb90615258565b80601f01602080910402602001604051908101604052809291908181526020018280546119e790615258565b8015611a345780601f10611a0957610100808354040283529160200191611a34565b820191906000526020600020905b815481529060010190602001808311611a1757829003601f168201915b505050505081565b611a44612981565b73ffffffffffffffffffffffffffffffffffffffff16611a62611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614db0565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90614d10565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b82612981565b73ffffffffffffffffffffffffffffffffffffffff16611ba0611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90614db0565b60405180910390fd5b611c006000612e5e565b565b611c0a612981565b73ffffffffffffffffffffffffffffffffffffffff16611c28611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614db0565b60405180910390fd5b8060128190555050565b611c90612981565b73ffffffffffffffffffffffffffffffffffffffff16611cae611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614db0565b60405180910390fd5b611d0c612f24565b565b611d16612981565b73ffffffffffffffffffffffffffffffffffffffff16611d34611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190614db0565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dd9612981565b73ffffffffffffffffffffffffffffffffffffffff16611df7611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614db0565b60405180910390fd5b80600e8190555050565b611e5f612981565b73ffffffffffffffffffffffffffffffffffffffff16611e7d611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca90614db0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b606060018054611eff90615258565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2b90615258565b8015611f785780601f10611f4d57610100808354040283529160200191611f78565b820191906000526020600020905b815481529060010190602001808311611f5b57829003601f168201915b5050505050905090565b600e5481565b611f9a611f93612981565b8383612fc7565b5050565b611fa6612981565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611da7565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614db0565b60405180910390fd5b8060118190555050565b601660029054906101000a900460ff1681565b612048612042612981565b83612a42565b612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614e30565b60405180910390fd5b61209384848484613134565b50505050565b6120a161185f565b156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614cd0565b60405180910390fd5b60006120eb610ec1565b9050600084116120fa57600080fd5b600f5484826121099190615071565b111561211457600080fd5b61211c611da7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461230e5760115484111561215d57600080fd5b8361216733611ac2565b6121719190615071565b60115410156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90614c10565b60405180910390fd5b601660019054906101000a900460ff16612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614eb0565b60405180910390fd5b83600e5461221291906150f8565b341015612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614b90565b60405180910390fd5b6000336040516020016122679190614990565b6040516020818303038152906040528051906020012090506122cd848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060125483612e29565b61230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614e10565b60405180910390fd5b505b6000600190505b84811161238b5761233133828461232c9190615071565b612e40565b7f2519a86138614783f28e3a838e3eb3bd2d71d88d93d0d1cd9f8885e82b0dfee7818361235e9190615071565b33600060405161237093929190614eeb565b60405180910390a18080612383906152bb565b915050612315565b5050505050565b60155481565b600d80546123a590615258565b80601f01602080910402602001604051908101604052809291908181526020018280546123d190615258565b801561241e5780601f106123f35761010080835404028352916020019161241e565b820191906000526020600020905b81548152906001019060200180831161240157829003601f168201915b505050505081565b606061243182612915565b612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614dd0565b60405180910390fd5b60001515601660009054906101000a900460ff161515141561251e57600c805461249990615258565b80601f01602080910402602001604051908101604052809291908181526020018280546124c590615258565b80156125125780601f106124e757610100808354040283529160200191612512565b820191906000526020600020905b8154815290600101906020018083116124f557829003601f168201915b5050505050905061257a565b6000612528613190565b905060008151116125485760405180602001604052806000815250612576565b8061255284613222565b600d604051602001612566939291906149ab565b6040516020818303038152906040525b9150505b919050565b612587612981565b73ffffffffffffffffffffffffffffffffffffffff166125a5611da7565b73ffffffffffffffffffffffffffffffffffffffff16146125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f290614db0565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b60135481565b6126ad612981565b73ffffffffffffffffffffffffffffffffffffffff166126cb611da7565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614db0565b60405180910390fd5b80600c9080519060200190612737929190613c8c565b5050565b612743612981565b73ffffffffffffffffffffffffffffffffffffffff16612761611da7565b73ffffffffffffffffffffffffffffffffffffffff16146127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614db0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281e90614bb0565b60405180910390fd5b61283081612e5e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128fe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061290e575061290d82613383565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129fc83611876565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a4d82612915565b612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390614c90565b60405180910390fd5b6000612a9783611876565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ad95750612ad88185612605565b5b80612b1757508373ffffffffffffffffffffffffffffffffffffffff16612aff84610c96565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b4082611876565b73ffffffffffffffffffffffffffffffffffffffff1614612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90614bd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd90614c30565b60405180910390fd5b612c118383836133ed565b612c1c600082612989565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6c9190615152565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cc39190615071565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d82838383613501565b505050565b612d8f61185f565b612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614b10565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612e12612981565b604051612e1f91906149f1565b60405180910390a1565b600082612e368584613506565b1490509392505050565b612e5a82826040518060200160405280600081525061357b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f2c61185f565b15612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390614cd0565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fb0612981565b604051612fbd91906149f1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90614c50565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131279190614ab8565b60405180910390a3505050565b61313f848484612b20565b61314b848484846135d6565b61318a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318190614b70565b60405180910390fd5b50505050565b6060600b805461319f90615258565b80601f01602080910402602001604051908101604052809291908181526020018280546131cb90615258565b80156132185780601f106131ed57610100808354040283529160200191613218565b820191906000526020600020905b8154815290600101906020018083116131fb57829003601f168201915b5050505050905090565b6060600082141561326a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061337e565b600082905060005b6000821461329c578080613285906152bb565b915050600a8261329591906150c7565b9150613272565b60008167ffffffffffffffff8111156132b8576132b7615444565b5b6040519080825280601f01601f1916602001820160405280156132ea5781602001600182028036833780820191505090505b5090505b60008514613377576001826133039190615152565b9150600a856133129190615328565b603061331e9190615071565b60f81b81838151811061333457613333615415565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337091906150c7565b94506132ee565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133f883838361376d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561343b5761343681613772565b61347a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134795761347883826137bb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bd576134b881613928565b6134fc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134fb576134fa82826139f9565b5b5b505050565b505050565b60008082905060005b845181101561357057600085828151811061352d5761352c615415565b5b6020026020010151905080831161354f576135488382613a78565b925061355c565b6135598184613a78565b92505b508080613568906152bb565b91505061350f565b508091505092915050565b6135858383613a8f565b61359260008484846135d6565b6135d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c890614b70565b60405180910390fd5b505050565b60006135f78473ffffffffffffffffffffffffffffffffffffffff16613c69565b15613760578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613620612981565b8786866040518563ffffffff1660e01b81526004016136429493929190614a0c565b602060405180830381600087803b15801561365c57600080fd5b505af192505050801561368d57506040513d601f19601f8201168201806040525081019061368a9190614247565b60015b613710573d80600081146136bd576040519150601f19603f3d011682016040523d82523d6000602084013e6136c2565b606091505b50600081511415613708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ff90614b70565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613765565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137c884611ac2565b6137d29190615152565b90506000600760008481526020019081526020016000205490508181146138b7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061393c9190615152565b905060006009600084815260200190815260200160002054905060006008838154811061396c5761396b615415565b5b90600052602060002001549050806008838154811061398e5761398d615415565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139dd576139dc6153e6565b5b6001900381819060005260206000200160009055905550505050565b6000613a0483611ac2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af690614d50565b60405180910390fd5b613b0881612915565b15613b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3f90614bf0565b60405180910390fd5b613b54600083836133ed565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ba49190615071565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c6560008383613501565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613c9890615258565b90600052602060002090601f016020900481019282613cba5760008555613d01565b82601f10613cd357805160ff1916838001178555613d01565b82800160010185558215613d01579182015b82811115613d00578251825591602001919060010190613ce5565b5b509050613d0e9190613d12565b5090565b5b80821115613d2b576000816000905550600101613d13565b5090565b6000613d42613d3d84614f47565b614f22565b90508083825260208201905082856020860282011115613d6557613d6461547d565b5b60005b85811015613d955781613d7b8882613f6c565b845260208401935060208301925050600181019050613d68565b5050509392505050565b6000613db2613dad84614f73565b614f22565b905082815260208101848484011115613dce57613dcd615482565b5b613dd9848285615216565b509392505050565b6000613df4613def84614fa4565b614f22565b905082815260208101848484011115613e1057613e0f615482565b5b613e1b848285615216565b509392505050565b600081359050613e3281615c2c565b92915050565b60008083601f840112613e4e57613e4d615478565b5b8235905067ffffffffffffffff811115613e6b57613e6a615473565b5b602083019150836020820283011115613e8757613e8661547d565b5b9250929050565b600082601f830112613ea357613ea2615478565b5b8135613eb3848260208601613d2f565b91505092915050565b600081359050613ecb81615c43565b92915050565b600081359050613ee081615c5a565b92915050565b600081359050613ef581615c71565b92915050565b600081519050613f0a81615c71565b92915050565b600082601f830112613f2557613f24615478565b5b8135613f35848260208601613d9f565b91505092915050565b600082601f830112613f5357613f52615478565b5b8135613f63848260208601613de1565b91505092915050565b600081359050613f7b81615c88565b92915050565b600060208284031215613f9757613f9661548c565b5b6000613fa584828501613e23565b91505092915050565b60008060408385031215613fc557613fc461548c565b5b6000613fd385828601613e23565b9250506020613fe485828601613e23565b9150509250929050565b6000806000606084860312156140075761400661548c565b5b600061401586828701613e23565b935050602061402686828701613e23565b925050604061403786828701613f6c565b9150509250925092565b6000806000806080858703121561405b5761405a61548c565b5b600061406987828801613e23565b945050602061407a87828801613e23565b935050604061408b87828801613f6c565b925050606085013567ffffffffffffffff8111156140ac576140ab615487565b5b6140b887828801613f10565b91505092959194509250565b600080604083850312156140db576140da61548c565b5b60006140e985828601613e23565b92505060206140fa85828601613ebc565b9150509250929050565b6000806040838503121561411b5761411a61548c565b5b600061412985828601613e23565b925050602061413a85828601613f6c565b9150509250929050565b60008060006040848603121561415d5761415c61548c565b5b600084013567ffffffffffffffff81111561417b5761417a615487565b5b61418786828701613e8e565b935050602084013567ffffffffffffffff8111156141a8576141a7615487565b5b6141b486828701613e38565b92509250509250925092565b6000602082840312156141d6576141d561548c565b5b60006141e484828501613ebc565b91505092915050565b6000602082840312156142035761420261548c565b5b600061421184828501613ed1565b91505092915050565b6000602082840312156142305761422f61548c565b5b600061423e84828501613ee6565b91505092915050565b60006020828403121561425d5761425c61548c565b5b600061426b84828501613efb565b91505092915050565b60006020828403121561428a5761428961548c565b5b600082013567ffffffffffffffff8111156142a8576142a7615487565b5b6142b484828501613f3e565b91505092915050565b6000602082840312156142d3576142d261548c565b5b60006142e184828501613f6c565b91505092915050565b6000806000604084860312156143035761430261548c565b5b600061431186828701613f6c565b935050602084013567ffffffffffffffff81111561433257614331615487565b5b61433e86828701613e38565b92509250509250925092565b60006143568383614972565b60208301905092915050565b61436b81615186565b82525050565b61438261437d82615186565b615304565b82525050565b600061439382614ffa565b61439d8185615028565b93506143a883614fd5565b8060005b838110156143d95781516143c0888261434a565b97506143cb8361501b565b9250506001810190506143ac565b5085935050505092915050565b6143ef81615198565b82525050565b6143fe816151a4565b82525050565b600061440f82615005565b6144198185615039565b9350614429818560208601615225565b61443281615491565b840191505092915050565b61444681615204565b82525050565b600061445782615010565b6144618185615055565b9350614471818560208601615225565b61447a81615491565b840191505092915050565b600061449082615010565b61449a8185615066565b93506144aa818560208601615225565b80840191505092915050565b600081546144c381615258565b6144cd8186615066565b945060018216600081146144e857600181146144f95761452c565b60ff1983168652818601935061452c565b61450285614fe5565b60005b8381101561452457815481890152600182019150602081019050614505565b838801955050505b50505092915050565b6000614542601483615055565b915061454d826154af565b602082019050919050565b6000614565601383615055565b9150614570826154d8565b602082019050919050565b6000614588602b83615055565b915061459382615501565b604082019050919050565b60006145ab603283615055565b91506145b682615550565b604082019050919050565b60006145ce601f83615055565b91506145d98261559f565b602082019050919050565b60006145f1602683615055565b91506145fc826155c8565b604082019050919050565b6000614614602583615055565b915061461f82615617565b604082019050919050565b6000614637601c83615055565b915061464282615666565b602082019050919050565b600061465a602583615055565b91506146658261568f565b604082019050919050565b600061467d602483615055565b9150614688826156de565b604082019050919050565b60006146a0601983615055565b91506146ab8261572d565b602082019050919050565b60006146c3601783615055565b91506146ce82615756565b602082019050919050565b60006146e6602c83615055565b91506146f18261577f565b604082019050919050565b6000614709601d83615055565b9150614714826157ce565b602082019050919050565b600061472c601083615055565b9150614737826157f7565b602082019050919050565b600061474f603883615055565b915061475a82615820565b604082019050919050565b6000614772602a83615055565b915061477d8261586f565b604082019050919050565b6000614795602983615055565b91506147a0826158be565b604082019050919050565b60006147b8602083615055565b91506147c38261590d565b602082019050919050565b60006147db603483615055565b91506147e682615936565b604082019050919050565b60006147fe602c83615055565b915061480982615985565b604082019050919050565b6000614821602083615055565b915061482c826159d4565b602082019050919050565b6000614844602f83615055565b915061484f826159fd565b604082019050919050565b6000614867602183615055565b915061487282615a4c565b604082019050919050565b600061488a602383615055565b915061489582615a9b565b604082019050919050565b60006148ad60008361504a565b91506148b882615aea565b600082019050919050565b60006148d0603183615055565b91506148db82615aed565b604082019050919050565b60006148f3602883615055565b91506148fe82615b3c565b604082019050919050565b6000614916602c83615055565b915061492182615b8b565b604082019050919050565b6000614939601d83615055565b915061494482615bda565b602082019050919050565b600061495c602083615055565b915061496782615c03565b602082019050919050565b61497b816151fa565b82525050565b61498a816151fa565b82525050565b600061499c8284614371565b60148201915081905092915050565b60006149b78286614485565b91506149c38285614485565b91506149cf82846144b6565b9150819050949350505050565b60006149e7826148a0565b9150819050919050565b6000602082019050614a066000830184614362565b92915050565b6000608082019050614a216000830187614362565b614a2e6020830186614362565b614a3b6040830185614981565b8181036060830152614a4d8184614404565b905095945050505050565b60006020820190508181036000830152614a728184614388565b905092915050565b60006060820190508181036000830152614a948186614388565b9050614aa36020830185614981565b614ab06040830184614362565b949350505050565b6000602082019050614acd60008301846143e6565b92915050565b6000602082019050614ae860008301846143f5565b92915050565b60006020820190508181036000830152614b08818461444c565b905092915050565b60006020820190508181036000830152614b2981614535565b9050919050565b60006020820190508181036000830152614b4981614558565b9050919050565b60006020820190508181036000830152614b698161457b565b9050919050565b60006020820190508181036000830152614b898161459e565b9050919050565b60006020820190508181036000830152614ba9816145c1565b9050919050565b60006020820190508181036000830152614bc9816145e4565b9050919050565b60006020820190508181036000830152614be981614607565b9050919050565b60006020820190508181036000830152614c098161462a565b9050919050565b60006020820190508181036000830152614c298161464d565b9050919050565b60006020820190508181036000830152614c4981614670565b9050919050565b60006020820190508181036000830152614c6981614693565b9050919050565b60006020820190508181036000830152614c89816146b6565b9050919050565b60006020820190508181036000830152614ca9816146d9565b9050919050565b60006020820190508181036000830152614cc9816146fc565b9050919050565b60006020820190508181036000830152614ce98161471f565b9050919050565b60006020820190508181036000830152614d0981614742565b9050919050565b60006020820190508181036000830152614d2981614765565b9050919050565b60006020820190508181036000830152614d4981614788565b9050919050565b60006020820190508181036000830152614d69816147ab565b9050919050565b60006020820190508181036000830152614d89816147ce565b9050919050565b60006020820190508181036000830152614da9816147f1565b9050919050565b60006020820190508181036000830152614dc981614814565b9050919050565b60006020820190508181036000830152614de981614837565b9050919050565b60006020820190508181036000830152614e098161485a565b9050919050565b60006020820190508181036000830152614e298161487d565b9050919050565b60006020820190508181036000830152614e49816148c3565b9050919050565b60006020820190508181036000830152614e69816148e6565b9050919050565b60006020820190508181036000830152614e8981614909565b9050919050565b60006020820190508181036000830152614ea98161492c565b9050919050565b60006020820190508181036000830152614ec98161494f565b9050919050565b6000602082019050614ee56000830184614981565b92915050565b6000606082019050614f006000830186614981565b614f0d6020830185614362565b614f1a604083018461443d565b949350505050565b6000614f2c614f3d565b9050614f38828261528a565b919050565b6000604051905090565b600067ffffffffffffffff821115614f6257614f61615444565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f8e57614f8d615444565b5b614f9782615491565b9050602081019050919050565b600067ffffffffffffffff821115614fbf57614fbe615444565b5b614fc882615491565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061507c826151fa565b9150615087836151fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150bc576150bb615359565b5b828201905092915050565b60006150d2826151fa565b91506150dd836151fa565b9250826150ed576150ec615388565b5b828204905092915050565b6000615103826151fa565b915061510e836151fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561514757615146615359565b5b828202905092915050565b600061515d826151fa565b9150615168836151fa565b92508282101561517b5761517a615359565b5b828203905092915050565b6000615191826151da565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061520f826151fa565b9050919050565b82818337600083830152505050565b60005b83811015615243578082015181840152602081019050615228565b83811115615252576000848401525b50505050565b6000600282049050600182168061527057607f821691505b60208210811415615284576152836153b7565b5b50919050565b61529382615491565b810181811067ffffffffffffffff821117156152b2576152b1615444565b5b80604052505050565b60006152c6826151fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152f9576152f8615359565b5b600182019050919050565b600061530f82615316565b9050919050565b6000615321826154a2565b9050919050565b6000615333826151fa565b915061533e836151fa565b92508261534e5761534d615388565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5472616e73616374696f6e206661696c65642e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865727320746f206d696e74204e4654732e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656c696769626c6520746f206d696e74207468697320616c6c6f636160008201527f74696f6e2e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416c6c20737570657220626162696573206d696e746564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5375706572204261626965732073616c65206e6f742073746172746564000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e6e6f7420696e746572616374207769746820612053757065724372656160008201527f746f727320796f7520646f206e6f74206f776e2e000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f414444524553535f4e4f545f454c494749424c455f464f525f414c4c4f575f4c60008201527f4953540000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265717569726520746f6b656e206c65737320666f72206d696e74207375706560008201527f7220626162696573000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20776974686472617721000000600082015250565b7f5075626c69632073616c6520686173206e6f742073746172746564207965742e600082015250565b615c3581615186565b8114615c4057600080fd5b50565b615c4c81615198565b8114615c5757600080fd5b50565b615c63816151a4565b8114615c6e57600080fd5b50565b615c7a816151ae565b8114615c8557600080fd5b50565b615c91816151fa565b8114615c9c57600080fd5b5056fea2646970667358221220d9f5985b06e1111dda43a15b33a926dfe24520681b3ee0b133c3e6f3eae805e164736f6c63430008070033697066733a2f2f516d515a6e764c534a626d35346b45383943347a78646333357556644a474d4862386a696f4e4570517a6e774a33

Deployed Bytecode

0x6080604052600436106102e45760003560e01c80636c0360eb11610190578063afdf6134116100dc578063c87b56dd11610095578063ec912c831161006f578063ec912c8314610ae2578063ef046bbb14610b0d578063f2c4ce1e14610b38578063f2fde38b14610b61576102e4565b8063c87b56dd14610a3f578063df4a091a14610a7c578063e985e9c514610aa5576102e4565b8063afdf613414610950578063b442409514610979578063b88d4fde146109a4578063ba41b0c6146109cd578063c45cf437146109e9578063c668286214610a14576102e4565b80638c851e5f11610149578063940cd05b11610123578063940cd05b146108a857806395d89b41146108d15780639dfde201146108fc578063a22cb46514610927576102e4565b80638c851e5f1461082b5780638da5cb5b1461085457806391b7f5ed1461087f576102e4565b80636c0360eb146107435780636d61b1051461076e57806370a0823114610797578063715018a6146107d45780637cb64759146107eb5780638456cb5914610814576102e4565b80633950d1d81161024f5780634f6ccce711610208578063560d0343116101e2578063560d0343146106895780635c975abb146106b25780636352211e146106dd57806367e191d51461071a576102e4565b80634f6ccce7146105f8578063518302271461063557806355f804b314610660576102e4565b80633950d1d81461051f5780633ccfd60b146105485780633f4ba83a1461055257806342842e0e14610569578063438b63001461059257806347450e06146105cf576102e4565b806323b872dd116102a157806323b872dd1461040d57806329dc3ce1146104365780632eb4a7ab146104615780632f745c591461048c5780633299c120146104c957806333bc1c5c146104f4576102e4565b806301ffc9a7146102e957806306fdde0314610326578063081812fc14610351578063081c8c441461038e578063095ea7b3146103b957806318160ddd146103e2575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b919061421a565b610b8a565b60405161031d9190614ab8565b60405180910390f35b34801561033257600080fd5b5061033b610c04565b6040516103489190614aee565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906142bd565b610c96565b60405161038591906149f1565b60405180910390f35b34801561039a57600080fd5b506103a3610d1b565b6040516103b09190614aee565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190614104565b610da9565b005b3480156103ee57600080fd5b506103f7610ec1565b6040516104049190614ed0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613fee565b610ece565b005b34801561044257600080fd5b5061044b610f2e565b6040516104589190614ed0565b60405180910390f35b34801561046d57600080fd5b50610476610f34565b6040516104839190614ad3565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190614104565b610f3a565b6040516104c09190614ed0565b60405180910390f35b3480156104d557600080fd5b506104de610fdf565b6040516104eb9190614ed0565b60405180910390f35b34801561050057600080fd5b50610509610fe5565b6040516105169190614ab8565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906141c0565b610ff8565b005b610550611091565b005b34801561055e57600080fd5b50610567611205565b005b34801561057557600080fd5b50610590600480360381019061058b9190613fee565b61128b565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613f81565b6112ab565b6040516105c69190614a58565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614144565b611359565b005b34801561060457600080fd5b5061061f600480360381019061061a91906142bd565b6116bf565b60405161062c9190614ed0565b60405180910390f35b34801561064157600080fd5b5061064a611730565b6040516106579190614ab8565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614274565b611743565b005b34801561069557600080fd5b506106b060048036038101906106ab91906142bd565b6117d9565b005b3480156106be57600080fd5b506106c761185f565b6040516106d49190614ab8565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff91906142bd565b611876565b60405161071191906149f1565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906142bd565b611928565b005b34801561074f57600080fd5b506107586119ae565b6040516107659190614aee565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141ed565b611a3c565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613f81565b611ac2565b6040516107cb9190614ed0565b60405180910390f35b3480156107e057600080fd5b506107e9611b7a565b005b3480156107f757600080fd5b50610812600480360381019061080d91906141ed565b611c02565b005b34801561082057600080fd5b50610829611c88565b005b34801561083757600080fd5b50610852600480360381019061084d91906141c0565b611d0e565b005b34801561086057600080fd5b50610869611da7565b60405161087691906149f1565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a191906142bd565b611dd1565b005b3480156108b457600080fd5b506108cf60048036038101906108ca91906141c0565b611e57565b005b3480156108dd57600080fd5b506108e6611ef0565b6040516108f39190614aee565b60405180910390f35b34801561090857600080fd5b50610911611f82565b60405161091e9190614ed0565b60405180910390f35b34801561093357600080fd5b5061094e600480360381019061094991906140c4565b611f88565b005b34801561095c57600080fd5b50610977600480360381019061097291906142bd565b611f9e565b005b34801561098557600080fd5b5061098e612024565b60405161099b9190614ab8565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614041565b612037565b005b6109e760048036038101906109e291906142ea565b612099565b005b3480156109f557600080fd5b506109fe612392565b604051610a0b9190614ed0565b60405180910390f35b348015610a2057600080fd5b50610a29612398565b604051610a369190614aee565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906142bd565b612426565b604051610a739190614aee565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e91906142bd565b61257f565b005b348015610ab157600080fd5b50610acc6004803603810190610ac79190613fae565b612605565b604051610ad99190614ab8565b60405180910390f35b348015610aee57600080fd5b50610af7612699565b604051610b049190614ed0565b60405180910390f35b348015610b1957600080fd5b50610b2261269f565b604051610b2f9190614ad3565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614274565b6126a5565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190613f81565b61273b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfd5750610bfc82612833565b5b9050919050565b606060008054610c1390615258565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3f90615258565b8015610c8c5780601f10610c6157610100808354040283529160200191610c8c565b820191906000526020600020905b815481529060010190602001808311610c6f57829003601f168201915b5050505050905090565b6000610ca182612915565b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614d90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610d2890615258565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5490615258565b8015610da15780601f10610d7657610100808354040283529160200191610da1565b820191906000526020600020905b815481529060010190602001808311610d8457829003601f168201915b505050505081565b6000610db482611876565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614df0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e44612981565b73ffffffffffffffffffffffffffffffffffffffff161480610e735750610e7281610e6d612981565b612605565b5b610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614cf0565b60405180910390fd5b610ebc8383612989565b505050565b6000600880549050905090565b610edf610ed9612981565b82612a42565b610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590614e30565b60405180910390fd5b610f29838383612b20565b505050565b60105481565b60125481565b6000610f4583611ac2565b8210610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614b50565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b601660019054906101000a900460ff1681565b611000612981565b73ffffffffffffffffffffffffffffffffffffffff1661101e611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90614db0565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b611099612981565b73ffffffffffffffffffffffffffffffffffffffff166110b7611da7565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490614db0565b60405180910390fd5b600047905060008111611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614e90565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161117b906149dc565b60006040518083038185875af1925050503d80600081146111b8576040519150601f19603f3d011682016040523d82523d6000602084013e6111bd565b606091505b5050905080611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890614b30565b60405180910390fd5b5050565b61120d612981565b73ffffffffffffffffffffffffffffffffffffffff1661122b611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890614db0565b60405180910390fd5b611289612d87565b565b6112a683838360405180602001604052806000815250612037565b505050565b606060006112b883611ac2565b905060008167ffffffffffffffff8111156112d6576112d5615444565b5b6040519080825280602002602001820160405280156113045781602001602082028036833780820191505090505b50905060005b8281101561134e5761131c8582610f3a565b82828151811061132f5761132e615415565b5b6020026020010181815250508080611346906152bb565b91505061130a565b508092505050919050565b61136161185f565b156113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890614cd0565b60405180910390fd5b6000601454600f546113b39190615071565b905060016113c033611ac2565b6113ca9190615071565b601154101561140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590614c10565b60405180910390fd5b601660029054906101000a900460ff1661145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614cb0565b60405180910390fd5b60105460145411156114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614c70565b60405180910390fd5b835160155411156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614e50565b60405180910390fd5b6000336040516020016114fd9190614990565b604051602081830303815290604052805190602001209050611563848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135483612e29565b6115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614e10565b60405180910390fd5b60005b8551811015611651573373ffffffffffffffffffffffffffffffffffffffff166115e88783815181106115db576115da615415565b5b6020026020010151611876565b73ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590614d70565b60405180910390fd5b8080611649906152bb565b9150506115a5565b50611668336001846116639190615071565b612e40565b60016014546116779190615071565b6014819055507f2a3a1039c09ba8d844f648ef296a6c1055ce3e9c7cc8bf451e09ffaad07085118583336040516116b093929190614a7a565b60405180910390a15050505050565b60006116c9610ec1565b821061170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190614e70565b60405180910390fd5b6008828154811061171e5761171d615415565b5b90600052602060002001549050919050565b601660009054906101000a900460ff1681565b61174b612981565b73ffffffffffffffffffffffffffffffffffffffff16611769611da7565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690614db0565b60405180910390fd5b80600b90805190602001906117d5929190613c8c565b5050565b6117e1612981565b73ffffffffffffffffffffffffffffffffffffffff166117ff611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614db0565b60405180910390fd5b8060108190555050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614d30565b60405180910390fd5b80915050919050565b611930612981565b73ffffffffffffffffffffffffffffffffffffffff1661194e611da7565b73ffffffffffffffffffffffffffffffffffffffff16146119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614db0565b60405180910390fd5b80600f8190555050565b600b80546119bb90615258565b80601f01602080910402602001604051908101604052809291908181526020018280546119e790615258565b8015611a345780601f10611a0957610100808354040283529160200191611a34565b820191906000526020600020905b815481529060010190602001808311611a1757829003601f168201915b505050505081565b611a44612981565b73ffffffffffffffffffffffffffffffffffffffff16611a62611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614db0565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90614d10565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b82612981565b73ffffffffffffffffffffffffffffffffffffffff16611ba0611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90614db0565b60405180910390fd5b611c006000612e5e565b565b611c0a612981565b73ffffffffffffffffffffffffffffffffffffffff16611c28611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614db0565b60405180910390fd5b8060128190555050565b611c90612981565b73ffffffffffffffffffffffffffffffffffffffff16611cae611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614db0565b60405180910390fd5b611d0c612f24565b565b611d16612981565b73ffffffffffffffffffffffffffffffffffffffff16611d34611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190614db0565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dd9612981565b73ffffffffffffffffffffffffffffffffffffffff16611df7611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614db0565b60405180910390fd5b80600e8190555050565b611e5f612981565b73ffffffffffffffffffffffffffffffffffffffff16611e7d611da7565b73ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca90614db0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b606060018054611eff90615258565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2b90615258565b8015611f785780601f10611f4d57610100808354040283529160200191611f78565b820191906000526020600020905b815481529060010190602001808311611f5b57829003601f168201915b5050505050905090565b600e5481565b611f9a611f93612981565b8383612fc7565b5050565b611fa6612981565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611da7565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614db0565b60405180910390fd5b8060118190555050565b601660029054906101000a900460ff1681565b612048612042612981565b83612a42565b612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614e30565b60405180910390fd5b61209384848484613134565b50505050565b6120a161185f565b156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614cd0565b60405180910390fd5b60006120eb610ec1565b9050600084116120fa57600080fd5b600f5484826121099190615071565b111561211457600080fd5b61211c611da7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461230e5760115484111561215d57600080fd5b8361216733611ac2565b6121719190615071565b60115410156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90614c10565b60405180910390fd5b601660019054906101000a900460ff16612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614eb0565b60405180910390fd5b83600e5461221291906150f8565b341015612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614b90565b60405180910390fd5b6000336040516020016122679190614990565b6040516020818303038152906040528051906020012090506122cd848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060125483612e29565b61230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614e10565b60405180910390fd5b505b6000600190505b84811161238b5761233133828461232c9190615071565b612e40565b7f2519a86138614783f28e3a838e3eb3bd2d71d88d93d0d1cd9f8885e82b0dfee7818361235e9190615071565b33600060405161237093929190614eeb565b60405180910390a18080612383906152bb565b915050612315565b5050505050565b60155481565b600d80546123a590615258565b80601f01602080910402602001604051908101604052809291908181526020018280546123d190615258565b801561241e5780601f106123f35761010080835404028352916020019161241e565b820191906000526020600020905b81548152906001019060200180831161240157829003601f168201915b505050505081565b606061243182612915565b612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614dd0565b60405180910390fd5b60001515601660009054906101000a900460ff161515141561251e57600c805461249990615258565b80601f01602080910402602001604051908101604052809291908181526020018280546124c590615258565b80156125125780601f106124e757610100808354040283529160200191612512565b820191906000526020600020905b8154815290600101906020018083116124f557829003601f168201915b5050505050905061257a565b6000612528613190565b905060008151116125485760405180602001604052806000815250612576565b8061255284613222565b600d604051602001612566939291906149ab565b6040516020818303038152906040525b9150505b919050565b612587612981565b73ffffffffffffffffffffffffffffffffffffffff166125a5611da7565b73ffffffffffffffffffffffffffffffffffffffff16146125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f290614db0565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b60135481565b6126ad612981565b73ffffffffffffffffffffffffffffffffffffffff166126cb611da7565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614db0565b60405180910390fd5b80600c9080519060200190612737929190613c8c565b5050565b612743612981565b73ffffffffffffffffffffffffffffffffffffffff16612761611da7565b73ffffffffffffffffffffffffffffffffffffffff16146127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614db0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281e90614bb0565b60405180910390fd5b61283081612e5e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128fe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061290e575061290d82613383565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129fc83611876565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a4d82612915565b612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390614c90565b60405180910390fd5b6000612a9783611876565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ad95750612ad88185612605565b5b80612b1757508373ffffffffffffffffffffffffffffffffffffffff16612aff84610c96565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b4082611876565b73ffffffffffffffffffffffffffffffffffffffff1614612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90614bd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd90614c30565b60405180910390fd5b612c118383836133ed565b612c1c600082612989565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6c9190615152565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cc39190615071565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d82838383613501565b505050565b612d8f61185f565b612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614b10565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612e12612981565b604051612e1f91906149f1565b60405180910390a1565b600082612e368584613506565b1490509392505050565b612e5a82826040518060200160405280600081525061357b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f2c61185f565b15612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390614cd0565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fb0612981565b604051612fbd91906149f1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90614c50565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131279190614ab8565b60405180910390a3505050565b61313f848484612b20565b61314b848484846135d6565b61318a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318190614b70565b60405180910390fd5b50505050565b6060600b805461319f90615258565b80601f01602080910402602001604051908101604052809291908181526020018280546131cb90615258565b80156132185780601f106131ed57610100808354040283529160200191613218565b820191906000526020600020905b8154815290600101906020018083116131fb57829003601f168201915b5050505050905090565b6060600082141561326a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061337e565b600082905060005b6000821461329c578080613285906152bb565b915050600a8261329591906150c7565b9150613272565b60008167ffffffffffffffff8111156132b8576132b7615444565b5b6040519080825280601f01601f1916602001820160405280156132ea5781602001600182028036833780820191505090505b5090505b60008514613377576001826133039190615152565b9150600a856133129190615328565b603061331e9190615071565b60f81b81838151811061333457613333615415565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337091906150c7565b94506132ee565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133f883838361376d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561343b5761343681613772565b61347a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134795761347883826137bb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bd576134b881613928565b6134fc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134fb576134fa82826139f9565b5b5b505050565b505050565b60008082905060005b845181101561357057600085828151811061352d5761352c615415565b5b6020026020010151905080831161354f576135488382613a78565b925061355c565b6135598184613a78565b92505b508080613568906152bb565b91505061350f565b508091505092915050565b6135858383613a8f565b61359260008484846135d6565b6135d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c890614b70565b60405180910390fd5b505050565b60006135f78473ffffffffffffffffffffffffffffffffffffffff16613c69565b15613760578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613620612981565b8786866040518563ffffffff1660e01b81526004016136429493929190614a0c565b602060405180830381600087803b15801561365c57600080fd5b505af192505050801561368d57506040513d601f19601f8201168201806040525081019061368a9190614247565b60015b613710573d80600081146136bd576040519150601f19603f3d011682016040523d82523d6000602084013e6136c2565b606091505b50600081511415613708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ff90614b70565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613765565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137c884611ac2565b6137d29190615152565b90506000600760008481526020019081526020016000205490508181146138b7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061393c9190615152565b905060006009600084815260200190815260200160002054905060006008838154811061396c5761396b615415565b5b90600052602060002001549050806008838154811061398e5761398d615415565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139dd576139dc6153e6565b5b6001900381819060005260206000200160009055905550505050565b6000613a0483611ac2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af690614d50565b60405180910390fd5b613b0881612915565b15613b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3f90614bf0565b60405180910390fd5b613b54600083836133ed565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ba49190615071565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c6560008383613501565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613c9890615258565b90600052602060002090601f016020900481019282613cba5760008555613d01565b82601f10613cd357805160ff1916838001178555613d01565b82800160010185558215613d01579182015b82811115613d00578251825591602001919060010190613ce5565b5b509050613d0e9190613d12565b5090565b5b80821115613d2b576000816000905550600101613d13565b5090565b6000613d42613d3d84614f47565b614f22565b90508083825260208201905082856020860282011115613d6557613d6461547d565b5b60005b85811015613d955781613d7b8882613f6c565b845260208401935060208301925050600181019050613d68565b5050509392505050565b6000613db2613dad84614f73565b614f22565b905082815260208101848484011115613dce57613dcd615482565b5b613dd9848285615216565b509392505050565b6000613df4613def84614fa4565b614f22565b905082815260208101848484011115613e1057613e0f615482565b5b613e1b848285615216565b509392505050565b600081359050613e3281615c2c565b92915050565b60008083601f840112613e4e57613e4d615478565b5b8235905067ffffffffffffffff811115613e6b57613e6a615473565b5b602083019150836020820283011115613e8757613e8661547d565b5b9250929050565b600082601f830112613ea357613ea2615478565b5b8135613eb3848260208601613d2f565b91505092915050565b600081359050613ecb81615c43565b92915050565b600081359050613ee081615c5a565b92915050565b600081359050613ef581615c71565b92915050565b600081519050613f0a81615c71565b92915050565b600082601f830112613f2557613f24615478565b5b8135613f35848260208601613d9f565b91505092915050565b600082601f830112613f5357613f52615478565b5b8135613f63848260208601613de1565b91505092915050565b600081359050613f7b81615c88565b92915050565b600060208284031215613f9757613f9661548c565b5b6000613fa584828501613e23565b91505092915050565b60008060408385031215613fc557613fc461548c565b5b6000613fd385828601613e23565b9250506020613fe485828601613e23565b9150509250929050565b6000806000606084860312156140075761400661548c565b5b600061401586828701613e23565b935050602061402686828701613e23565b925050604061403786828701613f6c565b9150509250925092565b6000806000806080858703121561405b5761405a61548c565b5b600061406987828801613e23565b945050602061407a87828801613e23565b935050604061408b87828801613f6c565b925050606085013567ffffffffffffffff8111156140ac576140ab615487565b5b6140b887828801613f10565b91505092959194509250565b600080604083850312156140db576140da61548c565b5b60006140e985828601613e23565b92505060206140fa85828601613ebc565b9150509250929050565b6000806040838503121561411b5761411a61548c565b5b600061412985828601613e23565b925050602061413a85828601613f6c565b9150509250929050565b60008060006040848603121561415d5761415c61548c565b5b600084013567ffffffffffffffff81111561417b5761417a615487565b5b61418786828701613e8e565b935050602084013567ffffffffffffffff8111156141a8576141a7615487565b5b6141b486828701613e38565b92509250509250925092565b6000602082840312156141d6576141d561548c565b5b60006141e484828501613ebc565b91505092915050565b6000602082840312156142035761420261548c565b5b600061421184828501613ed1565b91505092915050565b6000602082840312156142305761422f61548c565b5b600061423e84828501613ee6565b91505092915050565b60006020828403121561425d5761425c61548c565b5b600061426b84828501613efb565b91505092915050565b60006020828403121561428a5761428961548c565b5b600082013567ffffffffffffffff8111156142a8576142a7615487565b5b6142b484828501613f3e565b91505092915050565b6000602082840312156142d3576142d261548c565b5b60006142e184828501613f6c565b91505092915050565b6000806000604084860312156143035761430261548c565b5b600061431186828701613f6c565b935050602084013567ffffffffffffffff81111561433257614331615487565b5b61433e86828701613e38565b92509250509250925092565b60006143568383614972565b60208301905092915050565b61436b81615186565b82525050565b61438261437d82615186565b615304565b82525050565b600061439382614ffa565b61439d8185615028565b93506143a883614fd5565b8060005b838110156143d95781516143c0888261434a565b97506143cb8361501b565b9250506001810190506143ac565b5085935050505092915050565b6143ef81615198565b82525050565b6143fe816151a4565b82525050565b600061440f82615005565b6144198185615039565b9350614429818560208601615225565b61443281615491565b840191505092915050565b61444681615204565b82525050565b600061445782615010565b6144618185615055565b9350614471818560208601615225565b61447a81615491565b840191505092915050565b600061449082615010565b61449a8185615066565b93506144aa818560208601615225565b80840191505092915050565b600081546144c381615258565b6144cd8186615066565b945060018216600081146144e857600181146144f95761452c565b60ff1983168652818601935061452c565b61450285614fe5565b60005b8381101561452457815481890152600182019150602081019050614505565b838801955050505b50505092915050565b6000614542601483615055565b915061454d826154af565b602082019050919050565b6000614565601383615055565b9150614570826154d8565b602082019050919050565b6000614588602b83615055565b915061459382615501565b604082019050919050565b60006145ab603283615055565b91506145b682615550565b604082019050919050565b60006145ce601f83615055565b91506145d98261559f565b602082019050919050565b60006145f1602683615055565b91506145fc826155c8565b604082019050919050565b6000614614602583615055565b915061461f82615617565b604082019050919050565b6000614637601c83615055565b915061464282615666565b602082019050919050565b600061465a602583615055565b91506146658261568f565b604082019050919050565b600061467d602483615055565b9150614688826156de565b604082019050919050565b60006146a0601983615055565b91506146ab8261572d565b602082019050919050565b60006146c3601783615055565b91506146ce82615756565b602082019050919050565b60006146e6602c83615055565b91506146f18261577f565b604082019050919050565b6000614709601d83615055565b9150614714826157ce565b602082019050919050565b600061472c601083615055565b9150614737826157f7565b602082019050919050565b600061474f603883615055565b915061475a82615820565b604082019050919050565b6000614772602a83615055565b915061477d8261586f565b604082019050919050565b6000614795602983615055565b91506147a0826158be565b604082019050919050565b60006147b8602083615055565b91506147c38261590d565b602082019050919050565b60006147db603483615055565b91506147e682615936565b604082019050919050565b60006147fe602c83615055565b915061480982615985565b604082019050919050565b6000614821602083615055565b915061482c826159d4565b602082019050919050565b6000614844602f83615055565b915061484f826159fd565b604082019050919050565b6000614867602183615055565b915061487282615a4c565b604082019050919050565b600061488a602383615055565b915061489582615a9b565b604082019050919050565b60006148ad60008361504a565b91506148b882615aea565b600082019050919050565b60006148d0603183615055565b91506148db82615aed565b604082019050919050565b60006148f3602883615055565b91506148fe82615b3c565b604082019050919050565b6000614916602c83615055565b915061492182615b8b565b604082019050919050565b6000614939601d83615055565b915061494482615bda565b602082019050919050565b600061495c602083615055565b915061496782615c03565b602082019050919050565b61497b816151fa565b82525050565b61498a816151fa565b82525050565b600061499c8284614371565b60148201915081905092915050565b60006149b78286614485565b91506149c38285614485565b91506149cf82846144b6565b9150819050949350505050565b60006149e7826148a0565b9150819050919050565b6000602082019050614a066000830184614362565b92915050565b6000608082019050614a216000830187614362565b614a2e6020830186614362565b614a3b6040830185614981565b8181036060830152614a4d8184614404565b905095945050505050565b60006020820190508181036000830152614a728184614388565b905092915050565b60006060820190508181036000830152614a948186614388565b9050614aa36020830185614981565b614ab06040830184614362565b949350505050565b6000602082019050614acd60008301846143e6565b92915050565b6000602082019050614ae860008301846143f5565b92915050565b60006020820190508181036000830152614b08818461444c565b905092915050565b60006020820190508181036000830152614b2981614535565b9050919050565b60006020820190508181036000830152614b4981614558565b9050919050565b60006020820190508181036000830152614b698161457b565b9050919050565b60006020820190508181036000830152614b898161459e565b9050919050565b60006020820190508181036000830152614ba9816145c1565b9050919050565b60006020820190508181036000830152614bc9816145e4565b9050919050565b60006020820190508181036000830152614be981614607565b9050919050565b60006020820190508181036000830152614c098161462a565b9050919050565b60006020820190508181036000830152614c298161464d565b9050919050565b60006020820190508181036000830152614c4981614670565b9050919050565b60006020820190508181036000830152614c6981614693565b9050919050565b60006020820190508181036000830152614c89816146b6565b9050919050565b60006020820190508181036000830152614ca9816146d9565b9050919050565b60006020820190508181036000830152614cc9816146fc565b9050919050565b60006020820190508181036000830152614ce98161471f565b9050919050565b60006020820190508181036000830152614d0981614742565b9050919050565b60006020820190508181036000830152614d2981614765565b9050919050565b60006020820190508181036000830152614d4981614788565b9050919050565b60006020820190508181036000830152614d69816147ab565b9050919050565b60006020820190508181036000830152614d89816147ce565b9050919050565b60006020820190508181036000830152614da9816147f1565b9050919050565b60006020820190508181036000830152614dc981614814565b9050919050565b60006020820190508181036000830152614de981614837565b9050919050565b60006020820190508181036000830152614e098161485a565b9050919050565b60006020820190508181036000830152614e298161487d565b9050919050565b60006020820190508181036000830152614e49816148c3565b9050919050565b60006020820190508181036000830152614e69816148e6565b9050919050565b60006020820190508181036000830152614e8981614909565b9050919050565b60006020820190508181036000830152614ea98161492c565b9050919050565b60006020820190508181036000830152614ec98161494f565b9050919050565b6000602082019050614ee56000830184614981565b92915050565b6000606082019050614f006000830186614981565b614f0d6020830185614362565b614f1a604083018461443d565b949350505050565b6000614f2c614f3d565b9050614f38828261528a565b919050565b6000604051905090565b600067ffffffffffffffff821115614f6257614f61615444565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f8e57614f8d615444565b5b614f9782615491565b9050602081019050919050565b600067ffffffffffffffff821115614fbf57614fbe615444565b5b614fc882615491565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061507c826151fa565b9150615087836151fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150bc576150bb615359565b5b828201905092915050565b60006150d2826151fa565b91506150dd836151fa565b9250826150ed576150ec615388565b5b828204905092915050565b6000615103826151fa565b915061510e836151fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561514757615146615359565b5b828202905092915050565b600061515d826151fa565b9150615168836151fa565b92508282101561517b5761517a615359565b5b828203905092915050565b6000615191826151da565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061520f826151fa565b9050919050565b82818337600083830152505050565b60005b83811015615243578082015181840152602081019050615228565b83811115615252576000848401525b50505050565b6000600282049050600182168061527057607f821691505b60208210811415615284576152836153b7565b5b50919050565b61529382615491565b810181811067ffffffffffffffff821117156152b2576152b1615444565b5b80604052505050565b60006152c6826151fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152f9576152f8615359565b5b600182019050919050565b600061530f82615316565b9050919050565b6000615321826154a2565b9050919050565b6000615333826151fa565b915061533e836151fa565b92508261534e5761534d615388565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5472616e73616374696f6e206661696c65642e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865727320746f206d696e74204e4654732e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656c696769626c6520746f206d696e74207468697320616c6c6f636160008201527f74696f6e2e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416c6c20737570657220626162696573206d696e746564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5375706572204261626965732073616c65206e6f742073746172746564000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e6e6f7420696e746572616374207769746820612053757065724372656160008201527f746f727320796f7520646f206e6f74206f776e2e000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f414444524553535f4e4f545f454c494749424c455f464f525f414c4c4f575f4c60008201527f4953540000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265717569726520746f6b656e206c65737320666f72206d696e74207375706560008201527f7220626162696573000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20776974686472617721000000600082015250565b7f5075626c69632073616c6520686173206e6f742073746172746564207965742e600082015250565b615c3581615186565b8114615c4057600080fd5b50565b615c4c81615198565b8114615c5757600080fd5b50565b615c63816151a4565b8114615c6e57600080fd5b50565b615c7a816151ae565b8114615c8557600080fd5b50565b615c91816151fa565b8114615c9c57600080fd5b5056fea2646970667358221220d9f5985b06e1111dda43a15b33a926dfe24520681b3ee0b133c3e6f3eae805e164736f6c63430008070033

Deployed Bytecode Sourcemap

50671:5823:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44430:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31249:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32809:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50812:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32332:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45070:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33559:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50978:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51068:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44738:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50937:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51280:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55046:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56221:270;;;:::i;:::-;;54797:63;;;;;;;;;;;;;:::i;:::-;;33969:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53839:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52791:1040;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45260:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51245:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55758:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55363:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6908:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30943:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55864:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50784:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56088:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30673:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9807:103;;;;;;;;;;;;;:::i;:::-;;55980:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54730:61;;;;;;;;;;;;;:::i;:::-;;54952:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9156:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55147:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54866:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31418:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50891:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33102:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55237:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51318:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34225:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51856:925;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51193:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50847:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54197:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55483:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33328:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51027:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51100:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55632:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10065:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44430:224;44532:4;44571:35;44556:50;;;:11;:50;;;;:90;;;;44610:36;44634:11;44610:23;:36::i;:::-;44556:90;44549:97;;44430:224;;;:::o;31249:100::-;31303:13;31336:5;31329:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31249:100;:::o;32809:221::-;32885:7;32913:16;32921:7;32913;:16::i;:::-;32905:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32998:15;:24;33014:7;32998:24;;;;;;;;;;;;;;;;;;;;;32991:31;;32809:221;;;:::o;50812:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32332:411::-;32413:13;32429:23;32444:7;32429:14;:23::i;:::-;32413:39;;32477:5;32471:11;;:2;:11;;;;32463:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32571:5;32555:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32580:37;32597:5;32604:12;:10;:12::i;:::-;32580:16;:37::i;:::-;32555:62;32533:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32714:21;32723:2;32727:7;32714:8;:21::i;:::-;32402:341;32332:411;;:::o;45070:113::-;45131:7;45158:10;:17;;;;45151:24;;45070:113;:::o;33559:339::-;33754:41;33773:12;:10;:12::i;:::-;33787:7;33754:18;:41::i;:::-;33746:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33862:28;33872:4;33878:2;33882:7;33862:9;:28::i;:::-;33559:339;;;:::o;50978:39::-;;;;:::o;51068:25::-;;;;:::o;44738:256::-;44835:7;44871:23;44888:5;44871:16;:23::i;:::-;44863:5;:31;44855:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44960:12;:19;44973:5;44960:19;;;;;;;;;;;;;;;:26;44980:5;44960:26;;;;;;;;;;;;44953:33;;44738:256;;;;:::o;50937:33::-;;;;:::o;51280:31::-;;;;;;;;;;;;;:::o;55046:95::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55129:6:::1;55110:15;;:25;;;;;;;;;;;;;;;;;;55046:95:::0;:::o;56221:270::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56275:12:::1;56290:21;56275:36;;56338:1;56328:7;:11;56320:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;56383:12;56402:10;56401:17;;56426:7;56401:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56382:56;;;56455:7;56447:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;56266:225;;56221:270::o:0;54797:63::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54842:10:::1;:8;:10::i;:::-;54797:63::o:0;33969:185::-;34107:39;34124:4;34130:2;34134:7;34107:39;;;;;;;;;;;;:16;:39::i;:::-;33969:185;;;:::o;53839:348::-;53914:16;53942:23;53968:17;53978:6;53968:9;:17::i;:::-;53942:43;;53992:25;54034:15;54020:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53992:58;;54062:9;54057:103;54077:15;54073:1;:19;54057:103;;;54122:30;54142:6;54150:1;54122:19;:30::i;:::-;54108:8;54117:1;54108:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;54094:3;;;;;:::i;:::-;;;;54057:103;;;;54173:8;54166:15;;;;53839:348;;;:::o;52791:1040::-;7234:8;:6;:8::i;:::-;7233:9;7225:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52905:21:::1;52943:17;;52929:11;;:31;;;;:::i;:::-;52905:55;;53014:1;52992:21;53002:10;52992:9;:21::i;:::-;:23;;;;:::i;:::-;52975:13;;:40;;52967:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;53073:15;;;;;;;;;;;53065:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;53155:19;;53136:17;;:38;;53128:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;53246:12;:19;53216:26;;:49;;53208:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;53316:14;53360:10;53343:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;53333:39;;;;;;53316:56;;53387:63;53406:12;;53387:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53420:21;;53443:6;53387:18;:63::i;:::-;53379:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;53503:9;53498:170;53522:12;:19;53518:1;:23;53498:170;;;53593:10;53565:38;;:24;53573:12;53586:1;53573:15;;;;;;;;:::i;:::-;;;;;;;;53565:7;:24::i;:::-;:38;;;53557:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;53543:3;;;;;:::i;:::-;;;;53498:170;;;;53674:38;53684:10;53710:1;53696:13;:15;;;;:::i;:::-;53674:9;:38::i;:::-;53758:1;53740:17;;:19;;;;:::i;:::-;53720:17;:39;;;;53771:53;53786:12;53799:13;53813:10;53771:53;;;;;;;;:::i;:::-;;;;;;;;52898:933;;52791:1040:::0;;;:::o;45260:233::-;45335:7;45371:30;:28;:30::i;:::-;45363:5;:38;45355:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45468:10;45479:5;45468:17;;;;;;;;:::i;:::-;;;;;;;;;;45461:24;;45260:233;;;:::o;51245:28::-;;;;;;;;;;;;;:::o;55758:98::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55839:11:::1;55829:7;:21;;;;;;;;;;;;:::i;:::-;;55758:98:::0;:::o;55363:113::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55461:9:::1;55439:19;:31;;;;55363:113:::0;:::o;6908:86::-;6955:4;6979:7;;;;;;;;;;;6972:14;;6908:86;:::o;30943:239::-;31015:7;31035:13;31051:7;:16;31059:7;31051:16;;;;;;;;;;;;;;;;;;;;;31035:32;;31103:1;31086:19;;:5;:19;;;;31078:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31169:5;31162:12;;;30943:239;;;:::o;55864:108::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55955:9:::1;55941:11;:23;;;;55864:108:::0;:::o;50784:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56088:126::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56197:11:::1;56173:21;:35;;;;56088:126:::0;:::o;30673:208::-;30745:7;30790:1;30773:19;;:5;:19;;;;30765:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30857:9;:16;30867:5;30857:16;;;;;;;;;;;;;;;;30850:23;;30673:208;;;:::o;9807:103::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9872:30:::1;9899:1;9872:18;:30::i;:::-;9807:103::o:0;55980:104::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56067:11:::1;56054:10;:24;;;;55980:104:::0;:::o;54730:61::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54775:8:::1;:6;:8::i;:::-;54730:61::o:0;54952:88::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55028:6:::1;55015:10;;:19;;;;;;;;;;;;;;;;;;54952:88:::0;:::o;9156:87::-;9202:7;9229:6;;;;;;;;;;;9222:13;;9156:87;:::o;55147:84::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55216:9:::1;55208:5;:17;;;;55147:84:::0;:::o;54866:78::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54932:6:::1;54921:8;;:17;;;;;;;;;;;;;;;;;;54866:78:::0;:::o;31418:104::-;31474:13;31507:7;31500:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31418:104;:::o;50891:33::-;;;;:::o;33102:155::-;33197:52;33216:12;:10;:12::i;:::-;33230:8;33240;33197:18;:52::i;:::-;33102:155;;:::o;55237:119::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55333:17:::1;55317:13;:33;;;;55237:119:::0;:::o;51318:35::-;;;;;;;;;;;;;:::o;34225:328::-;34400:41;34419:12;:10;:12::i;:::-;34433:7;34400:18;:41::i;:::-;34392:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34506:39;34520:4;34526:2;34530:7;34539:5;34506:13;:39::i;:::-;34225:328;;;;:::o;51856:925::-;7234:8;:6;:8::i;:::-;7233:9;7225:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51959:14:::1;51976:13;:11;:13::i;:::-;51959:30;;52018:1;52004:11;:15;51996:24;;;::::0;::::1;;52059:11;;52044;52035:6;:20;;;;:::i;:::-;:35;;52027:44;;;::::0;::::1;;52106:7;:5;:7::i;:::-;52092:21;;:10;:21;;;52088:524;;52149:13;;52134:11;:28;;52126:37;;;::::0;::::1;;52222:11;52199:21;52209:10;52199:9;:21::i;:::-;:34;;;;:::i;:::-;52182:13;;:51;;52174:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;52296:10;;;;;;;;;;;52288:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;52382:11;52374:5;;:19;;;;:::i;:::-;52361:9;:32;;52353:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52440:12;52482:10;52465:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;52455:39;;;;;;52440:54;;52513:50;52532:12;;52513:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52546:10;;52558:4;52513:18;:50::i;:::-;52505:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;52115:497;52088:524;52627:9;52639:1;52627:13;;52622:149;52647:11;52642:1;:16;52622:149;;52676:31;52686:10;52705:1;52698:6;:8;;;;:::i;:::-;52676:9;:31::i;:::-;52723:32;52739:1;52732:6;:8;;;;:::i;:::-;52742:10;52753:1;52723:32;;;;;;;;:::i;:::-;;;;;;;;52660:3;;;;;:::i;:::-;;;;52622:149;;;;51952:829;51856:925:::0;;;:::o;51193:43::-;;;;:::o;50847:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54197:497::-;54295:13;54336:16;54344:7;54336;:16::i;:::-;54320:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;54445:5;54433:17;;:8;;;;;;;;;;;:17;;;54430:62;;;54470:14;54463:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54430:62;54500:28;54531:10;:8;:10::i;:::-;54500:41;;54586:1;54561:14;54555:28;:32;:133;;;;;;;;;;;;;;;;;54623:14;54639:18;:7;:16;:18::i;:::-;54659:13;54606:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54555:133;54548:140;;;54197:497;;;;:::o;55483:140::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55604:13:::1;55575:26;:42;;;;55483:140:::0;:::o;33328:164::-;33425:4;33449:18;:25;33468:5;33449:25;;;;;;;;;;;;;;;:35;33475:8;33449:35;;;;;;;;;;;;;;;;;;;;;;;;;33442:42;;33328:164;;;;:::o;51027:32::-;;;;:::o;51100:36::-;;;;:::o;55632:120::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55731:15:::1;55714:14;:32;;;;;;;;;;;;:::i;:::-;;55632:120:::0;:::o;10065:201::-;9387:12;:10;:12::i;:::-;9376:23;;:7;:5;:7::i;:::-;:23;;;9368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10174:1:::1;10154:22;;:8;:22;;;;10146:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10230:28;10249:8;10230:18;:28::i;:::-;10065:201:::0;:::o;30304:305::-;30406:4;30458:25;30443:40;;;:11;:40;;;;:105;;;;30515:33;30500:48;;;:11;:48;;;;30443:105;:158;;;;30565:36;30589:11;30565:23;:36::i;:::-;30443:158;30423:178;;30304:305;;;:::o;36063:127::-;36128:4;36180:1;36152:30;;:7;:16;36160:7;36152:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36145:37;;36063:127;;;:::o;5562:98::-;5615:7;5642:10;5635:17;;5562:98;:::o;40209:174::-;40311:2;40284:15;:24;40300:7;40284:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40367:7;40363:2;40329:46;;40338:23;40353:7;40338:14;:23::i;:::-;40329:46;;;;;;;;;;;;40209:174;;:::o;36357:348::-;36450:4;36475:16;36483:7;36475;:16::i;:::-;36467:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36551:13;36567:23;36582:7;36567:14;:23::i;:::-;36551:39;;36620:5;36609:16;;:7;:16;;;:52;;;;36629:32;36646:5;36653:7;36629:16;:32::i;:::-;36609:52;:87;;;;36689:7;36665:31;;:20;36677:7;36665:11;:20::i;:::-;:31;;;36609:87;36601:96;;;36357:348;;;;:::o;39466:625::-;39625:4;39598:31;;:23;39613:7;39598:14;:23::i;:::-;:31;;;39590:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39704:1;39690:16;;:2;:16;;;;39682:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39760:39;39781:4;39787:2;39791:7;39760:20;:39::i;:::-;39864:29;39881:1;39885:7;39864:8;:29::i;:::-;39925:1;39906:9;:15;39916:4;39906:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39954:1;39937:9;:13;39947:2;39937:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39985:2;39966:7;:16;39974:7;39966:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40024:7;40020:2;40005:27;;40014:4;40005:27;;;;;;;;;;;;40045:38;40065:4;40071:2;40075:7;40045:19;:38::i;:::-;39466:625;;;:::o;7967:120::-;7511:8;:6;:8::i;:::-;7503:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8036:5:::1;8026:7;;:15;;;;;;;;;;;;;;;;;;8057:22;8066:12;:10;:12::i;:::-;8057:22;;;;;;:::i;:::-;;;;;;;;7967:120::o:0;1294:190::-;1419:4;1472;1443:25;1456:5;1463:4;1443:12;:25::i;:::-;:33;1436:40;;1294:190;;;;;:::o;37047:110::-;37123:26;37133:2;37137:7;37123:26;;;;;;;;;;;;:9;:26::i;:::-;37047:110;;:::o;10426:191::-;10500:16;10519:6;;;;;;;;;;;10500:25;;10545:8;10536:6;;:17;;;;;;;;;;;;;;;;;;10600:8;10569:40;;10590:8;10569:40;;;;;;;;;;;;10489:128;10426:191;:::o;7708:118::-;7234:8;:6;:8::i;:::-;7233:9;7225:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7778:4:::1;7768:7;;:14;;;;;;;;;;;;;;;;;;7798:20;7805:12;:10;:12::i;:::-;7798:20;;;;;;:::i;:::-;;;;;;;;7708:118::o:0;40525:315::-;40680:8;40671:17;;:5;:17;;;;40663:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40767:8;40729:18;:25;40748:5;40729:25;;;;;;;;;;;;;;;:35;40755:8;40729:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40813:8;40791:41;;40806:5;40791:41;;;40823:8;40791:41;;;;;;:::i;:::-;;;;;;;;40525:315;;;:::o;35435:::-;35592:28;35602:4;35608:2;35612:7;35592:9;:28::i;:::-;35639:48;35662:4;35668:2;35672:7;35681:5;35639:22;:48::i;:::-;35631:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35435:315;;;;:::o;51725:102::-;51785:13;51814:7;51807:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51725:102;:::o;3124:723::-;3180:13;3410:1;3401:5;:10;3397:53;;;3428:10;;;;;;;;;;;;;;;;;;;;;3397:53;3460:12;3475:5;3460:20;;3491:14;3516:78;3531:1;3523:4;:9;3516:78;;3549:8;;;;;:::i;:::-;;;;3580:2;3572:10;;;;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:39;;3654:154;3670:1;3661:5;:10;3654:154;;3698:1;3688:11;;;;;:::i;:::-;;;3765:2;3757:5;:10;;;;:::i;:::-;3744:2;:24;;;;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3794:2;3785:11;;;;;:::i;:::-;;;3654:154;;;3832:6;3818:21;;;;;3124:723;;;;:::o;21963:157::-;22048:4;22087:25;22072:40;;;:11;:40;;;;22065:47;;21963:157;;;:::o;46106:589::-;46250:45;46277:4;46283:2;46287:7;46250:26;:45::i;:::-;46328:1;46312:18;;:4;:18;;;46308:187;;;46347:40;46379:7;46347:31;:40::i;:::-;46308:187;;;46417:2;46409:10;;:4;:10;;;46405:90;;46436:47;46469:4;46475:7;46436:32;:47::i;:::-;46405:90;46308:187;46523:1;46509:16;;:2;:16;;;46505:183;;;46542:45;46579:7;46542:36;:45::i;:::-;46505:183;;;46615:4;46609:10;;:2;:10;;;46605:83;;46636:40;46664:2;46668:7;46636:27;:40::i;:::-;46605:83;46505:183;46106:589;;;:::o;43287:125::-;;;;:::o;1845:675::-;1928:7;1948:20;1971:4;1948:27;;1991:9;1986:497;2010:5;:12;2006:1;:16;1986:497;;;2044:20;2067:5;2073:1;2067:8;;;;;;;;:::i;:::-;;;;;;;;2044:31;;2110:12;2094;:28;2090:382;;2237:42;2252:12;2266;2237:14;:42::i;:::-;2222:57;;2090:382;;;2414:42;2429:12;2443;2414:14;:42::i;:::-;2399:57;;2090:382;2029:454;2024:3;;;;;:::i;:::-;;;;1986:497;;;;2500:12;2493:19;;;1845:675;;;;:::o;37384:321::-;37514:18;37520:2;37524:7;37514:5;:18::i;:::-;37565:54;37596:1;37600:2;37604:7;37613:5;37565:22;:54::i;:::-;37543:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37384:321;;;:::o;41405:799::-;41560:4;41581:15;:2;:13;;;:15::i;:::-;41577:620;;;41633:2;41617:36;;;41654:12;:10;:12::i;:::-;41668:4;41674:7;41683:5;41617:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41613:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41876:1;41859:6;:13;:18;41855:272;;;41902:60;;;;;;;;;;:::i;:::-;;;;;;;;41855:272;42077:6;42071:13;42062:6;42058:2;42054:15;42047:38;41613:529;41750:41;;;41740:51;;;:6;:51;;;;41733:58;;;;;41577:620;42181:4;42174:11;;41405:799;;;;;;;:::o;42776:126::-;;;;:::o;47418:164::-;47522:10;:17;;;;47495:15;:24;47511:7;47495:24;;;;;;;;;;;:44;;;;47550:10;47566:7;47550:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47418:164;:::o;48209:988::-;48475:22;48525:1;48500:22;48517:4;48500:16;:22::i;:::-;:26;;;;:::i;:::-;48475:51;;48537:18;48558:17;:26;48576:7;48558:26;;;;;;;;;;;;48537:47;;48705:14;48691:10;:28;48687:328;;48736:19;48758:12;:18;48771:4;48758:18;;;;;;;;;;;;;;;:34;48777:14;48758:34;;;;;;;;;;;;48736:56;;48842:11;48809:12;:18;48822:4;48809:18;;;;;;;;;;;;;;;:30;48828:10;48809:30;;;;;;;;;;;:44;;;;48959:10;48926:17;:30;48944:11;48926:30;;;;;;;;;;;:43;;;;48721:294;48687:328;49111:17;:26;49129:7;49111:26;;;;;;;;;;;49104:33;;;49155:12;:18;49168:4;49155:18;;;;;;;;;;;;;;;:34;49174:14;49155:34;;;;;;;;;;;49148:41;;;48290:907;;48209:988;;:::o;49492:1079::-;49745:22;49790:1;49770:10;:17;;;;:21;;;;:::i;:::-;49745:46;;49802:18;49823:15;:24;49839:7;49823:24;;;;;;;;;;;;49802:45;;50174:19;50196:10;50207:14;50196:26;;;;;;;;:::i;:::-;;;;;;;;;;50174:48;;50260:11;50235:10;50246;50235:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;50371:10;50340:15;:28;50356:11;50340:28;;;;;;;;;;;:41;;;;50512:15;:24;50528:7;50512:24;;;;;;;;;;;50505:31;;;50547:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49563:1008;;;49492:1079;:::o;46996:221::-;47081:14;47098:20;47115:2;47098:16;:20::i;:::-;47081:37;;47156:7;47129:12;:16;47142:2;47129:16;;;;;;;;;;;;;;;:24;47146:6;47129:24;;;;;;;;;;;:34;;;;47203:6;47174:17;:26;47192:7;47174:26;;;;;;;;;;;:35;;;;47070:147;46996:221;;:::o;2528:224::-;2596:13;2659:1;2653:4;2646:15;2688:1;2682:4;2675:15;2729:4;2723;2713:21;2704:30;;2528:224;;;;:::o;38041:439::-;38135:1;38121:16;;:2;:16;;;;38113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38194:16;38202:7;38194;:16::i;:::-;38193:17;38185:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38256:45;38285:1;38289:2;38293:7;38256:20;:45::i;:::-;38331:1;38314:9;:13;38324:2;38314:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38362:2;38343:7;:16;38351:7;38343:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38407:7;38403:2;38382:33;;38399:1;38382:33;;;;;;;;;;;;38428:44;38456:1;38460:2;38464:7;38428:19;:44::i;:::-;38041:439;;:::o;11857:326::-;11917:4;12174:1;12152:7;:19;;;:23;12145:30;;11857: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;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:914::-;7614:6;7622;7630;7679:2;7667:9;7658:7;7654:23;7650:32;7647:119;;;7685:79;;:::i;:::-;7647:119;7833:1;7822:9;7818:17;7805:31;7863:18;7855:6;7852:30;7849:117;;;7885:79;;:::i;:::-;7849:117;7990:78;8060:7;8051:6;8040:9;8036:22;7990:78;:::i;:::-;7980:88;;7776:302;8145:2;8134:9;8130:18;8117:32;8176:18;8168:6;8165:30;8162:117;;;8198:79;;:::i;:::-;8162:117;8311:80;8383:7;8374:6;8363:9;8359:22;8311:80;:::i;:::-;8293:98;;;;8088:313;7494:914;;;;;:::o;8414:323::-;8470:6;8519:2;8507:9;8498:7;8494:23;8490:32;8487:119;;;8525:79;;:::i;:::-;8487:119;8645:1;8670:50;8712:7;8703:6;8692:9;8688:22;8670:50;:::i;:::-;8660:60;;8616:114;8414:323;;;;:::o;8743:329::-;8802:6;8851:2;8839:9;8830:7;8826:23;8822:32;8819:119;;;8857:79;;:::i;:::-;8819:119;8977:1;9002:53;9047:7;9038:6;9027:9;9023:22;9002:53;:::i;:::-;8992:63;;8948:117;8743:329;;;;:::o;9078:327::-;9136:6;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:52;9380:7;9371:6;9360:9;9356:22;9336:52;:::i;:::-;9326:62;;9282:116;9078:327;;;;:::o;9411:349::-;9480:6;9529:2;9517:9;9508:7;9504:23;9500:32;9497:119;;;9535:79;;:::i;:::-;9497:119;9655:1;9680:63;9735:7;9726:6;9715:9;9711:22;9680:63;:::i;:::-;9670:73;;9626:127;9411:349;;;;:::o;9766:509::-;9835:6;9884:2;9872:9;9863:7;9859:23;9855:32;9852:119;;;9890:79;;:::i;:::-;9852:119;10038:1;10027:9;10023:17;10010:31;10068:18;10060:6;10057:30;10054:117;;;10090:79;;:::i;:::-;10054:117;10195:63;10250:7;10241:6;10230:9;10226:22;10195:63;:::i;:::-;10185:73;;9981:287;9766:509;;;;:::o;10281:329::-;10340:6;10389:2;10377:9;10368:7;10364:23;10360:32;10357:119;;;10395:79;;:::i;:::-;10357:119;10515:1;10540:53;10585:7;10576:6;10565:9;10561:22;10540:53;:::i;:::-;10530:63;;10486:117;10281:329;;;;:::o;10616:704::-;10711:6;10719;10727;10776:2;10764:9;10755:7;10751:23;10747:32;10744:119;;;10782:79;;:::i;:::-;10744:119;10902:1;10927:53;10972:7;10963:6;10952:9;10948:22;10927:53;:::i;:::-;10917:63;;10873:117;11057:2;11046:9;11042:18;11029:32;11088:18;11080:6;11077:30;11074:117;;;11110:79;;:::i;:::-;11074:117;11223:80;11295:7;11286:6;11275:9;11271:22;11223:80;:::i;:::-;11205:98;;;;11000:313;10616:704;;;;;:::o;11326:179::-;11395:10;11416:46;11458:3;11450:6;11416:46;:::i;:::-;11494:4;11489:3;11485:14;11471:28;;11326:179;;;;:::o;11511:118::-;11598:24;11616:5;11598:24;:::i;:::-;11593:3;11586:37;11511:118;;:::o;11635:157::-;11740:45;11760:24;11778:5;11760:24;:::i;:::-;11740:45;:::i;:::-;11735:3;11728:58;11635:157;;:::o;11828:732::-;11947:3;11976:54;12024:5;11976:54;:::i;:::-;12046:86;12125:6;12120:3;12046:86;:::i;:::-;12039:93;;12156:56;12206:5;12156:56;:::i;:::-;12235:7;12266:1;12251:284;12276:6;12273:1;12270:13;12251:284;;;12352:6;12346:13;12379:63;12438:3;12423:13;12379:63;:::i;:::-;12372:70;;12465:60;12518:6;12465:60;:::i;:::-;12455:70;;12311:224;12298:1;12295;12291:9;12286:14;;12251:284;;;12255:14;12551:3;12544:10;;11952:608;;;11828:732;;;;:::o;12566:109::-;12647:21;12662:5;12647:21;:::i;:::-;12642:3;12635:34;12566:109;;:::o;12681:118::-;12768:24;12786:5;12768:24;:::i;:::-;12763:3;12756:37;12681:118;;:::o;12805:360::-;12891:3;12919:38;12951:5;12919:38;:::i;:::-;12973:70;13036:6;13031:3;12973:70;:::i;:::-;12966:77;;13052:52;13097:6;13092:3;13085:4;13078:5;13074:16;13052:52;:::i;:::-;13129:29;13151:6;13129:29;:::i;:::-;13124:3;13120:39;13113:46;;12895:270;12805:360;;;;:::o;13171:147::-;13266:45;13305:5;13266:45;:::i;:::-;13261:3;13254:58;13171:147;;:::o;13324:364::-;13412:3;13440:39;13473:5;13440:39;:::i;:::-;13495:71;13559:6;13554:3;13495:71;:::i;:::-;13488:78;;13575:52;13620:6;13615:3;13608:4;13601:5;13597:16;13575:52;:::i;:::-;13652:29;13674:6;13652:29;:::i;:::-;13647:3;13643:39;13636:46;;13416:272;13324:364;;;;:::o;13694:377::-;13800:3;13828:39;13861:5;13828:39;:::i;:::-;13883:89;13965:6;13960:3;13883:89;:::i;:::-;13876:96;;13981:52;14026:6;14021:3;14014:4;14007:5;14003:16;13981:52;:::i;:::-;14058:6;14053:3;14049:16;14042:23;;13804:267;13694:377;;;;:::o;14101:845::-;14204:3;14241:5;14235:12;14270:36;14296:9;14270:36;:::i;:::-;14322:89;14404:6;14399:3;14322:89;:::i;:::-;14315:96;;14442:1;14431:9;14427:17;14458:1;14453:137;;;;14604:1;14599:341;;;;14420:520;;14453:137;14537:4;14533:9;14522;14518:25;14513:3;14506:38;14573:6;14568:3;14564:16;14557:23;;14453:137;;14599:341;14666:38;14698:5;14666:38;:::i;:::-;14726:1;14740:154;14754:6;14751:1;14748:13;14740:154;;;14828:7;14822:14;14818:1;14813:3;14809:11;14802:35;14878:1;14869:7;14865:15;14854:26;;14776:4;14773:1;14769:12;14764:17;;14740:154;;;14923:6;14918:3;14914:16;14907:23;;14606:334;;14420:520;;14208:738;;14101:845;;;;:::o;14952:366::-;15094:3;15115:67;15179:2;15174:3;15115:67;:::i;:::-;15108:74;;15191:93;15280:3;15191:93;:::i;:::-;15309:2;15304:3;15300:12;15293:19;;14952:366;;;:::o;15324:::-;15466:3;15487:67;15551:2;15546:3;15487:67;:::i;:::-;15480:74;;15563:93;15652:3;15563:93;:::i;:::-;15681:2;15676:3;15672:12;15665:19;;15324:366;;;:::o;15696:::-;15838:3;15859:67;15923:2;15918:3;15859:67;:::i;:::-;15852:74;;15935:93;16024:3;15935:93;:::i;:::-;16053:2;16048:3;16044:12;16037:19;;15696:366;;;:::o;16068:::-;16210:3;16231:67;16295:2;16290:3;16231:67;:::i;:::-;16224:74;;16307:93;16396:3;16307:93;:::i;:::-;16425:2;16420:3;16416:12;16409:19;;16068:366;;;:::o;16440:::-;16582:3;16603:67;16667:2;16662:3;16603:67;:::i;:::-;16596:74;;16679:93;16768:3;16679:93;:::i;:::-;16797:2;16792:3;16788:12;16781:19;;16440:366;;;:::o;16812:::-;16954:3;16975:67;17039:2;17034:3;16975:67;:::i;:::-;16968:74;;17051:93;17140:3;17051:93;:::i;:::-;17169:2;17164:3;17160:12;17153:19;;16812:366;;;:::o;17184:::-;17326:3;17347:67;17411:2;17406:3;17347:67;:::i;:::-;17340:74;;17423:93;17512:3;17423:93;:::i;:::-;17541:2;17536:3;17532:12;17525:19;;17184:366;;;:::o;17556:::-;17698:3;17719:67;17783:2;17778:3;17719:67;:::i;:::-;17712:74;;17795:93;17884:3;17795:93;:::i;:::-;17913:2;17908:3;17904:12;17897:19;;17556:366;;;:::o;17928:::-;18070:3;18091:67;18155:2;18150:3;18091:67;:::i;:::-;18084:74;;18167:93;18256:3;18167:93;:::i;:::-;18285:2;18280:3;18276:12;18269:19;;17928:366;;;:::o;18300:::-;18442:3;18463:67;18527:2;18522:3;18463:67;:::i;:::-;18456:74;;18539:93;18628:3;18539:93;:::i;:::-;18657:2;18652:3;18648:12;18641:19;;18300:366;;;:::o;18672:::-;18814:3;18835:67;18899:2;18894:3;18835:67;:::i;:::-;18828:74;;18911:93;19000:3;18911:93;:::i;:::-;19029:2;19024:3;19020:12;19013:19;;18672:366;;;:::o;19044:::-;19186:3;19207:67;19271:2;19266:3;19207:67;:::i;:::-;19200:74;;19283:93;19372:3;19283:93;:::i;:::-;19401:2;19396:3;19392:12;19385:19;;19044:366;;;:::o;19416:::-;19558:3;19579:67;19643:2;19638:3;19579:67;:::i;:::-;19572:74;;19655:93;19744:3;19655:93;:::i;:::-;19773:2;19768:3;19764:12;19757:19;;19416:366;;;:::o;19788:::-;19930:3;19951:67;20015:2;20010:3;19951:67;:::i;:::-;19944:74;;20027:93;20116:3;20027:93;:::i;:::-;20145:2;20140:3;20136:12;20129:19;;19788:366;;;:::o;20160:::-;20302:3;20323:67;20387:2;20382:3;20323:67;:::i;:::-;20316:74;;20399:93;20488:3;20399:93;:::i;:::-;20517:2;20512:3;20508:12;20501:19;;20160:366;;;:::o;20532:::-;20674:3;20695:67;20759:2;20754:3;20695:67;:::i;:::-;20688:74;;20771:93;20860:3;20771:93;:::i;:::-;20889:2;20884:3;20880:12;20873:19;;20532:366;;;:::o;20904:::-;21046:3;21067:67;21131:2;21126:3;21067:67;:::i;:::-;21060:74;;21143:93;21232:3;21143:93;:::i;:::-;21261:2;21256:3;21252:12;21245:19;;20904:366;;;:::o;21276:::-;21418:3;21439:67;21503:2;21498:3;21439:67;:::i;:::-;21432:74;;21515:93;21604:3;21515:93;:::i;:::-;21633:2;21628:3;21624:12;21617:19;;21276:366;;;:::o;21648:::-;21790:3;21811:67;21875:2;21870:3;21811:67;:::i;:::-;21804:74;;21887:93;21976:3;21887:93;:::i;:::-;22005:2;22000:3;21996:12;21989:19;;21648:366;;;:::o;22020:::-;22162:3;22183:67;22247:2;22242:3;22183:67;:::i;:::-;22176:74;;22259:93;22348:3;22259:93;:::i;:::-;22377:2;22372:3;22368:12;22361:19;;22020:366;;;:::o;22392:::-;22534:3;22555:67;22619:2;22614:3;22555:67;:::i;:::-;22548:74;;22631:93;22720:3;22631:93;:::i;:::-;22749:2;22744:3;22740:12;22733:19;;22392:366;;;:::o;22764:::-;22906:3;22927:67;22991:2;22986:3;22927:67;:::i;:::-;22920:74;;23003:93;23092:3;23003:93;:::i;:::-;23121:2;23116:3;23112:12;23105:19;;22764:366;;;:::o;23136:::-;23278:3;23299:67;23363:2;23358:3;23299:67;:::i;:::-;23292:74;;23375:93;23464:3;23375:93;:::i;:::-;23493:2;23488:3;23484:12;23477:19;;23136:366;;;:::o;23508:::-;23650:3;23671:67;23735:2;23730:3;23671:67;:::i;:::-;23664:74;;23747:93;23836:3;23747:93;:::i;:::-;23865:2;23860:3;23856:12;23849:19;;23508:366;;;:::o;23880:::-;24022:3;24043:67;24107:2;24102:3;24043:67;:::i;:::-;24036:74;;24119:93;24208:3;24119:93;:::i;:::-;24237:2;24232:3;24228:12;24221:19;;23880:366;;;:::o;24252:398::-;24411:3;24432:83;24513:1;24508:3;24432:83;:::i;:::-;24425:90;;24524:93;24613:3;24524:93;:::i;:::-;24642:1;24637:3;24633:11;24626:18;;24252:398;;;:::o;24656:366::-;24798:3;24819:67;24883:2;24878:3;24819:67;:::i;:::-;24812:74;;24895:93;24984:3;24895:93;:::i;:::-;25013:2;25008:3;25004:12;24997:19;;24656:366;;;:::o;25028:::-;25170:3;25191:67;25255:2;25250:3;25191:67;:::i;:::-;25184:74;;25267:93;25356:3;25267:93;:::i;:::-;25385:2;25380:3;25376:12;25369:19;;25028:366;;;:::o;25400:::-;25542:3;25563:67;25627:2;25622:3;25563:67;:::i;:::-;25556:74;;25639:93;25728:3;25639:93;:::i;:::-;25757:2;25752:3;25748:12;25741:19;;25400:366;;;:::o;25772:::-;25914:3;25935:67;25999:2;25994:3;25935:67;:::i;:::-;25928:74;;26011:93;26100:3;26011:93;:::i;:::-;26129:2;26124:3;26120:12;26113:19;;25772:366;;;:::o;26144:::-;26286:3;26307:67;26371:2;26366:3;26307:67;:::i;:::-;26300:74;;26383:93;26472:3;26383:93;:::i;:::-;26501:2;26496:3;26492:12;26485:19;;26144:366;;;:::o;26516:108::-;26593:24;26611:5;26593:24;:::i;:::-;26588:3;26581:37;26516:108;;:::o;26630:118::-;26717:24;26735:5;26717:24;:::i;:::-;26712:3;26705:37;26630:118;;:::o;26754:256::-;26866:3;26881:75;26952:3;26943:6;26881:75;:::i;:::-;26981:2;26976:3;26972:12;26965:19;;27001:3;26994:10;;26754:256;;;;:::o;27016:589::-;27241:3;27263:95;27354:3;27345:6;27263:95;:::i;:::-;27256:102;;27375:95;27466:3;27457:6;27375:95;:::i;:::-;27368:102;;27487:92;27575:3;27566:6;27487:92;:::i;:::-;27480:99;;27596:3;27589:10;;27016:589;;;;;;:::o;27611:379::-;27795:3;27817:147;27960:3;27817:147;:::i;:::-;27810:154;;27981:3;27974:10;;27611:379;;;:::o;27996:222::-;28089:4;28127:2;28116:9;28112:18;28104:26;;28140:71;28208:1;28197:9;28193:17;28184:6;28140:71;:::i;:::-;27996:222;;;;:::o;28224:640::-;28419:4;28457:3;28446:9;28442:19;28434:27;;28471:71;28539:1;28528:9;28524:17;28515:6;28471:71;:::i;:::-;28552:72;28620:2;28609:9;28605:18;28596:6;28552:72;:::i;:::-;28634;28702:2;28691:9;28687:18;28678:6;28634:72;:::i;:::-;28753:9;28747:4;28743:20;28738:2;28727:9;28723:18;28716:48;28781:76;28852:4;28843:6;28781:76;:::i;:::-;28773:84;;28224:640;;;;;;;:::o;28870:373::-;29013:4;29051:2;29040:9;29036:18;29028:26;;29100:9;29094:4;29090:20;29086:1;29075:9;29071:17;29064:47;29128:108;29231:4;29222:6;29128:108;:::i;:::-;29120:116;;28870:373;;;;:::o;29249:593::-;29448:4;29486:2;29475:9;29471:18;29463:26;;29535:9;29529:4;29525:20;29521:1;29510:9;29506:17;29499:47;29563:108;29666:4;29657:6;29563:108;:::i;:::-;29555:116;;29681:72;29749:2;29738:9;29734:18;29725:6;29681:72;:::i;:::-;29763;29831:2;29820:9;29816:18;29807:6;29763:72;:::i;:::-;29249:593;;;;;;:::o;29848:210::-;29935:4;29973:2;29962:9;29958:18;29950:26;;29986:65;30048:1;30037:9;30033:17;30024:6;29986:65;:::i;:::-;29848:210;;;;:::o;30064:222::-;30157:4;30195:2;30184:9;30180:18;30172:26;;30208:71;30276:1;30265:9;30261:17;30252:6;30208:71;:::i;:::-;30064:222;;;;:::o;30292:313::-;30405:4;30443:2;30432:9;30428:18;30420:26;;30492:9;30486:4;30482:20;30478:1;30467:9;30463:17;30456:47;30520:78;30593:4;30584:6;30520:78;:::i;:::-;30512:86;;30292:313;;;;:::o;30611:419::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:::-;31202:4;31240:2;31229:9;31225:18;31217:26;;31289:9;31283:4;31279:20;31275:1;31264:9;31260:17;31253:47;31317:131;31443:4;31317:131;:::i;:::-;31309:139;;31036:419;;;:::o;31461:::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31714:9;31708:4;31704:20;31700:1;31689:9;31685:17;31678:47;31742:131;31868:4;31742:131;:::i;:::-;31734:139;;31461:419;;;:::o;31886:::-;32052:4;32090:2;32079:9;32075:18;32067:26;;32139:9;32133:4;32129:20;32125:1;32114:9;32110:17;32103:47;32167:131;32293:4;32167:131;:::i;:::-;32159:139;;31886:419;;;:::o;32311:::-;32477:4;32515:2;32504:9;32500:18;32492:26;;32564:9;32558:4;32554:20;32550:1;32539:9;32535:17;32528:47;32592:131;32718:4;32592:131;:::i;:::-;32584:139;;32311:419;;;:::o;32736:::-;32902:4;32940:2;32929:9;32925:18;32917:26;;32989:9;32983:4;32979:20;32975:1;32964:9;32960:17;32953:47;33017:131;33143:4;33017:131;:::i;:::-;33009:139;;32736:419;;;:::o;33161:::-;33327:4;33365:2;33354:9;33350:18;33342:26;;33414:9;33408:4;33404:20;33400:1;33389:9;33385:17;33378:47;33442:131;33568:4;33442:131;:::i;:::-;33434:139;;33161:419;;;:::o;33586:::-;33752:4;33790:2;33779:9;33775:18;33767:26;;33839:9;33833:4;33829:20;33825:1;33814:9;33810:17;33803:47;33867:131;33993:4;33867:131;:::i;:::-;33859:139;;33586:419;;;:::o;34011:::-;34177:4;34215:2;34204:9;34200:18;34192:26;;34264:9;34258:4;34254:20;34250:1;34239:9;34235:17;34228:47;34292:131;34418:4;34292:131;:::i;:::-;34284:139;;34011:419;;;:::o;34436:::-;34602:4;34640:2;34629:9;34625:18;34617:26;;34689:9;34683:4;34679:20;34675:1;34664:9;34660:17;34653:47;34717:131;34843:4;34717:131;:::i;:::-;34709:139;;34436:419;;;:::o;34861:::-;35027:4;35065:2;35054:9;35050:18;35042:26;;35114:9;35108:4;35104:20;35100:1;35089:9;35085:17;35078:47;35142:131;35268:4;35142:131;:::i;:::-;35134:139;;34861:419;;;:::o;35286:::-;35452:4;35490:2;35479:9;35475:18;35467:26;;35539:9;35533:4;35529:20;35525:1;35514:9;35510:17;35503:47;35567:131;35693:4;35567:131;:::i;:::-;35559:139;;35286:419;;;:::o;35711:::-;35877:4;35915:2;35904:9;35900:18;35892:26;;35964:9;35958:4;35954:20;35950:1;35939:9;35935:17;35928:47;35992:131;36118:4;35992:131;:::i;:::-;35984:139;;35711:419;;;:::o;36136:::-;36302:4;36340:2;36329:9;36325:18;36317:26;;36389:9;36383:4;36379:20;36375:1;36364:9;36360:17;36353:47;36417:131;36543:4;36417:131;:::i;:::-;36409:139;;36136:419;;;:::o;36561:::-;36727:4;36765:2;36754:9;36750:18;36742:26;;36814:9;36808:4;36804:20;36800:1;36789:9;36785:17;36778:47;36842:131;36968:4;36842:131;:::i;:::-;36834:139;;36561:419;;;:::o;36986:::-;37152:4;37190:2;37179:9;37175:18;37167:26;;37239:9;37233:4;37229:20;37225:1;37214:9;37210:17;37203:47;37267:131;37393:4;37267:131;:::i;:::-;37259:139;;36986:419;;;:::o;37411:::-;37577:4;37615:2;37604:9;37600:18;37592:26;;37664:9;37658:4;37654:20;37650:1;37639:9;37635:17;37628:47;37692:131;37818:4;37692:131;:::i;:::-;37684:139;;37411:419;;;:::o;37836:::-;38002:4;38040:2;38029:9;38025:18;38017:26;;38089:9;38083:4;38079:20;38075:1;38064:9;38060:17;38053:47;38117:131;38243:4;38117:131;:::i;:::-;38109:139;;37836:419;;;:::o;38261:::-;38427:4;38465:2;38454:9;38450:18;38442:26;;38514:9;38508:4;38504:20;38500:1;38489:9;38485:17;38478:47;38542:131;38668:4;38542:131;:::i;:::-;38534:139;;38261:419;;;:::o;38686:::-;38852:4;38890:2;38879:9;38875:18;38867:26;;38939:9;38933:4;38929:20;38925:1;38914:9;38910:17;38903:47;38967:131;39093:4;38967:131;:::i;:::-;38959:139;;38686:419;;;:::o;39111:::-;39277:4;39315:2;39304:9;39300:18;39292:26;;39364:9;39358:4;39354:20;39350:1;39339:9;39335:17;39328:47;39392:131;39518:4;39392:131;:::i;:::-;39384:139;;39111:419;;;:::o;39536:::-;39702:4;39740:2;39729:9;39725:18;39717:26;;39789:9;39783:4;39779:20;39775:1;39764:9;39760:17;39753:47;39817:131;39943:4;39817:131;:::i;:::-;39809:139;;39536:419;;;:::o;39961:::-;40127:4;40165:2;40154:9;40150:18;40142:26;;40214:9;40208:4;40204:20;40200:1;40189:9;40185:17;40178:47;40242:131;40368:4;40242:131;:::i;:::-;40234:139;;39961:419;;;:::o;40386:::-;40552:4;40590:2;40579:9;40575:18;40567:26;;40639:9;40633:4;40629:20;40625:1;40614:9;40610:17;40603:47;40667:131;40793:4;40667:131;:::i;:::-;40659:139;;40386:419;;;:::o;40811:::-;40977:4;41015:2;41004:9;41000:18;40992:26;;41064:9;41058:4;41054:20;41050:1;41039:9;41035:17;41028:47;41092:131;41218:4;41092:131;:::i;:::-;41084:139;;40811:419;;;:::o;41236:::-;41402:4;41440:2;41429:9;41425:18;41417:26;;41489:9;41483:4;41479:20;41475:1;41464:9;41460:17;41453:47;41517:131;41643:4;41517:131;:::i;:::-;41509:139;;41236:419;;;:::o;41661:::-;41827:4;41865:2;41854:9;41850:18;41842:26;;41914:9;41908:4;41904:20;41900:1;41889:9;41885:17;41878:47;41942:131;42068:4;41942:131;:::i;:::-;41934:139;;41661:419;;;:::o;42086:::-;42252:4;42290:2;42279:9;42275:18;42267:26;;42339:9;42333:4;42329:20;42325:1;42314:9;42310:17;42303:47;42367:131;42493:4;42367:131;:::i;:::-;42359:139;;42086:419;;;:::o;42511:::-;42677:4;42715:2;42704:9;42700:18;42692:26;;42764:9;42758:4;42754:20;42750:1;42739:9;42735:17;42728:47;42792:131;42918:4;42792:131;:::i;:::-;42784:139;;42511:419;;;:::o;42936:::-;43102:4;43140:2;43129:9;43125:18;43117:26;;43189:9;43183:4;43179:20;43175:1;43164:9;43160:17;43153:47;43217:131;43343:4;43217:131;:::i;:::-;43209:139;;42936:419;;;:::o;43361:222::-;43454:4;43492:2;43481:9;43477:18;43469:26;;43505:71;43573:1;43562:9;43558:17;43549:6;43505:71;:::i;:::-;43361:222;;;;:::o;43589:458::-;43746:4;43784:2;43773:9;43769:18;43761:26;;43797:71;43865:1;43854:9;43850:17;43841:6;43797:71;:::i;:::-;43878:72;43946:2;43935:9;43931:18;43922:6;43878:72;:::i;:::-;43960:80;44036:2;44025:9;44021:18;44012:6;43960:80;:::i;:::-;43589:458;;;;;;:::o;44053:129::-;44087:6;44114:20;;:::i;:::-;44104:30;;44143:33;44171:4;44163:6;44143:33;:::i;:::-;44053:129;;;:::o;44188:75::-;44221:6;44254:2;44248:9;44238:19;;44188:75;:::o;44269:311::-;44346:4;44436:18;44428:6;44425:30;44422:56;;;44458:18;;:::i;:::-;44422:56;44508:4;44500:6;44496:17;44488:25;;44568:4;44562;44558:15;44550:23;;44269:311;;;:::o;44586:307::-;44647:4;44737:18;44729:6;44726:30;44723:56;;;44759:18;;:::i;:::-;44723:56;44797:29;44819:6;44797:29;:::i;:::-;44789:37;;44881:4;44875;44871:15;44863:23;;44586:307;;;:::o;44899:308::-;44961:4;45051:18;45043:6;45040:30;45037:56;;;45073:18;;:::i;:::-;45037:56;45111:29;45133:6;45111:29;:::i;:::-;45103:37;;45195:4;45189;45185:15;45177:23;;44899:308;;;:::o;45213:132::-;45280:4;45303:3;45295:11;;45333:4;45328:3;45324:14;45316:22;;45213:132;;;:::o;45351:141::-;45400:4;45423:3;45415:11;;45446:3;45443:1;45436:14;45480:4;45477:1;45467:18;45459:26;;45351:141;;;:::o;45498:114::-;45565:6;45599:5;45593:12;45583:22;;45498:114;;;:::o;45618:98::-;45669:6;45703:5;45697:12;45687:22;;45618:98;;;:::o;45722:99::-;45774:6;45808:5;45802:12;45792:22;;45722:99;;;:::o;45827:113::-;45897:4;45929;45924:3;45920:14;45912:22;;45827:113;;;:::o;45946:184::-;46045:11;46079:6;46074:3;46067:19;46119:4;46114:3;46110:14;46095:29;;45946:184;;;;:::o;46136:168::-;46219:11;46253:6;46248:3;46241:19;46293:4;46288:3;46284:14;46269:29;;46136:168;;;;:::o;46310:147::-;46411:11;46448:3;46433:18;;46310:147;;;;:::o;46463:169::-;46547:11;46581:6;46576:3;46569:19;46621:4;46616:3;46612:14;46597:29;;46463:169;;;;:::o;46638:148::-;46740:11;46777:3;46762:18;;46638:148;;;;:::o;46792:305::-;46832:3;46851:20;46869:1;46851:20;:::i;:::-;46846:25;;46885:20;46903:1;46885:20;:::i;:::-;46880:25;;47039:1;46971:66;46967:74;46964:1;46961:81;46958:107;;;47045:18;;:::i;:::-;46958:107;47089:1;47086;47082:9;47075:16;;46792:305;;;;:::o;47103:185::-;47143:1;47160:20;47178:1;47160:20;:::i;:::-;47155:25;;47194:20;47212:1;47194:20;:::i;:::-;47189:25;;47233:1;47223:35;;47238:18;;:::i;:::-;47223:35;47280:1;47277;47273:9;47268:14;;47103:185;;;;:::o;47294:348::-;47334:7;47357:20;47375:1;47357:20;:::i;:::-;47352:25;;47391:20;47409:1;47391:20;:::i;:::-;47386:25;;47579:1;47511:66;47507:74;47504:1;47501:81;47496:1;47489:9;47482:17;47478:105;47475:131;;;47586:18;;:::i;:::-;47475:131;47634:1;47631;47627:9;47616:20;;47294:348;;;;:::o;47648:191::-;47688:4;47708:20;47726:1;47708:20;:::i;:::-;47703:25;;47742:20;47760:1;47742:20;:::i;:::-;47737:25;;47781:1;47778;47775:8;47772:34;;;47786:18;;:::i;:::-;47772:34;47831:1;47828;47824:9;47816:17;;47648:191;;;;:::o;47845:96::-;47882:7;47911:24;47929:5;47911:24;:::i;:::-;47900:35;;47845:96;;;:::o;47947:90::-;47981:7;48024:5;48017:13;48010:21;47999:32;;47947:90;;;:::o;48043:77::-;48080:7;48109:5;48098:16;;48043:77;;;:::o;48126:149::-;48162:7;48202:66;48195:5;48191:78;48180:89;;48126:149;;;:::o;48281:126::-;48318:7;48358:42;48351:5;48347:54;48336:65;;48281:126;;;:::o;48413:77::-;48450:7;48479:5;48468:16;;48413:77;;;:::o;48496:121::-;48554:9;48587:24;48605:5;48587:24;:::i;:::-;48574:37;;48496:121;;;:::o;48623:154::-;48707:6;48702:3;48697;48684:30;48769:1;48760:6;48755:3;48751:16;48744:27;48623:154;;;:::o;48783:307::-;48851:1;48861:113;48875:6;48872:1;48869:13;48861:113;;;48960:1;48955:3;48951:11;48945:18;48941:1;48936:3;48932:11;48925:39;48897:2;48894:1;48890:10;48885:15;;48861:113;;;48992:6;48989:1;48986:13;48983:101;;;49072:1;49063:6;49058:3;49054:16;49047:27;48983:101;48832:258;48783:307;;;:::o;49096:320::-;49140:6;49177:1;49171:4;49167:12;49157:22;;49224:1;49218:4;49214:12;49245:18;49235:81;;49301:4;49293:6;49289:17;49279:27;;49235:81;49363:2;49355:6;49352:14;49332:18;49329:38;49326:84;;;49382:18;;:::i;:::-;49326:84;49147:269;49096:320;;;:::o;49422:281::-;49505:27;49527:4;49505:27;:::i;:::-;49497:6;49493:40;49635:6;49623:10;49620:22;49599:18;49587:10;49584:34;49581:62;49578:88;;;49646:18;;:::i;:::-;49578:88;49686:10;49682:2;49675:22;49465:238;49422:281;;:::o;49709:233::-;49748:3;49771:24;49789:5;49771:24;:::i;:::-;49762:33;;49817:66;49810:5;49807:77;49804:103;;;49887:18;;:::i;:::-;49804:103;49934:1;49927:5;49923:13;49916:20;;49709:233;;;:::o;49948:100::-;49987:7;50016:26;50036:5;50016:26;:::i;:::-;50005:37;;49948:100;;;:::o;50054:94::-;50093:7;50122:20;50136:5;50122:20;:::i;:::-;50111:31;;50054:94;;;:::o;50154:176::-;50186:1;50203:20;50221:1;50203:20;:::i;:::-;50198:25;;50237:20;50255:1;50237:20;:::i;:::-;50232:25;;50276:1;50266:35;;50281:18;;:::i;:::-;50266:35;50322:1;50319;50315:9;50310:14;;50154:176;;;;:::o;50336:180::-;50384:77;50381:1;50374:88;50481:4;50478:1;50471:15;50505:4;50502:1;50495:15;50522:180;50570:77;50567:1;50560:88;50667:4;50664:1;50657:15;50691:4;50688:1;50681:15;50708:180;50756:77;50753:1;50746:88;50853:4;50850:1;50843:15;50877:4;50874:1;50867:15;50894:180;50942:77;50939:1;50932:88;51039:4;51036:1;51029:15;51063:4;51060:1;51053:15;51080:180;51128:77;51125:1;51118:88;51225:4;51222:1;51215:15;51249:4;51246:1;51239:15;51266:180;51314:77;51311:1;51304:88;51411:4;51408:1;51401:15;51435:4;51432:1;51425:15;51452:117;51561:1;51558;51551:12;51575:117;51684:1;51681;51674:12;51698:117;51807:1;51804;51797:12;51821:117;51930:1;51927;51920:12;51944:117;52053:1;52050;52043:12;52067:117;52176:1;52173;52166:12;52190:102;52231:6;52282:2;52278:7;52273:2;52266:5;52262:14;52258:28;52248:38;;52190:102;;;:::o;52298:94::-;52331:8;52379:5;52375:2;52371:14;52350:35;;52298:94;;;:::o;52398:170::-;52538:22;52534:1;52526:6;52522:14;52515:46;52398:170;:::o;52574:169::-;52714:21;52710:1;52702:6;52698:14;52691:45;52574:169;:::o;52749:230::-;52889:34;52885:1;52877:6;52873:14;52866:58;52958:13;52953:2;52945:6;52941:15;52934:38;52749:230;:::o;52985:237::-;53125:34;53121:1;53113:6;53109:14;53102:58;53194:20;53189:2;53181:6;53177:15;53170:45;52985:237;:::o;53228:181::-;53368:33;53364:1;53356:6;53352:14;53345:57;53228:181;:::o;53415:225::-;53555:34;53551:1;53543:6;53539:14;53532:58;53624:8;53619:2;53611:6;53607:15;53600:33;53415:225;:::o;53646:224::-;53786:34;53782:1;53774:6;53770:14;53763:58;53855:7;53850:2;53842:6;53838:15;53831:32;53646:224;:::o;53876:178::-;54016:30;54012:1;54004:6;54000:14;53993:54;53876:178;:::o;54060:224::-;54200:34;54196:1;54188:6;54184:14;54177:58;54269:7;54264:2;54256:6;54252:15;54245:32;54060:224;:::o;54290:223::-;54430:34;54426:1;54418:6;54414:14;54407:58;54499:6;54494:2;54486:6;54482:15;54475:31;54290:223;:::o;54519:175::-;54659:27;54655:1;54647:6;54643:14;54636:51;54519:175;:::o;54700:173::-;54840:25;54836:1;54828:6;54824:14;54817:49;54700:173;:::o;54879:231::-;55019:34;55015:1;55007:6;55003:14;54996:58;55088:14;55083:2;55075:6;55071:15;55064:39;54879:231;:::o;55116:179::-;55256:31;55252:1;55244:6;55240:14;55233:55;55116:179;:::o;55301:166::-;55441:18;55437:1;55429:6;55425:14;55418:42;55301:166;:::o;55473:243::-;55613:34;55609:1;55601:6;55597:14;55590:58;55682:26;55677:2;55669:6;55665:15;55658:51;55473:243;:::o;55722:229::-;55862:34;55858:1;55850:6;55846:14;55839:58;55931:12;55926:2;55918:6;55914:15;55907:37;55722:229;:::o;55957:228::-;56097:34;56093:1;56085:6;56081:14;56074:58;56166:11;56161:2;56153:6;56149:15;56142:36;55957:228;:::o;56191:182::-;56331:34;56327:1;56319:6;56315:14;56308:58;56191:182;:::o;56379:239::-;56519:34;56515:1;56507:6;56503:14;56496:58;56588:22;56583:2;56575:6;56571:15;56564:47;56379:239;:::o;56624:231::-;56764:34;56760:1;56752:6;56748:14;56741:58;56833:14;56828:2;56820:6;56816:15;56809:39;56624:231;:::o;56861:182::-;57001:34;56997:1;56989:6;56985:14;56978:58;56861:182;:::o;57049:234::-;57189:34;57185:1;57177:6;57173:14;57166:58;57258:17;57253:2;57245:6;57241:15;57234:42;57049:234;:::o;57289:220::-;57429:34;57425:1;57417:6;57413:14;57406:58;57498:3;57493:2;57485:6;57481:15;57474:28;57289:220;:::o;57515:222::-;57655:34;57651:1;57643:6;57639:14;57632:58;57724:5;57719:2;57711:6;57707:15;57700:30;57515:222;:::o;57743:114::-;;:::o;57863:236::-;58003:34;57999:1;57991:6;57987:14;57980:58;58072:19;58067:2;58059:6;58055:15;58048:44;57863:236;:::o;58105:227::-;58245:34;58241:1;58233:6;58229:14;58222:58;58314:10;58309:2;58301:6;58297:15;58290:35;58105:227;:::o;58338:231::-;58478:34;58474:1;58466:6;58462:14;58455:58;58547:14;58542:2;58534:6;58530:15;58523:39;58338:231;:::o;58575:179::-;58715:31;58711:1;58703:6;58699:14;58692:55;58575:179;:::o;58760:182::-;58900:34;58896:1;58888:6;58884:14;58877:58;58760:182;:::o;58948:122::-;59021:24;59039:5;59021:24;:::i;:::-;59014:5;59011:35;59001:63;;59060:1;59057;59050:12;59001:63;58948:122;:::o;59076:116::-;59146:21;59161:5;59146:21;:::i;:::-;59139:5;59136:32;59126:60;;59182:1;59179;59172:12;59126:60;59076:116;:::o;59198:122::-;59271:24;59289:5;59271:24;:::i;:::-;59264:5;59261:35;59251:63;;59310:1;59307;59300:12;59251:63;59198:122;:::o;59326:120::-;59398:23;59415:5;59398:23;:::i;:::-;59391:5;59388:34;59378:62;;59436:1;59433;59426:12;59378:62;59326:120;:::o;59452:122::-;59525:24;59543:5;59525:24;:::i;:::-;59518:5;59515:35;59505:63;;59564:1;59561;59554:12;59505:63;59452:122;:::o

Swarm Source

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