ETH Price: $3,174.85 (+2.32%)

Token

MetaPass Genesis (METAJAM)
 

Overview

Max Total Supply

2,026 METAJAM

Holders

728

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 METAJAM
0x4b4F2702e80DfE11197902ed7A4431B988585912
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:
METAJAM

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be 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);

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

// File: contracts/MetaPass-ERC721-v1.sol



pragma solidity >=0.7.0 <0.9.0;




contract METAJAM is ERC721, Ownable {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private supply;
    Counters.Counter private supplyPublic;

    string public uriPrefix =
        "ipfs://QmXmJqC6FQ2FQkncRkcCG84DuZGgBFXmUiY9XRi2rirz5w/";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;

    uint256 public cost = 0.08 ether;
    uint256 public maxSupply = 5000;
    uint256 public maxMintPerWallet = 5;
    uint256 public mintStartTime = 1651118400;
    mapping(address => uint256) public addressMintedBalance;

    // Public Sale
    uint256 public public_maxSupply = 3050; // 750 + WL_Sale + OG_Sale

    // Whitelist Presale
    uint256 public wl_cost = 0.065 ether;
    uint256 public wl_maxSupply = 2300; // 2000 + OG_Sale
    uint256 public wl_maxMintPerWallet = 2;
    uint256 public wl_mintStartTime = 1651075200;
    mapping(address => bool) public wl_whitelistedAddresses;
    mapping(address => uint256) public wl_addressMintedBalance;

    // OG Sale
    uint256 public og_cost = 0.05 ether;
    uint256 public og_maxSupply = 300;
    uint256 public og_maxMintPerWallet = 1;
    uint256 public og_mintStartTime = 1651068000;
    mapping(address => bool) public og_whitelistedAddresses;
    mapping(address => uint256) public og_addressMintedBalance;

    bool public paused = false;
    bool public revealed = true;

    constructor() ERC721("MetaPass Genesis", "METAJAM") {}

    modifier mintCompliance(uint256 _mintAmount) {
        require(_mintAmount > 0, "Invalid mint amount!");
        require(
            supply.current() + _mintAmount <= maxSupply,
            "Max supply exceeded!"
        );

        if (msg.sender != owner()) {
            require(_mintAmount <= maxMintPerWallet, "Invalid mint amount!");
            if (isPublic()) {
                require(
                    supplyPublic.current() + _mintAmount <= public_maxSupply,
                    "Max supply for Presale exceeded!"
                );
            } else if (isPresale()) {
                require(
                    supplyPublic.current() + _mintAmount <= wl_maxSupply,
                    "Max supply for Presale exceeded!"
                );
            } else if (isOGSale()) {
                require(
                    supplyPublic.current() + _mintAmount <= og_maxSupply,
                    "Max supply for Presale exceeded!"
                );
            }
        }
        _;
    }

    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    function mint(uint256 _mintAmount)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(!paused, "The contract is paused!");

        if (msg.sender != owner()) {
            if (isPresale()) {
                require(
                    isWhitelistedPresale(msg.sender),
                    "User is not whitelisted for Presale!"
                );
                require(
                    msg.value >= wl_cost * _mintAmount,
                    "Insufficient funds!"
                );
                uint256 ownerMintedCount = wl_addressMintedBalance[msg.sender];
                require(
                    ownerMintedCount + _mintAmount <= wl_maxMintPerWallet,
                    "Max NFT per address exceeded!"
                );
            } else if (isOGSale()) {
                require(
                    isWhitelistedOGSale(msg.sender),
                    "User is not whitelisted for OG Sale!"
                );
                require(
                    msg.value >= og_cost * _mintAmount,
                    "Insufficient funds!"
                );
                uint256 ownerMintedCount = og_addressMintedBalance[msg.sender];
                require(
                    ownerMintedCount + _mintAmount <= og_maxMintPerWallet,
                    "Max NFT per address exceeded!"
                );
            } else {
                // Public Minting
                require(isPublic(), "Public minting not started");
                require(msg.value >= cost * _mintAmount, "Insufficient funds!");
                uint256 ownerMintedCount = addressMintedBalance[msg.sender];
                require(
                    ownerMintedCount + _mintAmount <= maxMintPerWallet,
                    "Max NFT per address exceeded!"
                );
            }
        }

        _mintLoop(msg.sender, _mintAmount);
    }

    function mintForAddress(uint256 _mintAmount, address _receiver)
        public
        mintCompliance(_mintAmount)
        onlyOwner
    {
        _mintLoop(_receiver, _mintAmount);
    }

    function canMintOGSale(address _user) public view returns (bool) {
        if (og_whitelistedAddresses[_user] == true) return true;
        return false;
    }

    function canMintPresale(address _user) public view returns (bool) {
        if (wl_whitelistedAddresses[_user] == true) return true;
        return false;
    }

    function isOGSale() public view returns (bool) {
        return (block.timestamp >= og_mintStartTime &&
            block.timestamp < wl_mintStartTime);
    }

    function isPresale() public view returns (bool) {
        return (block.timestamp >= wl_mintStartTime &&
            block.timestamp < mintStartTime);
    }

    function isPublic() public view returns (bool) {
        if (block.timestamp > mintStartTime) {
            return true;
        }
        return false;
    }

    function isWhitelistedPresale(address _user) public view returns (bool) {
        if (wl_whitelistedAddresses[_user] == true) return true;
        return false;
    }

    function isWhitelistedOGSale(address _user) public view returns (bool) {
        if (og_whitelistedAddresses[_user] == true) return true;
        return false;
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (
            ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply
        ) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return hiddenMetadataUri;
        }

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

    // Owner Only

    function whitelistOGUsers(address[] calldata _users) public onlyOwner {
        for (uint256 i = 0; i < _users.length; i++) {
            og_whitelistedAddresses[_users[i]] = true;
        }
    }

    function whitelistPresaleUsers(address[] calldata _users) public onlyOwner {
        for (uint256 i = 0; i < _users.length; i++) {
            wl_whitelistedAddresses[_users[i]] = true;
        }
    }

    function setMintStartTime(uint256 _mintStartTime) public onlyOwner {
        mintStartTime = _mintStartTime;
    }

    function setOGMintStartTime(uint256 _og_mintStartTime) public onlyOwner {
        og_mintStartTime = _og_mintStartTime;
    }

    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    function setmaxMintPerWallet(uint256 _maxMintPerWallet) public onlyOwner {
        maxMintPerWallet = _maxMintPerWallet;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri)
        public
        onlyOwner
    {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

    function setPaused(bool _state) public onlyOwner {
        paused = _state;
    }

    function withdraw() public onlyOwner {
        // =============================================================================
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
        // =============================================================================
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        for (uint256 i = 0; i < _mintAmount; i++) {
            supply.increment();
            if (msg.sender != owner()) {
                supplyPublic.increment();
                if (isPublic()) {
                    // Do nothing
                } else if (isPresale()) {
                    wl_addressMintedBalance[msg.sender]++;
                } else if (isOGSale()) {
                    og_addressMintedBalance[msg.sender]++;
                }
                addressMintedBalance[msg.sender]++;
            }
            _safeMint(_receiver, supply.current());
        }
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"canMintOGSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"canMintPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"isOGSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedOGSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"og_addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og_maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og_mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"og_whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintStartTime","type":"uint256"}],"name":"setMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_og_mintStartTime","type":"uint256"}],"name":"setOGMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerWallet","type":"uint256"}],"name":"setmaxMintPerWallet","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":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistOGUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistPresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl_addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl_maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl_mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl_whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405260405180606001604052806036815260200162005e14603691396009908051906020019062000035929190620002bd565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000083929190620002bd565b5067011c37937e080000600c55611388600d556005600e5563626a1140600f55610bea60115566e6ed27d66680006012556108fc6013556002601455636269688060155566b1a2bc2ec5000060185561012c6019556001601a556362694c60601b556000601e60006101000a81548160ff0219169083151502179055506001601e60016101000a81548160ff0219169083151502179055503480156200012857600080fd5b506040518060400160405280601081526020017f4d657461506173732047656e65736973000000000000000000000000000000008152506040518060400160405280600781526020017f4d4554414a414d000000000000000000000000000000000000000000000000008152508160009080519060200190620001ad929190620002bd565b508060019080519060200190620001c6929190620002bd565b505050620001e9620001dd620001ef60201b60201c565b620001f760201b60201c565b620003d2565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002cb906200036d565b90600052602060002090601f016020900481019282620002ef57600085556200033b565b82601f106200030a57805160ff19168380011785556200033b565b828001600101855582156200033b579182015b828111156200033a5782518255916020019190600101906200031d565b5b5090506200034a91906200034e565b5090565b5b80821115620003695760008160009055506001016200034f565b5090565b600060028204905060018216806200038657607f821691505b602082108114156200039d576200039c620003a3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615a3280620003e26000396000f3fe6080604052600436106103ad5760003560e01c8063715018a6116101e7578063a69c37221161010d578063db690c61116100a0578063efbd73f41161006f578063efbd73f414610e27578063f28aed8c14610e50578063f2a3005e14610e7b578063f2fde38b14610eb8576103ad565b8063db690c6114610d59578063dc9a153514610d96578063e0a8085314610dc1578063e985e9c514610dea576103ad565b8063c87b56dd116100dc578063c87b56dd14610c9f578063d5abeb0114610cdc578063d5b3621b14610d07578063d725cf9714610d30576103ad565b8063a69c372214610bf5578063b228d92514610c20578063b88d4fde14610c4b578063b8e0acef14610c74576103ad565b806395364a8411610185578063a0712d6811610154578063a0712d6814610b5a578063a160223714610b76578063a22cb46514610ba1578063a45ba8e714610bca576103ad565b806395364a8414610a9c57806395d89b4114610ac757806398ae7a6a14610af25780639ee70b9a14610b2f576103ad565b806387400b15116101c157806387400b15146109de5780638d969ae114610a095780638da5cb5b14610a46578063931e2e4914610a71576103ad565b8063715018a6146109615780637b651dc9146109785780637ec4a659146109b5576103ad565b80633c335362116102d7578063518302271161026a57806362b99ad41161023957806362b99ad4146108935780636352211e146108be5780636a2dae07146108fb57806370a0823114610924576103ad565b806351830227146107e95780635503a0e81461081457806359fd1b661461083f5780635c975abb14610868576103ad565b806344a0d68a116102a657806344a0d68a1461071d5780634bed97fd146107465780634d298265146107835780634fdd43cb146107c0576103ad565b80633c335362146106635780633ccfd60b146106a057806342842e0e146106b7578063438b6300146106e0576103ad565b806316ba10e01161034f57806319179e0e1161031e57806319179e0e146105bb57806323b872dd146105e4578063277dd8931461060d57806327d938e014610638576103ad565b806316ba10e01461050157806316c38b3c1461052a57806318160ddd1461055357806318cae2691461057e576103ad565b8063095ea7b31161038b578063095ea7b31461045757806309ad85dc14610480578063111d7a0a146104ab57806313faede6146104d6576103ad565b806301ffc9a7146103b257806306fdde03146103ef578063081812fc1461041a575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906143ea565b610ee1565b6040516103e69190614b2b565b60405180910390f35b3480156103fb57600080fd5b50610404610fc3565b6040516104119190614b46565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c919061448d565b611055565b60405161044e9190614aa2565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614330565b6110da565b005b34801561048c57600080fd5b506104956111f2565b6040516104a29190614e88565b60405180910390f35b3480156104b757600080fd5b506104c06111f8565b6040516104cd9190614e88565b60405180910390f35b3480156104e257600080fd5b506104eb6111fe565b6040516104f89190614e88565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190614444565b611204565b005b34801561053657600080fd5b50610551600480360381019061054c91906143bd565b61129a565b005b34801561055f57600080fd5b50610568611333565b6040516105759190614e88565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906141ad565b611344565b6040516105b29190614e88565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190614370565b61135c565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061421a565b61147d565b005b34801561061957600080fd5b506106226114dd565b60405161062f9190614e88565b60405180910390f35b34801561064457600080fd5b5061064d6114e3565b60405161065a9190614e88565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906141ad565b6114e9565b6040516106979190614b2b565b60405180910390f35b3480156106ac57600080fd5b506106b5611557565b005b3480156106c357600080fd5b506106de60048036038101906106d9919061421a565b611653565b005b3480156106ec57600080fd5b50610707600480360381019061070291906141ad565b611673565b6040516107149190614b09565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061448d565b61177e565b005b34801561075257600080fd5b5061076d600480360381019061076891906141ad565b611804565b60405161077a9190614b2b565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a591906141ad565b611824565b6040516107b79190614b2b565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190614444565b611892565b005b3480156107f557600080fd5b506107fe611928565b60405161080b9190614b2b565b60405180910390f35b34801561082057600080fd5b5061082961193b565b6040516108369190614b46565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190614370565b6119c9565b005b34801561087457600080fd5b5061087d611aea565b60405161088a9190614b2b565b60405180910390f35b34801561089f57600080fd5b506108a8611afd565b6040516108b59190614b46565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e0919061448d565b611b8b565b6040516108f29190614aa2565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d919061448d565b611c3d565b005b34801561093057600080fd5b5061094b600480360381019061094691906141ad565b611cc3565b6040516109589190614e88565b60405180910390f35b34801561096d57600080fd5b50610976611d7b565b005b34801561098457600080fd5b5061099f600480360381019061099a91906141ad565b611e03565b6040516109ac9190614e88565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614444565b611e1b565b005b3480156109ea57600080fd5b506109f3611eb1565b604051610a009190614e88565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b91906141ad565b611eb7565b604051610a3d9190614b2b565b60405180910390f35b348015610a5257600080fd5b50610a5b611ed7565b604051610a689190614aa2565b60405180910390f35b348015610a7d57600080fd5b50610a86611f01565b604051610a939190614e88565b60405180910390f35b348015610aa857600080fd5b50610ab1611f07565b604051610abe9190614b2b565b60405180910390f35b348015610ad357600080fd5b50610adc611f21565b604051610ae99190614b46565b60405180910390f35b348015610afe57600080fd5b50610b196004803603810190610b1491906141ad565b611fb3565b604051610b269190614e88565b60405180910390f35b348015610b3b57600080fd5b50610b44611fcb565b604051610b519190614e88565b60405180910390f35b610b746004803603810190610b6f919061448d565b611fd1565b005b348015610b8257600080fd5b50610b8b612672565b604051610b989190614b2b565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906142f0565b61268c565b005b348015610bd657600080fd5b50610bdf6126a2565b604051610bec9190614b46565b60405180910390f35b348015610c0157600080fd5b50610c0a612730565b604051610c179190614e88565b60405180910390f35b348015610c2c57600080fd5b50610c35612736565b604051610c429190614e88565b60405180910390f35b348015610c5757600080fd5b50610c726004803603810190610c6d919061426d565b61273c565b005b348015610c8057600080fd5b50610c8961279e565b604051610c969190614e88565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc1919061448d565b6127a4565b604051610cd39190614b46565b60405180910390f35b348015610ce857600080fd5b50610cf16128fd565b604051610cfe9190614e88565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d29919061448d565b612903565b005b348015610d3c57600080fd5b50610d576004803603810190610d52919061448d565b612989565b005b348015610d6557600080fd5b50610d806004803603810190610d7b91906141ad565b612a0f565b604051610d8d9190614b2b565b60405180910390f35b348015610da257600080fd5b50610dab612a7d565b604051610db89190614b2b565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de391906143bd565b612a9a565b005b348015610df657600080fd5b50610e116004803603810190610e0c91906141da565b612b33565b604051610e1e9190614b2b565b60405180910390f35b348015610e3357600080fd5b50610e4e6004803603810190610e4991906144ba565b612bc7565b005b348015610e5c57600080fd5b50610e65612eae565b604051610e729190614e88565b60405180910390f35b348015610e8757600080fd5b50610ea26004803603810190610e9d91906141ad565b612eb4565b604051610eaf9190614b2b565b60405180910390f35b348015610ec457600080fd5b50610edf6004803603810190610eda91906141ad565b612f22565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750610fbb8261301a565b5b9050919050565b606060008054610fd290615191565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90615191565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b5050505050905090565b600061106082613084565b61109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690614d88565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006110e582611b8b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614e08565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111756130f0565b73ffffffffffffffffffffffffffffffffffffffff1614806111a457506111a38161119e6130f0565b612b33565b5b6111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90614ce8565b60405180910390fd5b6111ed83836130f8565b505050565b60125481565b601a5481565b600c5481565b61120c6130f0565b73ffffffffffffffffffffffffffffffffffffffff1661122a611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790614da8565b60405180910390fd5b80600a9080519060200190611296929190613f6b565b5050565b6112a26130f0565b73ffffffffffffffffffffffffffffffffffffffff166112c0611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614da8565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b600061133f60076131b1565b905090565b60106020528060005260406000206000915090505481565b6113646130f0565b73ffffffffffffffffffffffffffffffffffffffff16611382611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614da8565b60405180910390fd5b60005b82829050811015611478576001601c60008585858181106113ff576113fe6152fb565b5b905060200201602081019061141491906141ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611470906151f4565b9150506113db565b505050565b61148e6114886130f0565b826131bf565b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614e48565b60405180910390fd5b6114d883838361329d565b505050565b60115481565b60135481565b600060011515601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561154d5760019050611552565b600090505b919050565b61155f6130f0565b73ffffffffffffffffffffffffffffffffffffffff1661157d611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90614da8565b60405180910390fd5b60006115dd611ed7565b73ffffffffffffffffffffffffffffffffffffffff164760405161160090614a8d565b60006040518083038185875af1925050503d806000811461163d576040519150601f19603f3d011682016040523d82523d6000602084013e611642565b606091505b505090508061165057600080fd5b50565b61166e8383836040518060200160405280600081525061273c565b505050565b6060600061168083611cc3565b905060008167ffffffffffffffff81111561169e5761169d61532a565b5b6040519080825280602002602001820160405280156116cc5781602001602082028036833780820191505090505b50905060006001905060005b83811080156116e95750600d548211155b156117725760006116f983611b8b565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175e5782848381518110611743576117426152fb565b5b602002602001018181525050818061175a906151f4565b9250505b8280611769906151f4565b935050506116d8565b82945050505050919050565b6117866130f0565b73ffffffffffffffffffffffffffffffffffffffff166117a4611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614da8565b60405180910390fd5b80600c8190555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600060011515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611888576001905061188d565b600090505b919050565b61189a6130f0565b73ffffffffffffffffffffffffffffffffffffffff166118b8611ed7565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590614da8565b60405180910390fd5b80600b9080519060200190611924929190613f6b565b5050565b601e60019054906101000a900460ff1681565b600a805461194890615191565b80601f016020809104026020016040519081016040528092919081815260200182805461197490615191565b80156119c15780601f10611996576101008083540402835291602001916119c1565b820191906000526020600020905b8154815290600101906020018083116119a457829003601f168201915b505050505081565b6119d16130f0565b73ffffffffffffffffffffffffffffffffffffffff166119ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90614da8565b60405180910390fd5b60005b82829050811015611ae557600160166000858585818110611a6c57611a6b6152fb565b5b9050602002016020810190611a8191906141ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611add906151f4565b915050611a48565b505050565b601e60009054906101000a900460ff1681565b60098054611b0a90615191565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3690615191565b8015611b835780601f10611b5857610100808354040283529160200191611b83565b820191906000526020600020905b815481529060010190602001808311611b6657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90614d28565b60405180910390fd5b80915050919050565b611c456130f0565b73ffffffffffffffffffffffffffffffffffffffff16611c63611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090614da8565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614d08565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d836130f0565b73ffffffffffffffffffffffffffffffffffffffff16611da1611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90614da8565b60405180910390fd5b611e016000613504565b565b60176020528060005260406000206000915090505481565b611e236130f0565b73ffffffffffffffffffffffffffffffffffffffff16611e41611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90614da8565b60405180910390fd5b8060099080519060200190611ead929190613f6b565b5050565b601b5481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60006015544210158015611f1c5750600f5442105b905090565b606060018054611f3090615191565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5c90615191565b8015611fa95780601f10611f7e57610100808354040283529160200191611fa9565b820191906000526020600020905b815481529060010190602001808311611f8c57829003601f168201915b5050505050905090565b601d6020528060005260406000206000915090505481565b60195481565b8060008111612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90614c08565b60405180910390fd5b600d548161202360076131b1565b61202d9190614fc6565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614e28565b60405180910390fd5b612076611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461222d57600e548111156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614c08565b60405180910390fd5b6120f5612a7d565b15612158576011548161210860086131b1565b6121129190614fc6565b1115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614cc8565b60405180910390fd5b61222c565b612160611f07565b156121c3576013548161217360086131b1565b61217d9190614fc6565b11156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614cc8565b60405180910390fd5b61222b565b6121cb612672565b1561222a57601954816121de60086131b1565b6121e89190614fc6565b1115612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090614cc8565b60405180910390fd5b5b5b5b5b601e60009054906101000a900460ff161561227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490614dc8565b60405180910390fd5b612285611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612664576122bf611f07565b156123f6576122cd33611824565b61230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614c28565b60405180910390fd5b8160125461231a919061504d565b34101561235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614e68565b60405180910390fd5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060145483826123af9190614fc6565b11156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614c48565b60405180910390fd5b50612663565b6123fe612672565b156125355761240c336114e9565b61244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614b68565b60405180910390fd5b81601854612459919061504d565b34101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614e68565b60405180910390fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601a5483826124ee9190614fc6565b111561252f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252690614c48565b60405180910390fd5b50612662565b61253d612a7d565b61257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614d68565b60405180910390fd5b81600c5461258a919061504d565b3410156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614e68565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e54838261261f9190614fc6565b1115612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790614c48565b60405180910390fd5b505b5b5b61266e33836135ca565b5050565b6000601b544210158015612687575060155442105b905090565b61269e6126976130f0565b8383613782565b5050565b600b80546126af90615191565b80601f01602080910402602001604051908101604052809291908181526020018280546126db90615191565b80156127285780601f106126fd57610100808354040283529160200191612728565b820191906000526020600020905b81548152906001019060200180831161270b57829003601f168201915b505050505081565b60155481565b600e5481565b61274d6127476130f0565b836131bf565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278390614e48565b60405180910390fd5b612798848484846138ef565b50505050565b60185481565b60606127af82613084565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590614de8565b60405180910390fd5b60001515601e60019054906101000a900460ff161515141561289c57600b805461281790615191565b80601f016020809104026020016040519081016040528092919081815260200182805461284390615191565b80156128905780601f1061286557610100808354040283529160200191612890565b820191906000526020600020905b81548152906001019060200180831161287357829003601f168201915b505050505090506128f8565b60006128a661394b565b905060008151116128c657604051806020016040528060008152506128f4565b806128d0846139dd565b600a6040516020016128e493929190614a5c565b6040516020818303038152906040525b9150505b919050565b600d5481565b61290b6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612929611ed7565b73ffffffffffffffffffffffffffffffffffffffff161461297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690614da8565b60405180910390fd5b80600f8190555050565b6129916130f0565b73ffffffffffffffffffffffffffffffffffffffff166129af611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614da8565b60405180910390fd5b80601b8190555050565b600060011515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612a735760019050612a78565b600090505b919050565b6000600f54421115612a925760019050612a97565b600090505b90565b612aa26130f0565b73ffffffffffffffffffffffffffffffffffffffff16612ac0611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614da8565b60405180910390fd5b80601e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0290614c08565b60405180910390fd5b600d5481612c1960076131b1565b612c239190614fc6565b1115612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90614e28565b60405180910390fd5b612c6c611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e2357600e54811115612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda90614c08565b60405180910390fd5b612ceb612a7d565b15612d4e5760115481612cfe60086131b1565b612d089190614fc6565b1115612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4090614cc8565b60405180910390fd5b612e22565b612d56611f07565b15612db95760135481612d6960086131b1565b612d739190614fc6565b1115612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614cc8565b60405180910390fd5b612e21565b612dc1612672565b15612e205760195481612dd460086131b1565b612dde9190614fc6565b1115612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614cc8565b60405180910390fd5b5b5b5b5b612e2b6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612e49611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614da8565b60405180910390fd5b612ea982846135ca565b505050565b60145481565b600060011515601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612f185760019050612f1d565b600090505b919050565b612f2a6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612f48611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9590614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300590614ba8565b60405180910390fd5b61301781613504565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661316b83611b8b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006131ca82613084565b613209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320090614ca8565b60405180910390fd5b600061321483611b8b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061328357508373ffffffffffffffffffffffffffffffffffffffff1661326b84611055565b73ffffffffffffffffffffffffffffffffffffffff16145b8061329457506132938185612b33565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132bd82611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614613313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330a90614bc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337a90614c68565b60405180910390fd5b61338e838383613b3e565b6133996000826130f8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133e991906150a7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134409190614fc6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ff838383613b43565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561377d576135df6007613b48565b6135e7611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613757576136236008613b48565b61362b612a7d565b1561363557613701565b61363d611f07565b1561369c57601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190613692906151f4565b9190505550613700565b6136a4612672565b156136ff57601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906136f9906151f4565b91905055505b5b5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190613751906151f4565b91905055505b61376a8361376560076131b1565b613b5e565b8080613775906151f4565b9150506135cd565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e890614c88565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138e29190614b2b565b60405180910390a3505050565b6138fa84848461329d565b61390684848484613b7c565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393c90614b88565b60405180910390fd5b50505050565b60606009805461395a90615191565b80601f016020809104026020016040519081016040528092919081815260200182805461398690615191565b80156139d35780601f106139a8576101008083540402835291602001916139d3565b820191906000526020600020905b8154815290600101906020018083116139b657829003601f168201915b5050505050905090565b60606000821415613a25576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b39565b600082905060005b60008214613a57578080613a40906151f4565b915050600a82613a50919061501c565b9150613a2d565b60008167ffffffffffffffff811115613a7357613a7261532a565b5b6040519080825280601f01601f191660200182016040528015613aa55781602001600182028036833780820191505090505b5090505b60008514613b3257600182613abe91906150a7565b9150600a85613acd919061523d565b6030613ad99190614fc6565b60f81b818381518110613aef57613aee6152fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b2b919061501c565b9450613aa9565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b613b78828260405180602001604052806000815250613d13565b5050565b6000613b9d8473ffffffffffffffffffffffffffffffffffffffff16613d6e565b15613d06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bc66130f0565b8786866040518563ffffffff1660e01b8152600401613be89493929190614abd565b602060405180830381600087803b158015613c0257600080fd5b505af1925050508015613c3357506040513d601f19601f82011682018060405250810190613c309190614417565b60015b613cb6573d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50600081511415613cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca590614b88565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d0b565b600190505b949350505050565b613d1d8383613d91565b613d2a6000848484613b7c565b613d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6090614b88565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613df890614d48565b60405180910390fd5b613e0a81613084565b15613e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4190614be8565b60405180910390fd5b613e5660008383613b3e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ea69190614fc6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f6760008383613b43565b5050565b828054613f7790615191565b90600052602060002090601f016020900481019282613f995760008555613fe0565b82601f10613fb257805160ff1916838001178555613fe0565b82800160010185558215613fe0579182015b82811115613fdf578251825591602001919060010190613fc4565b5b509050613fed9190613ff1565b5090565b5b8082111561400a576000816000905550600101613ff2565b5090565b600061402161401c84614ec8565b614ea3565b90508281526020810184848401111561403d5761403c615368565b5b61404884828561514f565b509392505050565b600061406361405e84614ef9565b614ea3565b90508281526020810184848401111561407f5761407e615368565b5b61408a84828561514f565b509392505050565b6000813590506140a1816159a0565b92915050565b60008083601f8401126140bd576140bc61535e565b5b8235905067ffffffffffffffff8111156140da576140d9615359565b5b6020830191508360208202830111156140f6576140f5615363565b5b9250929050565b60008135905061410c816159b7565b92915050565b600081359050614121816159ce565b92915050565b600081519050614136816159ce565b92915050565b600082601f8301126141515761415061535e565b5b813561416184826020860161400e565b91505092915050565b600082601f83011261417f5761417e61535e565b5b813561418f848260208601614050565b91505092915050565b6000813590506141a7816159e5565b92915050565b6000602082840312156141c3576141c2615372565b5b60006141d184828501614092565b91505092915050565b600080604083850312156141f1576141f0615372565b5b60006141ff85828601614092565b925050602061421085828601614092565b9150509250929050565b60008060006060848603121561423357614232615372565b5b600061424186828701614092565b935050602061425286828701614092565b925050604061426386828701614198565b9150509250925092565b6000806000806080858703121561428757614286615372565b5b600061429587828801614092565b94505060206142a687828801614092565b93505060406142b787828801614198565b925050606085013567ffffffffffffffff8111156142d8576142d761536d565b5b6142e48782880161413c565b91505092959194509250565b6000806040838503121561430757614306615372565b5b600061431585828601614092565b9250506020614326858286016140fd565b9150509250929050565b6000806040838503121561434757614346615372565b5b600061435585828601614092565b925050602061436685828601614198565b9150509250929050565b6000806020838503121561438757614386615372565b5b600083013567ffffffffffffffff8111156143a5576143a461536d565b5b6143b1858286016140a7565b92509250509250929050565b6000602082840312156143d3576143d2615372565b5b60006143e1848285016140fd565b91505092915050565b600060208284031215614400576143ff615372565b5b600061440e84828501614112565b91505092915050565b60006020828403121561442d5761442c615372565b5b600061443b84828501614127565b91505092915050565b60006020828403121561445a57614459615372565b5b600082013567ffffffffffffffff8111156144785761447761536d565b5b6144848482850161416a565b91505092915050565b6000602082840312156144a3576144a2615372565b5b60006144b184828501614198565b91505092915050565b600080604083850312156144d1576144d0615372565b5b60006144df85828601614198565b92505060206144f085828601614092565b9150509250929050565b60006145068383614a3e565b60208301905092915050565b61451b816150db565b82525050565b600061452c82614f4f565b6145368185614f7d565b935061454183614f2a565b8060005b8381101561457257815161455988826144fa565b975061456483614f70565b925050600181019050614545565b5085935050505092915050565b614588816150ed565b82525050565b600061459982614f5a565b6145a38185614f8e565b93506145b381856020860161515e565b6145bc81615377565b840191505092915050565b60006145d282614f65565b6145dc8185614faa565b93506145ec81856020860161515e565b6145f581615377565b840191505092915050565b600061460b82614f65565b6146158185614fbb565b935061462581856020860161515e565b80840191505092915050565b6000815461463e81615191565b6146488186614fbb565b945060018216600081146146635760018114614674576146a7565b60ff198316865281860193506146a7565b61467d85614f3a565b60005b8381101561469f57815481890152600182019150602081019050614680565b838801955050505b50505092915050565b60006146bd602483614faa565b91506146c882615388565b604082019050919050565b60006146e0603283614faa565b91506146eb826153d7565b604082019050919050565b6000614703602683614faa565b915061470e82615426565b604082019050919050565b6000614726602583614faa565b915061473182615475565b604082019050919050565b6000614749601c83614faa565b9150614754826154c4565b602082019050919050565b600061476c601483614faa565b9150614777826154ed565b602082019050919050565b600061478f602483614faa565b915061479a82615516565b604082019050919050565b60006147b2601d83614faa565b91506147bd82615565565b602082019050919050565b60006147d5602483614faa565b91506147e08261558e565b604082019050919050565b60006147f8601983614faa565b9150614803826155dd565b602082019050919050565b600061481b602c83614faa565b915061482682615606565b604082019050919050565b600061483e602083614faa565b915061484982615655565b602082019050919050565b6000614861603883614faa565b915061486c8261567e565b604082019050919050565b6000614884602a83614faa565b915061488f826156cd565b604082019050919050565b60006148a7602983614faa565b91506148b28261571c565b604082019050919050565b60006148ca602083614faa565b91506148d58261576b565b602082019050919050565b60006148ed601a83614faa565b91506148f882615794565b602082019050919050565b6000614910602c83614faa565b915061491b826157bd565b604082019050919050565b6000614933602083614faa565b915061493e8261580c565b602082019050919050565b6000614956601783614faa565b915061496182615835565b602082019050919050565b6000614979602f83614faa565b91506149848261585e565b604082019050919050565b600061499c602183614faa565b91506149a7826158ad565b604082019050919050565b60006149bf600083614f9f565b91506149ca826158fc565b600082019050919050565b60006149e2601483614faa565b91506149ed826158ff565b602082019050919050565b6000614a05603183614faa565b9150614a1082615928565b604082019050919050565b6000614a28601383614faa565b9150614a3382615977565b602082019050919050565b614a4781615145565b82525050565b614a5681615145565b82525050565b6000614a688286614600565b9150614a748285614600565b9150614a808284614631565b9150819050949350505050565b6000614a98826149b2565b9150819050919050565b6000602082019050614ab76000830184614512565b92915050565b6000608082019050614ad26000830187614512565b614adf6020830186614512565b614aec6040830185614a4d565b8181036060830152614afe818461458e565b905095945050505050565b60006020820190508181036000830152614b238184614521565b905092915050565b6000602082019050614b40600083018461457f565b92915050565b60006020820190508181036000830152614b6081846145c7565b905092915050565b60006020820190508181036000830152614b81816146b0565b9050919050565b60006020820190508181036000830152614ba1816146d3565b9050919050565b60006020820190508181036000830152614bc1816146f6565b9050919050565b60006020820190508181036000830152614be181614719565b9050919050565b60006020820190508181036000830152614c018161473c565b9050919050565b60006020820190508181036000830152614c218161475f565b9050919050565b60006020820190508181036000830152614c4181614782565b9050919050565b60006020820190508181036000830152614c61816147a5565b9050919050565b60006020820190508181036000830152614c81816147c8565b9050919050565b60006020820190508181036000830152614ca1816147eb565b9050919050565b60006020820190508181036000830152614cc18161480e565b9050919050565b60006020820190508181036000830152614ce181614831565b9050919050565b60006020820190508181036000830152614d0181614854565b9050919050565b60006020820190508181036000830152614d2181614877565b9050919050565b60006020820190508181036000830152614d418161489a565b9050919050565b60006020820190508181036000830152614d61816148bd565b9050919050565b60006020820190508181036000830152614d81816148e0565b9050919050565b60006020820190508181036000830152614da181614903565b9050919050565b60006020820190508181036000830152614dc181614926565b9050919050565b60006020820190508181036000830152614de181614949565b9050919050565b60006020820190508181036000830152614e018161496c565b9050919050565b60006020820190508181036000830152614e218161498f565b9050919050565b60006020820190508181036000830152614e41816149d5565b9050919050565b60006020820190508181036000830152614e61816149f8565b9050919050565b60006020820190508181036000830152614e8181614a1b565b9050919050565b6000602082019050614e9d6000830184614a4d565b92915050565b6000614ead614ebe565b9050614eb982826151c3565b919050565b6000604051905090565b600067ffffffffffffffff821115614ee357614ee261532a565b5b614eec82615377565b9050602081019050919050565b600067ffffffffffffffff821115614f1457614f1361532a565b5b614f1d82615377565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fd182615145565b9150614fdc83615145565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150115761501061526e565b5b828201905092915050565b600061502782615145565b915061503283615145565b9250826150425761504161529d565b5b828204905092915050565b600061505882615145565b915061506383615145565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561509c5761509b61526e565b5b828202905092915050565b60006150b282615145565b91506150bd83615145565b9250828210156150d0576150cf61526e565b5b828203905092915050565b60006150e682615125565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561517c578082015181840152602081019050615161565b8381111561518b576000848401525b50505050565b600060028204905060018216806151a957607f821691505b602082108114156151bd576151bc6152cc565b5b50919050565b6151cc82615377565b810181811067ffffffffffffffff821117156151eb576151ea61532a565b5b80604052505050565b60006151ff82615145565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152325761523161526e565b5b600182019050919050565b600061524882615145565b915061525383615145565b9250826152635761526261529d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f742077686974656c697374656420666f72204f47205360008201527f616c652100000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f55736572206973206e6f742077686974656c697374656420666f72205072657360008201527f616c652100000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656421000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920666f722050726573616c6520657863656564656421600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5075626c6963206d696e74696e67206e6f742073746172746564000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6159a9816150db565b81146159b457600080fd5b50565b6159c0816150ed565b81146159cb57600080fd5b50565b6159d7816150f9565b81146159e257600080fd5b50565b6159ee81615145565b81146159f957600080fd5b5056fea264697066735822122024fbcfd2d62838b7c2c46ed7b53747d720efdd0d6cc49986110721fde3fe1dc464736f6c63430008070033697066733a2f2f516d586d4a71433646513246516b6e63526b634347383444755a47674246586d55695939585269327269727a35772f

