ETH Price: $3,283.12 (+1.10%)
Gas: 1 Gwei

Token

NFT Against Humanity (NAH)
 

Overview

Max Total Supply

16 NAH

Holders

4

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lizexu.eth
Balance
3 NAH
0xbbb6cc7a9a1bc2674419987c68298f9dafaedda4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFTAgainstHumanity

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

// OpenZeppelin Contracts (last updated v4.5.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.
 */
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 Merklee 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: evx.sol

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

pragma solidity ^0.8.0;

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

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

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

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

// OpenZeppelin Contracts v4.4.1 (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 tokenId);

    /**
     * @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 v4.4.1 (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 overriden 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 ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, 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);
    }

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

    /**
     * @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 of token that is not own"
        );
        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);
    }

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

// 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: github/Upinel/EVX-ERC721/contracts/nic_meta_nft.sol

// Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721

pragma solidity ^0.8.0;

contract NFTAgainstHumanity is ERC721Enumerable, Ownable {
    using Strings for uint256;

    bool public _isSaleActive = false;
    bool public _revealed = false;
    bool public _isWLSaleActive = false;

    // Constants
    uint256 public constant MAX_SUPPLY = 10000;
    uint256 public currentSupply;
    uint256 public mintPrice = 0.1 ether;
    uint256 public maxBalance = 200;
    uint256 public maxMint = 10;
    uint256 public maxWLBalance = 1;
    address public airdropuser;
    string baseURI;
    string public notRevealedUri;
    string public baseExtension = ".json";
    bytes32 public whiteListRootHash;

    mapping(uint256 => string) private _tokenURIs;
    mapping(address => bool) public whitelistClaimed;

    constructor(
        string memory initBaseURI,
        string memory initNotRevealedUri,
        address _airdropuser,
        bytes32 _whiteListRootHash,
        uint256 _currentSupply
    ) ERC721("NFT Against Humanity", "NAH") {
        setBaseURI(initBaseURI);
        setNotRevealedURI(initNotRevealedUri);
        setAirdropUser(_airdropuser);
        setWhiteList(_whiteListRootHash);
        setCurrentSupply(_currentSupply);
    }

    function mint(uint256 tokenQuantity) public payable {
        require(
            totalSupply() + tokenQuantity <= MAX_SUPPLY,
            "Sale would exceed max supply"
        );
        require(
            totalSupply() + tokenQuantity <= currentSupply,
            "Sale would exceed max current supply"
        );
        require(_isSaleActive, "Sale must be active to mint");
        require(
            balanceOf(msg.sender) + tokenQuantity <= maxBalance,
            "Sale would exceed max balance"
        );
        require(
            tokenQuantity * mintPrice <= msg.value,
            "Not enough ether sent"
        );
        require(tokenQuantity <= maxMint, "Can only mint 1 tokens at a time");
        _mint(tokenQuantity, msg.sender);
    }

    function whitelistMint(
        uint256 tokenQuantity,
        bytes32[] calldata _merkleProof
    ) public payable {
        require(!whitelistClaimed[msg.sender], "address claimed");
        require(_isWLSaleActive, "Whitelist Sale must be active to mint");
        require(
            balanceOf(msg.sender) + tokenQuantity <= maxWLBalance,
            "Sale would exceed max Whitelist balance"
        );
        require(
            totalSupply() + tokenQuantity <= currentSupply,
            "Sale would exceed max current supply"
        );
        require(
            tokenQuantity * mintPrice <= msg.value,
            "Not enough ether sent"
        );
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, whiteListRootHash, leaf),
            "Invalid Proof"
        );

        whitelistClaimed[msg.sender] = true;
        _mint(tokenQuantity, msg.sender);
    }

    function claim(uint256 tokenQuantity, address owner) public payable {
        require(
            totalSupply() + tokenQuantity <= MAX_SUPPLY,
            "Sale would exceed max supply"
        );
        require(
            balanceOf(msg.sender) + tokenQuantity <= maxBalance,
            "Sale would exceed max balance"
        );
        
        require(tokenQuantity <= maxMint, "Can only mint 1 tokens at a time");
        require(msg.sender == airdropuser, "Only verified user can airdrop");

        _mint(tokenQuantity, owner);
    }

    function airdrop(uint256 tokenQuantity, address owner)
        public
        payable
        onlyOwner
    {
        require(
            totalSupply() + tokenQuantity <= MAX_SUPPLY,
            "Sale would exceed max supply"
        );
        require(
            balanceOf(msg.sender) + tokenQuantity <= maxBalance,
            "Sale would exceed max balance"
        );
        require(tokenQuantity <= maxMint, "Can only mint 1 tokens at a time");

        _mint(tokenQuantity, owner);
    }

    function batchAirdrop(uint256 tokenQuantity, address[] calldata owner)
        public
        payable
        onlyOwner
    {
        require(totalSupply() + (tokenQuantity * owner.length) <= MAX_SUPPLY, "Batch would exceed max supply");
        require(
            totalSupply() + tokenQuantity <= MAX_SUPPLY,
            "Sale would exceed max supply"
        );
        require(
            balanceOf(msg.sender) + tokenQuantity <= maxBalance,
            "Sale would exceed max balance"
        );
        require(tokenQuantity <= maxMint, "Can only mint 1 tokens at a time");
        for(uint256 i = 0; i < owner.length; i++){
            _mint(tokenQuantity, owner[i]);
        }
    }

    function _mint(uint256 tokenQuantity, address owner) internal {
        for (uint256 i = 0; i < tokenQuantity; i++) {
            uint256 mintIndex = totalSupply() + 1;
            if (totalSupply() < MAX_SUPPLY) {
                _safeMint(owner, mintIndex);
            }
        }
    }

    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 _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
        return
            string(abi.encodePacked(base, tokenId.toString(), baseExtension));
    }

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

    //only owner
    function flipSaleActive() public onlyOwner {
        _isSaleActive = !_isSaleActive;
    }

    function flipReveal() public onlyOwner {
        _revealed = !_revealed;
    }

    function flipWLSaleActive() public onlyOwner {
        _isWLSaleActive = !_isWLSaleActive;
    }

    function setCurrentSupply(uint256 _currentSupply) public onlyOwner {
        currentSupply = _currentSupply;
    }

    function setMintPrice(uint256 _mintPrice) public onlyOwner {
        mintPrice = _mintPrice;
    }

    function setAirdropUser(address _airdropuser) public onlyOwner {
        airdropuser = _airdropuser;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

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

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function setMaxBalance(uint256 _maxBalance) public onlyOwner {
        maxBalance = _maxBalance;
    }

    function setMaxWLBalance(uint256 _maxWLBalance) public onlyOwner {
        maxWLBalance = _maxWLBalance;
    }

    function setMaxMint(uint256 _maxMint) public onlyOwner {
        maxMint = _maxMint;
    }

    function setWhiteList(bytes32 _whiteListRootHash) public onlyOwner {
        whiteListRootHash = _whiteListRootHash;
    }

    function withdraw(address to) public onlyOwner {
        uint256 balance = address(this).balance;
        payable(to).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initBaseURI","type":"string"},{"internalType":"string","name":"initNotRevealedUri","type":"string"},{"internalType":"address","name":"_airdropuser","type":"address"},{"internalType":"bytes32","name":"_whiteListRootHash","type":"bytes32"},{"internalType":"uint256","name":"_currentSupply","type":"uint256"}],"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":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"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isWLSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"airdropuser","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"address[]","name":"owner","type":"address[]"}],"name":"batchAirdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWLSaleActive","outputs":[],"stateMutability":"nonpayable","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":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWLBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"_airdropuser","type":"address"}],"name":"setAirdropUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currentSupply","type":"uint256"}],"name":"setCurrentSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBalance","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWLBalance","type":"uint256"}],"name":"setMaxWLBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whiteListRootHash","type":"bytes32"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"whiteListRootHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506000600a60166101000a81548160ff02191690831515021790555067016345785d8a0000600c5560c8600d55600a600e556001600f556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060139080519060200190620000bd92919062000664565b50348015620000cb57600080fd5b50604051620067bd380380620067bd8339818101604052810190620000f19190620007d7565b6040518060400160405280601481526020017f4e465420416761696e73742048756d616e6974790000000000000000000000008152506040518060400160405280600381526020017f4e4148000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017592919062000664565b5080600190805190602001906200018e92919062000664565b505050620001b1620001a56200021160201b60201c565b6200021960201b60201c565b620001c285620002df60201b60201c565b620001d3846200038a60201b60201c565b620001e4836200043560201b60201c565b620001f5826200050860201b60201c565b6200020681620005a160201b60201c565b505050505062000b3a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ef6200021160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003156200063a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200036e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036590620008c4565b60405180910390fd5b80601190805190602001906200038692919062000664565b5050565b6200039a6200021160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003c06200063a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041090620008c4565b60405180910390fd5b80601290805190602001906200043192919062000664565b5050565b620004456200021160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200046b6200063a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004bb90620008c4565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620005186200021160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200053e6200063a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058e90620008c4565b60405180910390fd5b8060148190555050565b620005b16200021160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d76200063a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062790620008c4565b60405180910390fd5b80600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200067290620009d4565b90600052602060002090601f016020900481019282620006965760008555620006e2565b82601f10620006b157805160ff1916838001178555620006e2565b82800160010185558215620006e2579182015b82811115620006e1578251825591602001919060010190620006c4565b5b509050620006f19190620006f5565b5090565b5b8082111562000710576000816000905550600101620006f6565b5090565b60006200072b62000725846200090f565b620008e6565b9050828152602081018484840111156200074a576200074962000aa3565b5b620007578482856200099e565b509392505050565b600081519050620007708162000aec565b92915050565b600081519050620007878162000b06565b92915050565b600082601f830112620007a557620007a462000a9e565b5b8151620007b784826020860162000714565b91505092915050565b600081519050620007d18162000b20565b92915050565b600080600080600060a08688031215620007f657620007f562000aad565b5b600086015167ffffffffffffffff81111562000817576200081662000aa8565b5b62000825888289016200078d565b955050602086015167ffffffffffffffff81111562000849576200084862000aa8565b5b62000857888289016200078d565b94505060406200086a888289016200075f565b93505060606200087d8882890162000776565b92505060806200089088828901620007c0565b9150509295509295909350565b6000620008ac60208362000945565b9150620008b98262000ac3565b602082019050919050565b60006020820190508181036000830152620008df816200089d565b9050919050565b6000620008f262000905565b905062000900828262000a0a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200092d576200092c62000a6f565b5b620009388262000ab2565b9050602081019050919050565b600082825260208201905092915050565b6000620009638262000974565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620009be578082015181840152602081019050620009a1565b83811115620009ce576000848401525b50505050565b60006002820490506001821680620009ed57607f821691505b6020821081141562000a045762000a0362000a40565b5b50919050565b62000a158262000ab2565b810181811067ffffffffffffffff8211171562000a375762000a3662000a6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000af78162000956565b811462000b0357600080fd5b50565b62000b11816200096a565b811462000b1d57600080fd5b50565b62000b2b8162000994565b811462000b3757600080fd5b50565b615c738062000b4a6000396000f3fe6080604052600436106102ff5760003560e01c806373ad468a11610190578063c87b56dd116100dc578063ddd5e1b211610095578063f2c4ce1e1161006f578063f2c4ce1e14610b0e578063f2fde38b14610b37578063f4a0a52814610b60578063fb7e6ccb14610b89576102ff565b8063ddd5e1b214610a9e578063de8b51e114610aba578063e985e9c514610ad1576102ff565b8063c87b56dd1461098b578063cf0c66e4146109c8578063d2cab056146109f3578063da3ef23f14610a0f578063db4bec4414610a38578063dc54730114610a75576102ff565b8063a0712d6811610149578063ab35c64b11610123578063ab35c64b146108f0578063b88d4fde1461091b578063bc63f02e14610944578063c668286214610960576102ff565b8063a0712d6814610880578063a22cb4651461089c578063a6246ea3146108c5576102ff565b806373ad468a146107805780637501f741146107ab578063771282f6146107d65780638da5cb5b1461080157806395d89b411461082c5780639d51d9b714610857576102ff565b806343409fdc1161024f5780636352211e116102085780636ebeac85116101e25780636ebeac85146106d65780637080d6fc1461070157806370a082311461072c578063715018a614610769576102ff565b80636352211e146106455780636817c76c146106825780636b0815f3146106ad576102ff565b806343409fdc146105395780634e22f8e1146105625780634f6ccce71461058d57806351cff8d9146105ca578063547520fe146105f357806355f804b31461061c576102ff565b806318160ddd116102bc5780632f745c59116102965780632f745c591461049157806332cb6b0c146104ce5780633b84d9c6146104f957806342842e0e14610510576102ff565b806318160ddd1461041457806323b872dd1461043f5780632a7b051c14610468576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063081c8c44146103a9578063095ea7b3146103d45780630bb4a004146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190614302565b610ba5565b6040516103389190614b38565b60405180910390f35b34801561034d57600080fd5b50610356610c1f565b6040516103639190614b6e565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906143a5565b610cb1565b6040516103a09190614ad1565b60405180910390f35b3480156103b557600080fd5b506103be610d36565b6040516103cb9190614b6e565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614295565b610dc4565b005b34801561040957600080fd5b50610412610edc565b005b34801561042057600080fd5b50610429610f84565b6040516104369190614f50565b60405180910390f35b34801561044b57600080fd5b506104666004803603810190610461919061417f565b610f91565b005b34801561047457600080fd5b5061048f600480360381019061048a9190614112565b610ff1565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614295565b6110b1565b6040516104c59190614f50565b60405180910390f35b3480156104da57600080fd5b506104e3611156565b6040516104f09190614f50565b60405180910390f35b34801561050557600080fd5b5061050e61115c565b005b34801561051c57600080fd5b506105376004803603810190610532919061417f565b611204565b005b34801561054557600080fd5b50610560600480360381019061055b91906143a5565b611224565b005b34801561056e57600080fd5b506105776112aa565b6040516105849190614b53565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906143a5565b6112b0565b6040516105c19190614f50565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614112565b611321565b005b3480156105ff57600080fd5b5061061a600480360381019061061591906143a5565b6113ed565b005b34801561062857600080fd5b50610643600480360381019061063e919061435c565b611473565b005b34801561065157600080fd5b5061066c600480360381019061066791906143a5565b611509565b6040516106799190614ad1565b60405180910390f35b34801561068e57600080fd5b506106976115bb565b6040516106a49190614f50565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906142d5565b6115c1565b005b3480156106e257600080fd5b506106eb611647565b6040516106f89190614b38565b60405180910390f35b34801561070d57600080fd5b5061071661165a565b6040516107239190614b38565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614112565b61166d565b6040516107609190614f50565b60405180910390f35b34801561077557600080fd5b5061077e611725565b005b34801561078c57600080fd5b506107956117ad565b6040516107a29190614f50565b60405180910390f35b3480156107b757600080fd5b506107c06117b3565b6040516107cd9190614f50565b60405180910390f35b3480156107e257600080fd5b506107eb6117b9565b6040516107f89190614f50565b60405180910390f35b34801561080d57600080fd5b506108166117bf565b6040516108239190614ad1565b60405180910390f35b34801561083857600080fd5b506108416117e9565b60405161084e9190614b6e565b60405180910390f35b34801561086357600080fd5b5061087e600480360381019061087991906143a5565b61187b565b005b61089a600480360381019061089591906143a5565b611901565b005b3480156108a857600080fd5b506108c360048036038101906108be9190614255565b611af8565b005b3480156108d157600080fd5b506108da611b0e565b6040516108e79190614ad1565b60405180910390f35b3480156108fc57600080fd5b50610905611b34565b6040516109129190614b38565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906141d2565b611b47565b005b61095e600480360381019061095991906143d2565b611ba9565b005b34801561096c57600080fd5b50610975611d27565b6040516109829190614b6e565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906143a5565b611db5565b6040516109bf9190614b6e565b60405180910390f35b3480156109d457600080fd5b506109dd611fd9565b6040516109ea9190614f50565b60405180910390f35b610a0d6004803603810190610a089190614472565b611fdf565b005b348015610a1b57600080fd5b50610a366004803603810190610a31919061435c565b6122da565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190614112565b612370565b604051610a6c9190614b38565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a9791906143a5565b612390565b005b610ab86004803603810190610ab391906143d2565b612416565b005b348015610ac657600080fd5b50610acf6125a8565b005b348015610add57600080fd5b50610af86004803603810190610af3919061413f565b612650565b604051610b059190614b38565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b30919061435c565b6126e4565b005b348015610b4357600080fd5b50610b5e6004803603810190610b599190614112565b61277a565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906143a5565b612872565b005b610ba36004803603810190610b9e9190614412565b6128f8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c185750610c1782612b25565b5b9050919050565b606060008054610c2e9061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a9061521f565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050505050905090565b6000610cbc82612c07565b610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614df0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610d439061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6f9061521f565b8015610dbc5780601f10610d9157610100808354040283529160200191610dbc565b820191906000526020600020905b815481529060010190602001808311610d9f57829003601f168201915b505050505081565b6000610dcf82611509565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790614e70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e5f612c73565b73ffffffffffffffffffffffffffffffffffffffff161480610e8e5750610e8d81610e88612c73565b612650565b5b610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614d30565b60405180910390fd5b610ed78383612c7b565b505050565b610ee4612c73565b73ffffffffffffffffffffffffffffffffffffffff16610f026117bf565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90614e10565b60405180910390fd5b600a60169054906101000a900460ff1615600a60166101000a81548160ff021916908315150217905550565b6000600880549050905090565b610fa2610f9c612c73565b82612d34565b610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890614eb0565b60405180910390fd5b610fec838383612e12565b505050565b610ff9612c73565b73ffffffffffffffffffffffffffffffffffffffff166110176117bf565b73ffffffffffffffffffffffffffffffffffffffff161461106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614e10565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110bc8361166d565b82106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614b90565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b611164612c73565b73ffffffffffffffffffffffffffffffffffffffff166111826117bf565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614e10565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b61121f83838360405180602001604052806000815250611b47565b505050565b61122c612c73565b73ffffffffffffffffffffffffffffffffffffffff1661124a6117bf565b73ffffffffffffffffffffffffffffffffffffffff16146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614e10565b60405180910390fd5b80600f8190555050565b60145481565b60006112ba610f84565b82106112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614ed0565b60405180910390fd5b6008828154811061130f5761130e6153dc565b5b90600052602060002001549050919050565b611329612c73565b73ffffffffffffffffffffffffffffffffffffffff166113476117bf565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614e10565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113e8573d6000803e3d6000fd5b505050565b6113f5612c73565b73ffffffffffffffffffffffffffffffffffffffff166114136117bf565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614e10565b60405180910390fd5b80600e8190555050565b61147b612c73565b73ffffffffffffffffffffffffffffffffffffffff166114996117bf565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690614e10565b60405180910390fd5b8060119080519060200190611505929190613e65565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614d70565b60405180910390fd5b80915050919050565b600c5481565b6115c9612c73565b73ffffffffffffffffffffffffffffffffffffffff166115e76117bf565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490614e10565b60405180910390fd5b8060148190555050565b600a60159054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614d50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172d612c73565b73ffffffffffffffffffffffffffffffffffffffff1661174b6117bf565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890614e10565b60405180910390fd5b6117ab600061306e565b565b600d5481565b600e5481565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117f89061521f565b80601f01602080910402602001604051908101604052809291908181526020018280546118249061521f565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b611883612c73565b73ffffffffffffffffffffffffffffffffffffffff166118a16117bf565b73ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614e10565b60405180910390fd5b80600d8190555050565b6127108161190d610f84565b611917919061504a565b1115611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614c30565b60405180910390fd5b600b5481611964610f84565b61196e919061504a565b11156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614d90565b60405180910390fd5b600a60149054906101000a900460ff166119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590614cb0565b60405180910390fd5b600d5481611a0b3361166d565b611a15919061504a565b1115611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614d10565b60405180910390fd5b34600c5482611a6591906150d1565b1115611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90614ef0565b60405180910390fd5b600e54811115611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290614cf0565b60405180910390fd5b611af58133613134565b50565b611b0a611b03612c73565b838361318c565b5050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60169054906101000a900460ff1681565b611b58611b52612c73565b83612d34565b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614eb0565b60405180910390fd5b611ba3848484846132f9565b50505050565b611bb1612c73565b73ffffffffffffffffffffffffffffffffffffffff16611bcf6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614e10565b60405180910390fd5b61271082611c31610f84565b611c3b919061504a565b1115611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390614c30565b60405180910390fd5b600d5482611c893361166d565b611c93919061504a565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90614d10565b60405180910390fd5b600e54821115611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090614cf0565b60405180910390fd5b611d238282613134565b5050565b60138054611d349061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d609061521f565b8015611dad5780601f10611d8257610100808354040283529160200191611dad565b820191906000526020600020905b815481529060010190602001808311611d9057829003601f168201915b505050505081565b6060611dc082612c07565b611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690614e50565b60405180910390fd5b60001515600a60159054906101000a900460ff1615151415611ead5760128054611e289061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e549061521f565b8015611ea15780601f10611e7657610100808354040283529160200191611ea1565b820191906000526020600020905b815481529060010190602001808311611e8457829003601f168201915b50505050509050611fd4565b6000601560008481526020019081526020016000208054611ecd9061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef99061521f565b8015611f465780601f10611f1b57610100808354040283529160200191611f46565b820191906000526020600020905b815481529060010190602001808311611f2957829003601f168201915b505050505090506000611f57613355565b9050600081511415611f6d578192505050611fd4565b600082511115611fa2578082604051602001611f8a929190614a7c565b60405160208183030381529060405292505050611fd4565b80611fac856133e7565b6013604051602001611fc093929190614aa0565b604051602081830303815290604052925050505b919050565b600f5481565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614e90565b60405180910390fd5b600a60169054906101000a900460ff166120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614bb0565b60405180910390fd5b600f54836120c83361166d565b6120d2919061504a565b1115612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90614c50565b60405180910390fd5b600b548361211f610f84565b612129919061504a565b111561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614d90565b60405180910390fd5b34600c548461217991906150d1565b11156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614ef0565b60405180910390fd5b6000336040516020016121cd9190614a61565b604051602081830303815290604052805190602001209050612233838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060145483613548565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614f10565b60405180910390fd5b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122d48433613134565b50505050565b6122e2612c73565b73ffffffffffffffffffffffffffffffffffffffff166123006117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614e10565b60405180910390fd5b806013908051906020019061236c929190613e65565b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b612398612c73565b73ffffffffffffffffffffffffffffffffffffffff166123b66117bf565b73ffffffffffffffffffffffffffffffffffffffff161461240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614e10565b60405180910390fd5b80600b8190555050565b61271082612422610f84565b61242c919061504a565b111561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614c30565b60405180910390fd5b600d548261247a3361166d565b612484919061504a565b11156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d10565b60405180910390fd5b600e5482111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190614cf0565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259190614db0565b60405180910390fd5b6125a48282613134565b5050565b6125b0612c73565b73ffffffffffffffffffffffffffffffffffffffff166125ce6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614e10565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ec612c73565b73ffffffffffffffffffffffffffffffffffffffff1661270a6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275790614e10565b60405180910390fd5b8060129080519060200190612776929190613e65565b5050565b612782612c73565b73ffffffffffffffffffffffffffffffffffffffff166127a06117bf565b73ffffffffffffffffffffffffffffffffffffffff16146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed90614e10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90614bf0565b60405180910390fd5b61286f8161306e565b50565b61287a612c73565b73ffffffffffffffffffffffffffffffffffffffff166128986117bf565b73ffffffffffffffffffffffffffffffffffffffff16146128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614e10565b60405180910390fd5b80600c8190555050565b612900612c73565b73ffffffffffffffffffffffffffffffffffffffff1661291e6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614e10565b60405180910390fd5b612710828290508461298691906150d1565b61298e610f84565b612998919061504a565b11156129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090614f30565b60405180910390fd5b612710836129e5610f84565b6129ef919061504a565b1115612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614c30565b60405180910390fd5b600d5483612a3d3361166d565b612a47919061504a565b1115612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90614d10565b60405180910390fd5b600e54831115612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac490614cf0565b60405180910390fd5b60005b82829050811015612b1f57612b0c84848484818110612af257612af16153dc565b5b9050602002016020810190612b079190614112565b613134565b8080612b1790615282565b915050612ad0565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bf057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c005750612bff8261355f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cee83611509565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d3f82612c07565b612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614cd0565b60405180910390fd5b6000612d8983611509565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612df857508373ffffffffffffffffffffffffffffffffffffffff16612de084610cb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e095750612e088185612650565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e3282611509565b73ffffffffffffffffffffffffffffffffffffffff1614612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f90614e30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90614c70565b60405180910390fd5b612f038383836135c9565b612f0e600082612c7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e919061512b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fb5919061504a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b82811015613187576000600161314b610f84565b613155919061504a565b9050612710613162610f84565b10156131735761317283826136dd565b5b50808061317f90615282565b915050613137565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f290614c90565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516132ec9190614b38565b60405180910390a3505050565b613304848484612e12565b613310848484846136fb565b61334f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334690614bd0565b60405180910390fd5b50505050565b6060601180546133649061521f565b80601f01602080910402602001604051908101604052809291908181526020018280546133909061521f565b80156133dd5780601f106133b2576101008083540402835291602001916133dd565b820191906000526020600020905b8154815290600101906020018083116133c057829003601f168201915b5050505050905090565b6060600082141561342f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613543565b600082905060005b6000821461346157808061344a90615282565b915050600a8261345a91906150a0565b9150613437565b60008167ffffffffffffffff81111561347d5761347c61540b565b5b6040519080825280601f01601f1916602001820160405280156134af5781602001600182028036833780820191505090505b5090505b6000851461353c576001826134c8919061512b565b9150600a856134d791906152ef565b60306134e3919061504a565b60f81b8183815181106134f9576134f86153dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353591906150a0565b94506134b3565b8093505050505b919050565b6000826135558584613892565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6135d4838383613907565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613617576136128161390c565b613656565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613655576136548382613955565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136995761369481613ac2565b6136d8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136d7576136d68282613b93565b5b5b505050565b6136f7828260405180602001604052806000815250613c12565b5050565b600061371c8473ffffffffffffffffffffffffffffffffffffffff16613c6d565b15613885578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613745612c73565b8786866040518563ffffffff1660e01b81526004016137679493929190614aec565b602060405180830381600087803b15801561378157600080fd5b505af19250505080156137b257506040513d601f19601f820116820180604052508101906137af919061432f565b60015b613835573d80600081146137e2576040519150601f19603f3d011682016040523d82523d6000602084013e6137e7565b606091505b5060008151141561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490614bd0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061388a565b600190505b949350505050565b60008082905060005b84518110156138fc5760008582815181106138b9576138b86153dc565b5b602002602001015190508083116138db576138d48382613c80565b92506138e8565b6138e58184613c80565b92505b5080806138f490615282565b91505061389b565b508091505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016139628461166d565b61396c919061512b565b9050600060076000848152602001908152602001600020549050818114613a51576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ad6919061512b565b9050600060096000848152602001908152602001600020549050600060088381548110613b0657613b056153dc565b5b906000526020600020015490508060088381548110613b2857613b276153dc565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613b7757613b766153ad565b5b6001900381819060005260206000200160009055905550505050565b6000613b9e8361166d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b613c1c8383613c97565b613c2960008484846136fb565b613c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5f90614bd0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfe90614dd0565b60405180910390fd5b613d1081612c07565b15613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4790614c10565b60405180910390fd5b613d5c600083836135c9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dac919061504a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e719061521f565b90600052602060002090601f016020900481019282613e935760008555613eda565b82601f10613eac57805160ff1916838001178555613eda565b82800160010185558215613eda579182015b82811115613ed9578251825591602001919060010190613ebe565b5b509050613ee79190613eeb565b5090565b5b80821115613f04576000816000905550600101613eec565b5090565b6000613f1b613f1684614f90565b614f6b565b905082815260208101848484011115613f3757613f36615449565b5b613f428482856151dd565b509392505050565b6000613f5d613f5884614fc1565b614f6b565b905082815260208101848484011115613f7957613f78615449565b5b613f848482856151dd565b509392505050565b600081359050613f9b81615bca565b92915050565b60008083601f840112613fb757613fb661543f565b5b8235905067ffffffffffffffff811115613fd457613fd361543a565b5b602083019150836020820283011115613ff057613fef615444565b5b9250929050565b60008083601f84011261400d5761400c61543f565b5b8235905067ffffffffffffffff81111561402a5761402961543a565b5b60208301915083602082028301111561404657614045615444565b5b9250929050565b60008135905061405c81615be1565b92915050565b60008135905061407181615bf8565b92915050565b60008135905061408681615c0f565b92915050565b60008151905061409b81615c0f565b92915050565b600082601f8301126140b6576140b561543f565b5b81356140c6848260208601613f08565b91505092915050565b600082601f8301126140e4576140e361543f565b5b81356140f4848260208601613f4a565b91505092915050565b60008135905061410c81615c26565b92915050565b60006020828403121561412857614127615453565b5b600061413684828501613f8c565b91505092915050565b6000806040838503121561415657614155615453565b5b600061416485828601613f8c565b925050602061417585828601613f8c565b9150509250929050565b60008060006060848603121561419857614197615453565b5b60006141a686828701613f8c565b93505060206141b786828701613f8c565b92505060406141c8868287016140fd565b9150509250925092565b600080600080608085870312156141ec576141eb615453565b5b60006141fa87828801613f8c565b945050602061420b87828801613f8c565b935050604061421c878288016140fd565b925050606085013567ffffffffffffffff81111561423d5761423c61544e565b5b614249878288016140a1565b91505092959194509250565b6000806040838503121561426c5761426b615453565b5b600061427a85828601613f8c565b925050602061428b8582860161404d565b9150509250929050565b600080604083850312156142ac576142ab615453565b5b60006142ba85828601613f8c565b92505060206142cb858286016140fd565b9150509250929050565b6000602082840312156142eb576142ea615453565b5b60006142f984828501614062565b91505092915050565b60006020828403121561431857614317615453565b5b600061432684828501614077565b91505092915050565b60006020828403121561434557614344615453565b5b60006143538482850161408c565b91505092915050565b60006020828403121561437257614371615453565b5b600082013567ffffffffffffffff8111156143905761438f61544e565b5b61439c848285016140cf565b91505092915050565b6000602082840312156143bb576143ba615453565b5b60006143c9848285016140fd565b91505092915050565b600080604083850312156143e9576143e8615453565b5b60006143f7858286016140fd565b925050602061440885828601613f8c565b9150509250929050565b60008060006040848603121561442b5761442a615453565b5b6000614439868287016140fd565b935050602084013567ffffffffffffffff81111561445a5761445961544e565b5b61446686828701613fa1565b92509250509250925092565b60008060006040848603121561448b5761448a615453565b5b6000614499868287016140fd565b935050602084013567ffffffffffffffff8111156144ba576144b961544e565b5b6144c686828701613ff7565b92509250509250925092565b6144db8161515f565b82525050565b6144f26144ed8261515f565b6152cb565b82525050565b61450181615171565b82525050565b6145108161517d565b82525050565b600061452182615007565b61452b818561501d565b935061453b8185602086016151ec565b61454481615458565b840191505092915050565b600061455a82615012565b614564818561502e565b93506145748185602086016151ec565b61457d81615458565b840191505092915050565b600061459382615012565b61459d818561503f565b93506145ad8185602086016151ec565b80840191505092915050565b600081546145c68161521f565b6145d0818661503f565b945060018216600081146145eb57600181146145fc5761462f565b60ff1983168652818601935061462f565b61460585614ff2565b60005b8381101561462757815481890152600182019150602081019050614608565b838801955050505b50505092915050565b6000614645602b8361502e565b915061465082615476565b604082019050919050565b600061466860258361502e565b9150614673826154c5565b604082019050919050565b600061468b60328361502e565b915061469682615514565b604082019050919050565b60006146ae60268361502e565b91506146b982615563565b604082019050919050565b60006146d1601c8361502e565b91506146dc826155b2565b602082019050919050565b60006146f4601c8361502e565b91506146ff826155db565b602082019050919050565b600061471760278361502e565b915061472282615604565b604082019050919050565b600061473a60248361502e565b915061474582615653565b604082019050919050565b600061475d60198361502e565b9150614768826156a2565b602082019050919050565b6000614780601b8361502e565b915061478b826156cb565b602082019050919050565b60006147a3602c8361502e565b91506147ae826156f4565b604082019050919050565b60006147c660208361502e565b91506147d182615743565b602082019050919050565b60006147e9601d8361502e565b91506147f48261576c565b602082019050919050565b600061480c60388361502e565b915061481782615795565b604082019050919050565b600061482f602a8361502e565b915061483a826157e4565b604082019050919050565b600061485260298361502e565b915061485d82615833565b604082019050919050565b600061487560248361502e565b915061488082615882565b604082019050919050565b6000614898601e8361502e565b91506148a3826158d1565b602082019050919050565b60006148bb60208361502e565b91506148c6826158fa565b602082019050919050565b60006148de602c8361502e565b91506148e982615923565b604082019050919050565b600061490160208361502e565b915061490c82615972565b602082019050919050565b600061492460298361502e565b915061492f8261599b565b604082019050919050565b6000614947602f8361502e565b9150614952826159ea565b604082019050919050565b600061496a60218361502e565b915061497582615a39565b604082019050919050565b600061498d600f8361502e565b915061499882615a88565b602082019050919050565b60006149b060318361502e565b91506149bb82615ab1565b604082019050919050565b60006149d3602c8361502e565b91506149de82615b00565b604082019050919050565b60006149f660158361502e565b9150614a0182615b4f565b602082019050919050565b6000614a19600d8361502e565b9150614a2482615b78565b602082019050919050565b6000614a3c601d8361502e565b9150614a4782615ba1565b602082019050919050565b614a5b816151d3565b82525050565b6000614a6d82846144e1565b60148201915081905092915050565b6000614a888285614588565b9150614a948284614588565b91508190509392505050565b6000614aac8286614588565b9150614ab88285614588565b9150614ac482846145b9565b9150819050949350505050565b6000602082019050614ae660008301846144d2565b92915050565b6000608082019050614b0160008301876144d2565b614b0e60208301866144d2565b614b1b6040830185614a52565b8181036060830152614b2d8184614516565b905095945050505050565b6000602082019050614b4d60008301846144f8565b92915050565b6000602082019050614b686000830184614507565b92915050565b60006020820190508181036000830152614b88818461454f565b905092915050565b60006020820190508181036000830152614ba981614638565b9050919050565b60006020820190508181036000830152614bc98161465b565b9050919050565b60006020820190508181036000830152614be98161467e565b9050919050565b60006020820190508181036000830152614c09816146a1565b9050919050565b60006020820190508181036000830152614c29816146c4565b9050919050565b60006020820190508181036000830152614c49816146e7565b9050919050565b60006020820190508181036000830152614c698161470a565b9050919050565b60006020820190508181036000830152614c898161472d565b9050919050565b60006020820190508181036000830152614ca981614750565b9050919050565b60006020820190508181036000830152614cc981614773565b9050919050565b60006020820190508181036000830152614ce981614796565b9050919050565b60006020820190508181036000830152614d09816147b9565b9050919050565b60006020820190508181036000830152614d29816147dc565b9050919050565b60006020820190508181036000830152614d49816147ff565b9050919050565b60006020820190508181036000830152614d6981614822565b9050919050565b60006020820190508181036000830152614d8981614845565b9050919050565b60006020820190508181036000830152614da981614868565b9050919050565b60006020820190508181036000830152614dc98161488b565b9050919050565b60006020820190508181036000830152614de9816148ae565b9050919050565b60006020820190508181036000830152614e09816148d1565b9050919050565b60006020820190508181036000830152614e29816148f4565b9050919050565b60006020820190508181036000830152614e4981614917565b9050919050565b60006020820190508181036000830152614e698161493a565b9050919050565b60006020820190508181036000830152614e898161495d565b9050919050565b60006020820190508181036000830152614ea981614980565b9050919050565b60006020820190508181036000830152614ec9816149a3565b9050919050565b60006020820190508181036000830152614ee9816149c6565b9050919050565b60006020820190508181036000830152614f09816149e9565b9050919050565b60006020820190508181036000830152614f2981614a0c565b9050919050565b60006020820190508181036000830152614f4981614a2f565b9050919050565b6000602082019050614f656000830184614a52565b92915050565b6000614f75614f86565b9050614f818282615251565b919050565b6000604051905090565b600067ffffffffffffffff821115614fab57614faa61540b565b5b614fb482615458565b9050602081019050919050565b600067ffffffffffffffff821115614fdc57614fdb61540b565b5b614fe582615458565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615055826151d3565b9150615060836151d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561509557615094615320565b5b828201905092915050565b60006150ab826151d3565b91506150b6836151d3565b9250826150c6576150c561534f565b5b828204905092915050565b60006150dc826151d3565b91506150e7836151d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151205761511f615320565b5b828202905092915050565b6000615136826151d3565b9150615141836151d3565b92508282101561515457615153615320565b5b828203905092915050565b600061516a826151b3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561520a5780820151818401526020810190506151ef565b83811115615219576000848401525b50505050565b6000600282049050600182168061523757607f821691505b6020821081141561524b5761524a61537e565b5b50919050565b61525a82615458565b810181811067ffffffffffffffff821117156152795761527861540b565b5b80604052505050565b600061528d826151d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152c0576152bf615320565b5b600182019050919050565b60006152d6826152dd565b9050919050565b60006152e882615469565b9050919050565b60006152fa826151d3565b9150615305836151d3565b9250826153155761531461534f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742053616c65206d7573742062652061637469766520746f60008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e7320617420612074696d65600082015250565b7f53616c6520776f756c6420657863656564206d61782062616c616e6365000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520776f756c6420657863656564206d61782063757272656e7420737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920766572696669656420757365722063616e2061697264726f700000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320636c61696d65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b7f426174636820776f756c6420657863656564206d617820737570706c79000000600082015250565b615bd38161515f565b8114615bde57600080fd5b50565b615bea81615171565b8114615bf557600080fd5b50565b615c018161517d565b8114615c0c57600080fd5b50565b615c1881615187565b8114615c2357600080fd5b50565b615c2f816151d3565b8114615c3a57600080fd5b5056fea2646970667358221220aa330a8ebe89458c65476332792d7603111499f2f6ad7fdb5c6162f16e963f2264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003bba70bcfd98c2a8718140497e88f51fbf80e766ef72a02ce8020a748535adf34f164a54f80ee3f873b25b705ac7a364d32f990d00000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d6574612e6e6674616761696e737468756d616e6974792e6e65742f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6e6674616761696e737468756d616e6974792e6e65742f6d6574612f426c696e642e6a736f6e000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102ff5760003560e01c806373ad468a11610190578063c87b56dd116100dc578063ddd5e1b211610095578063f2c4ce1e1161006f578063f2c4ce1e14610b0e578063f2fde38b14610b37578063f4a0a52814610b60578063fb7e6ccb14610b89576102ff565b8063ddd5e1b214610a9e578063de8b51e114610aba578063e985e9c514610ad1576102ff565b8063c87b56dd1461098b578063cf0c66e4146109c8578063d2cab056146109f3578063da3ef23f14610a0f578063db4bec4414610a38578063dc54730114610a75576102ff565b8063a0712d6811610149578063ab35c64b11610123578063ab35c64b146108f0578063b88d4fde1461091b578063bc63f02e14610944578063c668286214610960576102ff565b8063a0712d6814610880578063a22cb4651461089c578063a6246ea3146108c5576102ff565b806373ad468a146107805780637501f741146107ab578063771282f6146107d65780638da5cb5b1461080157806395d89b411461082c5780639d51d9b714610857576102ff565b806343409fdc1161024f5780636352211e116102085780636ebeac85116101e25780636ebeac85146106d65780637080d6fc1461070157806370a082311461072c578063715018a614610769576102ff565b80636352211e146106455780636817c76c146106825780636b0815f3146106ad576102ff565b806343409fdc146105395780634e22f8e1146105625780634f6ccce71461058d57806351cff8d9146105ca578063547520fe146105f357806355f804b31461061c576102ff565b806318160ddd116102bc5780632f745c59116102965780632f745c591461049157806332cb6b0c146104ce5780633b84d9c6146104f957806342842e0e14610510576102ff565b806318160ddd1461041457806323b872dd1461043f5780632a7b051c14610468576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063081c8c44146103a9578063095ea7b3146103d45780630bb4a004146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190614302565b610ba5565b6040516103389190614b38565b60405180910390f35b34801561034d57600080fd5b50610356610c1f565b6040516103639190614b6e565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906143a5565b610cb1565b6040516103a09190614ad1565b60405180910390f35b3480156103b557600080fd5b506103be610d36565b6040516103cb9190614b6e565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614295565b610dc4565b005b34801561040957600080fd5b50610412610edc565b005b34801561042057600080fd5b50610429610f84565b6040516104369190614f50565b60405180910390f35b34801561044b57600080fd5b506104666004803603810190610461919061417f565b610f91565b005b34801561047457600080fd5b5061048f600480360381019061048a9190614112565b610ff1565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614295565b6110b1565b6040516104c59190614f50565b60405180910390f35b3480156104da57600080fd5b506104e3611156565b6040516104f09190614f50565b60405180910390f35b34801561050557600080fd5b5061050e61115c565b005b34801561051c57600080fd5b506105376004803603810190610532919061417f565b611204565b005b34801561054557600080fd5b50610560600480360381019061055b91906143a5565b611224565b005b34801561056e57600080fd5b506105776112aa565b6040516105849190614b53565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906143a5565b6112b0565b6040516105c19190614f50565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614112565b611321565b005b3480156105ff57600080fd5b5061061a600480360381019061061591906143a5565b6113ed565b005b34801561062857600080fd5b50610643600480360381019061063e919061435c565b611473565b005b34801561065157600080fd5b5061066c600480360381019061066791906143a5565b611509565b6040516106799190614ad1565b60405180910390f35b34801561068e57600080fd5b506106976115bb565b6040516106a49190614f50565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906142d5565b6115c1565b005b3480156106e257600080fd5b506106eb611647565b6040516106f89190614b38565b60405180910390f35b34801561070d57600080fd5b5061071661165a565b6040516107239190614b38565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614112565b61166d565b6040516107609190614f50565b60405180910390f35b34801561077557600080fd5b5061077e611725565b005b34801561078c57600080fd5b506107956117ad565b6040516107a29190614f50565b60405180910390f35b3480156107b757600080fd5b506107c06117b3565b6040516107cd9190614f50565b60405180910390f35b3480156107e257600080fd5b506107eb6117b9565b6040516107f89190614f50565b60405180910390f35b34801561080d57600080fd5b506108166117bf565b6040516108239190614ad1565b60405180910390f35b34801561083857600080fd5b506108416117e9565b60405161084e9190614b6e565b60405180910390f35b34801561086357600080fd5b5061087e600480360381019061087991906143a5565b61187b565b005b61089a600480360381019061089591906143a5565b611901565b005b3480156108a857600080fd5b506108c360048036038101906108be9190614255565b611af8565b005b3480156108d157600080fd5b506108da611b0e565b6040516108e79190614ad1565b60405180910390f35b3480156108fc57600080fd5b50610905611b34565b6040516109129190614b38565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906141d2565b611b47565b005b61095e600480360381019061095991906143d2565b611ba9565b005b34801561096c57600080fd5b50610975611d27565b6040516109829190614b6e565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906143a5565b611db5565b6040516109bf9190614b6e565b60405180910390f35b3480156109d457600080fd5b506109dd611fd9565b6040516109ea9190614f50565b60405180910390f35b610a0d6004803603810190610a089190614472565b611fdf565b005b348015610a1b57600080fd5b50610a366004803603810190610a31919061435c565b6122da565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190614112565b612370565b604051610a6c9190614b38565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a9791906143a5565b612390565b005b610ab86004803603810190610ab391906143d2565b612416565b005b348015610ac657600080fd5b50610acf6125a8565b005b348015610add57600080fd5b50610af86004803603810190610af3919061413f565b612650565b604051610b059190614b38565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b30919061435c565b6126e4565b005b348015610b4357600080fd5b50610b5e6004803603810190610b599190614112565b61277a565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906143a5565b612872565b005b610ba36004803603810190610b9e9190614412565b6128f8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c185750610c1782612b25565b5b9050919050565b606060008054610c2e9061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a9061521f565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050505050905090565b6000610cbc82612c07565b610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614df0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610d439061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6f9061521f565b8015610dbc5780601f10610d9157610100808354040283529160200191610dbc565b820191906000526020600020905b815481529060010190602001808311610d9f57829003601f168201915b505050505081565b6000610dcf82611509565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790614e70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e5f612c73565b73ffffffffffffffffffffffffffffffffffffffff161480610e8e5750610e8d81610e88612c73565b612650565b5b610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614d30565b60405180910390fd5b610ed78383612c7b565b505050565b610ee4612c73565b73ffffffffffffffffffffffffffffffffffffffff16610f026117bf565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90614e10565b60405180910390fd5b600a60169054906101000a900460ff1615600a60166101000a81548160ff021916908315150217905550565b6000600880549050905090565b610fa2610f9c612c73565b82612d34565b610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890614eb0565b60405180910390fd5b610fec838383612e12565b505050565b610ff9612c73565b73ffffffffffffffffffffffffffffffffffffffff166110176117bf565b73ffffffffffffffffffffffffffffffffffffffff161461106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614e10565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110bc8361166d565b82106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614b90565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b611164612c73565b73ffffffffffffffffffffffffffffffffffffffff166111826117bf565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614e10565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b61121f83838360405180602001604052806000815250611b47565b505050565b61122c612c73565b73ffffffffffffffffffffffffffffffffffffffff1661124a6117bf565b73ffffffffffffffffffffffffffffffffffffffff16146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614e10565b60405180910390fd5b80600f8190555050565b60145481565b60006112ba610f84565b82106112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614ed0565b60405180910390fd5b6008828154811061130f5761130e6153dc565b5b90600052602060002001549050919050565b611329612c73565b73ffffffffffffffffffffffffffffffffffffffff166113476117bf565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614e10565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113e8573d6000803e3d6000fd5b505050565b6113f5612c73565b73ffffffffffffffffffffffffffffffffffffffff166114136117bf565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614e10565b60405180910390fd5b80600e8190555050565b61147b612c73565b73ffffffffffffffffffffffffffffffffffffffff166114996117bf565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690614e10565b60405180910390fd5b8060119080519060200190611505929190613e65565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614d70565b60405180910390fd5b80915050919050565b600c5481565b6115c9612c73565b73ffffffffffffffffffffffffffffffffffffffff166115e76117bf565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490614e10565b60405180910390fd5b8060148190555050565b600a60159054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614d50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172d612c73565b73ffffffffffffffffffffffffffffffffffffffff1661174b6117bf565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890614e10565b60405180910390fd5b6117ab600061306e565b565b600d5481565b600e5481565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117f89061521f565b80601f01602080910402602001604051908101604052809291908181526020018280546118249061521f565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b611883612c73565b73ffffffffffffffffffffffffffffffffffffffff166118a16117bf565b73ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614e10565b60405180910390fd5b80600d8190555050565b6127108161190d610f84565b611917919061504a565b1115611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614c30565b60405180910390fd5b600b5481611964610f84565b61196e919061504a565b11156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614d90565b60405180910390fd5b600a60149054906101000a900460ff166119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590614cb0565b60405180910390fd5b600d5481611a0b3361166d565b611a15919061504a565b1115611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614d10565b60405180910390fd5b34600c5482611a6591906150d1565b1115611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90614ef0565b60405180910390fd5b600e54811115611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290614cf0565b60405180910390fd5b611af58133613134565b50565b611b0a611b03612c73565b838361318c565b5050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60169054906101000a900460ff1681565b611b58611b52612c73565b83612d34565b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614eb0565b60405180910390fd5b611ba3848484846132f9565b50505050565b611bb1612c73565b73ffffffffffffffffffffffffffffffffffffffff16611bcf6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614e10565b60405180910390fd5b61271082611c31610f84565b611c3b919061504a565b1115611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390614c30565b60405180910390fd5b600d5482611c893361166d565b611c93919061504a565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90614d10565b60405180910390fd5b600e54821115611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090614cf0565b60405180910390fd5b611d238282613134565b5050565b60138054611d349061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d609061521f565b8015611dad5780601f10611d8257610100808354040283529160200191611dad565b820191906000526020600020905b815481529060010190602001808311611d9057829003601f168201915b505050505081565b6060611dc082612c07565b611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690614e50565b60405180910390fd5b60001515600a60159054906101000a900460ff1615151415611ead5760128054611e289061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e549061521f565b8015611ea15780601f10611e7657610100808354040283529160200191611ea1565b820191906000526020600020905b815481529060010190602001808311611e8457829003601f168201915b50505050509050611fd4565b6000601560008481526020019081526020016000208054611ecd9061521f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef99061521f565b8015611f465780601f10611f1b57610100808354040283529160200191611f46565b820191906000526020600020905b815481529060010190602001808311611f2957829003601f168201915b505050505090506000611f57613355565b9050600081511415611f6d578192505050611fd4565b600082511115611fa2578082604051602001611f8a929190614a7c565b60405160208183030381529060405292505050611fd4565b80611fac856133e7565b6013604051602001611fc093929190614aa0565b604051602081830303815290604052925050505b919050565b600f5481565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614e90565b60405180910390fd5b600a60169054906101000a900460ff166120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614bb0565b60405180910390fd5b600f54836120c83361166d565b6120d2919061504a565b1115612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90614c50565b60405180910390fd5b600b548361211f610f84565b612129919061504a565b111561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614d90565b60405180910390fd5b34600c548461217991906150d1565b11156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614ef0565b60405180910390fd5b6000336040516020016121cd9190614a61565b604051602081830303815290604052805190602001209050612233838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060145483613548565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614f10565b60405180910390fd5b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122d48433613134565b50505050565b6122e2612c73565b73ffffffffffffffffffffffffffffffffffffffff166123006117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614e10565b60405180910390fd5b806013908051906020019061236c929190613e65565b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b612398612c73565b73ffffffffffffffffffffffffffffffffffffffff166123b66117bf565b73ffffffffffffffffffffffffffffffffffffffff161461240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614e10565b60405180910390fd5b80600b8190555050565b61271082612422610f84565b61242c919061504a565b111561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614c30565b60405180910390fd5b600d548261247a3361166d565b612484919061504a565b11156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d10565b60405180910390fd5b600e5482111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190614cf0565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259190614db0565b60405180910390fd5b6125a48282613134565b5050565b6125b0612c73565b73ffffffffffffffffffffffffffffffffffffffff166125ce6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614e10565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ec612c73565b73ffffffffffffffffffffffffffffffffffffffff1661270a6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275790614e10565b60405180910390fd5b8060129080519060200190612776929190613e65565b5050565b612782612c73565b73ffffffffffffffffffffffffffffffffffffffff166127a06117bf565b73ffffffffffffffffffffffffffffffffffffffff16146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed90614e10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90614bf0565b60405180910390fd5b61286f8161306e565b50565b61287a612c73565b73ffffffffffffffffffffffffffffffffffffffff166128986117bf565b73ffffffffffffffffffffffffffffffffffffffff16146128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614e10565b60405180910390fd5b80600c8190555050565b612900612c73565b73ffffffffffffffffffffffffffffffffffffffff1661291e6117bf565b73ffffffffffffffffffffffffffffffffffffffff1614612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614e10565b60405180910390fd5b612710828290508461298691906150d1565b61298e610f84565b612998919061504a565b11156129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090614f30565b60405180910390fd5b612710836129e5610f84565b6129ef919061504a565b1115612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614c30565b60405180910390fd5b600d5483612a3d3361166d565b612a47919061504a565b1115612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90614d10565b60405180910390fd5b600e54831115612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac490614cf0565b60405180910390fd5b60005b82829050811015612b1f57612b0c84848484818110612af257612af16153dc565b5b9050602002016020810190612b079190614112565b613134565b8080612b1790615282565b915050612ad0565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bf057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c005750612bff8261355f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cee83611509565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d3f82612c07565b612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614cd0565b60405180910390fd5b6000612d8983611509565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612df857508373ffffffffffffffffffffffffffffffffffffffff16612de084610cb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e095750612e088185612650565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e3282611509565b73ffffffffffffffffffffffffffffffffffffffff1614612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f90614e30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90614c70565b60405180910390fd5b612f038383836135c9565b612f0e600082612c7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e919061512b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fb5919061504a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b82811015613187576000600161314b610f84565b613155919061504a565b9050612710613162610f84565b10156131735761317283826136dd565b5b50808061317f90615282565b915050613137565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f290614c90565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516132ec9190614b38565b60405180910390a3505050565b613304848484612e12565b613310848484846136fb565b61334f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334690614bd0565b60405180910390fd5b50505050565b6060601180546133649061521f565b80601f01602080910402602001604051908101604052809291908181526020018280546133909061521f565b80156133dd5780601f106133b2576101008083540402835291602001916133dd565b820191906000526020600020905b8154815290600101906020018083116133c057829003601f168201915b5050505050905090565b6060600082141561342f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613543565b600082905060005b6000821461346157808061344a90615282565b915050600a8261345a91906150a0565b9150613437565b60008167ffffffffffffffff81111561347d5761347c61540b565b5b6040519080825280601f01601f1916602001820160405280156134af5781602001600182028036833780820191505090505b5090505b6000851461353c576001826134c8919061512b565b9150600a856134d791906152ef565b60306134e3919061504a565b60f81b8183815181106134f9576134f86153dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353591906150a0565b94506134b3565b8093505050505b919050565b6000826135558584613892565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6135d4838383613907565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613617576136128161390c565b613656565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613655576136548382613955565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136995761369481613ac2565b6136d8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136d7576136d68282613b93565b5b5b505050565b6136f7828260405180602001604052806000815250613c12565b5050565b600061371c8473ffffffffffffffffffffffffffffffffffffffff16613c6d565b15613885578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613745612c73565b8786866040518563ffffffff1660e01b81526004016137679493929190614aec565b602060405180830381600087803b15801561378157600080fd5b505af19250505080156137b257506040513d601f19601f820116820180604052508101906137af919061432f565b60015b613835573d80600081146137e2576040519150601f19603f3d011682016040523d82523d6000602084013e6137e7565b606091505b5060008151141561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490614bd0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061388a565b600190505b949350505050565b60008082905060005b84518110156138fc5760008582815181106138b9576138b86153dc565b5b602002602001015190508083116138db576138d48382613c80565b92506138e8565b6138e58184613c80565b92505b5080806138f490615282565b91505061389b565b508091505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016139628461166d565b61396c919061512b565b9050600060076000848152602001908152602001600020549050818114613a51576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ad6919061512b565b9050600060096000848152602001908152602001600020549050600060088381548110613b0657613b056153dc565b5b906000526020600020015490508060088381548110613b2857613b276153dc565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613b7757613b766153ad565b5b6001900381819060005260206000200160009055905550505050565b6000613b9e8361166d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b613c1c8383613c97565b613c2960008484846136fb565b613c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5f90614bd0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfe90614dd0565b60405180910390fd5b613d1081612c07565b15613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4790614c10565b60405180910390fd5b613d5c600083836135c9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dac919061504a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e719061521f565b90600052602060002090601f016020900481019282613e935760008555613eda565b82601f10613eac57805160ff1916838001178555613eda565b82800160010185558215613eda579182015b82811115613ed9578251825591602001919060010190613ebe565b5b509050613ee79190613eeb565b5090565b5b80821115613f04576000816000905550600101613eec565b5090565b6000613f1b613f1684614f90565b614f6b565b905082815260208101848484011115613f3757613f36615449565b5b613f428482856151dd565b509392505050565b6000613f5d613f5884614fc1565b614f6b565b905082815260208101848484011115613f7957613f78615449565b5b613f848482856151dd565b509392505050565b600081359050613f9b81615bca565b92915050565b60008083601f840112613fb757613fb661543f565b5b8235905067ffffffffffffffff811115613fd457613fd361543a565b5b602083019150836020820283011115613ff057613fef615444565b5b9250929050565b60008083601f84011261400d5761400c61543f565b5b8235905067ffffffffffffffff81111561402a5761402961543a565b5b60208301915083602082028301111561404657614045615444565b5b9250929050565b60008135905061405c81615be1565b92915050565b60008135905061407181615bf8565b92915050565b60008135905061408681615c0f565b92915050565b60008151905061409b81615c0f565b92915050565b600082601f8301126140b6576140b561543f565b5b81356140c6848260208601613f08565b91505092915050565b600082601f8301126140e4576140e361543f565b5b81356140f4848260208601613f4a565b91505092915050565b60008135905061410c81615c26565b92915050565b60006020828403121561412857614127615453565b5b600061413684828501613f8c565b91505092915050565b6000806040838503121561415657614155615453565b5b600061416485828601613f8c565b925050602061417585828601613f8c565b9150509250929050565b60008060006060848603121561419857614197615453565b5b60006141a686828701613f8c565b93505060206141b786828701613f8c565b92505060406141c8868287016140fd565b9150509250925092565b600080600080608085870312156141ec576141eb615453565b5b60006141fa87828801613f8c565b945050602061420b87828801613f8c565b935050604061421c878288016140fd565b925050606085013567ffffffffffffffff81111561423d5761423c61544e565b5b614249878288016140a1565b91505092959194509250565b6000806040838503121561426c5761426b615453565b5b600061427a85828601613f8c565b925050602061428b8582860161404d565b9150509250929050565b600080604083850312156142ac576142ab615453565b5b60006142ba85828601613f8c565b92505060206142cb858286016140fd565b9150509250929050565b6000602082840312156142eb576142ea615453565b5b60006142f984828501614062565b91505092915050565b60006020828403121561431857614317615453565b5b600061432684828501614077565b91505092915050565b60006020828403121561434557614344615453565b5b60006143538482850161408c565b91505092915050565b60006020828403121561437257614371615453565b5b600082013567ffffffffffffffff8111156143905761438f61544e565b5b61439c848285016140cf565b91505092915050565b6000602082840312156143bb576143ba615453565b5b60006143c9848285016140fd565b91505092915050565b600080604083850312156143e9576143e8615453565b5b60006143f7858286016140fd565b925050602061440885828601613f8c565b9150509250929050565b60008060006040848603121561442b5761442a615453565b5b6000614439868287016140fd565b935050602084013567ffffffffffffffff81111561445a5761445961544e565b5b61446686828701613fa1565b92509250509250925092565b60008060006040848603121561448b5761448a615453565b5b6000614499868287016140fd565b935050602084013567ffffffffffffffff8111156144ba576144b961544e565b5b6144c686828701613ff7565b92509250509250925092565b6144db8161515f565b82525050565b6144f26144ed8261515f565b6152cb565b82525050565b61450181615171565b82525050565b6145108161517d565b82525050565b600061452182615007565b61452b818561501d565b935061453b8185602086016151ec565b61454481615458565b840191505092915050565b600061455a82615012565b614564818561502e565b93506145748185602086016151ec565b61457d81615458565b840191505092915050565b600061459382615012565b61459d818561503f565b93506145ad8185602086016151ec565b80840191505092915050565b600081546145c68161521f565b6145d0818661503f565b945060018216600081146145eb57600181146145fc5761462f565b60ff1983168652818601935061462f565b61460585614ff2565b60005b8381101561462757815481890152600182019150602081019050614608565b838801955050505b50505092915050565b6000614645602b8361502e565b915061465082615476565b604082019050919050565b600061466860258361502e565b9150614673826154c5565b604082019050919050565b600061468b60328361502e565b915061469682615514565b604082019050919050565b60006146ae60268361502e565b91506146b982615563565b604082019050919050565b60006146d1601c8361502e565b91506146dc826155b2565b602082019050919050565b60006146f4601c8361502e565b91506146ff826155db565b602082019050919050565b600061471760278361502e565b915061472282615604565b604082019050919050565b600061473a60248361502e565b915061474582615653565b604082019050919050565b600061475d60198361502e565b9150614768826156a2565b602082019050919050565b6000614780601b8361502e565b915061478b826156cb565b602082019050919050565b60006147a3602c8361502e565b91506147ae826156f4565b604082019050919050565b60006147c660208361502e565b91506147d182615743565b602082019050919050565b60006147e9601d8361502e565b91506147f48261576c565b602082019050919050565b600061480c60388361502e565b915061481782615795565b604082019050919050565b600061482f602a8361502e565b915061483a826157e4565b604082019050919050565b600061485260298361502e565b915061485d82615833565b604082019050919050565b600061487560248361502e565b915061488082615882565b604082019050919050565b6000614898601e8361502e565b91506148a3826158d1565b602082019050919050565b60006148bb60208361502e565b91506148c6826158fa565b602082019050919050565b60006148de602c8361502e565b91506148e982615923565b604082019050919050565b600061490160208361502e565b915061490c82615972565b602082019050919050565b600061492460298361502e565b915061492f8261599b565b604082019050919050565b6000614947602f8361502e565b9150614952826159ea565b604082019050919050565b600061496a60218361502e565b915061497582615a39565b604082019050919050565b600061498d600f8361502e565b915061499882615a88565b602082019050919050565b60006149b060318361502e565b91506149bb82615ab1565b604082019050919050565b60006149d3602c8361502e565b91506149de82615b00565b604082019050919050565b60006149f660158361502e565b9150614a0182615b4f565b602082019050919050565b6000614a19600d8361502e565b9150614a2482615b78565b602082019050919050565b6000614a3c601d8361502e565b9150614a4782615ba1565b602082019050919050565b614a5b816151d3565b82525050565b6000614a6d82846144e1565b60148201915081905092915050565b6000614a888285614588565b9150614a948284614588565b91508190509392505050565b6000614aac8286614588565b9150614ab88285614588565b9150614ac482846145b9565b9150819050949350505050565b6000602082019050614ae660008301846144d2565b92915050565b6000608082019050614b0160008301876144d2565b614b0e60208301866144d2565b614b1b6040830185614a52565b8181036060830152614b2d8184614516565b905095945050505050565b6000602082019050614b4d60008301846144f8565b92915050565b6000602082019050614b686000830184614507565b92915050565b60006020820190508181036000830152614b88818461454f565b905092915050565b60006020820190508181036000830152614ba981614638565b9050919050565b60006020820190508181036000830152614bc98161465b565b9050919050565b60006020820190508181036000830152614be98161467e565b9050919050565b60006020820190508181036000830152614c09816146a1565b9050919050565b60006020820190508181036000830152614c29816146c4565b9050919050565b60006020820190508181036000830152614c49816146e7565b9050919050565b60006020820190508181036000830152614c698161470a565b9050919050565b60006020820190508181036000830152614c898161472d565b9050919050565b60006020820190508181036000830152614ca981614750565b9050919050565b60006020820190508181036000830152614cc981614773565b9050919050565b60006020820190508181036000830152614ce981614796565b9050919050565b60006020820190508181036000830152614d09816147b9565b9050919050565b60006020820190508181036000830152614d29816147dc565b9050919050565b60006020820190508181036000830152614d49816147ff565b9050919050565b60006020820190508181036000830152614d6981614822565b9050919050565b60006020820190508181036000830152614d8981614845565b9050919050565b60006020820190508181036000830152614da981614868565b9050919050565b60006020820190508181036000830152614dc98161488b565b9050919050565b60006020820190508181036000830152614de9816148ae565b9050919050565b60006020820190508181036000830152614e09816148d1565b9050919050565b60006020820190508181036000830152614e29816148f4565b9050919050565b60006020820190508181036000830152614e4981614917565b9050919050565b60006020820190508181036000830152614e698161493a565b9050919050565b60006020820190508181036000830152614e898161495d565b9050919050565b60006020820190508181036000830152614ea981614980565b9050919050565b60006020820190508181036000830152614ec9816149a3565b9050919050565b60006020820190508181036000830152614ee9816149c6565b9050919050565b60006020820190508181036000830152614f09816149e9565b9050919050565b60006020820190508181036000830152614f2981614a0c565b9050919050565b60006020820190508181036000830152614f4981614a2f565b9050919050565b6000602082019050614f656000830184614a52565b92915050565b6000614f75614f86565b9050614f818282615251565b919050565b6000604051905090565b600067ffffffffffffffff821115614fab57614faa61540b565b5b614fb482615458565b9050602081019050919050565b600067ffffffffffffffff821115614fdc57614fdb61540b565b5b614fe582615458565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615055826151d3565b9150615060836151d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561509557615094615320565b5b828201905092915050565b60006150ab826151d3565b91506150b6836151d3565b9250826150c6576150c561534f565b5b828204905092915050565b60006150dc826151d3565b91506150e7836151d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151205761511f615320565b5b828202905092915050565b6000615136826151d3565b9150615141836151d3565b92508282101561515457615153615320565b5b828203905092915050565b600061516a826151b3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561520a5780820151818401526020810190506151ef565b83811115615219576000848401525b50505050565b6000600282049050600182168061523757607f821691505b6020821081141561524b5761524a61537e565b5b50919050565b61525a82615458565b810181811067ffffffffffffffff821117156152795761527861540b565b5b80604052505050565b600061528d826151d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152c0576152bf615320565b5b600182019050919050565b60006152d6826152dd565b9050919050565b60006152e882615469565b9050919050565b60006152fa826151d3565b9150615305836151d3565b9250826153155761531461534f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742053616c65206d7573742062652061637469766520746f60008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e7320617420612074696d65600082015250565b7f53616c6520776f756c6420657863656564206d61782062616c616e6365000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520776f756c6420657863656564206d61782063757272656e7420737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920766572696669656420757365722063616e2061697264726f700000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320636c61696d65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b7f426174636820776f756c6420657863656564206d617820737570706c79000000600082015250565b615bd38161515f565b8114615bde57600080fd5b50565b615bea81615171565b8114615bf557600080fd5b50565b615c018161517d565b8114615c0c57600080fd5b50565b615c1881615187565b8114615c2357600080fd5b50565b615c2f816151d3565b8114615c3a57600080fd5b5056fea2646970667358221220aa330a8ebe89458c65476332792d7603111499f2f6ad7fdb5c6162f16e963f2264736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003bba70bcfd98c2a8718140497e88f51fbf80e766ef72a02ce8020a748535adf34f164a54f80ee3f873b25b705ac7a364d32f990d00000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d6574612e6e6674616761696e737468756d616e6974792e6e65742f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6e6674616761696e737468756d616e6974792e6e65742f6d6574612f426c696e642e6a736f6e000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initBaseURI (string): https://meta.nftagainsthumanity.net/
Arg [1] : initNotRevealedUri (string): https://nftagainsthumanity.net/meta/Blind.json
Arg [2] : _airdropuser (address): 0x3bBa70bcFD98C2a8718140497e88f51Fbf80E766
Arg [3] : _whiteListRootHash (bytes32): 0xef72a02ce8020a748535adf34f164a54f80ee3f873b25b705ac7a364d32f990d
Arg [4] : _currentSupply (uint256): 1000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000003bba70bcfd98c2a8718140497e88f51fbf80e766
Arg [3] : ef72a02ce8020a748535adf34f164a54f80ee3f873b25b705ac7a364d32f990d
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [6] : 68747470733a2f2f6d6574612e6e6674616761696e737468756d616e6974792e
Arg [7] : 6e65742f00000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [9] : 68747470733a2f2f6e6674616761696e737468756d616e6974792e6e65742f6d
Arg [10] : 6574612f426c696e642e6a736f6e000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49048:7908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42470:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29234:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30927:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49575:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30450:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55485:98;;;;;;;;;;;;;:::i;:::-;;43273:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31846:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55823:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42854:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49284:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55397:80;;;;;;;;;;;;;:::i;:::-;;32293:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56456:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49654:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43463:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56808:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56576:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56073:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28841:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49368:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56676:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49186:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49146:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28484:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7281:103;;;;;;;;;;;;;:::i;:::-;;49411:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49449:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49333:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6630:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29403:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50264:783;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31307:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49521:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49222:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32549:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52603:513;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49610:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54146:992;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49483:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51055:974;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56185:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49747:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55591:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52037:558;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55297:92;;;;;;;;;;;;;:::i;:::-;;31565:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55939:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7539:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55715:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53124:710;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42470:300;42617:4;42674:35;42659:50;;;:11;:50;;;;:103;;;;42726:36;42750:11;42726:23;:36::i;:::-;42659:103;42639:123;;42470:300;;;:::o;29234:100::-;29288:13;29321:5;29314:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29234:100;:::o;30927:308::-;31048:7;31095:16;31103:7;31095;:16::i;:::-;31073:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31203:15;:24;31219:7;31203:24;;;;;;;;;;;;;;;;;;;;;31196:31;;30927:308;;;:::o;49575:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30450:411::-;30531:13;30547:23;30562:7;30547:14;:23::i;:::-;30531:39;;30595:5;30589:11;;:2;:11;;;;30581:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30689:5;30673:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30698:37;30715:5;30722:12;:10;:12::i;:::-;30698:16;:37::i;:::-;30673:62;30651:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30832:21;30841:2;30845:7;30832:8;:21::i;:::-;30520:341;30450:411;;:::o;55485:98::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55560:15:::1;;;;;;;;;;;55559:16;55541:15;;:34;;;;;;;;;;;;;;;;;;55485:98::o:0;43273:113::-;43334:7;43361:10;:17;;;;43354:24;;43273:113;:::o;31846:376::-;32055:41;32074:12;:10;:12::i;:::-;32088:7;32055:18;:41::i;:::-;32033:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:28;32196:4;32202:2;32206:7;32186:9;:28::i;:::-;31846:376;;;:::o;55823:108::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55911:12:::1;55897:11;;:26;;;;;;;;;;;;;;;;;;55823:108:::0;:::o;42854:343::-;42996:7;43051:23;43068:5;43051:16;:23::i;:::-;43043:5;:31;43021:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;43163:12;:19;43176:5;43163:19;;;;;;;;;;;;;;;:26;43183:5;43163:26;;;;;;;;;;;;43156:33;;42854:343;;;;:::o;49284:42::-;49321:5;49284:42;:::o;55397:80::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55460:9:::1;;;;;;;;;;;55459:10;55447:9;;:22;;;;;;;;;;;;;;;;;;55397:80::o:0;32293:185::-;32431:39;32448:4;32454:2;32458:7;32431:39;;;;;;;;;;;;:16;:39::i;:::-;32293:185;;;:::o;56456:112::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56547:13:::1;56532:12;:28;;;;56456:112:::0;:::o;49654:32::-;;;;:::o;43463:320::-;43583:7;43638:30;:28;:30::i;:::-;43630:5;:38;43608:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;43758:10;43769:5;43758:17;;;;;;;;:::i;:::-;;;;;;;;;;43751:24;;43463:320;;;:::o;56808:145::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56866:15:::1;56884:21;56866:39;;56924:2;56916:20;;:29;56937:7;56916:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56855:98;56808:145:::0;:::o;56576:92::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56652:8:::1;56642:7;:18;;;;56576:92:::0;:::o;56073:104::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56158:11:::1;56148:7;:21;;;;;;;;;;;;:::i;:::-;;56073:104:::0;:::o;28841:326::-;28958:7;28983:13;28999:7;:16;29007:7;28999:16;;;;;;;;;;;;;;;;;;;;;28983:32;;29065:1;29048:19;;:5;:19;;;;29026:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29154:5;29147:12;;;28841:326;;;:::o;49368:36::-;;;;:::o;56676:124::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56774:18:::1;56754:17;:38;;;;56676:124:::0;:::o;49186:29::-;;;;;;;;;;;;;:::o;49146:33::-;;;;;;;;;;;;;:::o;28484:295::-;28601:7;28665:1;28648:19;;:5;:19;;;;28626:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28755:9;:16;28765:5;28755:16;;;;;;;;;;;;;;;;28748:23;;28484:295;;;:::o;7281:103::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7346:30:::1;7373:1;7346:18;:30::i;:::-;7281:103::o:0;49411:31::-;;;;:::o;49449:27::-;;;;:::o;49333:28::-;;;;:::o;6630:87::-;6676:7;6703:6;;;;;;;;;;;6696:13;;6630:87;:::o;29403:104::-;29459:13;29492:7;29485:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29403:104;:::o;56344:::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56429:11:::1;56416:10;:24;;;;56344:104:::0;:::o;50264:783::-;49321:5;50365:13;50349;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;50327:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;50514:13;;50497;50481;:11;:13::i;:::-;:29;;;;:::i;:::-;:46;;50459:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;50610:13;;;;;;;;;;;50602:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50729:10;;50712:13;50688:21;50698:10;50688:9;:21::i;:::-;:37;;;;:::i;:::-;:51;;50666:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;50858:9;50845;;50829:13;:25;;;;:::i;:::-;:38;;50807:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;50952:7;;50935:13;:24;;50927:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51007:32;51013:13;51028:10;51007:5;:32::i;:::-;50264:783;:::o;31307:187::-;31434:52;31453:12;:10;:12::i;:::-;31467:8;31477;31434:18;:52::i;:::-;31307:187;;:::o;49521:26::-;;;;;;;;;;;;;:::o;49222:35::-;;;;;;;;;;;;;:::o;32549:365::-;32738:41;32757:12;:10;:12::i;:::-;32771:7;32738:18;:41::i;:::-;32716:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32867:39;32881:4;32887:2;32891:7;32900:5;32867:13;:39::i;:::-;32549:365;;;;:::o;52603:513::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49321:5:::1;52764:13;52748;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;52726:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;52921:10;;52904:13;52880:21;52890:10;52880:9;:21::i;:::-;:37;;;;:::i;:::-;:51;;52858:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;53024:7;;53007:13;:24;;52999:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53081:27;53087:13;53102:5;53081;:27::i;:::-;52603:513:::0;;:::o;49610:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54146:992::-;54264:13;54317:16;54325:7;54317;:16::i;:::-;54295:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;54438:5;54425:18;;:9;;;;;;;;;;;:18;;;54421:72;;;54467:14;54460:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54421:72;54505:23;54531:10;:19;54542:7;54531:19;;;;;;;;;;;54505:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54561:18;54582:10;:8;:10::i;:::-;54561:31;;54690:1;54674:4;54668:18;:23;54664:72;;;54715:9;54708:16;;;;;;54664:72;54866:1;54846:9;54840:23;:27;54836:108;;;54915:4;54921:9;54898:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54884:48;;;;;;54836:108;55089:4;55095:18;:7;:16;:18::i;:::-;55115:13;55072:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55045:85;;;;54146:992;;;;:::o;49483:31::-;;;;:::o;51055:974::-;51194:16;:28;51211:10;51194:28;;;;;;;;;;;;;;;;;;;;;;;;;51193:29;51185:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;51261:15;;;;;;;;;;;51253:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51392:12;;51375:13;51351:21;51361:10;51351:9;:21::i;:::-;:37;;;;:::i;:::-;:53;;51329:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51537:13;;51520;51504;:11;:13::i;:::-;:29;;;;:::i;:::-;:46;;51482:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;51676:9;51663;;51647:13;:25;;;;:::i;:::-;:38;;51625:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;51745:12;51787:10;51770:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;51760:39;;;;;;51745:54;;51832:57;51851:12;;51832:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51865:17;;51884:4;51832:18;:57::i;:::-;51810:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;51974:4;51943:16;:28;51960:10;51943:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;51989:32;51995:13;52010:10;51989:5;:32::i;:::-;51174:855;51055:974;;;:::o;56185:151::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56311:17:::1;56295:13;:33;;;;;;;;;;;;:::i;:::-;;56185:151:::0;:::o;49747:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;55591:116::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55685:14:::1;55669:13;:30;;;;55591:116:::0;:::o;52037:558::-;49321:5;52154:13;52138;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;52116:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;52311:10;;52294:13;52270:21;52280:10;52270:9;:21::i;:::-;:37;;;;:::i;:::-;:51;;52248:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;52424:7;;52407:13;:24;;52399:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52501:11;;;;;;;;;;;52487:25;;:10;:25;;;52479:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52560:27;52566:13;52581:5;52560;:27::i;:::-;52037:558;;:::o;55297:92::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55368:13:::1;;;;;;;;;;;55367:14;55351:13;;:30;;;;;;;;;;;;;;;;;;55297:92::o:0;31565:214::-;31707:4;31736:18;:25;31755:5;31736:25;;;;;;;;;;;;;;;:35;31762:8;31736:35;;;;;;;;;;;;;;;;;;;;;;;;;31729:42;;31565:214;;;;:::o;55939:126::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56042:15:::1;56025:14;:32;;;;;;;;;;;;:::i;:::-;;55939:126:::0;:::o;7539:238::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7662:1:::1;7642:22;;:8;:22;;;;7620:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7741:28;7760:8;7741:18;:28::i;:::-;7539:238:::0;:::o;55715:100::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55797:10:::1;55785:9;:22;;;;55715:100:::0;:::o;53124:710::-;6861:12;:10;:12::i;:::-;6850:23;;:7;:5;:7::i;:::-;:23;;;6842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49321:5:::1;53304;;:12;;53288:13;:28;;;;:::i;:::-;53271:13;:11;:13::i;:::-;:46;;;;:::i;:::-;:60;;53263:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;49321:5;53414:13;53398;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;53376:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;53571:10;;53554:13;53530:21;53540:10;53530:9;:21::i;:::-;:37;;;;:::i;:::-;:51;;53508:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;53674:7;;53657:13;:24;;53649:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53733:9;53729:98;53752:5;;:12;;53748:1;:16;53729:98;;;53785:30;53791:13;53806:5;;53812:1;53806:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53785:5;:30::i;:::-;53766:3;;;;;:::i;:::-;;;;53729:98;;;;53124:710:::0;;;:::o;28065:355::-;28212:4;28269:25;28254:40;;;:11;:40;;;;:105;;;;28326:33;28311:48;;;:11;:48;;;;28254:105;:158;;;;28376:36;28400:11;28376:23;:36::i;:::-;28254:158;28234:178;;28065:355;;;:::o;34461:127::-;34526:4;34578:1;34550:30;;:7;:16;34558:7;34550:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34543:37;;34461:127;;;:::o;5333:98::-;5386:7;5413:10;5406:17;;5333:98;:::o;38584:174::-;38686:2;38659:15;:24;38675:7;38659:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38742:7;38738:2;38704:46;;38713:23;38728:7;38713:14;:23::i;:::-;38704:46;;;;;;;;;;;;38584:174;;:::o;34755:452::-;34884:4;34928:16;34936:7;34928;:16::i;:::-;34906:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35027:13;35043:23;35058:7;35043:14;:23::i;:::-;35027:39;;35096:5;35085:16;;:7;:16;;;:64;;;;35142:7;35118:31;;:20;35130:7;35118:11;:20::i;:::-;:31;;;35085:64;:113;;;;35166:32;35183:5;35190:7;35166:16;:32::i;:::-;35085:113;35077:122;;;34755:452;;;;:::o;37851:615::-;38024:4;37997:31;;:23;38012:7;37997:14;:23::i;:::-;:31;;;37975:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;38130:1;38116:16;;:2;:16;;;;38108:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38186:39;38207:4;38213:2;38217:7;38186:20;:39::i;:::-;38290:29;38307:1;38311:7;38290:8;:29::i;:::-;38351:1;38332:9;:15;38342:4;38332:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38380:1;38363:9;:13;38373:2;38363:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38411:2;38392:7;:16;38400:7;38392:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38450:7;38446:2;38431:27;;38440:4;38431:27;;;;;;;;;;;;37851:615;;;:::o;7937:191::-;8011:16;8030:6;;;;;;;;;;;8011:25;;8056:8;8047:6;;:17;;;;;;;;;;;;;;;;;;8111:8;8080:40;;8101:8;8080:40;;;;;;;;;;;;8000:128;7937:191;:::o;53842:296::-;53920:9;53915:216;53939:13;53935:1;:17;53915:216;;;53974:17;54010:1;53994:13;:11;:13::i;:::-;:17;;;;:::i;:::-;53974:37;;49321:5;54030:13;:11;:13::i;:::-;:26;54026:94;;;54077:27;54087:5;54094:9;54077;:27::i;:::-;54026:94;53959:172;53954:3;;;;;:::i;:::-;;;;53915:216;;;;53842:296;;:::o;38900:315::-;39055:8;39046:17;;:5;:17;;;;39038:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39142:8;39104:18;:25;39123:5;39104:25;;;;;;;;;;;;;;;:35;39130:8;39104:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39188:8;39166:41;;39181:5;39166:41;;;39198:8;39166:41;;;;;;:::i;:::-;;;;;;;;38900:315;;;:::o;33796:352::-;33953:28;33963:4;33969:2;33973:7;33953:9;:28::i;:::-;34014:48;34037:4;34043:2;34047:7;34056:5;34014:22;:48::i;:::-;33992:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;33796:352;;;;:::o;55163:108::-;55223:13;55256:7;55249:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55163:108;:::o;2865:723::-;2921:13;3151:1;3142:5;:10;3138:53;;;3169:10;;;;;;;;;;;;;;;;;;;;;3138:53;3201:12;3216:5;3201:20;;3232:14;3257:78;3272:1;3264:4;:9;3257:78;;3290:8;;;;;:::i;:::-;;;;3321:2;3313:10;;;;;:::i;:::-;;;3257:78;;;3345:19;3377:6;3367:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39;;3395:154;3411:1;3402:5;:10;3395:154;;3439:1;3429:11;;;;;:::i;:::-;;;3506:2;3498:5;:10;;;;:::i;:::-;3485:2;:24;;;;:::i;:::-;3472:39;;3455:6;3462;3455:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3535:2;3526:11;;;;;:::i;:::-;;;3395:154;;;3573:6;3559:21;;;;;2865:723;;;;:::o;954:190::-;1079:4;1132;1103:25;1116:5;1123:4;1103:12;:25::i;:::-;:33;1096:40;;954:190;;;;;:::o;19556:207::-;19686:4;19730:25;19715:40;;;:11;:40;;;;19708:47;;19556:207;;;:::o;44396:589::-;44540:45;44567:4;44573:2;44577:7;44540:26;:45::i;:::-;44618:1;44602:18;;:4;:18;;;44598:187;;;44637:40;44669:7;44637:31;:40::i;:::-;44598:187;;;44707:2;44699:10;;:4;:10;;;44695:90;;44726:47;44759:4;44765:7;44726:32;:47::i;:::-;44695:90;44598:187;44813:1;44799:16;;:2;:16;;;44795:183;;;44832:45;44869:7;44832:36;:45::i;:::-;44795:183;;;44905:4;44899:10;;:2;:10;;;44895:83;;44926:40;44954:2;44958:7;44926:27;:40::i;:::-;44895:83;44795:183;44396:589;;;:::o;35549:110::-;35625:26;35635:2;35639:7;35625:26;;;;;;;;;;;;:9;:26::i;:::-;35549:110;;:::o;39780:980::-;39935:4;39956:15;:2;:13;;;:15::i;:::-;39952:801;;;40025:2;40009:36;;;40068:12;:10;:12::i;:::-;40103:4;40130:7;40160:5;40009:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39988:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40384:1;40367:6;:13;:18;40363:320;;;40410:108;;;;;;;;;;:::i;:::-;;;;;;;;40363:320;40633:6;40627:13;40618:6;40614:2;40610:15;40603:38;39988:710;40258:41;;;40248:51;;;:6;:51;;;;40241:58;;;;;39952:801;40737:4;40730:11;;39780:980;;;;;;;:::o;1506:707::-;1616:7;1641:20;1664:4;1641:27;;1684:9;1679:497;1703:5;:12;1699:1;:16;1679:497;;;1737:20;1760:5;1766:1;1760:8;;;;;;;;:::i;:::-;;;;;;;;1737:31;;1803:12;1787;:28;1783:382;;1930:42;1945:12;1959;1930:14;:42::i;:::-;1915:57;;1783:382;;;2107:42;2122:12;2136;2107:14;:42::i;:::-;2092:57;;1783:382;1722:454;1717:3;;;;;:::i;:::-;;;;1679:497;;;;2193:12;2186:19;;;1506:707;;;;:::o;41332:126::-;;;;:::o;45708:164::-;45812:10;:17;;;;45785:15;:24;45801:7;45785:24;;;;;;;;;;;:44;;;;45840:10;45856:7;45840:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45708:164;:::o;46499:1002::-;46779:22;46829:1;46804:22;46821:4;46804:16;:22::i;:::-;:26;;;;:::i;:::-;46779:51;;46841:18;46862:17;:26;46880:7;46862:26;;;;;;;;;;;;46841:47;;47009:14;46995:10;:28;46991:328;;47040:19;47062:12;:18;47075:4;47062:18;;;;;;;;;;;;;;;:34;47081:14;47062:34;;;;;;;;;;;;47040:56;;47146:11;47113:12;:18;47126:4;47113:18;;;;;;;;;;;;;;;:30;47132:10;47113:30;;;;;;;;;;;:44;;;;47263:10;47230:17;:30;47248:11;47230:30;;;;;;;;;;;:43;;;;47025:294;46991:328;47415:17;:26;47433:7;47415:26;;;;;;;;;;;47408:33;;;47459:12;:18;47472:4;47459:18;;;;;;;;;;;;;;;:34;47478:14;47459:34;;;;;;;;;;;47452:41;;;46594:907;;46499:1002;;:::o;47796:1079::-;48049:22;48094:1;48074:10;:17;;;;:21;;;;:::i;:::-;48049:46;;48106:18;48127:15;:24;48143:7;48127:24;;;;;;;;;;;;48106:45;;48478:19;48500:10;48511:14;48500:26;;;;;;;;:::i;:::-;;;;;;;;;;48478:48;;48564:11;48539:10;48550;48539:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48675:10;48644:15;:28;48660:11;48644:28;;;;;;;;;;;:41;;;;48816:15;:24;48832:7;48816:24;;;;;;;;;;;48809:31;;;48851:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47867:1008;;;47796:1079;:::o;45286:221::-;45371:14;45388:20;45405:2;45388:16;:20::i;:::-;45371:37;;45446:7;45419:12;:16;45432:2;45419:16;;;;;;;;;;;;;;;:24;45436:6;45419:24;;;;;;;;;;;:34;;;;45493:6;45464:17;:26;45482:7;45464:26;;;;;;;;;;;:35;;;;45360:147;45286:221;;:::o;35886:321::-;36016:18;36022:2;36026:7;36016:5;:18::i;:::-;36067:54;36098:1;36102:2;36106:7;36115:5;36067:22;:54::i;:::-;36045:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35886:321;;;:::o;8953:387::-;9013:4;9221:12;9288:7;9276:20;9268:28;;9331:1;9324:4;:8;9317:15;;;8953:387;;;:::o;2221:256::-;2316:13;2384:1;2378:4;2371:15;2413:1;2407:4;2400:15;2454:4;2448;2438:21;2429:30;;2221:256;;;;:::o;36543:382::-;36637:1;36623:16;;:2;:16;;;;36615:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36696:16;36704:7;36696;:16::i;:::-;36695:17;36687:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36758:45;36787:1;36791:2;36795:7;36758:20;:45::i;:::-;36833:1;36816:9;:13;36826:2;36816:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36864:2;36845:7;:16;36853:7;36845:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36909:7;36905:2;36884:33;;36901:1;36884:33;;;;;;;;;;;;36543:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:139::-;2353:5;2391:6;2378:20;2369:29;;2407:33;2434:5;2407:33;:::i;:::-;2307:139;;;;:::o;2452:137::-;2497:5;2535:6;2522:20;2513:29;;2551:32;2577:5;2551:32;:::i;:::-;2452:137;;;;:::o;2595:141::-;2651:5;2682:6;2676:13;2667:22;;2698:32;2724:5;2698:32;:::i;:::-;2595:141;;;;:::o;2755:338::-;2810:5;2859:3;2852:4;2844:6;2840:17;2836:27;2826:122;;2867:79;;:::i;:::-;2826:122;2984:6;2971:20;3009:78;3083:3;3075:6;3068:4;3060:6;3056:17;3009:78;:::i;:::-;3000:87;;2816:277;2755:338;;;;:::o;3113:340::-;3169:5;3218:3;3211:4;3203:6;3199:17;3195:27;3185:122;;3226:79;;:::i;:::-;3185:122;3343:6;3330:20;3368:79;3443:3;3435:6;3428:4;3420:6;3416:17;3368:79;:::i;:::-;3359:88;;3175:278;3113:340;;;;:::o;3459:139::-;3505:5;3543:6;3530:20;3521:29;;3559:33;3586:5;3559:33;:::i;:::-;3459:139;;;;:::o;3604:329::-;3663:6;3712:2;3700:9;3691:7;3687:23;3683:32;3680:119;;;3718:79;;:::i;:::-;3680:119;3838:1;3863:53;3908:7;3899:6;3888:9;3884:22;3863:53;:::i;:::-;3853:63;;3809:117;3604:329;;;;:::o;3939:474::-;4007:6;4015;4064:2;4052:9;4043:7;4039:23;4035:32;4032:119;;;4070:79;;:::i;:::-;4032:119;4190:1;4215:53;4260:7;4251:6;4240:9;4236:22;4215:53;:::i;:::-;4205:63;;4161:117;4317:2;4343:53;4388:7;4379:6;4368:9;4364:22;4343:53;:::i;:::-;4333:63;;4288:118;3939:474;;;;;:::o;4419:619::-;4496:6;4504;4512;4561:2;4549:9;4540:7;4536:23;4532:32;4529:119;;;4567:79;;:::i;:::-;4529:119;4687:1;4712:53;4757:7;4748:6;4737:9;4733:22;4712:53;:::i;:::-;4702:63;;4658:117;4814:2;4840:53;4885:7;4876:6;4865:9;4861:22;4840:53;:::i;:::-;4830:63;;4785:118;4942:2;4968:53;5013:7;5004:6;4993:9;4989:22;4968:53;:::i;:::-;4958:63;;4913:118;4419:619;;;;;:::o;5044:943::-;5139:6;5147;5155;5163;5212:3;5200:9;5191:7;5187:23;5183:33;5180:120;;;5219:79;;:::i;:::-;5180:120;5339:1;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5310:117;5466:2;5492:53;5537:7;5528:6;5517:9;5513:22;5492:53;:::i;:::-;5482:63;;5437:118;5594:2;5620:53;5665:7;5656:6;5645:9;5641:22;5620:53;:::i;:::-;5610:63;;5565:118;5750:2;5739:9;5735:18;5722:32;5781:18;5773:6;5770:30;5767:117;;;5803:79;;:::i;:::-;5767:117;5908:62;5962:7;5953:6;5942:9;5938:22;5908:62;:::i;:::-;5898:72;;5693:287;5044:943;;;;;;;:::o;5993:468::-;6058:6;6066;6115:2;6103:9;6094:7;6090:23;6086:32;6083:119;;;6121:79;;:::i;:::-;6083:119;6241:1;6266:53;6311:7;6302:6;6291:9;6287:22;6266:53;:::i;:::-;6256:63;;6212:117;6368:2;6394:50;6436:7;6427:6;6416:9;6412:22;6394:50;:::i;:::-;6384:60;;6339:115;5993:468;;;;;:::o;6467:474::-;6535:6;6543;6592:2;6580:9;6571:7;6567:23;6563:32;6560:119;;;6598:79;;:::i;:::-;6560:119;6718:1;6743:53;6788:7;6779:6;6768:9;6764:22;6743:53;:::i;:::-;6733:63;;6689:117;6845:2;6871:53;6916:7;6907:6;6896:9;6892:22;6871:53;:::i;:::-;6861:63;;6816:118;6467:474;;;;;:::o;6947:329::-;7006:6;7055:2;7043:9;7034:7;7030:23;7026:32;7023:119;;;7061:79;;:::i;:::-;7023:119;7181:1;7206:53;7251:7;7242:6;7231:9;7227:22;7206:53;:::i;:::-;7196:63;;7152:117;6947:329;;;;:::o;7282:327::-;7340:6;7389:2;7377:9;7368:7;7364:23;7360:32;7357:119;;;7395:79;;:::i;:::-;7357:119;7515:1;7540:52;7584:7;7575:6;7564:9;7560:22;7540:52;:::i;:::-;7530:62;;7486:116;7282:327;;;;:::o;7615:349::-;7684:6;7733:2;7721:9;7712:7;7708:23;7704:32;7701:119;;;7739:79;;:::i;:::-;7701:119;7859:1;7884:63;7939:7;7930:6;7919:9;7915:22;7884:63;:::i;:::-;7874:73;;7830:127;7615:349;;;;:::o;7970:509::-;8039:6;8088:2;8076:9;8067:7;8063:23;8059:32;8056:119;;;8094:79;;:::i;:::-;8056:119;8242:1;8231:9;8227:17;8214:31;8272:18;8264:6;8261:30;8258:117;;;8294:79;;:::i;:::-;8258:117;8399:63;8454:7;8445:6;8434:9;8430:22;8399:63;:::i;:::-;8389:73;;8185:287;7970:509;;;;:::o;8485:329::-;8544:6;8593:2;8581:9;8572:7;8568:23;8564:32;8561:119;;;8599:79;;:::i;:::-;8561:119;8719:1;8744:53;8789:7;8780:6;8769:9;8765:22;8744:53;:::i;:::-;8734:63;;8690:117;8485:329;;;;:::o;8820:474::-;8888:6;8896;8945:2;8933:9;8924:7;8920:23;8916:32;8913:119;;;8951:79;;:::i;:::-;8913:119;9071:1;9096:53;9141:7;9132:6;9121:9;9117:22;9096:53;:::i;:::-;9086:63;;9042:117;9198:2;9224:53;9269:7;9260:6;9249:9;9245:22;9224:53;:::i;:::-;9214:63;;9169:118;8820:474;;;;;:::o;9300:704::-;9395:6;9403;9411;9460:2;9448:9;9439:7;9435:23;9431:32;9428:119;;;9466:79;;:::i;:::-;9428:119;9586:1;9611:53;9656:7;9647:6;9636:9;9632:22;9611:53;:::i;:::-;9601:63;;9557:117;9741:2;9730:9;9726:18;9713:32;9772:18;9764:6;9761:30;9758:117;;;9794:79;;:::i;:::-;9758:117;9907:80;9979:7;9970:6;9959:9;9955:22;9907:80;:::i;:::-;9889:98;;;;9684:313;9300:704;;;;;:::o;10010:::-;10105:6;10113;10121;10170:2;10158:9;10149:7;10145:23;10141:32;10138:119;;;10176:79;;:::i;:::-;10138:119;10296:1;10321:53;10366:7;10357:6;10346:9;10342:22;10321:53;:::i;:::-;10311:63;;10267:117;10451:2;10440:9;10436:18;10423:32;10482:18;10474:6;10471:30;10468:117;;;10504:79;;:::i;:::-;10468:117;10617:80;10689:7;10680:6;10669:9;10665:22;10617:80;:::i;:::-;10599:98;;;;10394:313;10010:704;;;;;:::o;10720:118::-;10807:24;10825:5;10807:24;:::i;:::-;10802:3;10795:37;10720:118;;:::o;10844:157::-;10949:45;10969:24;10987:5;10969:24;:::i;:::-;10949:45;:::i;:::-;10944:3;10937:58;10844:157;;:::o;11007:109::-;11088:21;11103:5;11088:21;:::i;:::-;11083:3;11076:34;11007:109;;:::o;11122:118::-;11209:24;11227:5;11209:24;:::i;:::-;11204:3;11197:37;11122:118;;:::o;11246:360::-;11332:3;11360:38;11392:5;11360:38;:::i;:::-;11414:70;11477:6;11472:3;11414:70;:::i;:::-;11407:77;;11493:52;11538:6;11533:3;11526:4;11519:5;11515:16;11493:52;:::i;:::-;11570:29;11592:6;11570:29;:::i;:::-;11565:3;11561:39;11554:46;;11336:270;11246:360;;;;:::o;11612:364::-;11700:3;11728:39;11761:5;11728:39;:::i;:::-;11783:71;11847:6;11842:3;11783:71;:::i;:::-;11776:78;;11863:52;11908:6;11903:3;11896:4;11889:5;11885:16;11863:52;:::i;:::-;11940:29;11962:6;11940:29;:::i;:::-;11935:3;11931:39;11924:46;;11704:272;11612:364;;;;:::o;11982:377::-;12088:3;12116:39;12149:5;12116:39;:::i;:::-;12171:89;12253:6;12248:3;12171:89;:::i;:::-;12164:96;;12269:52;12314:6;12309:3;12302:4;12295:5;12291:16;12269:52;:::i;:::-;12346:6;12341:3;12337:16;12330:23;;12092:267;11982:377;;;;:::o;12389:845::-;12492:3;12529:5;12523:12;12558:36;12584:9;12558:36;:::i;:::-;12610:89;12692:6;12687:3;12610:89;:::i;:::-;12603:96;;12730:1;12719:9;12715:17;12746:1;12741:137;;;;12892:1;12887:341;;;;12708:520;;12741:137;12825:4;12821:9;12810;12806:25;12801:3;12794:38;12861:6;12856:3;12852:16;12845:23;;12741:137;;12887:341;12954:38;12986:5;12954:38;:::i;:::-;13014:1;13028:154;13042:6;13039:1;13036:13;13028:154;;;13116:7;13110:14;13106:1;13101:3;13097:11;13090:35;13166:1;13157:7;13153:15;13142:26;;13064:4;13061:1;13057:12;13052:17;;13028:154;;;13211:6;13206:3;13202:16;13195:23;;12894:334;;12708:520;;12496:738;;12389:845;;;;:::o;13240:366::-;13382:3;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13479:93;13568:3;13479:93;:::i;:::-;13597:2;13592:3;13588:12;13581:19;;13240:366;;;:::o;13612:::-;13754:3;13775:67;13839:2;13834:3;13775:67;:::i;:::-;13768:74;;13851:93;13940:3;13851:93;:::i;:::-;13969:2;13964:3;13960:12;13953:19;;13612:366;;;:::o;13984:::-;14126:3;14147:67;14211:2;14206:3;14147:67;:::i;:::-;14140:74;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;13984:366;;;:::o;14356:::-;14498:3;14519:67;14583:2;14578:3;14519:67;:::i;:::-;14512:74;;14595:93;14684:3;14595:93;:::i;:::-;14713:2;14708:3;14704:12;14697:19;;14356:366;;;:::o;14728:::-;14870:3;14891:67;14955:2;14950:3;14891:67;:::i;:::-;14884:74;;14967:93;15056:3;14967:93;:::i;:::-;15085:2;15080:3;15076:12;15069:19;;14728:366;;;:::o;15100:::-;15242:3;15263:67;15327:2;15322:3;15263:67;:::i;:::-;15256:74;;15339:93;15428:3;15339:93;:::i;:::-;15457:2;15452:3;15448:12;15441:19;;15100:366;;;:::o;15472:::-;15614:3;15635:67;15699:2;15694:3;15635:67;:::i;:::-;15628:74;;15711:93;15800:3;15711:93;:::i;:::-;15829:2;15824:3;15820:12;15813:19;;15472:366;;;:::o;15844:::-;15986:3;16007:67;16071:2;16066:3;16007:67;:::i;:::-;16000:74;;16083:93;16172:3;16083:93;:::i;:::-;16201:2;16196:3;16192:12;16185:19;;15844:366;;;:::o;16216:::-;16358:3;16379:67;16443:2;16438:3;16379:67;:::i;:::-;16372:74;;16455:93;16544:3;16455:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16216:366;;;:::o;16588:::-;16730:3;16751:67;16815:2;16810:3;16751:67;:::i;:::-;16744:74;;16827:93;16916:3;16827:93;:::i;:::-;16945:2;16940:3;16936:12;16929:19;;16588:366;;;:::o;16960:::-;17102:3;17123:67;17187:2;17182:3;17123:67;:::i;:::-;17116:74;;17199:93;17288:3;17199:93;:::i;:::-;17317:2;17312:3;17308:12;17301:19;;16960:366;;;:::o;17332:::-;17474:3;17495:67;17559:2;17554:3;17495:67;:::i;:::-;17488:74;;17571:93;17660:3;17571:93;:::i;:::-;17689:2;17684:3;17680:12;17673:19;;17332:366;;;:::o;17704:::-;17846:3;17867:67;17931:2;17926:3;17867:67;:::i;:::-;17860:74;;17943:93;18032:3;17943:93;:::i;:::-;18061:2;18056:3;18052:12;18045:19;;17704:366;;;:::o;18076:::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:::-;18590:3;18611:67;18675:2;18670:3;18611:67;:::i;:::-;18604:74;;18687:93;18776:3;18687:93;:::i;:::-;18805:2;18800:3;18796:12;18789:19;;18448:366;;;:::o;18820:::-;18962:3;18983:67;19047:2;19042:3;18983:67;:::i;:::-;18976:74;;19059:93;19148:3;19059:93;:::i;:::-;19177:2;19172:3;19168:12;19161:19;;18820:366;;;:::o;19192:::-;19334:3;19355:67;19419:2;19414:3;19355:67;:::i;:::-;19348:74;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19192:366;;;:::o;19564:::-;19706:3;19727:67;19791:2;19786:3;19727:67;:::i;:::-;19720:74;;19803:93;19892:3;19803:93;:::i;:::-;19921:2;19916:3;19912:12;19905:19;;19564:366;;;:::o;19936:::-;20078:3;20099:67;20163:2;20158:3;20099:67;:::i;:::-;20092:74;;20175:93;20264:3;20175:93;:::i;:::-;20293:2;20288:3;20284:12;20277:19;;19936:366;;;:::o;20308:::-;20450:3;20471:67;20535:2;20530:3;20471:67;:::i;:::-;20464:74;;20547:93;20636:3;20547:93;:::i;:::-;20665:2;20660:3;20656:12;20649:19;;20308:366;;;:::o;20680:::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:::-;21938:3;21959:67;22023:2;22018:3;21959:67;:::i;:::-;21952:74;;22035:93;22124:3;22035:93;:::i;:::-;22153:2;22148:3;22144:12;22137:19;;21796:366;;;:::o;22168:::-;22310:3;22331:67;22395:2;22390:3;22331:67;:::i;:::-;22324:74;;22407:93;22496:3;22407:93;:::i;:::-;22525:2;22520:3;22516:12;22509:19;;22168:366;;;:::o;22540:::-;22682:3;22703:67;22767:2;22762:3;22703:67;:::i;:::-;22696:74;;22779:93;22868:3;22779:93;:::i;:::-;22897:2;22892:3;22888:12;22881:19;;22540:366;;;:::o;22912:::-;23054:3;23075:67;23139:2;23134:3;23075:67;:::i;:::-;23068:74;;23151:93;23240:3;23151:93;:::i;:::-;23269:2;23264:3;23260:12;23253:19;;22912:366;;;:::o;23284:::-;23426:3;23447:67;23511:2;23506:3;23447:67;:::i;:::-;23440:74;;23523:93;23612:3;23523:93;:::i;:::-;23641:2;23636:3;23632:12;23625:19;;23284:366;;;:::o;23656:::-;23798:3;23819:67;23883:2;23878:3;23819:67;:::i;:::-;23812:74;;23895:93;23984:3;23895:93;:::i;:::-;24013:2;24008:3;24004:12;23997:19;;23656:366;;;:::o;24028:::-;24170:3;24191:67;24255:2;24250:3;24191:67;:::i;:::-;24184:74;;24267:93;24356:3;24267:93;:::i;:::-;24385:2;24380:3;24376:12;24369:19;;24028:366;;;:::o;24400:118::-;24487:24;24505:5;24487:24;:::i;:::-;24482:3;24475:37;24400:118;;:::o;24524:256::-;24636:3;24651:75;24722:3;24713:6;24651:75;:::i;:::-;24751:2;24746:3;24742:12;24735:19;;24771:3;24764:10;;24524:256;;;;:::o;24786:435::-;24966:3;24988:95;25079:3;25070:6;24988:95;:::i;:::-;24981:102;;25100:95;25191:3;25182:6;25100:95;:::i;:::-;25093:102;;25212:3;25205:10;;24786:435;;;;;:::o;25227:589::-;25452:3;25474:95;25565:3;25556:6;25474:95;:::i;:::-;25467:102;;25586:95;25677:3;25668:6;25586:95;:::i;:::-;25579:102;;25698:92;25786:3;25777:6;25698:92;:::i;:::-;25691:99;;25807:3;25800:10;;25227:589;;;;;;:::o;25822:222::-;25915:4;25953:2;25942:9;25938:18;25930:26;;25966:71;26034:1;26023:9;26019:17;26010:6;25966:71;:::i;:::-;25822:222;;;;:::o;26050:640::-;26245:4;26283:3;26272:9;26268:19;26260:27;;26297:71;26365:1;26354:9;26350:17;26341:6;26297:71;:::i;:::-;26378:72;26446:2;26435:9;26431:18;26422:6;26378:72;:::i;:::-;26460;26528:2;26517:9;26513:18;26504:6;26460:72;:::i;:::-;26579:9;26573:4;26569:20;26564:2;26553:9;26549:18;26542:48;26607:76;26678:4;26669:6;26607:76;:::i;:::-;26599:84;;26050:640;;;;;;;:::o;26696:210::-;26783:4;26821:2;26810:9;26806:18;26798:26;;26834:65;26896:1;26885:9;26881:17;26872:6;26834:65;:::i;:::-;26696:210;;;;:::o;26912:222::-;27005:4;27043:2;27032:9;27028:18;27020:26;;27056:71;27124:1;27113:9;27109:17;27100:6;27056:71;:::i;:::-;26912:222;;;;:::o;27140:313::-;27253:4;27291:2;27280:9;27276:18;27268:26;;27340:9;27334:4;27330:20;27326:1;27315:9;27311:17;27304:47;27368:78;27441:4;27432:6;27368:78;:::i;:::-;27360:86;;27140:313;;;;:::o;27459:419::-;27625:4;27663:2;27652:9;27648:18;27640:26;;27712:9;27706:4;27702:20;27698:1;27687:9;27683:17;27676:47;27740:131;27866:4;27740:131;:::i;:::-;27732:139;;27459:419;;;:::o;27884:::-;28050:4;28088:2;28077:9;28073:18;28065:26;;28137:9;28131:4;28127:20;28123:1;28112:9;28108:17;28101:47;28165:131;28291:4;28165:131;:::i;:::-;28157:139;;27884:419;;;:::o;28309:::-;28475:4;28513:2;28502:9;28498:18;28490:26;;28562:9;28556:4;28552:20;28548:1;28537:9;28533:17;28526:47;28590:131;28716:4;28590:131;:::i;:::-;28582:139;;28309:419;;;:::o;28734:::-;28900:4;28938:2;28927:9;28923:18;28915:26;;28987:9;28981:4;28977:20;28973:1;28962:9;28958:17;28951:47;29015:131;29141:4;29015:131;:::i;:::-;29007:139;;28734:419;;;:::o;29159:::-;29325:4;29363:2;29352:9;29348:18;29340:26;;29412:9;29406:4;29402:20;29398:1;29387:9;29383:17;29376:47;29440:131;29566:4;29440:131;:::i;:::-;29432:139;;29159:419;;;:::o;29584:::-;29750:4;29788:2;29777:9;29773:18;29765:26;;29837:9;29831:4;29827:20;29823:1;29812:9;29808:17;29801:47;29865:131;29991:4;29865:131;:::i;:::-;29857:139;;29584:419;;;:::o;30009:::-;30175:4;30213:2;30202:9;30198:18;30190:26;;30262:9;30256:4;30252:20;30248:1;30237:9;30233:17;30226:47;30290:131;30416:4;30290:131;:::i;:::-;30282:139;;30009:419;;;:::o;30434:::-;30600:4;30638:2;30627:9;30623:18;30615:26;;30687:9;30681:4;30677:20;30673:1;30662:9;30658:17;30651:47;30715:131;30841:4;30715:131;:::i;:::-;30707:139;;30434:419;;;:::o;30859:::-;31025:4;31063:2;31052:9;31048:18;31040:26;;31112:9;31106:4;31102:20;31098:1;31087:9;31083:17;31076:47;31140:131;31266:4;31140:131;:::i;:::-;31132:139;;30859:419;;;:::o;31284:::-;31450:4;31488:2;31477:9;31473:18;31465:26;;31537:9;31531:4;31527:20;31523:1;31512:9;31508:17;31501:47;31565:131;31691:4;31565:131;:::i;:::-;31557:139;;31284:419;;;:::o;31709:::-;31875:4;31913:2;31902:9;31898:18;31890:26;;31962:9;31956:4;31952:20;31948:1;31937:9;31933:17;31926:47;31990:131;32116:4;31990:131;:::i;:::-;31982:139;;31709:419;;;:::o;32134:::-;32300:4;32338:2;32327:9;32323:18;32315:26;;32387:9;32381:4;32377:20;32373:1;32362:9;32358:17;32351:47;32415:131;32541:4;32415:131;:::i;:::-;32407:139;;32134:419;;;:::o;32559:::-;32725:4;32763:2;32752:9;32748:18;32740:26;;32812:9;32806:4;32802:20;32798:1;32787:9;32783:17;32776:47;32840:131;32966:4;32840:131;:::i;:::-;32832:139;;32559:419;;;:::o;32984:::-;33150:4;33188:2;33177:9;33173:18;33165:26;;33237:9;33231:4;33227:20;33223:1;33212:9;33208:17;33201:47;33265:131;33391:4;33265:131;:::i;:::-;33257:139;;32984:419;;;:::o;33409:::-;33575:4;33613:2;33602:9;33598:18;33590:26;;33662:9;33656:4;33652:20;33648:1;33637:9;33633:17;33626:47;33690:131;33816:4;33690:131;:::i;:::-;33682:139;;33409:419;;;:::o;33834:::-;34000:4;34038:2;34027:9;34023:18;34015:26;;34087:9;34081:4;34077:20;34073:1;34062:9;34058:17;34051:47;34115:131;34241:4;34115:131;:::i;:::-;34107:139;;33834:419;;;:::o;34259:::-;34425:4;34463:2;34452:9;34448:18;34440:26;;34512:9;34506:4;34502:20;34498:1;34487:9;34483:17;34476:47;34540:131;34666:4;34540:131;:::i;:::-;34532:139;;34259:419;;;:::o;34684:::-;34850:4;34888:2;34877:9;34873:18;34865:26;;34937:9;34931:4;34927:20;34923:1;34912:9;34908:17;34901:47;34965:131;35091:4;34965:131;:::i;:::-;34957:139;;34684:419;;;:::o;35109:::-;35275:4;35313:2;35302:9;35298:18;35290:26;;35362:9;35356:4;35352:20;35348:1;35337:9;35333:17;35326:47;35390:131;35516:4;35390:131;:::i;:::-;35382:139;;35109:419;;;:::o;35534:::-;35700:4;35738:2;35727:9;35723:18;35715:26;;35787:9;35781:4;35777:20;35773:1;35762:9;35758:17;35751:47;35815:131;35941:4;35815:131;:::i;:::-;35807:139;;35534:419;;;:::o;35959:::-;36125:4;36163:2;36152:9;36148:18;36140:26;;36212:9;36206:4;36202:20;36198:1;36187:9;36183:17;36176:47;36240:131;36366:4;36240:131;:::i;:::-;36232:139;;35959:419;;;:::o;36384:::-;36550:4;36588:2;36577:9;36573:18;36565:26;;36637:9;36631:4;36627:20;36623:1;36612:9;36608:17;36601:47;36665:131;36791:4;36665:131;:::i;:::-;36657:139;;36384:419;;;:::o;36809:::-;36975:4;37013:2;37002:9;36998:18;36990:26;;37062:9;37056:4;37052:20;37048:1;37037:9;37033:17;37026:47;37090:131;37216:4;37090:131;:::i;:::-;37082:139;;36809:419;;;:::o;37234:::-;37400:4;37438:2;37427:9;37423:18;37415:26;;37487:9;37481:4;37477:20;37473:1;37462:9;37458:17;37451:47;37515:131;37641:4;37515:131;:::i;:::-;37507:139;;37234:419;;;:::o;37659:::-;37825:4;37863:2;37852:9;37848:18;37840:26;;37912:9;37906:4;37902:20;37898:1;37887:9;37883:17;37876:47;37940:131;38066:4;37940:131;:::i;:::-;37932:139;;37659:419;;;:::o;38084:::-;38250:4;38288:2;38277:9;38273:18;38265:26;;38337:9;38331:4;38327:20;38323:1;38312:9;38308:17;38301:47;38365:131;38491:4;38365:131;:::i;:::-;38357:139;;38084:419;;;:::o;38509:::-;38675:4;38713:2;38702:9;38698:18;38690:26;;38762:9;38756:4;38752:20;38748:1;38737:9;38733:17;38726:47;38790:131;38916:4;38790:131;:::i;:::-;38782:139;;38509:419;;;:::o;38934:::-;39100:4;39138:2;39127:9;39123:18;39115:26;;39187:9;39181:4;39177:20;39173:1;39162:9;39158:17;39151:47;39215:131;39341:4;39215:131;:::i;:::-;39207:139;;38934:419;;;:::o;39359:::-;39525:4;39563:2;39552:9;39548:18;39540:26;;39612:9;39606:4;39602:20;39598:1;39587:9;39583:17;39576:47;39640:131;39766:4;39640:131;:::i;:::-;39632:139;;39359:419;;;:::o;39784:::-;39950:4;39988:2;39977:9;39973:18;39965:26;;40037:9;40031:4;40027:20;40023:1;40012:9;40008:17;40001:47;40065:131;40191:4;40065:131;:::i;:::-;40057:139;;39784:419;;;:::o;40209:222::-;40302:4;40340:2;40329:9;40325:18;40317:26;;40353:71;40421:1;40410:9;40406:17;40397:6;40353:71;:::i;:::-;40209:222;;;;:::o;40437:129::-;40471:6;40498:20;;:::i;:::-;40488:30;;40527:33;40555:4;40547:6;40527:33;:::i;:::-;40437:129;;;:::o;40572:75::-;40605:6;40638:2;40632:9;40622:19;;40572:75;:::o;40653:307::-;40714:4;40804:18;40796:6;40793:30;40790:56;;;40826:18;;:::i;:::-;40790:56;40864:29;40886:6;40864:29;:::i;:::-;40856:37;;40948:4;40942;40938:15;40930:23;;40653:307;;;:::o;40966:308::-;41028:4;41118:18;41110:6;41107:30;41104:56;;;41140:18;;:::i;:::-;41104:56;41178:29;41200:6;41178:29;:::i;:::-;41170:37;;41262:4;41256;41252:15;41244:23;;40966:308;;;:::o;41280:141::-;41329:4;41352:3;41344:11;;41375:3;41372:1;41365:14;41409:4;41406:1;41396:18;41388:26;;41280:141;;;:::o;41427:98::-;41478:6;41512:5;41506:12;41496:22;;41427:98;;;:::o;41531:99::-;41583:6;41617:5;41611:12;41601:22;;41531:99;;;:::o;41636:168::-;41719:11;41753:6;41748:3;41741:19;41793:4;41788:3;41784:14;41769:29;;41636:168;;;;:::o;41810:169::-;41894:11;41928:6;41923:3;41916:19;41968:4;41963:3;41959:14;41944:29;;41810:169;;;;:::o;41985:148::-;42087:11;42124:3;42109:18;;41985:148;;;;:::o;42139:305::-;42179:3;42198:20;42216:1;42198:20;:::i;:::-;42193:25;;42232:20;42250:1;42232:20;:::i;:::-;42227:25;;42386:1;42318:66;42314:74;42311:1;42308:81;42305:107;;;42392:18;;:::i;:::-;42305:107;42436:1;42433;42429:9;42422:16;;42139:305;;;;:::o;42450:185::-;42490:1;42507:20;42525:1;42507:20;:::i;:::-;42502:25;;42541:20;42559:1;42541:20;:::i;:::-;42536:25;;42580:1;42570:35;;42585:18;;:::i;:::-;42570:35;42627:1;42624;42620:9;42615:14;;42450:185;;;;:::o;42641:348::-;42681:7;42704:20;42722:1;42704:20;:::i;:::-;42699:25;;42738:20;42756:1;42738:20;:::i;:::-;42733:25;;42926:1;42858:66;42854:74;42851:1;42848:81;42843:1;42836:9;42829:17;42825:105;42822:131;;;42933:18;;:::i;:::-;42822:131;42981:1;42978;42974:9;42963:20;;42641:348;;;;:::o;42995:191::-;43035:4;43055:20;43073:1;43055:20;:::i;:::-;43050:25;;43089:20;43107:1;43089:20;:::i;:::-;43084:25;;43128:1;43125;43122:8;43119:34;;;43133:18;;:::i;:::-;43119:34;43178:1;43175;43171:9;43163:17;;42995:191;;;;:::o;43192:96::-;43229:7;43258:24;43276:5;43258:24;:::i;:::-;43247:35;;43192:96;;;:::o;43294:90::-;43328:7;43371:5;43364:13;43357:21;43346:32;;43294:90;;;:::o;43390:77::-;43427:7;43456:5;43445:16;;43390:77;;;:::o;43473:149::-;43509:7;43549:66;43542:5;43538:78;43527:89;;43473:149;;;:::o;43628:126::-;43665:7;43705:42;43698:5;43694:54;43683:65;;43628:126;;;:::o;43760:77::-;43797:7;43826:5;43815:16;;43760:77;;;:::o;43843:154::-;43927:6;43922:3;43917;43904:30;43989:1;43980:6;43975:3;43971:16;43964:27;43843:154;;;:::o;44003:307::-;44071:1;44081:113;44095:6;44092:1;44089:13;44081:113;;;44180:1;44175:3;44171:11;44165:18;44161:1;44156:3;44152:11;44145:39;44117:2;44114:1;44110:10;44105:15;;44081:113;;;44212:6;44209:1;44206:13;44203:101;;;44292:1;44283:6;44278:3;44274:16;44267:27;44203:101;44052:258;44003:307;;;:::o;44316:320::-;44360:6;44397:1;44391:4;44387:12;44377:22;;44444:1;44438:4;44434:12;44465:18;44455:81;;44521:4;44513:6;44509:17;44499:27;;44455:81;44583:2;44575:6;44572:14;44552:18;44549:38;44546:84;;;44602:18;;:::i;:::-;44546:84;44367:269;44316:320;;;:::o;44642:281::-;44725:27;44747:4;44725:27;:::i;:::-;44717:6;44713:40;44855:6;44843:10;44840:22;44819:18;44807:10;44804:34;44801:62;44798:88;;;44866:18;;:::i;:::-;44798:88;44906:10;44902:2;44895:22;44685:238;44642:281;;:::o;44929:233::-;44968:3;44991:24;45009:5;44991:24;:::i;:::-;44982:33;;45037:66;45030:5;45027:77;45024:103;;;45107:18;;:::i;:::-;45024:103;45154:1;45147:5;45143:13;45136:20;;44929:233;;;:::o;45168:100::-;45207:7;45236:26;45256:5;45236:26;:::i;:::-;45225:37;;45168:100;;;:::o;45274:94::-;45313:7;45342:20;45356:5;45342:20;:::i;:::-;45331:31;;45274:94;;;:::o;45374:176::-;45406:1;45423:20;45441:1;45423:20;:::i;:::-;45418:25;;45457:20;45475:1;45457:20;:::i;:::-;45452:25;;45496:1;45486:35;;45501:18;;:::i;:::-;45486:35;45542:1;45539;45535:9;45530:14;;45374:176;;;;:::o;45556:180::-;45604:77;45601:1;45594:88;45701:4;45698:1;45691:15;45725:4;45722:1;45715:15;45742:180;45790:77;45787:1;45780:88;45887:4;45884:1;45877:15;45911:4;45908:1;45901:15;45928:180;45976:77;45973:1;45966:88;46073:4;46070:1;46063:15;46097:4;46094:1;46087:15;46114:180;46162:77;46159:1;46152:88;46259:4;46256:1;46249:15;46283:4;46280:1;46273:15;46300:180;46348:77;46345:1;46338:88;46445:4;46442:1;46435:15;46469:4;46466:1;46459:15;46486:180;46534:77;46531:1;46524:88;46631:4;46628:1;46621:15;46655:4;46652:1;46645:15;46672:117;46781:1;46778;46771:12;46795:117;46904:1;46901;46894:12;46918:117;47027:1;47024;47017:12;47041:117;47150:1;47147;47140:12;47164:117;47273:1;47270;47263:12;47287:117;47396:1;47393;47386:12;47410:102;47451:6;47502:2;47498:7;47493:2;47486:5;47482:14;47478:28;47468:38;;47410:102;;;:::o;47518:94::-;47551:8;47599:5;47595:2;47591:14;47570:35;;47518:94;;;:::o;47618:230::-;47758:34;47754:1;47746:6;47742:14;47735:58;47827:13;47822:2;47814:6;47810:15;47803:38;47618:230;:::o;47854:224::-;47994:34;47990:1;47982:6;47978:14;47971:58;48063:7;48058:2;48050:6;48046:15;48039:32;47854:224;:::o;48084:237::-;48224:34;48220:1;48212:6;48208:14;48201:58;48293:20;48288:2;48280:6;48276:15;48269:45;48084:237;:::o;48327:225::-;48467:34;48463:1;48455:6;48451:14;48444:58;48536:8;48531:2;48523:6;48519:15;48512:33;48327:225;:::o;48558:178::-;48698:30;48694:1;48686:6;48682:14;48675:54;48558:178;:::o;48742:::-;48882:30;48878:1;48870:6;48866:14;48859:54;48742:178;:::o;48926:226::-;49066:34;49062:1;49054:6;49050:14;49043:58;49135:9;49130:2;49122:6;49118:15;49111:34;48926:226;:::o;49158:223::-;49298:34;49294:1;49286:6;49282:14;49275:58;49367:6;49362:2;49354:6;49350:15;49343:31;49158:223;:::o;49387:175::-;49527:27;49523:1;49515:6;49511:14;49504:51;49387:175;:::o;49568:177::-;49708:29;49704:1;49696:6;49692:14;49685:53;49568:177;:::o;49751:231::-;49891:34;49887:1;49879:6;49875:14;49868:58;49960:14;49955:2;49947:6;49943:15;49936:39;49751:231;:::o;49988:182::-;50128:34;50124:1;50116:6;50112:14;50105:58;49988:182;:::o;50176:179::-;50316:31;50312:1;50304:6;50300:14;50293:55;50176:179;:::o;50361:243::-;50501:34;50497:1;50489:6;50485:14;50478:58;50570:26;50565:2;50557:6;50553:15;50546:51;50361:243;:::o;50610:229::-;50750:34;50746:1;50738:6;50734:14;50727:58;50819:12;50814:2;50806:6;50802:15;50795:37;50610:229;:::o;50845:228::-;50985:34;50981:1;50973:6;50969:14;50962:58;51054:11;51049:2;51041:6;51037:15;51030:36;50845:228;:::o;51079:223::-;51219:34;51215:1;51207:6;51203:14;51196:58;51288:6;51283:2;51275:6;51271:15;51264:31;51079:223;:::o;51308:180::-;51448:32;51444:1;51436:6;51432:14;51425:56;51308:180;:::o;51494:182::-;51634:34;51630:1;51622:6;51618:14;51611:58;51494:182;:::o;51682:231::-;51822:34;51818:1;51810:6;51806:14;51799:58;51891:14;51886:2;51878:6;51874:15;51867:39;51682:231;:::o;51919:182::-;52059:34;52055:1;52047:6;52043:14;52036:58;51919:182;:::o;52107:228::-;52247:34;52243:1;52235:6;52231:14;52224:58;52316:11;52311:2;52303:6;52299:15;52292:36;52107:228;:::o;52341:234::-;52481:34;52477:1;52469:6;52465:14;52458:58;52550:17;52545:2;52537:6;52533:15;52526:42;52341:234;:::o;52581:220::-;52721:34;52717:1;52709:6;52705:14;52698:58;52790:3;52785:2;52777:6;52773:15;52766:28;52581:220;:::o;52807:165::-;52947:17;52943:1;52935:6;52931:14;52924:41;52807:165;:::o;52978:236::-;53118:34;53114:1;53106:6;53102:14;53095:58;53187:19;53182:2;53174:6;53170:15;53163:44;52978:236;:::o;53220:231::-;53360:34;53356:1;53348:6;53344:14;53337:58;53429:14;53424:2;53416:6;53412:15;53405:39;53220:231;:::o;53457:171::-;53597:23;53593:1;53585:6;53581:14;53574:47;53457:171;:::o;53634:163::-;53774:15;53770:1;53762:6;53758:14;53751:39;53634:163;:::o;53803:179::-;53943:31;53939:1;53931:6;53927:14;53920:55;53803:179;:::o;53988:122::-;54061:24;54079:5;54061:24;:::i;:::-;54054:5;54051:35;54041:63;;54100:1;54097;54090:12;54041:63;53988:122;:::o;54116:116::-;54186:21;54201:5;54186:21;:::i;:::-;54179:5;54176:32;54166:60;;54222:1;54219;54212:12;54166:60;54116:116;:::o;54238:122::-;54311:24;54329:5;54311:24;:::i;:::-;54304:5;54301:35;54291:63;;54350:1;54347;54340:12;54291:63;54238:122;:::o;54366:120::-;54438:23;54455:5;54438:23;:::i;:::-;54431:5;54428:34;54418:62;;54476:1;54473;54466:12;54418:62;54366:120;:::o;54492:122::-;54565:24;54583:5;54565:24;:::i;:::-;54558:5;54555:35;54545:63;;54604:1;54601;54594:12;54545:63;54492:122;:::o

Swarm Source

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