Deployed Bytecode

0x6080604052600436106103ad5760003560e01c8063715018a6116101e7578063a69c37221161010d578063db690c61116100a0578063efbd73f41161006f578063efbd73f414610e27578063f28aed8c14610e50578063f2a3005e14610e7b578063f2fde38b14610eb8576103ad565b8063db690c6114610d59578063dc9a153514610d96578063e0a8085314610dc1578063e985e9c514610dea576103ad565b8063c87b56dd116100dc578063c87b56dd14610c9f578063d5abeb0114610cdc578063d5b3621b14610d07578063d725cf9714610d30576103ad565b8063a69c372214610bf5578063b228d92514610c20578063b88d4fde14610c4b578063b8e0acef14610c74576103ad565b806395364a8411610185578063a0712d6811610154578063a0712d6814610b5a578063a160223714610b76578063a22cb46514610ba1578063a45ba8e714610bca576103ad565b806395364a8414610a9c57806395d89b4114610ac757806398ae7a6a14610af25780639ee70b9a14610b2f576103ad565b806387400b15116101c157806387400b15146109de5780638d969ae114610a095780638da5cb5b14610a46578063931e2e4914610a71576103ad565b8063715018a6146109615780637b651dc9146109785780637ec4a659146109b5576103ad565b80633c335362116102d7578063518302271161026a57806362b99ad41161023957806362b99ad4146108935780636352211e146108be5780636a2dae07146108fb57806370a0823114610924576103ad565b806351830227146107e95780635503a0e81461081457806359fd1b661461083f5780635c975abb14610868576103ad565b806344a0d68a116102a657806344a0d68a1461071d5780634bed97fd146107465780634d298265146107835780634fdd43cb146107c0576103ad565b80633c335362146106635780633ccfd60b146106a057806342842e0e146106b7578063438b6300146106e0576103ad565b806316ba10e01161034f57806319179e0e1161031e57806319179e0e146105bb57806323b872dd146105e4578063277dd8931461060d57806327d938e014610638576103ad565b806316ba10e01461050157806316c38b3c1461052a57806318160ddd1461055357806318cae2691461057e576103ad565b8063095ea7b31161038b578063095ea7b31461045757806309ad85dc14610480578063111d7a0a146104ab57806313faede6146104d6576103ad565b806301ffc9a7146103b257806306fdde03146103ef578063081812fc1461041a575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906143ea565b610ee1565b6040516103e69190614b2b565b60405180910390f35b3480156103fb57600080fd5b50610404610fc3565b6040516104119190614b46565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c919061448d565b611055565b60405161044e9190614aa2565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614330565b6110da565b005b34801561048c57600080fd5b506104956111f2565b6040516104a29190614e88565b60405180910390f35b3480156104b757600080fd5b506104c06111f8565b6040516104cd9190614e88565b60405180910390f35b3480156104e257600080fd5b506104eb6111fe565b6040516104f89190614e88565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190614444565b611204565b005b34801561053657600080fd5b50610551600480360381019061054c91906143bd565b61129a565b005b34801561055f57600080fd5b50610568611333565b6040516105759190614e88565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906141ad565b611344565b6040516105b29190614e88565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190614370565b61135c565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061421a565b61147d565b005b34801561061957600080fd5b506106226114dd565b60405161062f9190614e88565b60405180910390f35b34801561064457600080fd5b5061064d6114e3565b60405161065a9190614e88565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906141ad565b6114e9565b6040516106979190614b2b565b60405180910390f35b3480156106ac57600080fd5b506106b5611557565b005b3480156106c357600080fd5b506106de60048036038101906106d9919061421a565b611653565b005b3480156106ec57600080fd5b50610707600480360381019061070291906141ad565b611673565b6040516107149190614b09565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061448d565b61177e565b005b34801561075257600080fd5b5061076d600480360381019061076891906141ad565b611804565b60405161077a9190614b2b565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a591906141ad565b611824565b6040516107b79190614b2b565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190614444565b611892565b005b3480156107f557600080fd5b506107fe611928565b60405161080b9190614b2b565b60405180910390f35b34801561082057600080fd5b5061082961193b565b6040516108369190614b46565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190614370565b6119c9565b005b34801561087457600080fd5b5061087d611aea565b60405161088a9190614b2b565b60405180910390f35b34801561089f57600080fd5b506108a8611afd565b6040516108b59190614b46565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e0919061448d565b611b8b565b6040516108f29190614aa2565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d919061448d565b611c3d565b005b34801561093057600080fd5b5061094b600480360381019061094691906141ad565b611cc3565b6040516109589190614e88565b60405180910390f35b34801561096d57600080fd5b50610976611d7b565b005b34801561098457600080fd5b5061099f600480360381019061099a91906141ad565b611e03565b6040516109ac9190614e88565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614444565b611e1b565b005b3480156109ea57600080fd5b506109f3611eb1565b604051610a009190614e88565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b91906141ad565b611eb7565b604051610a3d9190614b2b565b60405180910390f35b348015610a5257600080fd5b50610a5b611ed7565b604051610a689190614aa2565b60405180910390f35b348015610a7d57600080fd5b50610a86611f01565b604051610a939190614e88565b60405180910390f35b348015610aa857600080fd5b50610ab1611f07565b604051610abe9190614b2b565b60405180910390f35b348015610ad357600080fd5b50610adc611f21565b604051610ae99190614b46565b60405180910390f35b348015610afe57600080fd5b50610b196004803603810190610b1491906141ad565b611fb3565b604051610b269190614e88565b60405180910390f35b348015610b3b57600080fd5b50610b44611fcb565b604051610b519190614e88565b60405180910390f35b610b746004803603810190610b6f919061448d565b611fd1565b005b348015610b8257600080fd5b50610b8b612672565b604051610b989190614b2b565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906142f0565b61268c565b005b348015610bd657600080fd5b50610bdf6126a2565b604051610bec9190614b46565b60405180910390f35b348015610c0157600080fd5b50610c0a612730565b604051610c179190614e88565b60405180910390f35b348015610c2c57600080fd5b50610c35612736565b604051610c429190614e88565b60405180910390f35b348015610c5757600080fd5b50610c726004803603810190610c6d919061426d565b61273c565b005b348015610c8057600080fd5b50610c8961279e565b604051610c969190614e88565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc1919061448d565b6127a4565b604051610cd39190614b46565b60405180910390f35b348015610ce857600080fd5b50610cf16128fd565b604051610cfe9190614e88565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d29919061448d565b612903565b005b348015610d3c57600080fd5b50610d576004803603810190610d52919061448d565b612989565b005b348015610d6557600080fd5b50610d806004803603810190610d7b91906141ad565b612a0f565b604051610d8d9190614b2b565b60405180910390f35b348015610da257600080fd5b50610dab612a7d565b604051610db89190614b2b565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de391906143bd565b612a9a565b005b348015610df657600080fd5b50610e116004803603810190610e0c91906141da565b612b33565b604051610e1e9190614b2b565b60405180910390f35b348015610e3357600080fd5b50610e4e6004803603810190610e4991906144ba565b612bc7565b005b348015610e5c57600080fd5b50610e65612eae565b604051610e729190614e88565b60405180910390f35b348015610e8757600080fd5b50610ea26004803603810190610e9d91906141ad565b612eb4565b604051610eaf9190614b2b565b60405180910390f35b348015610ec457600080fd5b50610edf6004803603810190610eda91906141ad565b612f22565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750610fbb8261301a565b5b9050919050565b606060008054610fd290615191565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90615191565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b5050505050905090565b600061106082613084565b61109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690614d88565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006110e582611b8b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614e08565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111756130f0565b73ffffffffffffffffffffffffffffffffffffffff1614806111a457506111a38161119e6130f0565b612b33565b5b6111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90614ce8565b60405180910390fd5b6111ed83836130f8565b505050565b60125481565b601a5481565b600c5481565b61120c6130f0565b73ffffffffffffffffffffffffffffffffffffffff1661122a611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790614da8565b60405180910390fd5b80600a9080519060200190611296929190613f6b565b5050565b6112a26130f0565b73ffffffffffffffffffffffffffffffffffffffff166112c0611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614da8565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b600061133f60076131b1565b905090565b60106020528060005260406000206000915090505481565b6113646130f0565b73ffffffffffffffffffffffffffffffffffffffff16611382611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614da8565b60405180910390fd5b60005b82829050811015611478576001601c60008585858181106113ff576113fe6152fb565b5b905060200201602081019061141491906141ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611470906151f4565b9150506113db565b505050565b61148e6114886130f0565b826131bf565b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614e48565b60405180910390fd5b6114d883838361329d565b505050565b60115481565b60135481565b600060011515601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561154d5760019050611552565b600090505b919050565b61155f6130f0565b73ffffffffffffffffffffffffffffffffffffffff1661157d611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90614da8565b60405180910390fd5b60006115dd611ed7565b73ffffffffffffffffffffffffffffffffffffffff164760405161160090614a8d565b60006040518083038185875af1925050503d806000811461163d576040519150601f19603f3d011682016040523d82523d6000602084013e611642565b606091505b505090508061165057600080fd5b50565b61166e8383836040518060200160405280600081525061273c565b505050565b6060600061168083611cc3565b905060008167ffffffffffffffff81111561169e5761169d61532a565b5b6040519080825280602002602001820160405280156116cc5781602001602082028036833780820191505090505b50905060006001905060005b83811080156116e95750600d548211155b156117725760006116f983611b8b565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175e5782848381518110611743576117426152fb565b5b602002602001018181525050818061175a906151f4565b9250505b8280611769906151f4565b935050506116d8565b82945050505050919050565b6117866130f0565b73ffffffffffffffffffffffffffffffffffffffff166117a4611ed7565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614da8565b60405180910390fd5b80600c8190555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600060011515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611888576001905061188d565b600090505b919050565b61189a6130f0565b73ffffffffffffffffffffffffffffffffffffffff166118b8611ed7565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590614da8565b60405180910390fd5b80600b9080519060200190611924929190613f6b565b5050565b601e60019054906101000a900460ff1681565b600a805461194890615191565b80601f016020809104026020016040519081016040528092919081815260200182805461197490615191565b80156119c15780601f10611996576101008083540402835291602001916119c1565b820191906000526020600020905b8154815290600101906020018083116119a457829003601f168201915b505050505081565b6119d16130f0565b73ffffffffffffffffffffffffffffffffffffffff166119ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90614da8565b60405180910390fd5b60005b82829050811015611ae557600160166000858585818110611a6c57611a6b6152fb565b5b9050602002016020810190611a8191906141ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611add906151f4565b915050611a48565b505050565b601e60009054906101000a900460ff1681565b60098054611b0a90615191565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3690615191565b8015611b835780601f10611b5857610100808354040283529160200191611b83565b820191906000526020600020905b815481529060010190602001808311611b6657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90614d28565b60405180910390fd5b80915050919050565b611c456130f0565b73ffffffffffffffffffffffffffffffffffffffff16611c63611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090614da8565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614d08565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d836130f0565b73ffffffffffffffffffffffffffffffffffffffff16611da1611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90614da8565b60405180910390fd5b611e016000613504565b565b60176020528060005260406000206000915090505481565b611e236130f0565b73ffffffffffffffffffffffffffffffffffffffff16611e41611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90614da8565b60405180910390fd5b8060099080519060200190611ead929190613f6b565b5050565b601b5481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60006015544210158015611f1c5750600f5442105b905090565b606060018054611f3090615191565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5c90615191565b8015611fa95780601f10611f7e57610100808354040283529160200191611fa9565b820191906000526020600020905b815481529060010190602001808311611f8c57829003601f168201915b5050505050905090565b601d6020528060005260406000206000915090505481565b60195481565b8060008111612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90614c08565b60405180910390fd5b600d548161202360076131b1565b61202d9190614fc6565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614e28565b60405180910390fd5b612076611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461222d57600e548111156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614c08565b60405180910390fd5b6120f5612a7d565b15612158576011548161210860086131b1565b6121129190614fc6565b1115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614cc8565b60405180910390fd5b61222c565b612160611f07565b156121c3576013548161217360086131b1565b61217d9190614fc6565b11156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614cc8565b60405180910390fd5b61222b565b6121cb612672565b1561222a57601954816121de60086131b1565b6121e89190614fc6565b1115612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090614cc8565b60405180910390fd5b5b5b5b5b601e60009054906101000a900460ff161561227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490614dc8565b60405180910390fd5b612285611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612664576122bf611f07565b156123f6576122cd33611824565b61230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614c28565b60405180910390fd5b8160125461231a919061504d565b34101561235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614e68565b60405180910390fd5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060145483826123af9190614fc6565b11156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614c48565b60405180910390fd5b50612663565b6123fe612672565b156125355761240c336114e9565b61244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614b68565b60405180910390fd5b81601854612459919061504d565b34101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614e68565b60405180910390fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601a5483826124ee9190614fc6565b111561252f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252690614c48565b60405180910390fd5b50612662565b61253d612a7d565b61257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614d68565b60405180910390fd5b81600c5461258a919061504d565b3410156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614e68565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e54838261261f9190614fc6565b1115612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790614c48565b60405180910390fd5b505b5b5b61266e33836135ca565b5050565b6000601b544210158015612687575060155442105b905090565b61269e6126976130f0565b8383613782565b5050565b600b80546126af90615191565b80601f01602080910402602001604051908101604052809291908181526020018280546126db90615191565b80156127285780601f106126fd57610100808354040283529160200191612728565b820191906000526020600020905b81548152906001019060200180831161270b57829003601f168201915b505050505081565b60155481565b600e5481565b61274d6127476130f0565b836131bf565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278390614e48565b60405180910390fd5b612798848484846138ef565b50505050565b60185481565b60606127af82613084565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590614de8565b60405180910390fd5b60001515601e60019054906101000a900460ff161515141561289c57600b805461281790615191565b80601f016020809104026020016040519081016040528092919081815260200182805461284390615191565b80156128905780601f1061286557610100808354040283529160200191612890565b820191906000526020600020905b81548152906001019060200180831161287357829003601f168201915b505050505090506128f8565b60006128a661394b565b905060008151116128c657604051806020016040528060008152506128f4565b806128d0846139dd565b600a6040516020016128e493929190614a5c565b6040516020818303038152906040525b9150505b919050565b600d5481565b61290b6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612929611ed7565b73ffffffffffffffffffffffffffffffffffffffff161461297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690614da8565b60405180910390fd5b80600f8190555050565b6129916130f0565b73ffffffffffffffffffffffffffffffffffffffff166129af611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614da8565b60405180910390fd5b80601b8190555050565b600060011515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612a735760019050612a78565b600090505b919050565b6000600f54421115612a925760019050612a97565b600090505b90565b612aa26130f0565b73ffffffffffffffffffffffffffffffffffffffff16612ac0611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614da8565b60405180910390fd5b80601e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0290614c08565b60405180910390fd5b600d5481612c1960076131b1565b612c239190614fc6565b1115612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90614e28565b60405180910390fd5b612c6c611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e2357600e54811115612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda90614c08565b60405180910390fd5b612ceb612a7d565b15612d4e5760115481612cfe60086131b1565b612d089190614fc6565b1115612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4090614cc8565b60405180910390fd5b612e22565b612d56611f07565b15612db95760135481612d6960086131b1565b612d739190614fc6565b1115612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614cc8565b60405180910390fd5b612e21565b612dc1612672565b15612e205760195481612dd460086131b1565b612dde9190614fc6565b1115612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614cc8565b60405180910390fd5b5b5b5b5b612e2b6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612e49611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614da8565b60405180910390fd5b612ea982846135ca565b505050565b60145481565b600060011515601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612f185760019050612f1d565b600090505b919050565b612f2a6130f0565b73ffffffffffffffffffffffffffffffffffffffff16612f48611ed7565b73ffffffffffffffffffffffffffffffffffffffff1614612f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9590614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300590614ba8565b60405180910390fd5b61301781613504565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661316b83611b8b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006131ca82613084565b613209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320090614ca8565b60405180910390fd5b600061321483611b8b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061328357508373ffffffffffffffffffffffffffffffffffffffff1661326b84611055565b73ffffffffffffffffffffffffffffffffffffffff16145b8061329457506132938185612b33565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132bd82611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614613313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330a90614bc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337a90614c68565b60405180910390fd5b61338e838383613b3e565b6133996000826130f8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133e991906150a7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134409190614fc6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ff838383613b43565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561377d576135df6007613b48565b6135e7611ed7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613757576136236008613b48565b61362b612a7d565b1561363557613701565b61363d611f07565b1561369c57601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190613692906151f4565b9190505550613700565b6136a4612672565b156136ff57601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906136f9906151f4565b91905055505b5b5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190613751906151f4565b91905055505b61376a8361376560076131b1565b613b5e565b8080613775906151f4565b9150506135cd565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e890614c88565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138e29190614b2b565b60405180910390a3505050565b6138fa84848461329d565b61390684848484613b7c565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393c90614b88565b60405180910390fd5b50505050565b60606009805461395a90615191565b80601f016020809104026020016040519081016040528092919081815260200182805461398690615191565b80156139d35780601f106139a8576101008083540402835291602001916139d3565b820191906000526020600020905b8154815290600101906020018083116139b657829003601f168201915b5050505050905090565b60606000821415613a25576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b39565b600082905060005b60008214613a57578080613a40906151f4565b915050600a82613a50919061501c565b9150613a2d565b60008167ffffffffffffffff811115613a7357613a7261532a565b5b6040519080825280601f01601f191660200182016040528015613aa55781602001600182028036833780820191505090505b5090505b60008514613b3257600182613abe91906150a7565b9150600a85613acd919061523d565b6030613ad99190614fc6565b60f81b818381518110613aef57613aee6152fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b2b919061501c565b9450613aa9565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b613b78828260405180602001604052806000815250613d13565b5050565b6000613b9d8473ffffffffffffffffffffffffffffffffffffffff16613d6e565b15613d06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bc66130f0565b8786866040518563ffffffff1660e01b8152600401613be89493929190614abd565b602060405180830381600087803b158015613c0257600080fd5b505af1925050508015613c3357506040513d601f19601f82011682018060405250810190613c309190614417565b60015b613cb6573d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50600081511415613cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca590614b88565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d0b565b600190505b949350505050565b613d1d8383613d91565b613d2a6000848484613b7c565b613d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6090614b88565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613df890614d48565b60405180910390fd5b613e0a81613084565b15613e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4190614be8565b60405180910390fd5b613e5660008383613b3e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ea69190614fc6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f6760008383613b43565b5050565b828054613f7790615191565b90600052602060002090601f016020900481019282613f995760008555613fe0565b82601f10613fb257805160ff1916838001178555613fe0565b82800160010185558215613fe0579182015b82811115613fdf578251825591602001919060010190613fc4565b5b509050613fed9190613ff1565b5090565b5b8082111561400a576000816000905550600101613ff2565b5090565b600061402161401c84614ec8565b614ea3565b90508281526020810184848401111561403d5761403c615368565b5b61404884828561514f565b509392505050565b600061406361405e84614ef9565b614ea3565b90508281526020810184848401111561407f5761407e615368565b5b61408a84828561514f565b509392505050565b6000813590506140a1816159a0565b92915050565b60008083601f8401126140bd576140bc61535e565b5b8235905067ffffffffffffffff8111156140da576140d9615359565b5b6020830191508360208202830111156140f6576140f5615363565b5b9250929050565b60008135905061410c816159b7565b92915050565b600081359050614121816159ce565b92915050565b600081519050614136816159ce565b92915050565b600082601f8301126141515761415061535e565b5b813561416184826020860161400e565b91505092915050565b600082601f83011261417f5761417e61535e565b5b813561418f848260208601614050565b91505092915050565b6000813590506141a7816159e5565b92915050565b6000602082840312156141c3576141c2615372565b5b60006141d184828501614092565b91505092915050565b600080604083850312156141f1576141f0615372565b5b60006141ff85828601614092565b925050602061421085828601614092565b9150509250929050565b60008060006060848603121561423357614232615372565b5b600061424186828701614092565b935050602061425286828701614092565b925050604061426386828701614198565b9150509250925092565b6000806000806080858703121561428757614286615372565b5b600061429587828801614092565b94505060206142a687828801614092565b93505060406142b787828801614198565b925050606085013567ffffffffffffffff8111156142d8576142d761536d565b5b6142e48782880161413c565b91505092959194509250565b6000806040838503121561430757614306615372565b5b600061431585828601614092565b9250506020614326858286016140fd565b9150509250929050565b6000806040838503121561434757614346615372565b5b600061435585828601614092565b925050602061436685828601614198565b9150509250929050565b6000806020838503121561438757614386615372565b5b600083013567ffffffffffffffff8111156143a5576143a461536d565b5b6143b1858286016140a7565b92509250509250929050565b6000602082840312156143d3576143d2615372565b5b60006143e1848285016140fd565b91505092915050565b600060208284031215614400576143ff615372565b5b600061440e84828501614112565b91505092915050565b60006020828403121561442d5761442c615372565b5b600061443b84828501614127565b91505092915050565b60006020828403121561445a57614459615372565b5b600082013567ffffffffffffffff8111156144785761447761536d565b5b6144848482850161416a565b91505092915050565b6000602082840312156144a3576144a2615372565b5b60006144b184828501614198565b91505092915050565b600080604083850312156144d1576144d0615372565b5b60006144df85828601614198565b92505060206144f085828601614092565b9150509250929050565b60006145068383614a3e565b60208301905092915050565b61451b816150db565b82525050565b600061452c82614f4f565b6145368185614f7d565b935061454183614f2a565b8060005b8381101561457257815161455988826144fa565b975061456483614f70565b925050600181019050614545565b5085935050505092915050565b614588816150ed565b82525050565b600061459982614f5a565b6145a38185614f8e565b93506145b381856020860161515e565b6145bc81615377565b840191505092915050565b60006145d282614f65565b6145dc8185614faa565b93506145ec81856020860161515e565b6145f581615377565b840191505092915050565b600061460b82614f65565b6146158185614fbb565b935061462581856020860161515e565b80840191505092915050565b6000815461463e81615191565b6146488186614fbb565b945060018216600081146146635760018114614674576146a7565b60ff198316865281860193506146a7565b61467d85614f3a565b60005b8381101561469f57815481890152600182019150602081019050614680565b838801955050505b50505092915050565b60006146bd602483614faa565b91506146c882615388565b604082019050919050565b60006146e0603283614faa565b91506146eb826153d7565b604082019050919050565b6000614703602683614faa565b915061470e82615426565b604082019050919050565b6000614726602583614faa565b915061473182615475565b604082019050919050565b6000614749601c83614faa565b9150614754826154c4565b602082019050919050565b600061476c601483614faa565b9150614777826154ed565b602082019050919050565b600061478f602483614faa565b915061479a82615516565b604082019050919050565b60006147b2601d83614faa565b91506147bd82615565565b602082019050919050565b60006147d5602483614faa565b91506147e08261558e565b604082019050919050565b60006147f8601983614faa565b9150614803826155dd565b602082019050919050565b600061481b602c83614faa565b915061482682615606565b604082019050919050565b600061483e602083614faa565b915061484982615655565b602082019050919050565b6000614861603883614faa565b915061486c8261567e565b604082019050919050565b6000614884602a83614faa565b915061488f826156cd565b604082019050919050565b60006148a7602983614faa565b91506148b28261571c565b604082019050919050565b60006148ca602083614faa565b91506148d58261576b565b602082019050919050565b60006148ed601a83614faa565b91506148f882615794565b602082019050919050565b6000614910602c83614faa565b915061491b826157bd565b604082019050919050565b6000614933602083614faa565b915061493e8261580c565b602082019050919050565b6000614956601783614faa565b915061496182615835565b602082019050919050565b6000614979602f83614faa565b91506149848261585e565b604082019050919050565b600061499c602183614faa565b91506149a7826158ad565b604082019050919050565b60006149bf600083614f9f565b91506149ca826158fc565b600082019050919050565b60006149e2601483614faa565b91506149ed826158ff565b602082019050919050565b6000614a05603183614faa565b9150614a1082615928565b604082019050919050565b6000614a28601383614faa565b9150614a3382615977565b602082019050919050565b614a4781615145565b82525050565b614a5681615145565b82525050565b6000614a688286614600565b9150614a748285614600565b9150614a808284614631565b9150819050949350505050565b6000614a98826149b2565b9150819050919050565b6000602082019050614ab76000830184614512565b92915050565b6000608082019050614ad26000830187614512565b614adf6020830186614512565b614aec6040830185614a4d565b8181036060830152614afe818461458e565b905095945050505050565b60006020820190508181036000830152614b238184614521565b905092915050565b6000602082019050614b40600083018461457f565b92915050565b60006020820190508181036000830152614b6081846145c7565b905092915050565b60006020820190508181036000830152614b81816146b0565b9050919050565b60006020820190508181036000830152614ba1816146d3565b9050919050565b60006020820190508181036000830152614bc1816146f6565b9050919050565b60006020820190508181036000830152614be181614719565b9050919050565b60006020820190508181036000830152614c018161473c565b9050919050565b60006020820190508181036000830152614c218161475f565b9050919050565b60006020820190508181036000830152614c4181614782565b9050919050565b60006020820190508181036000830152614c61816147a5565b9050919050565b60006020820190508181036000830152614c81816147c8565b9050919050565b60006020820190508181036000830152614ca1816147eb565b9050919050565b60006020820190508181036000830152614cc18161480e565b9050919050565b60006020820190508181036000830152614ce181614831565b9050919050565b60006020820190508181036000830152614d0181614854565b9050919050565b60006020820190508181036000830152614d2181614877565b9050919050565b60006020820190508181036000830152614d418161489a565b9050919050565b60006020820190508181036000830152614d61816148bd565b9050919050565b60006020820190508181036000830152614d81816148e0565b9050919050565b60006020820190508181036000830152614da181614903565b9050919050565b60006020820190508181036000830152614dc181614926565b9050919050565b60006020820190508181036000830152614de181614949565b9050919050565b60006020820190508181036000830152614e018161496c565b9050919050565b60006020820190508181036000830152614e218161498f565b9050919050565b60006020820190508181036000830152614e41816149d5565b9050919050565b60006020820190508181036000830152614e61816149f8565b9050919050565b60006020820190508181036000830152614e8181614a1b565b9050919050565b6000602082019050614e9d6000830184614a4d565b92915050565b6000614ead614ebe565b9050614eb982826151c3565b919050565b6000604051905090565b600067ffffffffffffffff821115614ee357614ee261532a565b5b614eec82615377565b9050602081019050919050565b600067ffffffffffffffff821115614f1457614f1361532a565b5b614f1d82615377565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fd182615145565b9150614fdc83615145565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150115761501061526e565b5b828201905092915050565b600061502782615145565b915061503283615145565b9250826150425761504161529d565b5b828204905092915050565b600061505882615145565b915061506383615145565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561509c5761509b61526e565b5b828202905092915050565b60006150b282615145565b91506150bd83615145565b9250828210156150d0576150cf61526e565b5b828203905092915050565b60006150e682615125565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561517c578082015181840152602081019050615161565b8381111561518b576000848401525b50505050565b600060028204905060018216806151a957607f821691505b602082108114156151bd576151bc6152cc565b5b50919050565b6151cc82615377565b810181811067ffffffffffffffff821117156151eb576151ea61532a565b5b80604052505050565b60006151ff82615145565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152325761523161526e565b5b600182019050919050565b600061524882615145565b915061525383615145565b9250826152635761526261529d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f742077686974656c697374656420666f72204f47205360008201527f616c652100000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f55736572206973206e6f742077686974656c697374656420666f72205072657360008201527f616c652100000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656421000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920666f722050726573616c6520657863656564656421600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5075626c6963206d696e74696e67206e6f742073746172746564000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6159a9816150db565b81146159b457600080fd5b50565b6159c0816150ed565b81146159cb57600080fd5b50565b6159d7816150f9565b81146159e257600080fd5b50565b6159ee81615145565b81146159f957600080fd5b5056fea264697066735822122024fbcfd2d62838b7c2c46ed7b53747d720efdd0d6cc49986110721fde3fe1dc464736f6c63430008070033

Deployed Bytecode Sourcemap

38813:10130:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25609:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26554:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28113:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27636:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39545:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39970:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39194:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47609:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47723:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41370:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39361:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46327:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28863:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39588:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44644:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47814:327;;;;;;;;;;;;;:::i;:::-;;29273:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44820:743;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47102:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39743:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44467:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47326:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40228:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39114:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46535:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40195:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39016:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26248:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47190:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25978:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6230:103;;;;;;;;;;;;;:::i;:::-;;39805:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47495:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40015:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40066:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5579:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39313:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44129:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26723:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40128:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39930:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41473:1937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43960:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28406:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39692:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39271:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29529:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39888:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45571:727;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39233:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46748:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46872:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43789:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44296;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47007:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28632:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43418:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39647:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43619:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6488:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25609:305;25711:4;25763:25;25748:40;;;:11;:40;;;;:105;;;;25820:33;25805:48;;;:11;:48;;;;25748:105;:158;;;;25870:36;25894:11;25870:23;:36::i;:::-;25748:158;25728:178;;25609:305;;;:::o;26554:100::-;26608:13;26641:5;26634:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26554:100;:::o;28113:221::-;28189:7;28217:16;28225:7;28217;:16::i;:::-;28209:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28302:15;:24;28318:7;28302:24;;;;;;;;;;;;;;;;;;;;;28295:31;;28113:221;;;:::o;27636:411::-;27717:13;27733:23;27748:7;27733:14;:23::i;:::-;27717:39;;27781:5;27775:11;;:2;:11;;;;27767:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27875:5;27859:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27884:37;27901:5;27908:12;:10;:12::i;:::-;27884:16;:37::i;:::-;27859:62;27837:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28018:21;28027:2;28031:7;28018:8;:21::i;:::-;27706:341;27636:411;;:::o;39545:36::-;;;;:::o;39970:38::-;;;;:::o;39194:32::-;;;;:::o;47609:106::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47697:10:::1;47685:9;:22;;;;;;;;;;;;:::i;:::-;;47609:106:::0;:::o;47723:83::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47792:6:::1;47783;;:15;;;;;;;;;;;;;;;;;;47723:83:::0;:::o;41370:95::-;41414:7;41441:16;:6;:14;:16::i;:::-;41434:23;;41370:95;:::o;39361:55::-;;;;;;;;;;;;;;;;;:::o;46327:200::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46413:9:::1;46408:112;46432:6;;:13;;46428:1;:17;46408:112;;;46504:4;46467:23;:34;46491:6;;46498:1;46491:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46467:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;46447:3;;;;;:::i;:::-;;;;46408:112;;;;46327:200:::0;;:::o;28863:339::-;29058:41;29077:12;:10;:12::i;:::-;29091:7;29058:18;:41::i;:::-;29050:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29166:28;29176:4;29182:2;29186:7;29166:9;:28::i;:::-;28863:339;;;:::o;39445:38::-;;;;:::o;39588:34::-;;;;:::o;44644:168::-;44709:4;44764;44730:38;;:23;:30;44754:5;44730:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;44726:55;;;44777:4;44770:11;;;;44726:55;44799:5;44792:12;;44644:168;;;;:::o;47814:327::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47953:7:::1;47974;:5;:7::i;:::-;47966:21;;47995;47966:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47952:69;;;48040:2;48032:11;;;::::0;::::1;;47851:290;47814:327::o:0;29273:185::-;29411:39;29428:4;29434:2;29438:7;29411:39;;;;;;;;;;;;:16;:39::i;:::-;29273:185;;;:::o;44820:743::-;44907:16;44941:23;44967:17;44977:6;44967:9;:17::i;:::-;44941:43;;44995:30;45042:15;45028:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44995:63;;45069:22;45094:1;45069:26;;45106:23;45146:377;45185:15;45167;:33;:64;;;;;45222:9;;45204:14;:27;;45167:64;45146:377;;;45258:25;45286:23;45294:14;45286:7;:23::i;:::-;45258:51;;45351:6;45330:27;;:17;:27;;;45326:153;;;45411:14;45378:13;45392:15;45378:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;45446:17;;;;;:::i;:::-;;;;45326:153;45495:16;;;;;:::i;:::-;;;;45243:280;45146:377;;;45542:13;45535:20;;;;;;44820:743;;;:::o;47102:80::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47169:5:::1;47162:4;:12;;;;47102:80:::0;:::o;39743:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;44467:169::-;44533:4;44588;44554:38;;:23;:30;44578:5;44554:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;44550:55;;;44601:4;44594:11;;;;44550:55;44623:5;44616:12;;44467:169;;;;:::o;47326:161::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47461:18:::1;47441:17;:38;;;;;;;;;;;;:::i;:::-;;47326:161:::0;:::o;40228:27::-;;;;;;;;;;;;;:::o;39114:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46535:205::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46626:9:::1;46621:112;46645:6;;:13;;46641:1;:17;46621:112;;;46717:4;46680:23;:34;46704:6;;46711:1;46704:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46680:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;46660:3;;;;;:::i;:::-;;;;46621:112;;;;46535:205:::0;;:::o;40195:26::-;;;;;;;;;;;;;:::o;39016:91::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26248:239::-;26320:7;26340:13;26356:7;:16;26364:7;26356:16;;;;;;;;;;;;;;;;;;;;;26340:32;;26408:1;26391:19;;:5;:19;;;;26383:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26474:5;26467:12;;;26248:239;;;:::o;47190:128::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47293:17:::1;47274:16;:36;;;;47190:128:::0;:::o;25978:208::-;26050:7;26095:1;26078:19;;:5;:19;;;;26070:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26162:9;:16;26172:5;26162:16;;;;;;;;;;;;;;;;26155:23;;25978:208;;;:::o;6230:103::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6295:30:::1;6322:1;6295:18;:30::i;:::-;6230:103::o:0;39805:58::-;;;;;;;;;;;;;;;;;:::o;47495:106::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47583:10:::1;47571:9;:22;;;;;;;;;;;;:::i;:::-;;47495:106:::0;:::o;40015:44::-;;;;:::o;40066:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;5579:87::-;5625:7;5652:6;;;;;;;;;;;5645:13;;5579:87;:::o;39313:41::-;;;;:::o;44129:159::-;44171:4;44215:16;;44196:15;:35;;:83;;;;;44266:13;;44248:15;:31;44196:83;44188:92;;44129:159;:::o;26723:104::-;26779:13;26812:7;26805:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26723:104;:::o;40128:58::-;;;;;;;;;;;;;;;;;:::o;39930:33::-;;;;:::o;41473:1937::-;41565:11;40404:1;40390:11;:15;40382:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40497:9;;40482:11;40463:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40441:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40585:7;:5;:7::i;:::-;40571:21;;:10;:21;;;40567:776;;40632:16;;40617:11;:31;;40609:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40692:10;:8;:10::i;:::-;40688:644;;;40793:16;;40778:11;40753:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:56;;40723:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;40688:644;;;40911:11;:9;:11::i;:::-;40907:425;;;41013:12;;40998:11;40973:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:52;;40943:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;40907:425;;;41127:10;:8;:10::i;:::-;41123:209;;;41228:12;;41213:11;41188:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:52;;41158:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;41123:209;40907:425;40688:644;40567:776;41603:6:::1;;;;;;;;;;;41602:7;41594:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41668:7;:5;:7::i;:::-;41654:21;;:10;:21;;;41650:1706;;41696:11;:9;:11::i;:::-;41692:1653;;;41758:32;41779:10;41758:20;:32::i;:::-;41728:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;41942:11;41932:7;;:21;;;;:::i;:::-;41919:9;:34;;41889:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;42035:24;42062:23;:35;42086:10;42062:35;;;;;;;;;;;;;;;;42035:62;;42180:19;;42165:11;42146:16;:30;;;;:::i;:::-;:53;;42116:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;41709:579;41692:1653;;;42298:10;:8;:10::i;:::-;42294:1051;;;42359:31;42379:10;42359:19;:31::i;:::-;42329:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;42542:11;42532:7;;:21;;;;:::i;:::-;42519:9;:34;;42489:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;42635:24;42662:23;:35;42686:10;42662:35;;;;;;;;;;;;;;;;42635:62;;42780:19;;42765:11;42746:16;:30;;;;:::i;:::-;:53;;42716:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;42310:578;42294:1051;;;42956:10;:8;:10::i;:::-;42948:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43044:11;43037:4;;:18;;;;:::i;:::-;43024:9;:31;;43016:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43098:24;43125:20;:32;43146:10;43125:32;;;;;;;;;;;;;;;;43098:59;;43240:16;;43225:11;43206:16;:30;;;;:::i;:::-;:50;;43176:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;42894:451;42294:1051;41692:1653;41650:1706;43368:34;43378:10;43390:11;43368:9;:34::i;:::-;41473:1937:::0;;:::o;43960:161::-;44001:4;44045:16;;44026:15;:35;;:86;;;;;44096:16;;44078:15;:34;44026:86;44018:95;;43960:161;:::o;28406:155::-;28501:52;28520:12;:10;:12::i;:::-;28534:8;28544;28501:18;:52::i;:::-;28406:155;;:::o;39154:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39692:44::-;;;;:::o;39271:35::-;;;;:::o;29529:328::-;29704:41;29723:12;:10;:12::i;:::-;29737:7;29704:18;:41::i;:::-;29696:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29810:39;29824:4;29830:2;29834:7;29843:5;29810:13;:39::i;:::-;29529:328;;;;:::o;39888:35::-;;;;:::o;45571:727::-;45690:13;45743:17;45751:8;45743:7;:17::i;:::-;45721:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45864:5;45852:17;;:8;;;;;;;;;;;:17;;;45848:74;;;45893:17;45886:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45848:74;45934:28;45965:10;:8;:10::i;:::-;45934:41;;46037:1;46012:14;46006:28;:32;:284;;;;;;;;;;;;;;;;;46130:14;46171:19;:8;:17;:19::i;:::-;46217:9;46087:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46006:284;45986:304;;;45571:727;;;;:::o;39233:31::-;;;;:::o;46748:116::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46842:14:::1;46826:13;:30;;;;46748:116:::0;:::o;46872:127::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46974:17:::1;46955:16;:36;;;;46872:127:::0;:::o;43789:163::-;43849:4;43904;43870:38;;:23;:30;43894:5;43870:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;43866:55;;;43917:4;43910:11;;;;43866:55;43939:5;43932:12;;43789:163;;;;:::o;44296:::-;44337:4;44376:13;;44358:15;:31;44354:75;;;44413:4;44406:11;;;;44354:75;44446:5;44439:12;;44296:163;;:::o;47007:87::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47080:6:::1;47069:8;;:17;;;;;;;;;;;;;;;;;;47007:87:::0;:::o;28632:164::-;28729:4;28753:18;:25;28772:5;28753:25;;;;;;;;;;;;;;;:35;28779:8;28753:35;;;;;;;;;;;;;;;;;;;;;;;;;28746:42;;28632:164;;;;:::o;43418:193::-;43522:11;40404:1;40390:11;:15;40382:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40497:9;;40482:11;40463:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40441:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40585:7;:5;:7::i;:::-;40571:21;;:10;:21;;;40567:776;;40632:16;;40617:11;:31;;40609:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40692:10;:8;:10::i;:::-;40688:644;;;40793:16;;40778:11;40753:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:56;;40723:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;40688:644;;;40911:11;:9;:11::i;:::-;40907:425;;;41013:12;;40998:11;40973:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:52;;40943:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;40907:425;;;41127:10;:8;:10::i;:::-;41123:209;;;41228:12;;41213:11;41188:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:52;;41158:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;41123:209;40907:425;40688:644;40567:776;5810:12:::1;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43570:33:::2;43580:9;43591:11;43570:9;:33::i;:::-;43418:193:::0;;;:::o;39647:38::-;;;;:::o;43619:162::-;43678:4;43733;43699:38;;:23;:30;43723:5;43699:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;43695:55;;;43746:4;43739:11;;;;43695:55;43768:5;43761:12;;43619:162;;;;:::o;6488:201::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6597:1:::1;6577:22;;:8;:22;;;;6569:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6653:28;6672:8;6653:18;:28::i;:::-;6488:201:::0;:::o;18363:157::-;18448:4;18487:25;18472:40;;;:11;:40;;;;18465:47;;18363:157;;;:::o;31367:127::-;31432:4;31484:1;31456:30;;:7;:16;31464:7;31456:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31449:37;;31367:127;;;:::o;4303:98::-;4356:7;4383:10;4376:17;;4303:98;:::o;35513:174::-;35615:2;35588:15;:24;35604:7;35588:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35671:7;35667:2;35633:46;;35642:23;35657:7;35642:14;:23::i;:::-;35633:46;;;;;;;;;;;;35513:174;;:::o;907:114::-;972:7;999;:14;;;992:21;;907:114;;;:::o;31661:348::-;31754:4;31779:16;31787:7;31779;:16::i;:::-;31771:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31855:13;31871:23;31886:7;31871:14;:23::i;:::-;31855:39;;31924:5;31913:16;;:7;:16;;;:51;;;;31957:7;31933:31;;:20;31945:7;31933:11;:20::i;:::-;:31;;;31913:51;:87;;;;31968:32;31985:5;31992:7;31968:16;:32::i;:::-;31913:87;31905:96;;;31661:348;;;;:::o;34770:625::-;34929:4;34902:31;;:23;34917:7;34902:14;:23::i;:::-;:31;;;34894:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35008:1;34994:16;;:2;:16;;;;34986:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35064:39;35085:4;35091:2;35095:7;35064:20;:39::i;:::-;35168:29;35185:1;35189:7;35168:8;:29::i;:::-;35229:1;35210:9;:15;35220:4;35210:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35258:1;35241:9;:13;35251:2;35241:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35289:2;35270:7;:16;35278:7;35270:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35328:7;35324:2;35309:27;;35318:4;35309:27;;;;;;;;;;;;35349:38;35369:4;35375:2;35379:7;35349:19;:38::i;:::-;34770:625;;;:::o;6849:191::-;6923:16;6942:6;;;;;;;;;;;6923:25;;6968:8;6959:6;;:17;;;;;;;;;;;;;;;;;;7023:8;6992:40;;7013:8;6992:40;;;;;;;;;;;;6912:128;6849:191;:::o;48149:673::-;48233:9;48228:587;48252:11;48248:1;:15;48228:587;;;48285:18;:6;:16;:18::i;:::-;48336:7;:5;:7::i;:::-;48322:21;;:10;:21;;;48318:433;;48364:24;:12;:22;:24::i;:::-;48411:10;:8;:10::i;:::-;48407:276;;;;;;48488:11;:9;:11::i;:::-;48484:199;;;48524:23;:35;48548:10;48524:35;;;;;;;;;;;;;;;;:37;;;;;;;;;:::i;:::-;;;;;;48484:199;;;48591:10;:8;:10::i;:::-;48587:96;;;48626:23;:35;48650:10;48626:35;;;;;;;;;;;;;;;;:37;;;;;;;;;:::i;:::-;;;;;;48587:96;48484:199;48407:276;48701:20;:32;48722:10;48701:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48318:433;48765:38;48775:9;48786:16;:6;:14;:16::i;:::-;48765:9;:38::i;:::-;48265:3;;;;;:::i;:::-;;;;48228:587;;;;48149:673;;:::o;35829:315::-;35984:8;35975:17;;:5;:17;;;;35967:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36071:8;36033:18;:25;36052:5;36033:25;;;;;;;;;;;;;;;:35;36059:8;36033:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36117:8;36095:41;;36110:5;36095:41;;;36127:8;36095:41;;;;;;:::i;:::-;;;;;;;;35829:315;;;:::o;30739:::-;30896:28;30906:4;30912:2;30916:7;30896:9;:28::i;:::-;30943:48;30966:4;30972:2;30976:7;30985:5;30943:22;:48::i;:::-;30935:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30739:315;;;;:::o;48830:110::-;48890:13;48923:9;48916:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48830:110;:::o;1865:723::-;1921:13;2151:1;2142:5;:10;2138:53;;;2169:10;;;;;;;;;;;;;;;;;;;;;2138:53;2201:12;2216:5;2201:20;;2232:14;2257:78;2272:1;2264:4;:9;2257:78;;2290:8;;;;;:::i;:::-;;;;2321:2;2313:10;;;;;:::i;:::-;;;2257:78;;;2345:19;2377:6;2367:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:39;;2395:154;2411:1;2402:5;:10;2395:154;;2439:1;2429:11;;;;;:::i;:::-;;;2506:2;2498:5;:10;;;;:::i;:::-;2485:2;:24;;;;:::i;:::-;2472:39;;2455:6;2462;2455:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2535:2;2526:11;;;;;:::i;:::-;;;2395:154;;;2573:6;2559:21;;;;;1865:723;;;;:::o;38080:126::-;;;;:::o;38591:125::-;;;;:::o;1029:127::-;1136:1;1118:7;:14;;;:19;;;;;;;;;;;1029:127;:::o;32351:110::-;32427:26;32437:2;32441:7;32427:26;;;;;;;;;;;;:9;:26::i;:::-;32351:110;;:::o;36709:799::-;36864:4;36885:15;:2;:13;;;:15::i;:::-;36881:620;;;36937:2;36921:36;;;36958:12;:10;:12::i;:::-;36972:4;36978:7;36987:5;36921:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36917:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37180:1;37163:6;:13;:18;37159:272;;;37206:60;;;;;;;;;;:::i;:::-;;;;;;;;37159:272;37381:6;37375:13;37366:6;37362:2;37358:15;37351:38;36917:529;37054:41;;;37044:51;;;:6;:51;;;;37037:58;;;;;36881:620;37485:4;37478:11;;36709:799;;;;;;;:::o;32688:321::-;32818:18;32824:2;32828:7;32818:5;:18::i;:::-;32869:54;32900:1;32904:2;32908:7;32917:5;32869:22;:54::i;:::-;32847:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32688:321;;;:::o;8280:326::-;8340:4;8597:1;8575:7;:19;;;:23;8568:30;;8280:326;;;:::o;33345:439::-;33439:1;33425:16;;:2;:16;;;;33417:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33498:16;33506:7;33498;:16::i;:::-;33497:17;33489:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33560:45;33589:1;33593:2;33597:7;33560:20;:45::i;:::-;33635:1;33618:9;:13;33628:2;33618:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33666:2;33647:7;:16;33655:7;33647:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33711:7;33707:2;33686:33;;33703:1;33686:33;;;;;;;;;;;;33732:44;33760:1;33764:2;33768:7;33732:19;:44::i;:::-;33345:439;;:::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;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:474::-;8711:6;8719;8768:2;8756:9;8747:7;8743:23;8739:32;8736:119;;;8774:79;;:::i;:::-;8736:119;8894:1;8919:53;8964:7;8955:6;8944:9;8940:22;8919:53;:::i;:::-;8909:63;;8865:117;9021:2;9047:53;9092:7;9083:6;9072:9;9068:22;9047:53;:::i;:::-;9037:63;;8992:118;8643:474;;;;;:::o;9123:179::-;9192:10;9213:46;9255:3;9247:6;9213:46;:::i;:::-;9291:4;9286:3;9282:14;9268:28;;9123:179;;;;:::o;9308:118::-;9395:24;9413:5;9395:24;:::i;:::-;9390:3;9383:37;9308:118;;:::o;9462:732::-;9581:3;9610:54;9658:5;9610:54;:::i;:::-;9680:86;9759:6;9754:3;9680:86;:::i;:::-;9673:93;;9790:56;9840:5;9790:56;:::i;:::-;9869:7;9900:1;9885:284;9910:6;9907:1;9904:13;9885:284;;;9986:6;9980:13;10013:63;10072:3;10057:13;10013:63;:::i;:::-;10006:70;;10099:60;10152:6;10099:60;:::i;:::-;10089:70;;9945:224;9932:1;9929;9925:9;9920:14;;9885:284;;;9889:14;10185:3;10178:10;;9586:608;;;9462:732;;;;:::o;10200:109::-;10281:21;10296:5;10281:21;:::i;:::-;10276:3;10269:34;10200:109;;:::o;10315:360::-;10401:3;10429:38;10461:5;10429:38;:::i;:::-;10483:70;10546:6;10541:3;10483:70;:::i;:::-;10476:77;;10562:52;10607:6;10602:3;10595:4;10588:5;10584:16;10562:52;:::i;:::-;10639:29;10661:6;10639:29;:::i;:::-;10634:3;10630:39;10623:46;;10405:270;10315:360;;;;:::o;10681:364::-;10769:3;10797:39;10830:5;10797:39;:::i;:::-;10852:71;10916:6;10911:3;10852:71;:::i;:::-;10845:78;;10932:52;10977:6;10972:3;10965:4;10958:5;10954:16;10932:52;:::i;:::-;11009:29;11031:6;11009:29;:::i;:::-;11004:3;11000:39;10993:46;;10773:272;10681:364;;;;:::o;11051:377::-;11157:3;11185:39;11218:5;11185:39;:::i;:::-;11240:89;11322:6;11317:3;11240:89;:::i;:::-;11233:96;;11338:52;11383:6;11378:3;11371:4;11364:5;11360:16;11338:52;:::i;:::-;11415:6;11410:3;11406:16;11399:23;;11161:267;11051:377;;;;:::o;11458:845::-;11561:3;11598:5;11592:12;11627:36;11653:9;11627:36;:::i;:::-;11679:89;11761:6;11756:3;11679:89;:::i;:::-;11672:96;;11799:1;11788:9;11784:17;11815:1;11810:137;;;;11961:1;11956:341;;;;11777:520;;11810:137;11894:4;11890:9;11879;11875:25;11870:3;11863:38;11930:6;11925:3;11921:16;11914:23;;11810:137;;11956:341;12023:38;12055:5;12023:38;:::i;:::-;12083:1;12097:154;12111:6;12108:1;12105:13;12097:154;;;12185:7;12179:14;12175:1;12170:3;12166:11;12159:35;12235:1;12226:7;12222:15;12211:26;;12133:4;12130:1;12126:12;12121:17;;12097:154;;;12280:6;12275:3;12271:16;12264:23;;11963:334;;11777:520;;11565:738;;11458:845;;;;:::o;12309:366::-;12451:3;12472:67;12536:2;12531:3;12472:67;:::i;:::-;12465:74;;12548:93;12637:3;12548:93;:::i;:::-;12666:2;12661:3;12657:12;12650:19;;12309:366;;;:::o;12681:::-;12823:3;12844:67;12908:2;12903:3;12844:67;:::i;:::-;12837:74;;12920:93;13009:3;12920:93;:::i;:::-;13038:2;13033:3;13029:12;13022:19;;12681:366;;;:::o;13053:::-;13195:3;13216:67;13280:2;13275:3;13216:67;:::i;:::-;13209:74;;13292:93;13381:3;13292:93;:::i;:::-;13410:2;13405:3;13401:12;13394:19;;13053:366;;;:::o;13425:::-;13567:3;13588:67;13652:2;13647:3;13588:67;:::i;:::-;13581:74;;13664:93;13753:3;13664:93;:::i;:::-;13782:2;13777:3;13773:12;13766:19;;13425:366;;;:::o;13797:::-;13939:3;13960:67;14024:2;14019:3;13960:67;:::i;:::-;13953:74;;14036:93;14125:3;14036:93;:::i;:::-;14154:2;14149:3;14145:12;14138:19;;13797:366;;;:::o;14169:::-;14311:3;14332:67;14396:2;14391:3;14332:67;:::i;:::-;14325:74;;14408:93;14497:3;14408:93;:::i;:::-;14526:2;14521:3;14517:12;14510:19;;14169:366;;;:::o;14541:::-;14683:3;14704:67;14768:2;14763:3;14704:67;:::i;:::-;14697:74;;14780:93;14869:3;14780:93;:::i;:::-;14898:2;14893:3;14889:12;14882:19;;14541:366;;;:::o;14913:::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:::-;15427:3;15448:67;15512:2;15507:3;15448:67;:::i;:::-;15441:74;;15524:93;15613:3;15524:93;:::i;:::-;15642:2;15637:3;15633:12;15626:19;;15285:366;;;:::o;15657:::-;15799:3;15820:67;15884:2;15879:3;15820:67;:::i;:::-;15813:74;;15896:93;15985:3;15896:93;:::i;:::-;16014:2;16009:3;16005:12;15998:19;;15657:366;;;:::o;16029:::-;16171:3;16192:67;16256:2;16251:3;16192:67;:::i;:::-;16185:74;;16268:93;16357:3;16268:93;:::i;:::-;16386:2;16381:3;16377:12;16370:19;;16029:366;;;:::o;16401:::-;16543:3;16564:67;16628:2;16623:3;16564:67;:::i;:::-;16557:74;;16640:93;16729:3;16640:93;:::i;:::-;16758:2;16753:3;16749:12;16742:19;;16401:366;;;:::o;16773:::-;16915:3;16936:67;17000:2;16995:3;16936:67;:::i;:::-;16929:74;;17012:93;17101:3;17012:93;:::i;:::-;17130:2;17125:3;17121:12;17114:19;;16773:366;;;:::o;17145:::-;17287:3;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17384:93;17473:3;17384:93;:::i;:::-;17502:2;17497:3;17493:12;17486:19;;17145:366;;;:::o;17517:::-;17659:3;17680:67;17744:2;17739:3;17680:67;:::i;:::-;17673:74;;17756:93;17845:3;17756:93;:::i;:::-;17874:2;17869:3;17865:12;17858:19;;17517:366;;;:::o;17889:::-;18031:3;18052:67;18116:2;18111:3;18052:67;:::i;:::-;18045:74;;18128:93;18217:3;18128:93;:::i;:::-;18246:2;18241:3;18237:12;18230:19;;17889:366;;;:::o;18261:::-;18403:3;18424:67;18488:2;18483:3;18424:67;:::i;:::-;18417:74;;18500:93;18589:3;18500:93;:::i;:::-;18618:2;18613:3;18609:12;18602:19;;18261:366;;;:::o;18633:::-;18775:3;18796:67;18860:2;18855:3;18796:67;:::i;:::-;18789:74;;18872:93;18961:3;18872:93;:::i;:::-;18990:2;18985:3;18981:12;18974:19;;18633:366;;;:::o;19005:::-;19147:3;19168:67;19232:2;19227:3;19168:67;:::i;:::-;19161:74;;19244:93;19333:3;19244:93;:::i;:::-;19362:2;19357:3;19353:12;19346:19;;19005:366;;;:::o;19377:::-;19519:3;19540:67;19604:2;19599:3;19540:67;:::i;:::-;19533:74;;19616:93;19705:3;19616:93;:::i;:::-;19734:2;19729:3;19725:12;19718:19;;19377:366;;;:::o;19749:::-;19891:3;19912:67;19976:2;19971:3;19912:67;:::i;:::-;19905:74;;19988:93;20077:3;19988:93;:::i;:::-;20106:2;20101:3;20097:12;20090:19;;19749:366;;;:::o;20121:::-;20263:3;20284:67;20348:2;20343:3;20284:67;:::i;:::-;20277:74;;20360:93;20449:3;20360:93;:::i;:::-;20478:2;20473:3;20469:12;20462:19;;20121:366;;;:::o;20493:398::-;20652:3;20673:83;20754:1;20749:3;20673:83;:::i;:::-;20666:90;;20765:93;20854:3;20765:93;:::i;:::-;20883:1;20878:3;20874:11;20867:18;;20493:398;;;:::o;20897:366::-;21039:3;21060:67;21124:2;21119:3;21060:67;:::i;:::-;21053:74;;21136:93;21225:3;21136:93;:::i;:::-;21254:2;21249:3;21245:12;21238:19;;20897:366;;;:::o;21269:::-;21411:3;21432:67;21496:2;21491:3;21432:67;:::i;:::-;21425:74;;21508:93;21597:3;21508:93;:::i;:::-;21626:2;21621:3;21617:12;21610:19;;21269:366;;;:::o;21641:::-;21783:3;21804:67;21868:2;21863:3;21804:67;:::i;:::-;21797:74;;21880:93;21969:3;21880:93;:::i;:::-;21998:2;21993:3;21989:12;21982:19;;21641:366;;;:::o;22013:108::-;22090:24;22108:5;22090:24;:::i;:::-;22085:3;22078:37;22013:108;;:::o;22127:118::-;22214:24;22232:5;22214:24;:::i;:::-;22209:3;22202:37;22127:118;;:::o;22251:589::-;22476:3;22498:95;22589:3;22580:6;22498:95;:::i;:::-;22491:102;;22610:95;22701:3;22692:6;22610:95;:::i;:::-;22603:102;;22722:92;22810:3;22801:6;22722:92;:::i;:::-;22715:99;;22831:3;22824:10;;22251:589;;;;;;:::o;22846:379::-;23030:3;23052:147;23195:3;23052:147;:::i;:::-;23045:154;;23216:3;23209:10;;22846:379;;;:::o;23231:222::-;23324:4;23362:2;23351:9;23347:18;23339:26;;23375:71;23443:1;23432:9;23428:17;23419:6;23375:71;:::i;:::-;23231:222;;;;:::o;23459:640::-;23654:4;23692:3;23681:9;23677:19;23669:27;;23706:71;23774:1;23763:9;23759:17;23750:6;23706:71;:::i;:::-;23787:72;23855:2;23844:9;23840:18;23831:6;23787:72;:::i;:::-;23869;23937:2;23926:9;23922:18;23913:6;23869:72;:::i;:::-;23988:9;23982:4;23978:20;23973:2;23962:9;23958:18;23951:48;24016:76;24087:4;24078:6;24016:76;:::i;:::-;24008:84;;23459:640;;;;;;;:::o;24105:373::-;24248:4;24286:2;24275:9;24271:18;24263:26;;24335:9;24329:4;24325:20;24321:1;24310:9;24306:17;24299:47;24363:108;24466:4;24457:6;24363:108;:::i;:::-;24355:116;;24105:373;;;;:::o;24484:210::-;24571:4;24609:2;24598:9;24594:18;24586:26;;24622:65;24684:1;24673:9;24669:17;24660:6;24622:65;:::i;:::-;24484:210;;;;:::o;24700:313::-;24813:4;24851:2;24840:9;24836:18;24828:26;;24900:9;24894:4;24890:20;24886:1;24875:9;24871:17;24864:47;24928:78;25001:4;24992:6;24928:78;:::i;:::-;24920:86;;24700:313;;;;:::o;25019:419::-;25185:4;25223:2;25212:9;25208:18;25200:26;;25272:9;25266:4;25262:20;25258:1;25247:9;25243:17;25236:47;25300:131;25426:4;25300:131;:::i;:::-;25292:139;;25019:419;;;:::o;25444:::-;25610:4;25648:2;25637:9;25633:18;25625:26;;25697:9;25691:4;25687:20;25683:1;25672:9;25668:17;25661:47;25725:131;25851:4;25725:131;:::i;:::-;25717:139;;25444:419;;;:::o;25869:::-;26035:4;26073:2;26062:9;26058:18;26050:26;;26122:9;26116:4;26112:20;26108:1;26097:9;26093:17;26086:47;26150:131;26276:4;26150:131;:::i;:::-;26142:139;;25869:419;;;:::o;26294:::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26547:9;26541:4;26537:20;26533:1;26522:9;26518:17;26511:47;26575:131;26701:4;26575:131;:::i;:::-;26567:139;;26294:419;;;:::o;26719:::-;26885:4;26923:2;26912:9;26908:18;26900:26;;26972:9;26966:4;26962:20;26958:1;26947:9;26943:17;26936:47;27000:131;27126:4;27000:131;:::i;:::-;26992:139;;26719:419;;;:::o;27144:::-;27310:4;27348:2;27337:9;27333:18;27325:26;;27397:9;27391:4;27387:20;27383:1;27372:9;27368:17;27361:47;27425:131;27551:4;27425:131;:::i;:::-;27417:139;;27144:419;;;:::o;27569:::-;27735:4;27773:2;27762:9;27758:18;27750:26;;27822:9;27816:4;27812:20;27808:1;27797:9;27793:17;27786:47;27850:131;27976:4;27850:131;:::i;:::-;27842:139;;27569:419;;;:::o;27994:::-;28160:4;28198:2;28187:9;28183:18;28175:26;;28247:9;28241:4;28237:20;28233:1;28222:9;28218:17;28211:47;28275:131;28401:4;28275:131;:::i;:::-;28267:139;;27994:419;;;:::o;28419:::-;28585:4;28623:2;28612:9;28608:18;28600:26;;28672:9;28666:4;28662:20;28658:1;28647:9;28643:17;28636:47;28700:131;28826:4;28700:131;:::i;:::-;28692:139;;28419:419;;;:::o;28844:::-;29010:4;29048:2;29037:9;29033:18;29025:26;;29097:9;29091:4;29087:20;29083:1;29072:9;29068:17;29061:47;29125:131;29251:4;29125:131;:::i;:::-;29117:139;;28844:419;;;:::o;29269:::-;29435:4;29473:2;29462:9;29458:18;29450:26;;29522:9;29516:4;29512:20;29508:1;29497:9;29493:17;29486:47;29550:131;29676:4;29550:131;:::i;:::-;29542:139;;29269:419;;;:::o;29694:::-;29860:4;29898:2;29887:9;29883:18;29875:26;;29947:9;29941:4;29937:20;29933:1;29922:9;29918:17;29911:47;29975:131;30101:4;29975:131;:::i;:::-;29967:139;;29694:419;;;:::o;30119:::-;30285:4;30323:2;30312:9;30308:18;30300:26;;30372:9;30366:4;30362:20;30358:1;30347:9;30343:17;30336:47;30400:131;30526:4;30400:131;:::i;:::-;30392:139;;30119:419;;;:::o;30544:::-;30710:4;30748:2;30737:9;30733:18;30725:26;;30797:9;30791:4;30787:20;30783:1;30772:9;30768:17;30761:47;30825:131;30951:4;30825:131;:::i;:::-;30817:139;;30544:419;;;:::o;30969:::-;31135:4;31173:2;31162:9;31158:18;31150:26;;31222:9;31216:4;31212:20;31208:1;31197:9;31193:17;31186:47;31250:131;31376:4;31250:131;:::i;:::-;31242:139;;30969:419;;;:::o;31394:::-;31560:4;31598:2;31587:9;31583:18;31575:26;;31647:9;31641:4;31637:20;31633:1;31622:9;31618:17;31611:47;31675:131;31801:4;31675:131;:::i;:::-;31667:139;;31394:419;;;:::o;31819:::-;31985:4;32023:2;32012:9;32008:18;32000:26;;32072:9;32066:4;32062:20;32058:1;32047:9;32043:17;32036:47;32100:131;32226:4;32100:131;:::i;:::-;32092:139;;31819:419;;;:::o;32244:::-;32410:4;32448:2;32437:9;32433:18;32425:26;;32497:9;32491:4;32487:20;32483:1;32472:9;32468:17;32461:47;32525:131;32651:4;32525:131;:::i;:::-;32517:139;;32244:419;;;:::o;32669:::-;32835:4;32873:2;32862:9;32858:18;32850:26;;32922:9;32916:4;32912:20;32908:1;32897:9;32893:17;32886:47;32950:131;33076:4;32950:131;:::i;:::-;32942:139;;32669:419;;;:::o;33094:::-;33260:4;33298:2;33287:9;33283:18;33275:26;;33347:9;33341:4;33337:20;33333:1;33322:9;33318:17;33311:47;33375:131;33501:4;33375:131;:::i;:::-;33367:139;;33094:419;;;:::o;33519:::-;33685:4;33723:2;33712:9;33708:18;33700:26;;33772:9;33766:4;33762:20;33758:1;33747:9;33743:17;33736:47;33800:131;33926:4;33800:131;:::i;:::-;33792:139;;33519:419;;;:::o;33944:::-;34110:4;34148:2;34137:9;34133:18;34125:26;;34197:9;34191:4;34187:20;34183:1;34172:9;34168:17;34161:47;34225:131;34351:4;34225:131;:::i;:::-;34217:139;;33944:419;;;:::o;34369:::-;34535:4;34573:2;34562:9;34558:18;34550:26;;34622:9;34616:4;34612:20;34608:1;34597:9;34593:17;34586:47;34650:131;34776:4;34650:131;:::i;:::-;34642:139;;34369:419;;;:::o;34794:::-;34960:4;34998:2;34987:9;34983:18;34975:26;;35047:9;35041:4;35037:20;35033:1;35022:9;35018:17;35011:47;35075:131;35201:4;35075:131;:::i;:::-;35067:139;;34794:419;;;:::o;35219:::-;35385:4;35423:2;35412:9;35408:18;35400:26;;35472:9;35466:4;35462:20;35458:1;35447:9;35443:17;35436:47;35500:131;35626:4;35500:131;:::i;:::-;35492:139;;35219:419;;;:::o;35644:222::-;35737:4;35775:2;35764:9;35760:18;35752:26;;35788:71;35856:1;35845:9;35841:17;35832:6;35788:71;:::i;:::-;35644:222;;;;:::o;35872:129::-;35906:6;35933:20;;:::i;:::-;35923:30;;35962:33;35990:4;35982:6;35962:33;:::i;:::-;35872:129;;;:::o;36007:75::-;36040:6;36073:2;36067:9;36057:19;;36007:75;:::o;36088:307::-;36149:4;36239:18;36231:6;36228:30;36225:56;;;36261:18;;:::i;:::-;36225:56;36299:29;36321:6;36299:29;:::i;:::-;36291:37;;36383:4;36377;36373:15;36365:23;;36088:307;;;:::o;36401:308::-;36463:4;36553:18;36545:6;36542:30;36539:56;;;36575:18;;:::i;:::-;36539:56;36613:29;36635:6;36613:29;:::i;:::-;36605:37;;36697:4;36691;36687:15;36679:23;;36401:308;;;:::o;36715:132::-;36782:4;36805:3;36797:11;;36835:4;36830:3;36826:14;36818:22;;36715:132;;;:::o;36853:141::-;36902:4;36925:3;36917:11;;36948:3;36945:1;36938:14;36982:4;36979:1;36969:18;36961:26;;36853:141;;;:::o;37000:114::-;37067:6;37101:5;37095:12;37085:22;;37000:114;;;:::o;37120:98::-;37171:6;37205:5;37199:12;37189:22;;37120:98;;;:::o;37224:99::-;37276:6;37310:5;37304:12;37294:22;;37224:99;;;:::o;37329:113::-;37399:4;37431;37426:3;37422:14;37414:22;;37329:113;;;:::o;37448:184::-;37547:11;37581:6;37576:3;37569:19;37621:4;37616:3;37612:14;37597:29;;37448:184;;;;:::o;37638:168::-;37721:11;37755:6;37750:3;37743:19;37795:4;37790:3;37786:14;37771:29;;37638:168;;;;:::o;37812:147::-;37913:11;37950:3;37935:18;;37812:147;;;;:::o;37965:169::-;38049:11;38083:6;38078:3;38071:19;38123:4;38118:3;38114:14;38099:29;;37965:169;;;;:::o;38140:148::-;38242:11;38279:3;38264:18;;38140:148;;;;:::o;38294:305::-;38334:3;38353:20;38371:1;38353:20;:::i;:::-;38348:25;;38387:20;38405:1;38387:20;:::i;:::-;38382:25;;38541:1;38473:66;38469:74;38466:1;38463:81;38460:107;;;38547:18;;:::i;:::-;38460:107;38591:1;38588;38584:9;38577:16;;38294:305;;;;:::o;38605:185::-;38645:1;38662:20;38680:1;38662:20;:::i;:::-;38657:25;;38696:20;38714:1;38696:20;:::i;:::-;38691:25;;38735:1;38725:35;;38740:18;;:::i;:::-;38725:35;38782:1;38779;38775:9;38770:14;;38605:185;;;;:::o;38796:348::-;38836:7;38859:20;38877:1;38859:20;:::i;:::-;38854:25;;38893:20;38911:1;38893:20;:::i;:::-;38888:25;;39081:1;39013:66;39009:74;39006:1;39003:81;38998:1;38991:9;38984:17;38980:105;38977:131;;;39088:18;;:::i;:::-;38977:131;39136:1;39133;39129:9;39118:20;;38796:348;;;;:::o;39150:191::-;39190:4;39210:20;39228:1;39210:20;:::i;:::-;39205:25;;39244:20;39262:1;39244:20;:::i;:::-;39239:25;;39283:1;39280;39277:8;39274:34;;;39288:18;;:::i;:::-;39274:34;39333:1;39330;39326:9;39318:17;;39150:191;;;;:::o;39347:96::-;39384:7;39413:24;39431:5;39413:24;:::i;:::-;39402:35;;39347:96;;;:::o;39449:90::-;39483:7;39526:5;39519:13;39512:21;39501:32;;39449:90;;;:::o;39545:149::-;39581:7;39621:66;39614:5;39610:78;39599:89;;39545:149;;;:::o;39700:126::-;39737:7;39777:42;39770:5;39766:54;39755:65;;39700:126;;;:::o;39832:77::-;39869:7;39898:5;39887:16;;39832:77;;;:::o;39915:154::-;39999:6;39994:3;39989;39976:30;40061:1;40052:6;40047:3;40043:16;40036:27;39915:154;;;:::o;40075:307::-;40143:1;40153:113;40167:6;40164:1;40161:13;40153:113;;;40252:1;40247:3;40243:11;40237:18;40233:1;40228:3;40224:11;40217:39;40189:2;40186:1;40182:10;40177:15;;40153:113;;;40284:6;40281:1;40278:13;40275:101;;;40364:1;40355:6;40350:3;40346:16;40339:27;40275:101;40124:258;40075:307;;;:::o;40388:320::-;40432:6;40469:1;40463:4;40459:12;40449:22;;40516:1;40510:4;40506:12;40537:18;40527:81;;40593:4;40585:6;40581:17;40571:27;;40527:81;40655:2;40647:6;40644:14;40624:18;40621:38;40618:84;;;40674:18;;:::i;:::-;40618:84;40439:269;40388:320;;;:::o;40714:281::-;40797:27;40819:4;40797:27;:::i;:::-;40789:6;40785:40;40927:6;40915:10;40912:22;40891:18;40879:10;40876:34;40873:62;40870:88;;;40938:18;;:::i;:::-;40870:88;40978:10;40974:2;40967:22;40757:238;40714:281;;:::o;41001:233::-;41040:3;41063:24;41081:5;41063:24;:::i;:::-;41054:33;;41109:66;41102:5;41099:77;41096:103;;;41179:18;;:::i;:::-;41096:103;41226:1;41219:5;41215:13;41208:20;;41001:233;;;:::o;41240:176::-;41272:1;41289:20;41307:1;41289:20;:::i;:::-;41284:25;;41323:20;41341:1;41323:20;:::i;:::-;41318:25;;41362:1;41352:35;;41367:18;;:::i;:::-;41352:35;41408:1;41405;41401:9;41396:14;;41240:176;;;;:::o;41422:180::-;41470:77;41467:1;41460:88;41567:4;41564:1;41557:15;41591:4;41588:1;41581:15;41608:180;41656:77;41653:1;41646:88;41753:4;41750:1;41743:15;41777:4;41774:1;41767:15;41794:180;41842:77;41839:1;41832:88;41939:4;41936:1;41929:15;41963:4;41960:1;41953:15;41980:180;42028:77;42025:1;42018:88;42125:4;42122:1;42115:15;42149:4;42146:1;42139:15;42166:180;42214:77;42211:1;42204:88;42311:4;42308:1;42301:15;42335:4;42332:1;42325:15;42352:117;42461:1;42458;42451:12;42475:117;42584:1;42581;42574:12;42598:117;42707:1;42704;42697:12;42721:117;42830:1;42827;42820:12;42844:117;42953:1;42950;42943:12;42967:117;43076:1;43073;43066:12;43090:102;43131:6;43182:2;43178:7;43173:2;43166:5;43162:14;43158:28;43148:38;;43090:102;;;:::o;43198:223::-;43338:34;43334:1;43326:6;43322:14;43315:58;43407:6;43402:2;43394:6;43390:15;43383:31;43198:223;:::o;43427:237::-;43567:34;43563:1;43555:6;43551:14;43544:58;43636:20;43631:2;43623:6;43619:15;43612:45;43427:237;:::o;43670:225::-;43810:34;43806:1;43798:6;43794:14;43787:58;43879:8;43874:2;43866:6;43862:15;43855:33;43670:225;:::o;43901:224::-;44041:34;44037:1;44029:6;44025:14;44018:58;44110:7;44105:2;44097:6;44093:15;44086:32;43901:224;:::o;44131:178::-;44271:30;44267:1;44259:6;44255:14;44248:54;44131:178;:::o;44315:170::-;44455:22;44451:1;44443:6;44439:14;44432:46;44315:170;:::o;44491:223::-;44631:34;44627:1;44619:6;44615:14;44608:58;44700:6;44695:2;44687:6;44683:15;44676:31;44491:223;:::o;44720:179::-;44860:31;44856:1;44848:6;44844:14;44837:55;44720:179;:::o;44905:223::-;45045:34;45041:1;45033:6;45029:14;45022:58;45114:6;45109:2;45101:6;45097:15;45090:31;44905:223;:::o;45134:175::-;45274:27;45270:1;45262:6;45258:14;45251:51;45134:175;:::o;45315:231::-;45455:34;45451:1;45443:6;45439:14;45432:58;45524:14;45519:2;45511:6;45507:15;45500:39;45315:231;:::o;45552:182::-;45692:34;45688:1;45680:6;45676:14;45669:58;45552:182;:::o;45740:243::-;45880:34;45876:1;45868:6;45864:14;45857:58;45949:26;45944:2;45936:6;45932:15;45925:51;45740:243;:::o;45989:229::-;46129:34;46125:1;46117:6;46113:14;46106:58;46198:12;46193:2;46185:6;46181:15;46174:37;45989:229;:::o;46224:228::-;46364:34;46360:1;46352:6;46348:14;46341:58;46433:11;46428:2;46420:6;46416:15;46409:36;46224:228;:::o;46458:182::-;46598:34;46594:1;46586:6;46582:14;46575:58;46458:182;:::o;46646:176::-;46786:28;46782:1;46774:6;46770:14;46763:52;46646:176;:::o;46828:231::-;46968:34;46964:1;46956:6;46952:14;46945:58;47037:14;47032:2;47024:6;47020:15;47013:39;46828:231;:::o;47065:182::-;47205:34;47201:1;47193:6;47189:14;47182:58;47065:182;:::o;47253:173::-;47393:25;47389:1;47381:6;47377:14;47370:49;47253:173;:::o;47432:234::-;47572:34;47568:1;47560:6;47556:14;47549:58;47641:17;47636:2;47628:6;47624:15;47617:42;47432:234;:::o;47672:220::-;47812:34;47808:1;47800:6;47796:14;47789:58;47881:3;47876:2;47868:6;47864:15;47857:28;47672:220;:::o;47898:114::-;;:::o;48018:170::-;48158:22;48154:1;48146:6;48142:14;48135:46;48018:170;:::o;48194:236::-;48334:34;48330:1;48322:6;48318:14;48311:58;48403:19;48398:2;48390:6;48386:15;48379:44;48194:236;:::o;48436:169::-;48576:21;48572:1;48564:6;48560:14;48553:45;48436:169;:::o;48611:122::-;48684:24;48702:5;48684:24;:::i;:::-;48677:5;48674:35;48664:63;;48723:1;48720;48713:12;48664:63;48611:122;:::o;48739:116::-;48809:21;48824:5;48809:21;:::i;:::-;48802:5;48799:32;48789:60;;48845:1;48842;48835:12;48789:60;48739:116;:::o;48861:120::-;48933:23;48950:5;48933:23;:::i;:::-;48926:5;48923:34;48913:62;;48971:1;48968;48961:12;48913:62;48861:120;:::o;48987:122::-;49060:24;49078:5;49060:24;:::i;:::-;49053:5;49050:35;49040:63;;49099:1;49096;49089:12;49040:63;48987:122;:::o

Swarm Source

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