ETH Price: $2,358.41 (+1.30%)

Token

Mini Men Club (MMC)
 

Overview

Max Total Supply

438 MMC

Holders

232

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 MMC
0x040a7a22193784b738042590889a90d96e4a89c4
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:
MiniMenClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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 override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, 'ERC721A: approval to current owner');

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    /**
     * @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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert('ERC721A: transfer to non ERC721Receiver implementer');
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: MutantAIYachtClub.sol



pragma solidity ^0.8.0;

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

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

    bool private _paused;

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

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

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

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

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

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

// 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() {
        _setOwner(_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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

//newerc.sol
pragma solidity ^0.8.0;


contract MiniMenClub is ERC721A, Ownable, Pausable, ReentrancyGuard {
    using Strings for uint256;
    string public baseURI;
    uint256 public cost = 0.01 ether;
    uint256 public maxSupply = 3333;
    uint256 public maxFree = 3333;
    uint256 public maxperAddressFreeLimit = 1;
    uint256 public maxperAddressPublicMint = 10;
    bool public IS_SALE_ACTIVE = false;

    mapping(address => uint256) public addressFreeMintedBalance;

    constructor() ERC721A("Mini Men Club", "MMC") {
        setBaseURI("");

    }

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

    function MintAllowlist(uint256 _mintAmount) public payable nonReentrant{
		uint256 s = totalSupply();
        uint256 addressFreeMintedCount = addressFreeMintedBalance[msg.sender];
        require(addressFreeMintedCount + _mintAmount <= maxperAddressFreeLimit, "max NFT per address exceeded");
		require(_mintAmount > 0, "Cant mint 0" );
		require(s + _mintAmount <= maxFree, "Cant go over supply" );
        require(IS_SALE_ACTIVE, "Mint not active");
		for (uint256 i = 0; i < _mintAmount; ++i) {
            addressFreeMintedBalance[msg.sender]++;

		}
        _safeMint(msg.sender, _mintAmount);
		delete s;
        delete addressFreeMintedCount;
	}

    function setIsSaleActive(bool isActive) external virtual onlyOwner {
        IS_SALE_ACTIVE = isActive;
    }


    function mintPublic(uint256 _mintAmount) public payable nonReentrant {
        uint256 s = totalSupply();
        require(_mintAmount > 0, "Cant mint 0");
        require(_mintAmount <= maxperAddressPublicMint, "Cant mint more then maxmint" );
        require(s + _mintAmount <= maxSupply, "Cant go over supply");
        require(msg.value >= cost * _mintAmount);
        require(IS_SALE_ACTIVE, "Mint not active");
        _safeMint(msg.sender, _mintAmount);
        delete s;
    }

    function gift(uint256[] calldata quantity, address[] calldata recipient)
        external
        onlyOwner
    {
        require(
            quantity.length == recipient.length,
            "Provide quantities and recipients"
        );
        uint256 totalQuantity = 0;
        uint256 s = totalSupply();
        for (uint256 i = 0; i < quantity.length; ++i) {
            totalQuantity += quantity[i];
        }
        require(s + totalQuantity <= maxSupply, "Too many");
        delete totalQuantity;
        for (uint256 i = 0; i < recipient.length; ++i) {
            _safeMint(recipient[i], quantity[i]);
        }
        delete s;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json"))
                : "";
    }



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

    function setmaxSupply(uint256 _newMaxSupply) public onlyOwner {
        require(_newMaxSupply <= maxSupply, "Cannot increase max supply");
        maxSupply = _newMaxSupply;
    }
     function setmaxFreeSupply(uint256 _newMaxFreeSupply) public onlyOwner {
               maxFree = _newMaxFreeSupply;
    }

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

    function setMaxperAddressPublicMint(uint256 _amount) public onlyOwner {
        maxperAddressPublicMint = _amount;
    }

    function setMaxperAddressFreeMint(uint256 _amount) public onlyOwner{
        maxperAddressFreeLimit = _amount;
    }
    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }

    function withdrawAny(uint256 _amount) public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: _amount}("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"MintAllowlist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressFreeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setIsSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFreeSupply","type":"uint256"}],"name":"setmaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAny","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052662386f26fc10000600a55610d05600b55610d05600c556001600d55600a600e556000600f60006101000a81548160ff0219169083151502179055503480156200004d57600080fd5b506040518060400160405280600d81526020017f4d696e69204d656e20436c7562000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4d4300000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000d2929190620002fa565b508060029080519060200190620000eb929190620002fa565b5050506200010e620001026200015760201b60201c565b6200015f60201b60201c565b6000600760146101000a81548160ff021916908315150217905550600160088190555062000151604051806020016040528060008152506200022560201b60201c565b62000492565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002356200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025b620002d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ab90620003d1565b60405180910390fd5b8060099080519060200190620002cc929190620002fa565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003089062000404565b90600052602060002090601f0160209004810192826200032c576000855562000378565b82601f106200034757805160ff191683800117855562000378565b8280016001018555821562000378579182015b82811115620003775782518255916020019190600101906200035a565b5b5090506200038791906200038b565b5090565b5b80821115620003a65760008160009055506001016200038c565b5090565b6000620003b9602083620003f3565b9150620003c68262000469565b602082019050919050565b60006020820190508181036000830152620003ec81620003aa565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200041d57607f821691505b602082108114156200043457620004336200043a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614e7f80620004a26000396000f3fe60806040526004361061023b5760003560e01c80636c0360eb1161012e578063b88d4fde116100ab578063dc4e66b51161006f578063dc4e66b514610855578063e985e9c51461087e578063efd0cbf9146108bb578063f2fde38b146108d7578063ff260368146109005761023b565b8063b88d4fde14610772578063bde12d731461079b578063c87b56dd146107c4578063d2d65ff514610801578063d5abeb011461082a5761023b565b80637c6b172d116100f25780637c6b172d1461068d5780638da5cb5b146106ca57806395d89b41146106f557806396ea3a4714610720578063a22cb465146107495761023b565b80636c0360eb146105c757806370a08231146105f2578063715018a61461062f57806376d02b711461064657806377ad99f0146106715761023b565b806334c8fd75116101bc5780634f6ccce7116101805780634f6ccce7146104ce57806355f804b31461050b57806356569a1d146105345780635c975abb1461055f5780636352211e1461058a5761023b565b806334c8fd751461041c5780633ccfd60b1461044757806342842e0e1461045157806344a0d68a1461047a578063485a68a3146104a35761023b565b806313faede61161020357806313faede61461033757806318160ddd14610362578063228025e81461038d57806323b872dd146103b65780632f745c59146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e575b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906137c5565b61091c565b6040516102749190613e2a565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613868565b610a66565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613e45565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613868565b610b7e565b6040516103059190613dc3565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906136d7565b610c03565b005b34801561034357600080fd5b5061034c610d1c565b60405161035991906141e7565b60405180910390f35b34801561036e57600080fd5b50610377610d22565b60405161038491906141e7565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613868565b610d2b565b005b3480156103c257600080fd5b506103dd60048036038101906103d891906135c1565b610df6565b005b3480156103eb57600080fd5b50610406600480360381019061040191906136d7565b610e06565b60405161041391906141e7565b60405180910390f35b34801561042857600080fd5b50610431610ff8565b60405161043e91906141e7565b60405180910390f35b61044f610ffe565b005b34801561045d57600080fd5b50610478600480360381019061047391906135c1565b6110f3565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613868565b611113565b005b3480156104af57600080fd5b506104b8611199565b6040516104c591906141e7565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613868565b61119f565b60405161050291906141e7565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061381f565b6111f2565b005b34801561054057600080fd5b50610549611288565b60405161055691906141e7565b60405180910390f35b34801561056b57600080fd5b5061057461128e565b6040516105819190613e2a565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613868565b6112a5565b6040516105be9190613dc3565b60405180910390f35b3480156105d357600080fd5b506105dc6112bb565b6040516105e99190613e45565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190613554565b611349565b60405161062691906141e7565b60405180910390f35b34801561063b57600080fd5b50610644611432565b005b34801561065257600080fd5b5061065b6114ba565b6040516106689190613e2a565b60405180910390f35b61068b60048036038101906106869190613868565b6114cd565b005b34801561069957600080fd5b506106b460048036038101906106af9190613554565b6115c3565b6040516106c191906141e7565b60405180910390f35b3480156106d657600080fd5b506106df6115db565b6040516106ec9190613dc3565b60405180910390f35b34801561070157600080fd5b5061070a611605565b6040516107179190613e45565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613717565b611697565b005b34801561075557600080fd5b50610770600480360381019061076b9190613697565b611879565b005b34801561077e57600080fd5b5061079960048036038101906107949190613614565b6119fa565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190613868565b611a56565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190613868565b611adc565b6040516107f89190613e45565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613798565b611b83565b005b34801561083657600080fd5b5061083f611c1c565b60405161084c91906141e7565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613868565b611c22565b005b34801561088a57600080fd5b506108a560048036038101906108a09190613581565b611ca8565b6040516108b29190613e2a565b60405180910390f35b6108d560048036038101906108d09190613868565b611d3c565b005b3480156108e357600080fd5b506108fe60048036038101906108f99190613554565b611ef1565b005b61091a60048036038101906109159190613868565b611fe9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a4f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5f5750610a5e8261224a565b5b9050919050565b610a6e6122b4565b73ffffffffffffffffffffffffffffffffffffffff16610a8c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990614067565b60405180910390fd5b80600e8190555050565b606060018054610afb906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b27906144a2565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826122bc565b610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906141c7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0e826112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c76906140c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9e6122b4565b73ffffffffffffffffffffffffffffffffffffffff161480610ccd5750610ccc81610cc76122b4565b611ca8565b5b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613fa7565b60405180910390fd5b610d178383836122c9565b505050565b600a5481565b60008054905090565b610d336122b4565b73ffffffffffffffffffffffffffffffffffffffff16610d516115db565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90614067565b60405180910390fd5b600b54811115610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613fc7565b60405180910390fd5b80600b8190555050565b610e0183838361237b565b505050565b6000610e1183611349565b8210610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613e67565b60405180910390fd5b6000610e5c610d22565b905060008060005b83811015610fb6576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f5657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa85786841415610f9f578195505050505050610ff2565b83806001019450505b508080600101915050610e64565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614167565b60405180910390fd5b92915050565b600e5481565b6110066122b4565b73ffffffffffffffffffffffffffffffffffffffff166110246115db565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614067565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110a090613dae565b60006040518083038185875af1925050503d80600081146110dd576040519150601f19603f3d011682016040523d82523d6000602084013e6110e2565b606091505b50509050806110f057600080fd5b50565b61110e838383604051806020016040528060008152506119fa565b505050565b61111b6122b4565b73ffffffffffffffffffffffffffffffffffffffff166111396115db565b73ffffffffffffffffffffffffffffffffffffffff161461118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614067565b60405180910390fd5b80600a8190555050565b600c5481565b60006111a9610d22565b82106111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190613f47565b60405180910390fd5b819050919050565b6111fa6122b4565b73ffffffffffffffffffffffffffffffffffffffff166112186115db565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614067565b60405180910390fd5b8060099080519060200190611284929190613282565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b60006112b0826128bb565b600001519050919050565b600980546112c8906144a2565b80601f01602080910402602001604051908101604052809291908181526020018280546112f4906144a2565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613fe7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61143a6122b4565b73ffffffffffffffffffffffffffffffffffffffff166114586115db565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614067565b60405180910390fd5b6114b86000612a55565b565b600f60009054906101000a900460ff1681565b6114d56122b4565b73ffffffffffffffffffffffffffffffffffffffff166114f36115db565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614067565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161156f90613dae565b60006040518083038185875af1925050503d80600081146115ac576040519150601f19603f3d011682016040523d82523d6000602084013e6115b1565b606091505b50509050806115bf57600080fd5b5050565b60106020528060005260406000206000915090505481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611614906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611640906144a2565b801561168d5780601f106116625761010080835404028352916020019161168d565b820191906000526020600020905b81548152906001019060200180831161167057829003601f168201915b5050505050905090565b61169f6122b4565b73ffffffffffffffffffffffffffffffffffffffff166116bd6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614067565b60405180910390fd5b81819050848490501461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613f87565b60405180910390fd5b600080611766610d22565b905060005b868690508110156117ae578686828181106117895761178861460c565b5b905060200201358361179b91906142d7565b9250806117a790614505565b905061176b565b50600b5482826117be91906142d7565b11156117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690614047565b60405180910390fd5b6000915060005b8484905081101561186c5761185b8585838181106118275761182661460c565b5b905060200201602081019061183c9190613554565b88888481811061184f5761184e61460c565b5b90506020020135612b1b565b8061186590614505565b9050611806565b5060009050505050505050565b6118816122b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690614087565b60405180910390fd5b80600660006118fc6122b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119a96122b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ee9190613e2a565b60405180910390a35050565b611a0584848461237b565b611a1184848484612b39565b611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906140e7565b60405180910390fd5b50505050565b611a5e6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611a7c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990614067565b60405180910390fd5b80600c8190555050565b6060611ae7826122bc565b611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ea7565b60405180910390fd5b6000611b30612cd0565b90506000815111611b505760405180602001604052806000815250611b7b565b80611b5a84612d62565b604051602001611b6b929190613d7f565b6040516020818303038152906040525b915050919050565b611b8b6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611ba96115db565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690614067565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600b5481565b611c2a6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611c486115db565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590614067565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60026008541415611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614187565b60405180910390fd5b60026008819055506000611d94610d22565b905060008211611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613e87565b60405180910390fd5b600e54821115611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614107565b60405180910390fd5b600b548282611e2d91906142d7565b1115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614007565b60405180910390fd5b81600a54611e7c919061435e565b341015611e8857600080fd5b600f60009054906101000a900460ff16611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90613f07565b60405180910390fd5b611ee13383612b1b565b6000905050600160088190555050565b611ef96122b4565b73ffffffffffffffffffffffffffffffffffffffff16611f176115db565b73ffffffffffffffffffffffffffffffffffffffff1614611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614067565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613ec7565b60405180910390fd5b611fe681612a55565b50565b6002600854141561202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614187565b60405180910390fd5b60026008819055506000612041610d22565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d54838261209691906142d7565b11156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90613f27565b60405180910390fd5b6000831161211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190613e87565b60405180910390fd5b600c54838361212991906142d7565b111561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614007565b60405180910390fd5b600f60009054906101000a900460ff166121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613f07565b60405180910390fd5b60005b8381101561222a57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061221490614505565b91905055508061222390614505565b90506121bc565b506122353384612b1b565b60009150600090505050600160088190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612386826128bb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123ad6122b4565b73ffffffffffffffffffffffffffffffffffffffff16148061240957506123d26122b4565b73ffffffffffffffffffffffffffffffffffffffff166123f184610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b806124255750612424826000015161241f6122b4565b611ca8565b5b905080612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e906140a7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614027565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090613f67565b60405180910390fd5b6125568585856001612ec3565b61256660008484600001516122c9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561284b576127aa816122bc565b1561284a5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128b48585856001612ec9565b5050505050565b6128c3613308565b6128cc826122bc565b61290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290613ee7565b60405180910390fd5b60008290505b60008110612a14576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a05578092505050612a50565b50808060019003915050612911565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906141a7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b35828260405180602001604052806000815250612ecf565b5050565b6000612b5a8473ffffffffffffffffffffffffffffffffffffffff16612ee1565b15612cc3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b836122b4565b8786866040518563ffffffff1660e01b8152600401612ba59493929190613dde565b602060405180830381600087803b158015612bbf57600080fd5b505af1925050508015612bf057506040513d601f19601f82011682018060405250810190612bed91906137f2565b60015b612c73573d8060008114612c20576040519150601f19603f3d011682016040523d82523d6000602084013e612c25565b606091505b50600081511415612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c62906140e7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc8565b600190505b949350505050565b606060098054612cdf906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0b906144a2565b8015612d585780601f10612d2d57610100808354040283529160200191612d58565b820191906000526020600020905b815481529060010190602001808311612d3b57829003601f168201915b5050505050905090565b60606000821415612daa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ebe565b600082905060005b60008214612ddc578080612dc590614505565b915050600a82612dd5919061432d565b9150612db2565b60008167ffffffffffffffff811115612df857612df761463b565b5b6040519080825280601f01601f191660200182016040528015612e2a5781602001600182028036833780820191505090505b5090505b60008514612eb757600182612e4391906143b8565b9150600a85612e52919061454e565b6030612e5e91906142d7565b60f81b818381518110612e7457612e7361460c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eb0919061432d565b9450612e2e565b8093505050505b919050565b50505050565b50505050565b612edc8383836001612f04565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7190614127565b60405180910390fd5b6000841415612fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb590614147565b60405180910390fd5b612fcb6000868387612ec3565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561326557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613250576132106000888488612b39565b61324f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613246906140e7565b60405180910390fd5b5b81806001019250508080600101915050613199565b50806000819055505061327b6000868387612ec9565b5050505050565b82805461328e906144a2565b90600052602060002090601f0160209004810192826132b057600085556132f7565b82601f106132c957805160ff19168380011785556132f7565b828001600101855582156132f7579182015b828111156132f65782518255916020019190600101906132db565b5b5090506133049190613342565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561335b576000816000905550600101613343565b5090565b600061337261336d84614227565b614202565b90508281526020810184848401111561338e5761338d614679565b5b613399848285614460565b509392505050565b60006133b46133af84614258565b614202565b9050828152602081018484840111156133d0576133cf614679565b5b6133db848285614460565b509392505050565b6000813590506133f281614ded565b92915050565b60008083601f84011261340e5761340d61466f565b5b8235905067ffffffffffffffff81111561342b5761342a61466a565b5b60208301915083602082028301111561344757613446614674565b5b9250929050565b60008083601f8401126134645761346361466f565b5b8235905067ffffffffffffffff8111156134815761348061466a565b5b60208301915083602082028301111561349d5761349c614674565b5b9250929050565b6000813590506134b381614e04565b92915050565b6000813590506134c881614e1b565b92915050565b6000815190506134dd81614e1b565b92915050565b600082601f8301126134f8576134f761466f565b5b813561350884826020860161335f565b91505092915050565b600082601f8301126135265761352561466f565b5b81356135368482602086016133a1565b91505092915050565b60008135905061354e81614e32565b92915050565b60006020828403121561356a57613569614683565b5b6000613578848285016133e3565b91505092915050565b6000806040838503121561359857613597614683565b5b60006135a6858286016133e3565b92505060206135b7858286016133e3565b9150509250929050565b6000806000606084860312156135da576135d9614683565b5b60006135e8868287016133e3565b93505060206135f9868287016133e3565b925050604061360a8682870161353f565b9150509250925092565b6000806000806080858703121561362e5761362d614683565b5b600061363c878288016133e3565b945050602061364d878288016133e3565b935050604061365e8782880161353f565b925050606085013567ffffffffffffffff81111561367f5761367e61467e565b5b61368b878288016134e3565b91505092959194509250565b600080604083850312156136ae576136ad614683565b5b60006136bc858286016133e3565b92505060206136cd858286016134a4565b9150509250929050565b600080604083850312156136ee576136ed614683565b5b60006136fc858286016133e3565b925050602061370d8582860161353f565b9150509250929050565b6000806000806040858703121561373157613730614683565b5b600085013567ffffffffffffffff81111561374f5761374e61467e565b5b61375b8782880161344e565b9450945050602085013567ffffffffffffffff81111561377e5761377d61467e565b5b61378a878288016133f8565b925092505092959194509250565b6000602082840312156137ae576137ad614683565b5b60006137bc848285016134a4565b91505092915050565b6000602082840312156137db576137da614683565b5b60006137e9848285016134b9565b91505092915050565b60006020828403121561380857613807614683565b5b6000613816848285016134ce565b91505092915050565b60006020828403121561383557613834614683565b5b600082013567ffffffffffffffff8111156138535761385261467e565b5b61385f84828501613511565b91505092915050565b60006020828403121561387e5761387d614683565b5b600061388c8482850161353f565b91505092915050565b61389e816143ec565b82525050565b6138ad816143fe565b82525050565b60006138be82614289565b6138c8818561429f565b93506138d881856020860161446f565b6138e181614688565b840191505092915050565b60006138f782614294565b61390181856142bb565b935061391181856020860161446f565b61391a81614688565b840191505092915050565b600061393082614294565b61393a81856142cc565b935061394a81856020860161446f565b80840191505092915050565b60006139636022836142bb565b915061396e82614699565b604082019050919050565b6000613986600b836142bb565b9150613991826146e8565b602082019050919050565b60006139a96021836142bb565b91506139b482614711565b604082019050919050565b60006139cc6026836142bb565b91506139d782614760565b604082019050919050565b60006139ef602a836142bb565b91506139fa826147af565b604082019050919050565b6000613a12600f836142bb565b9150613a1d826147fe565b602082019050919050565b6000613a35601c836142bb565b9150613a4082614827565b602082019050919050565b6000613a586023836142bb565b9150613a6382614850565b604082019050919050565b6000613a7b6025836142bb565b9150613a868261489f565b604082019050919050565b6000613a9e6021836142bb565b9150613aa9826148ee565b604082019050919050565b6000613ac16039836142bb565b9150613acc8261493d565b604082019050919050565b6000613ae4601a836142bb565b9150613aef8261498c565b602082019050919050565b6000613b07602b836142bb565b9150613b12826149b5565b604082019050919050565b6000613b2a6013836142bb565b9150613b3582614a04565b602082019050919050565b6000613b4d6026836142bb565b9150613b5882614a2d565b604082019050919050565b6000613b706005836142cc565b9150613b7b82614a7c565b600582019050919050565b6000613b936008836142bb565b9150613b9e82614aa5565b602082019050919050565b6000613bb66020836142bb565b9150613bc182614ace565b602082019050919050565b6000613bd9601a836142bb565b9150613be482614af7565b602082019050919050565b6000613bfc6032836142bb565b9150613c0782614b20565b604082019050919050565b6000613c1f6022836142bb565b9150613c2a82614b6f565b604082019050919050565b6000613c426000836142b0565b9150613c4d82614bbe565b600082019050919050565b6000613c656033836142bb565b9150613c7082614bc1565b604082019050919050565b6000613c88601b836142bb565b9150613c9382614c10565b602082019050919050565b6000613cab6021836142bb565b9150613cb682614c39565b604082019050919050565b6000613cce6028836142bb565b9150613cd982614c88565b604082019050919050565b6000613cf1602e836142bb565b9150613cfc82614cd7565b604082019050919050565b6000613d14601f836142bb565b9150613d1f82614d26565b602082019050919050565b6000613d37602f836142bb565b9150613d4282614d4f565b604082019050919050565b6000613d5a602d836142bb565b9150613d6582614d9e565b604082019050919050565b613d7981614456565b82525050565b6000613d8b8285613925565b9150613d978284613925565b9150613da282613b63565b91508190509392505050565b6000613db982613c35565b9150819050919050565b6000602082019050613dd86000830184613895565b92915050565b6000608082019050613df36000830187613895565b613e006020830186613895565b613e0d6040830185613d70565b8181036060830152613e1f81846138b3565b905095945050505050565b6000602082019050613e3f60008301846138a4565b92915050565b60006020820190508181036000830152613e5f81846138ec565b905092915050565b60006020820190508181036000830152613e8081613956565b9050919050565b60006020820190508181036000830152613ea081613979565b9050919050565b60006020820190508181036000830152613ec08161399c565b9050919050565b60006020820190508181036000830152613ee0816139bf565b9050919050565b60006020820190508181036000830152613f00816139e2565b9050919050565b60006020820190508181036000830152613f2081613a05565b9050919050565b60006020820190508181036000830152613f4081613a28565b9050919050565b60006020820190508181036000830152613f6081613a4b565b9050919050565b60006020820190508181036000830152613f8081613a6e565b9050919050565b60006020820190508181036000830152613fa081613a91565b9050919050565b60006020820190508181036000830152613fc081613ab4565b9050919050565b60006020820190508181036000830152613fe081613ad7565b9050919050565b6000602082019050818103600083015261400081613afa565b9050919050565b6000602082019050818103600083015261402081613b1d565b9050919050565b6000602082019050818103600083015261404081613b40565b9050919050565b6000602082019050818103600083015261406081613b86565b9050919050565b6000602082019050818103600083015261408081613ba9565b9050919050565b600060208201905081810360008301526140a081613bcc565b9050919050565b600060208201905081810360008301526140c081613bef565b9050919050565b600060208201905081810360008301526140e081613c12565b9050919050565b6000602082019050818103600083015261410081613c58565b9050919050565b6000602082019050818103600083015261412081613c7b565b9050919050565b6000602082019050818103600083015261414081613c9e565b9050919050565b6000602082019050818103600083015261416081613cc1565b9050919050565b6000602082019050818103600083015261418081613ce4565b9050919050565b600060208201905081810360008301526141a081613d07565b9050919050565b600060208201905081810360008301526141c081613d2a565b9050919050565b600060208201905081810360008301526141e081613d4d565b9050919050565b60006020820190506141fc6000830184613d70565b92915050565b600061420c61421d565b905061421882826144d4565b919050565b6000604051905090565b600067ffffffffffffffff8211156142425761424161463b565b5b61424b82614688565b9050602081019050919050565b600067ffffffffffffffff8211156142735761427261463b565b5b61427c82614688565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142e282614456565b91506142ed83614456565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143225761432161457f565b5b828201905092915050565b600061433882614456565b915061434383614456565b925082614353576143526145ae565b5b828204905092915050565b600061436982614456565b915061437483614456565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143ad576143ac61457f565b5b828202905092915050565b60006143c382614456565b91506143ce83614456565b9250828210156143e1576143e061457f565b5b828203905092915050565b60006143f782614436565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561448d578082015181840152602081019050614472565b8381111561449c576000848401525b50505050565b600060028204905060018216806144ba57607f821691505b602082108114156144ce576144cd6145dd565b5b50919050565b6144dd82614688565b810181811067ffffffffffffffff821117156144fc576144fb61463b565b5b80604052505050565b600061451082614456565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145435761454261457f565b5b600182019050919050565b600061455982614456565b915061456483614456565b925082614574576145736145ae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74206e6f74206163746976650000000000000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468656e206d61786d696e740000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614df6816143ec565b8114614e0157600080fd5b50565b614e0d816143fe565b8114614e1857600080fd5b50565b614e248161440a565b8114614e2f57600080fd5b50565b614e3b81614456565b8114614e4657600080fd5b5056fea26469706673582212207567b5978bab7f79a2885e8650f99d13f658220de3fe97c2b20f5cfb0f9423a664736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636c0360eb1161012e578063b88d4fde116100ab578063dc4e66b51161006f578063dc4e66b514610855578063e985e9c51461087e578063efd0cbf9146108bb578063f2fde38b146108d7578063ff260368146109005761023b565b8063b88d4fde14610772578063bde12d731461079b578063c87b56dd146107c4578063d2d65ff514610801578063d5abeb011461082a5761023b565b80637c6b172d116100f25780637c6b172d1461068d5780638da5cb5b146106ca57806395d89b41146106f557806396ea3a4714610720578063a22cb465146107495761023b565b80636c0360eb146105c757806370a08231146105f2578063715018a61461062f57806376d02b711461064657806377ad99f0146106715761023b565b806334c8fd75116101bc5780634f6ccce7116101805780634f6ccce7146104ce57806355f804b31461050b57806356569a1d146105345780635c975abb1461055f5780636352211e1461058a5761023b565b806334c8fd751461041c5780633ccfd60b1461044757806342842e0e1461045157806344a0d68a1461047a578063485a68a3146104a35761023b565b806313faede61161020357806313faede61461033757806318160ddd14610362578063228025e81461038d57806323b872dd146103b65780632f745c59146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e575b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906137c5565b61091c565b6040516102749190613e2a565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613868565b610a66565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613e45565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613868565b610b7e565b6040516103059190613dc3565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906136d7565b610c03565b005b34801561034357600080fd5b5061034c610d1c565b60405161035991906141e7565b60405180910390f35b34801561036e57600080fd5b50610377610d22565b60405161038491906141e7565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613868565b610d2b565b005b3480156103c257600080fd5b506103dd60048036038101906103d891906135c1565b610df6565b005b3480156103eb57600080fd5b50610406600480360381019061040191906136d7565b610e06565b60405161041391906141e7565b60405180910390f35b34801561042857600080fd5b50610431610ff8565b60405161043e91906141e7565b60405180910390f35b61044f610ffe565b005b34801561045d57600080fd5b50610478600480360381019061047391906135c1565b6110f3565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613868565b611113565b005b3480156104af57600080fd5b506104b8611199565b6040516104c591906141e7565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613868565b61119f565b60405161050291906141e7565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061381f565b6111f2565b005b34801561054057600080fd5b50610549611288565b60405161055691906141e7565b60405180910390f35b34801561056b57600080fd5b5061057461128e565b6040516105819190613e2a565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613868565b6112a5565b6040516105be9190613dc3565b60405180910390f35b3480156105d357600080fd5b506105dc6112bb565b6040516105e99190613e45565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190613554565b611349565b60405161062691906141e7565b60405180910390f35b34801561063b57600080fd5b50610644611432565b005b34801561065257600080fd5b5061065b6114ba565b6040516106689190613e2a565b60405180910390f35b61068b60048036038101906106869190613868565b6114cd565b005b34801561069957600080fd5b506106b460048036038101906106af9190613554565b6115c3565b6040516106c191906141e7565b60405180910390f35b3480156106d657600080fd5b506106df6115db565b6040516106ec9190613dc3565b60405180910390f35b34801561070157600080fd5b5061070a611605565b6040516107179190613e45565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613717565b611697565b005b34801561075557600080fd5b50610770600480360381019061076b9190613697565b611879565b005b34801561077e57600080fd5b5061079960048036038101906107949190613614565b6119fa565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190613868565b611a56565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190613868565b611adc565b6040516107f89190613e45565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613798565b611b83565b005b34801561083657600080fd5b5061083f611c1c565b60405161084c91906141e7565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613868565b611c22565b005b34801561088a57600080fd5b506108a560048036038101906108a09190613581565b611ca8565b6040516108b29190613e2a565b60405180910390f35b6108d560048036038101906108d09190613868565b611d3c565b005b3480156108e357600080fd5b506108fe60048036038101906108f99190613554565b611ef1565b005b61091a60048036038101906109159190613868565b611fe9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a4f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5f5750610a5e8261224a565b5b9050919050565b610a6e6122b4565b73ffffffffffffffffffffffffffffffffffffffff16610a8c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990614067565b60405180910390fd5b80600e8190555050565b606060018054610afb906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b27906144a2565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826122bc565b610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906141c7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0e826112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c76906140c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9e6122b4565b73ffffffffffffffffffffffffffffffffffffffff161480610ccd5750610ccc81610cc76122b4565b611ca8565b5b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613fa7565b60405180910390fd5b610d178383836122c9565b505050565b600a5481565b60008054905090565b610d336122b4565b73ffffffffffffffffffffffffffffffffffffffff16610d516115db565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90614067565b60405180910390fd5b600b54811115610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613fc7565b60405180910390fd5b80600b8190555050565b610e0183838361237b565b505050565b6000610e1183611349565b8210610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613e67565b60405180910390fd5b6000610e5c610d22565b905060008060005b83811015610fb6576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f5657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa85786841415610f9f578195505050505050610ff2565b83806001019450505b508080600101915050610e64565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614167565b60405180910390fd5b92915050565b600e5481565b6110066122b4565b73ffffffffffffffffffffffffffffffffffffffff166110246115db565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614067565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110a090613dae565b60006040518083038185875af1925050503d80600081146110dd576040519150601f19603f3d011682016040523d82523d6000602084013e6110e2565b606091505b50509050806110f057600080fd5b50565b61110e838383604051806020016040528060008152506119fa565b505050565b61111b6122b4565b73ffffffffffffffffffffffffffffffffffffffff166111396115db565b73ffffffffffffffffffffffffffffffffffffffff161461118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614067565b60405180910390fd5b80600a8190555050565b600c5481565b60006111a9610d22565b82106111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190613f47565b60405180910390fd5b819050919050565b6111fa6122b4565b73ffffffffffffffffffffffffffffffffffffffff166112186115db565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614067565b60405180910390fd5b8060099080519060200190611284929190613282565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b60006112b0826128bb565b600001519050919050565b600980546112c8906144a2565b80601f01602080910402602001604051908101604052809291908181526020018280546112f4906144a2565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613fe7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61143a6122b4565b73ffffffffffffffffffffffffffffffffffffffff166114586115db565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614067565b60405180910390fd5b6114b86000612a55565b565b600f60009054906101000a900460ff1681565b6114d56122b4565b73ffffffffffffffffffffffffffffffffffffffff166114f36115db565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614067565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161156f90613dae565b60006040518083038185875af1925050503d80600081146115ac576040519150601f19603f3d011682016040523d82523d6000602084013e6115b1565b606091505b50509050806115bf57600080fd5b5050565b60106020528060005260406000206000915090505481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611614906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611640906144a2565b801561168d5780601f106116625761010080835404028352916020019161168d565b820191906000526020600020905b81548152906001019060200180831161167057829003601f168201915b5050505050905090565b61169f6122b4565b73ffffffffffffffffffffffffffffffffffffffff166116bd6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614067565b60405180910390fd5b81819050848490501461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613f87565b60405180910390fd5b600080611766610d22565b905060005b868690508110156117ae578686828181106117895761178861460c565b5b905060200201358361179b91906142d7565b9250806117a790614505565b905061176b565b50600b5482826117be91906142d7565b11156117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690614047565b60405180910390fd5b6000915060005b8484905081101561186c5761185b8585838181106118275761182661460c565b5b905060200201602081019061183c9190613554565b88888481811061184f5761184e61460c565b5b90506020020135612b1b565b8061186590614505565b9050611806565b5060009050505050505050565b6118816122b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690614087565b60405180910390fd5b80600660006118fc6122b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119a96122b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ee9190613e2a565b60405180910390a35050565b611a0584848461237b565b611a1184848484612b39565b611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906140e7565b60405180910390fd5b50505050565b611a5e6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611a7c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990614067565b60405180910390fd5b80600c8190555050565b6060611ae7826122bc565b611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ea7565b60405180910390fd5b6000611b30612cd0565b90506000815111611b505760405180602001604052806000815250611b7b565b80611b5a84612d62565b604051602001611b6b929190613d7f565b6040516020818303038152906040525b915050919050565b611b8b6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611ba96115db565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690614067565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600b5481565b611c2a6122b4565b73ffffffffffffffffffffffffffffffffffffffff16611c486115db565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590614067565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60026008541415611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614187565b60405180910390fd5b60026008819055506000611d94610d22565b905060008211611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613e87565b60405180910390fd5b600e54821115611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614107565b60405180910390fd5b600b548282611e2d91906142d7565b1115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614007565b60405180910390fd5b81600a54611e7c919061435e565b341015611e8857600080fd5b600f60009054906101000a900460ff16611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90613f07565b60405180910390fd5b611ee13383612b1b565b6000905050600160088190555050565b611ef96122b4565b73ffffffffffffffffffffffffffffffffffffffff16611f176115db565b73ffffffffffffffffffffffffffffffffffffffff1614611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614067565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613ec7565b60405180910390fd5b611fe681612a55565b50565b6002600854141561202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614187565b60405180910390fd5b60026008819055506000612041610d22565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d54838261209691906142d7565b11156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90613f27565b60405180910390fd5b6000831161211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190613e87565b60405180910390fd5b600c54838361212991906142d7565b111561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614007565b60405180910390fd5b600f60009054906101000a900460ff166121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613f07565b60405180910390fd5b60005b8381101561222a57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061221490614505565b91905055508061222390614505565b90506121bc565b506122353384612b1b565b60009150600090505050600160088190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612386826128bb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123ad6122b4565b73ffffffffffffffffffffffffffffffffffffffff16148061240957506123d26122b4565b73ffffffffffffffffffffffffffffffffffffffff166123f184610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b806124255750612424826000015161241f6122b4565b611ca8565b5b905080612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e906140a7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614027565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090613f67565b60405180910390fd5b6125568585856001612ec3565b61256660008484600001516122c9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561284b576127aa816122bc565b1561284a5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128b48585856001612ec9565b5050505050565b6128c3613308565b6128cc826122bc565b61290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290613ee7565b60405180910390fd5b60008290505b60008110612a14576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a05578092505050612a50565b50808060019003915050612911565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906141a7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b35828260405180602001604052806000815250612ecf565b5050565b6000612b5a8473ffffffffffffffffffffffffffffffffffffffff16612ee1565b15612cc3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b836122b4565b8786866040518563ffffffff1660e01b8152600401612ba59493929190613dde565b602060405180830381600087803b158015612bbf57600080fd5b505af1925050508015612bf057506040513d601f19601f82011682018060405250810190612bed91906137f2565b60015b612c73573d8060008114612c20576040519150601f19603f3d011682016040523d82523d6000602084013e612c25565b606091505b50600081511415612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c62906140e7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc8565b600190505b949350505050565b606060098054612cdf906144a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0b906144a2565b8015612d585780601f10612d2d57610100808354040283529160200191612d58565b820191906000526020600020905b815481529060010190602001808311612d3b57829003601f168201915b5050505050905090565b60606000821415612daa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ebe565b600082905060005b60008214612ddc578080612dc590614505565b915050600a82612dd5919061432d565b9150612db2565b60008167ffffffffffffffff811115612df857612df761463b565b5b6040519080825280601f01601f191660200182016040528015612e2a5781602001600182028036833780820191505090505b5090505b60008514612eb757600182612e4391906143b8565b9150600a85612e52919061454e565b6030612e5e91906142d7565b60f81b818381518110612e7457612e7361460c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eb0919061432d565b9450612e2e565b8093505050505b919050565b50505050565b50505050565b612edc8383836001612f04565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7190614127565b60405180910390fd5b6000841415612fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb590614147565b60405180910390fd5b612fcb6000868387612ec3565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561326557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613250576132106000888488612b39565b61324f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613246906140e7565b60405180910390fd5b5b81806001019250508080600101915050613199565b50806000819055505061327b6000868387612ec9565b5050505050565b82805461328e906144a2565b90600052602060002090601f0160209004810192826132b057600085556132f7565b82601f106132c957805160ff19168380011785556132f7565b828001600101855582156132f7579182015b828111156132f65782518255916020019190600101906132db565b5b5090506133049190613342565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561335b576000816000905550600101613343565b5090565b600061337261336d84614227565b614202565b90508281526020810184848401111561338e5761338d614679565b5b613399848285614460565b509392505050565b60006133b46133af84614258565b614202565b9050828152602081018484840111156133d0576133cf614679565b5b6133db848285614460565b509392505050565b6000813590506133f281614ded565b92915050565b60008083601f84011261340e5761340d61466f565b5b8235905067ffffffffffffffff81111561342b5761342a61466a565b5b60208301915083602082028301111561344757613446614674565b5b9250929050565b60008083601f8401126134645761346361466f565b5b8235905067ffffffffffffffff8111156134815761348061466a565b5b60208301915083602082028301111561349d5761349c614674565b5b9250929050565b6000813590506134b381614e04565b92915050565b6000813590506134c881614e1b565b92915050565b6000815190506134dd81614e1b565b92915050565b600082601f8301126134f8576134f761466f565b5b813561350884826020860161335f565b91505092915050565b600082601f8301126135265761352561466f565b5b81356135368482602086016133a1565b91505092915050565b60008135905061354e81614e32565b92915050565b60006020828403121561356a57613569614683565b5b6000613578848285016133e3565b91505092915050565b6000806040838503121561359857613597614683565b5b60006135a6858286016133e3565b92505060206135b7858286016133e3565b9150509250929050565b6000806000606084860312156135da576135d9614683565b5b60006135e8868287016133e3565b93505060206135f9868287016133e3565b925050604061360a8682870161353f565b9150509250925092565b6000806000806080858703121561362e5761362d614683565b5b600061363c878288016133e3565b945050602061364d878288016133e3565b935050604061365e8782880161353f565b925050606085013567ffffffffffffffff81111561367f5761367e61467e565b5b61368b878288016134e3565b91505092959194509250565b600080604083850312156136ae576136ad614683565b5b60006136bc858286016133e3565b92505060206136cd858286016134a4565b9150509250929050565b600080604083850312156136ee576136ed614683565b5b60006136fc858286016133e3565b925050602061370d8582860161353f565b9150509250929050565b6000806000806040858703121561373157613730614683565b5b600085013567ffffffffffffffff81111561374f5761374e61467e565b5b61375b8782880161344e565b9450945050602085013567ffffffffffffffff81111561377e5761377d61467e565b5b61378a878288016133f8565b925092505092959194509250565b6000602082840312156137ae576137ad614683565b5b60006137bc848285016134a4565b91505092915050565b6000602082840312156137db576137da614683565b5b60006137e9848285016134b9565b91505092915050565b60006020828403121561380857613807614683565b5b6000613816848285016134ce565b91505092915050565b60006020828403121561383557613834614683565b5b600082013567ffffffffffffffff8111156138535761385261467e565b5b61385f84828501613511565b91505092915050565b60006020828403121561387e5761387d614683565b5b600061388c8482850161353f565b91505092915050565b61389e816143ec565b82525050565b6138ad816143fe565b82525050565b60006138be82614289565b6138c8818561429f565b93506138d881856020860161446f565b6138e181614688565b840191505092915050565b60006138f782614294565b61390181856142bb565b935061391181856020860161446f565b61391a81614688565b840191505092915050565b600061393082614294565b61393a81856142cc565b935061394a81856020860161446f565b80840191505092915050565b60006139636022836142bb565b915061396e82614699565b604082019050919050565b6000613986600b836142bb565b9150613991826146e8565b602082019050919050565b60006139a96021836142bb565b91506139b482614711565b604082019050919050565b60006139cc6026836142bb565b91506139d782614760565b604082019050919050565b60006139ef602a836142bb565b91506139fa826147af565b604082019050919050565b6000613a12600f836142bb565b9150613a1d826147fe565b602082019050919050565b6000613a35601c836142bb565b9150613a4082614827565b602082019050919050565b6000613a586023836142bb565b9150613a6382614850565b604082019050919050565b6000613a7b6025836142bb565b9150613a868261489f565b604082019050919050565b6000613a9e6021836142bb565b9150613aa9826148ee565b604082019050919050565b6000613ac16039836142bb565b9150613acc8261493d565b604082019050919050565b6000613ae4601a836142bb565b9150613aef8261498c565b602082019050919050565b6000613b07602b836142bb565b9150613b12826149b5565b604082019050919050565b6000613b2a6013836142bb565b9150613b3582614a04565b602082019050919050565b6000613b4d6026836142bb565b9150613b5882614a2d565b604082019050919050565b6000613b706005836142cc565b9150613b7b82614a7c565b600582019050919050565b6000613b936008836142bb565b9150613b9e82614aa5565b602082019050919050565b6000613bb66020836142bb565b9150613bc182614ace565b602082019050919050565b6000613bd9601a836142bb565b9150613be482614af7565b602082019050919050565b6000613bfc6032836142bb565b9150613c0782614b20565b604082019050919050565b6000613c1f6022836142bb565b9150613c2a82614b6f565b604082019050919050565b6000613c426000836142b0565b9150613c4d82614bbe565b600082019050919050565b6000613c656033836142bb565b9150613c7082614bc1565b604082019050919050565b6000613c88601b836142bb565b9150613c9382614c10565b602082019050919050565b6000613cab6021836142bb565b9150613cb682614c39565b604082019050919050565b6000613cce6028836142bb565b9150613cd982614c88565b604082019050919050565b6000613cf1602e836142bb565b9150613cfc82614cd7565b604082019050919050565b6000613d14601f836142bb565b9150613d1f82614d26565b602082019050919050565b6000613d37602f836142bb565b9150613d4282614d4f565b604082019050919050565b6000613d5a602d836142bb565b9150613d6582614d9e565b604082019050919050565b613d7981614456565b82525050565b6000613d8b8285613925565b9150613d978284613925565b9150613da282613b63565b91508190509392505050565b6000613db982613c35565b9150819050919050565b6000602082019050613dd86000830184613895565b92915050565b6000608082019050613df36000830187613895565b613e006020830186613895565b613e0d6040830185613d70565b8181036060830152613e1f81846138b3565b905095945050505050565b6000602082019050613e3f60008301846138a4565b92915050565b60006020820190508181036000830152613e5f81846138ec565b905092915050565b60006020820190508181036000830152613e8081613956565b9050919050565b60006020820190508181036000830152613ea081613979565b9050919050565b60006020820190508181036000830152613ec08161399c565b9050919050565b60006020820190508181036000830152613ee0816139bf565b9050919050565b60006020820190508181036000830152613f00816139e2565b9050919050565b60006020820190508181036000830152613f2081613a05565b9050919050565b60006020820190508181036000830152613f4081613a28565b9050919050565b60006020820190508181036000830152613f6081613a4b565b9050919050565b60006020820190508181036000830152613f8081613a6e565b9050919050565b60006020820190508181036000830152613fa081613a91565b9050919050565b60006020820190508181036000830152613fc081613ab4565b9050919050565b60006020820190508181036000830152613fe081613ad7565b9050919050565b6000602082019050818103600083015261400081613afa565b9050919050565b6000602082019050818103600083015261402081613b1d565b9050919050565b6000602082019050818103600083015261404081613b40565b9050919050565b6000602082019050818103600083015261406081613b86565b9050919050565b6000602082019050818103600083015261408081613ba9565b9050919050565b600060208201905081810360008301526140a081613bcc565b9050919050565b600060208201905081810360008301526140c081613bef565b9050919050565b600060208201905081810360008301526140e081613c12565b9050919050565b6000602082019050818103600083015261410081613c58565b9050919050565b6000602082019050818103600083015261412081613c7b565b9050919050565b6000602082019050818103600083015261414081613c9e565b9050919050565b6000602082019050818103600083015261416081613cc1565b9050919050565b6000602082019050818103600083015261418081613ce4565b9050919050565b600060208201905081810360008301526141a081613d07565b9050919050565b600060208201905081810360008301526141c081613d2a565b9050919050565b600060208201905081810360008301526141e081613d4d565b9050919050565b60006020820190506141fc6000830184613d70565b92915050565b600061420c61421d565b905061421882826144d4565b919050565b6000604051905090565b600067ffffffffffffffff8211156142425761424161463b565b5b61424b82614688565b9050602081019050919050565b600067ffffffffffffffff8211156142735761427261463b565b5b61427c82614688565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142e282614456565b91506142ed83614456565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143225761432161457f565b5b828201905092915050565b600061433882614456565b915061434383614456565b925082614353576143526145ae565b5b828204905092915050565b600061436982614456565b915061437483614456565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143ad576143ac61457f565b5b828202905092915050565b60006143c382614456565b91506143ce83614456565b9250828210156143e1576143e061457f565b5b828203905092915050565b60006143f782614436565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561448d578082015181840152602081019050614472565b8381111561449c576000848401525b50505050565b600060028204905060018216806144ba57607f821691505b602082108114156144ce576144cd6145dd565b5b50919050565b6144dd82614688565b810181811067ffffffffffffffff821117156144fc576144fb61463b565b5b80604052505050565b600061451082614456565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145435761454261457f565b5b600182019050919050565b600061455982614456565b915061456483614456565b925082614574576145736145ae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74206e6f74206163746976650000000000000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468656e206d61786d696e740000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614df6816143ec565b8114614e0157600080fd5b50565b614e0d816143fe565b8114614e1857600080fd5b50565b614e248161440a565b8114614e2f57600080fd5b50565b614e3b81614456565b8114614e4657600080fd5b5056fea26469706673582212207567b5978bab7f79a2885e8650f99d13f658220de3fe97c2b20f5cfb0f9423a664736f6c63430008070033

Deployed Bytecode Sourcemap

45078:4245:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24759:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48694:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26645:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28207:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27728:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45213:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23016:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48262:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29083:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23680:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45374:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48948:192;;;:::i;:::-;;29316:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48168:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45290:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48582:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45326:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38929:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26454:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45185:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25195:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41746:94;;;;;;;;;;;;;:::i;:::-;;45424:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49148:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45467:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41095:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26814:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47036:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28493:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29564:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48451:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47711:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46415:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45252:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48824:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28852:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46536:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41995:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45740:667;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24759:372;24861:4;24913:25;24898:40;;;:11;:40;;;;:105;;;;24970:33;24955:48;;;:11;:48;;;;24898:105;:172;;;;25035:35;25020:50;;;:11;:50;;;;24898:172;:225;;;;25087:36;25111:11;25087:23;:36::i;:::-;24898:225;24878:245;;24759:372;;;:::o;48694:122::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48801:7:::1;48775:23;:33;;;;48694:122:::0;:::o;26645:100::-;26699:13;26732:5;26725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26645:100;:::o;28207:214::-;28275:7;28303:16;28311:7;28303;:16::i;:::-;28295:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28389:15;:24;28405:7;28389:24;;;;;;;;;;;;;;;;;;;;;28382:31;;28207:214;;;:::o;27728:413::-;27801:13;27817:24;27833:7;27817:15;:24::i;:::-;27801:40;;27866:5;27860:11;;:2;:11;;;;27852:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27961:5;27945:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27970:37;27987:5;27994:12;:10;:12::i;:::-;27970:16;:37::i;:::-;27945:62;27923:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28105:28;28114:2;28118:7;28127:5;28105:8;:28::i;:::-;27790:351;27728:413;;:::o;45213:32::-;;;;:::o;23016:100::-;23069:7;23096:12;;23089:19;;23016:100;:::o;48262:182::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48360:9:::1;;48343:13;:26;;48335:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48423:13;48411:9;:25;;;;48262:182:::0;:::o;29083:162::-;29209:28;29219:4;29225:2;29229:7;29209:9;:28::i;:::-;29083:162;;;:::o;23680:1007::-;23769:7;23805:16;23815:5;23805:9;:16::i;:::-;23797:5;:24;23789:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23871:22;23896:13;:11;:13::i;:::-;23871:38;;23920:19;23950:25;24139:9;24134:466;24154:14;24150:1;:18;24134:466;;;24194:31;24228:11;:14;24240:1;24228:14;;;;;;;;;;;24194:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24291:1;24265:28;;:9;:14;;;:28;;;24261:111;;24338:9;:14;;;24318:34;;24261:111;24415:5;24394:26;;:17;:26;;;24390:195;;;24464:5;24449:11;:20;24445:85;;;24505:1;24498:8;;;;;;;;;24445:85;24552:13;;;;;;;24390:195;24175:425;24170:3;;;;;;;24134:466;;;;24623:56;;;;;;;;;;:::i;:::-;;;;;;;;23680:1007;;;;;:::o;45374:43::-;;;;:::o;48948:192::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49005:12:::1;49031:10;49023:24;;49069:21;49023:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49004:101;;;49124:7;49116:16;;;::::0;::::1;;48993:147;48948:192::o:0;29316:177::-;29446:39;29463:4;29469:2;29473:7;29446:39;;;;;;;;;;;;:16;:39::i;:::-;29316:177;;;:::o;48168:86::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48238:8:::1;48231:4;:15;;;;48168:86:::0;:::o;45290:29::-;;;;:::o;23193:187::-;23260:7;23296:13;:11;:13::i;:::-;23288:5;:21;23280:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23367:5;23360:12;;23193:187;;;:::o;48582:104::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48667:11:::1;48657:7;:21;;;;;;;;;;;;:::i;:::-;;48582:104:::0;:::o;45326:41::-;;;;:::o;38929:86::-;38976:4;39000:7;;;;;;;;;;;38993:14;;38929:86;:::o;26454:124::-;26518:7;26545:20;26557:7;26545:11;:20::i;:::-;:25;;;26538:32;;26454:124;;;:::o;45185:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25195:221::-;25259:7;25304:1;25287:19;;:5;:19;;;;25279:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:12;:19;25393:5;25380:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25372:36;;25365:43;;25195:221;;;:::o;41746:94::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41811:21:::1;41829:1;41811:9;:21::i;:::-;41746:94::o:0;45424:34::-;;;;;;;;;;;;;:::o;49148:172::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49223:12:::1;49249:10;49241:24;;49273:7;49241:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49222:63;;;49304:7;49296:16;;;::::0;::::1;;49211:109;49148:172:::0;:::o;45467:59::-;;;;;;;;;;;;;;;;;:::o;41095:87::-;41141:7;41168:6;;;;;;;;;;;41161:13;;41095:87;:::o;26814:104::-;26870:13;26903:7;26896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26814:104;:::o;47036:667::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47203:9:::1;;:16;;47184:8;;:15;;:35;47162:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;47291:21;47327:9:::0;47339:13:::1;:11;:13::i;:::-;47327:25;;47368:9;47363:101;47387:8;;:15;;47383:1;:19;47363:101;;;47441:8;;47450:1;47441:11;;;;;;;:::i;:::-;;;;;;;;47424:28;;;;;:::i;:::-;;;47404:3;;;;:::i;:::-;;;47363:101;;;;47503:9;;47486:13;47482:1;:17;;;;:::i;:::-;:30;;47474:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;47536:20;;;47572:9;47567:110;47591:9;;:16;;47587:1;:20;47567:110;;;47629:36;47639:9;;47649:1;47639:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47653:8;;47662:1;47653:11;;;;;;;:::i;:::-;;;;;;;;47629:9;:36::i;:::-;47609:3;;;;:::i;:::-;;;47567:110;;;;47687:8;;;47151:552;;47036:667:::0;;;;:::o;28493:288::-;28600:12;:10;:12::i;:::-;28588:24;;:8;:24;;;;28580:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28701:8;28656:18;:32;28675:12;:10;:12::i;:::-;28656:32;;;;;;;;;;;;;;;:42;28689:8;28656:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28754:8;28725:48;;28740:12;:10;:12::i;:::-;28725:48;;;28764:8;28725:48;;;;;;:::i;:::-;;;;;;;;28493:288;;:::o;29564:355::-;29723:28;29733:4;29739:2;29743:7;29723:9;:28::i;:::-;29784:48;29807:4;29813:2;29817:7;29826:5;29784:22;:48::i;:::-;29762:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29564:355;;;;:::o;48451:123::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48549:17:::1;48539:7;:27;;;;48451:123:::0;:::o;47711:445::-;47829:13;47868:16;47876:7;47868;:16::i;:::-;47860:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47933:28;47964:10;:8;:10::i;:::-;47933:41;;48036:1;48011:14;48005:28;:32;:143;;;;;;;;;;;;;;;;;48081:14;48097:18;:7;:16;:18::i;:::-;48064:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48005:143;47985:163;;;47711:445;;;:::o;46415:111::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46510:8:::1;46493:14;;:25;;;;;;;;;;;;;;;;;;46415:111:::0;:::o;45252:31::-;;;;:::o;48824:118::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48927:7:::1;48902:22;:32;;;;48824:118:::0;:::o;28852:164::-;28949:4;28973:18;:25;28992:5;28973:25;;;;;;;;;;;;;;;:35;28999:8;28973:35;;;;;;;;;;;;;;;;;;;;;;;;;28966:42;;28852:164;;;;:::o;46536:492::-;44090:1;44686:7;;:19;;44678:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44090:1;44819:7;:18;;;;46616:9:::1;46628:13;:11;:13::i;:::-;46616:25;;46674:1;46660:11;:15;46652:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;46725:23;;46710:11;:38;;46702:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46819:9;;46804:11;46800:1;:15;;;;:::i;:::-;:28;;46792:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46891:11;46884:4;;:18;;;;:::i;:::-;46871:9;:31;;46863:40;;;::::0;::::1;;46922:14;;;;;;;;;;;46914:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46967:34;46977:10;46989:11;46967:9;:34::i;:::-;47012:8;;;46605:423;44046:1:::0;44998:7;:22;;;;46536:492;:::o;41995:229::-;41326:12;:10;:12::i;:::-;41315:23;;:7;:5;:7::i;:::-;:23;;;41307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42118:1:::1;42098:22;;:8;:22;;;;42076:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42197:19;42207:8;42197:9;:19::i;:::-;41995:229:::0;:::o;45740:667::-;44090:1;44686:7;;:19;;44678:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44090:1;44819:7;:18;;;;45816:9:::1;45828:13;:11;:13::i;:::-;45816:25;;45852:30;45885:24;:36;45910:10;45885:36;;;;;;;;;;;;;;;;45852:69;;45980:22;;45965:11;45940:22;:36;;;;:::i;:::-;:62;;45932:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;46062:1;46048:11;:15;46040:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46112:7;;46097:11;46093:1;:15;;;;:::i;:::-;:26;;46085:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46163:14;;;;;;;;;;;46155:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46207:9;46202:103;46226:11;46222:1;:15;46202:103;;;46259:24;:36;46284:10;46259:36;;;;;;;;;;;;;;;;:38;;;;;;;;;:::i;:::-;;;;;;46239:3;;;;:::i;:::-;;;46202:103;;;;46315:34;46325:10;46337:11;46315:9;:34::i;:::-;46354:8;;;46373:29;;;45811:596;;44046:1:::0;44998:7;:22;;;;45740:667;:::o;14279:157::-;14364:4;14403:25;14388:40;;;:11;:40;;;;14381:47;;14279:157;;;:::o;2726:98::-;2779:7;2806:10;2799:17;;2726:98;:::o;30174:111::-;30231:4;30265:12;;30255:7;:22;30248:29;;30174:111;;;:::o;35094:196::-;35236:2;35209:15;:24;35225:7;35209:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35274:7;35270:2;35254:28;;35263:5;35254:28;;;;;;;;;;;;35094:196;;;:::o;32974:2002::-;33089:35;33127:20;33139:7;33127:11;:20::i;:::-;33089:58;;33160:22;33202:13;:18;;;33186:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33261:12;:10;:12::i;:::-;33237:36;;:20;33249:7;33237:11;:20::i;:::-;:36;;;33186:87;:154;;;;33290:50;33307:13;:18;;;33327:12;:10;:12::i;:::-;33290:16;:50::i;:::-;33186:154;33160:181;;33362:17;33354:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33477:4;33455:26;;:13;:18;;;:26;;;33447:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:1;33543:16;;:2;:16;;;;33535:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33614:43;33636:4;33642:2;33646:7;33655:1;33614:21;:43::i;:::-;33722:49;33739:1;33743:7;33752:13;:18;;;33722:8;:49::i;:::-;34097:1;34067:12;:18;34080:4;34067:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34141:1;34113:12;:16;34126:2;34113:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34187:2;34159:11;:20;34171:7;34159:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34249:15;34204:11;:20;34216:7;34204:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34517:19;34549:1;34539:7;:11;34517:33;;34610:1;34569:43;;:11;:24;34581:11;34569:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34565:295;;;34637:20;34645:11;34637:7;:20::i;:::-;34633:212;;;34714:13;:18;;;34682:11;:24;34694:11;34682:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34797:13;:28;;;34755:11;:24;34767:11;34755:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34633:212;34565:295;34042:829;34907:7;34903:2;34888:27;;34897:4;34888:27;;;;;;;;;;;;34926:42;34947:4;34953:2;34957:7;34966:1;34926:20;:42::i;:::-;33078:1898;;32974:2002;;;:::o;25855:537::-;25916:21;;:::i;:::-;25958:16;25966:7;25958;:16::i;:::-;25950:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:12;26079:7;26064:22;;26059:245;26096:1;26088:4;:9;26059:245;;26126:31;26160:11;:17;26172:4;26160:17;;;;;;;;;;;26126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26226:1;26200:28;;:9;:14;;;:28;;;26196:93;;26260:9;26253:16;;;;;;26196:93;26107:197;26099:6;;;;;;;;26059:245;;;;26327:57;;;;;;;;;;:::i;:::-;;;;;;;;25855:537;;;;:::o;42232:173::-;42288:16;42307:6;;;;;;;;;;;42288:25;;42333:8;42324:6;;:17;;;;;;;;;;;;;;;;;;42388:8;42357:40;;42378:8;42357:40;;;;;;;;;;;;42277:128;42232:173;:::o;30293:104::-;30362:27;30372:2;30376:8;30362:27;;;;;;;;;;;;:9;:27::i;:::-;30293:104;;:::o;35855:804::-;36010:4;36031:15;:2;:13;;;:15::i;:::-;36027:625;;;36083:2;36067:36;;;36104:12;:10;:12::i;:::-;36118:4;36124:7;36133:5;36067:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36063:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36330:1;36313:6;:13;:18;36309:273;;;36356:61;;;;;;;;;;:::i;:::-;;;;;;;;36309:273;36532:6;36526:13;36517:6;36513:2;36509:15;36502:38;36063:534;36200:45;;;36190:55;;;:6;:55;;;;36183:62;;;;;36027:625;36636:4;36629:11;;35855:804;;;;;;;:::o;45624:108::-;45684:13;45717:7;45710:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45624:108;:::o;288:723::-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;37147:159::-;;;;;:::o;37718:158::-;;;;;:::o;30760:163::-;30883:32;30889:2;30893:8;30903:5;30910:4;30883:5;:32::i;:::-;30760:163;;;:::o;4173:326::-;4233:4;4490:1;4468:7;:19;;;:23;4461:30;;4173:326;;;:::o;31182:1538::-;31321:20;31344:12;;31321:35;;31389:1;31375:16;;:2;:16;;;;31367:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31460:1;31448:8;:13;;31440:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31519:61;31549:1;31553:2;31557:12;31571:8;31519:21;:61::i;:::-;31894:8;31858:12;:16;31871:2;31858:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31959:8;31918:12;:16;31931:2;31918:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32018:2;31985:11;:25;31997:12;31985:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32085:15;32035:11;:25;32047:12;32035:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32118:20;32141:12;32118:35;;32175:9;32170:415;32190:8;32186:1;:12;32170:415;;;32254:12;32250:2;32229:38;;32246:1;32229:38;;;;;;;;;;;;32290:4;32286:249;;;32353:59;32384:1;32388:2;32392:12;32406:5;32353:22;:59::i;:::-;32319:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32286:249;32555:14;;;;;;;32200:3;;;;;;;32170:415;;;;32616:12;32601;:27;;;;31833:807;32652:60;32681:1;32685:2;32689:12;32703:8;32652:20;:60::i;:::-;31310:1410;31182:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:934::-;6924:6;6932;6940;6948;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7151:1;7140:9;7136:17;7123:31;7181:18;7173:6;7170:30;7167:117;;;7203:79;;:::i;:::-;7167:117;7316:80;7388:7;7379:6;7368:9;7364:22;7316:80;:::i;:::-;7298:98;;;;7094:312;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:80;7711:7;7702:6;7691:9;7687:22;7639:80;:::i;:::-;7621:98;;;;7416:313;6802:934;;;;;;;:::o;7742:323::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:50;8040:7;8031:6;8020:9;8016:22;7998:50;:::i;:::-;7988:60;;7944:114;7742:323;;;;:::o;8071:327::-;8129:6;8178:2;8166:9;8157:7;8153:23;8149:32;8146:119;;;8184:79;;:::i;:::-;8146:119;8304:1;8329:52;8373:7;8364:6;8353:9;8349:22;8329:52;:::i;:::-;8319:62;;8275:116;8071:327;;;;:::o;8404:349::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:63;8728:7;8719:6;8708:9;8704:22;8673:63;:::i;:::-;8663:73;;8619:127;8404:349;;;;:::o;8759:509::-;8828:6;8877:2;8865:9;8856:7;8852:23;8848:32;8845:119;;;8883:79;;:::i;:::-;8845:119;9031:1;9020:9;9016:17;9003:31;9061:18;9053:6;9050:30;9047:117;;;9083:79;;:::i;:::-;9047:117;9188:63;9243:7;9234:6;9223:9;9219:22;9188:63;:::i;:::-;9178:73;;8974:287;8759:509;;;;:::o;9274:329::-;9333:6;9382:2;9370:9;9361:7;9357:23;9353:32;9350:119;;;9388:79;;:::i;:::-;9350:119;9508:1;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9479:117;9274:329;;;;:::o;9609:118::-;9696:24;9714:5;9696:24;:::i;:::-;9691:3;9684:37;9609:118;;:::o;9733:109::-;9814:21;9829:5;9814:21;:::i;:::-;9809:3;9802:34;9733:109;;:::o;9848:360::-;9934:3;9962:38;9994:5;9962:38;:::i;:::-;10016:70;10079:6;10074:3;10016:70;:::i;:::-;10009:77;;10095:52;10140:6;10135:3;10128:4;10121:5;10117:16;10095:52;:::i;:::-;10172:29;10194:6;10172:29;:::i;:::-;10167:3;10163:39;10156:46;;9938:270;9848:360;;;;:::o;10214:364::-;10302:3;10330:39;10363:5;10330:39;:::i;:::-;10385:71;10449:6;10444:3;10385:71;:::i;:::-;10378:78;;10465:52;10510:6;10505:3;10498:4;10491:5;10487:16;10465:52;:::i;:::-;10542:29;10564:6;10542:29;:::i;:::-;10537:3;10533:39;10526:46;;10306:272;10214:364;;;;:::o;10584:377::-;10690:3;10718:39;10751:5;10718:39;:::i;:::-;10773:89;10855:6;10850:3;10773:89;:::i;:::-;10766:96;;10871:52;10916:6;10911:3;10904:4;10897:5;10893:16;10871:52;:::i;:::-;10948:6;10943:3;10939:16;10932:23;;10694:267;10584:377;;;;:::o;10967:366::-;11109:3;11130:67;11194:2;11189:3;11130:67;:::i;:::-;11123:74;;11206:93;11295:3;11206:93;:::i;:::-;11324:2;11319:3;11315:12;11308:19;;10967:366;;;:::o;11339:::-;11481:3;11502:67;11566:2;11561:3;11502:67;:::i;:::-;11495:74;;11578:93;11667:3;11578:93;:::i;:::-;11696:2;11691:3;11687:12;11680:19;;11339:366;;;:::o;11711:::-;11853:3;11874:67;11938:2;11933:3;11874:67;:::i;:::-;11867:74;;11950:93;12039:3;11950:93;:::i;:::-;12068:2;12063:3;12059:12;12052:19;;11711:366;;;:::o;12083:::-;12225:3;12246:67;12310:2;12305:3;12246:67;:::i;:::-;12239:74;;12322:93;12411:3;12322:93;:::i;:::-;12440:2;12435:3;12431:12;12424:19;;12083:366;;;:::o;12455:::-;12597:3;12618:67;12682:2;12677:3;12618:67;:::i;:::-;12611:74;;12694:93;12783:3;12694:93;:::i;:::-;12812:2;12807:3;12803:12;12796:19;;12455:366;;;:::o;12827:::-;12969:3;12990:67;13054:2;13049:3;12990:67;:::i;:::-;12983:74;;13066:93;13155:3;13066:93;:::i;:::-;13184:2;13179:3;13175:12;13168:19;;12827:366;;;:::o;13199:::-;13341:3;13362:67;13426:2;13421:3;13362:67;:::i;:::-;13355:74;;13438:93;13527:3;13438:93;:::i;:::-;13556:2;13551:3;13547:12;13540:19;;13199:366;;;:::o;13571:::-;13713:3;13734:67;13798:2;13793:3;13734:67;:::i;:::-;13727:74;;13810:93;13899:3;13810:93;:::i;:::-;13928:2;13923:3;13919:12;13912:19;;13571:366;;;:::o;13943:::-;14085:3;14106:67;14170:2;14165:3;14106:67;:::i;:::-;14099:74;;14182:93;14271:3;14182:93;:::i;:::-;14300:2;14295:3;14291:12;14284:19;;13943:366;;;:::o;14315:::-;14457:3;14478:67;14542:2;14537:3;14478:67;:::i;:::-;14471:74;;14554:93;14643:3;14554:93;:::i;:::-;14672:2;14667:3;14663:12;14656:19;;14315:366;;;:::o;14687:::-;14829:3;14850:67;14914:2;14909:3;14850:67;:::i;:::-;14843:74;;14926:93;15015:3;14926:93;:::i;:::-;15044:2;15039:3;15035:12;15028:19;;14687:366;;;:::o;15059:::-;15201:3;15222:67;15286:2;15281:3;15222:67;:::i;:::-;15215:74;;15298:93;15387:3;15298:93;:::i;:::-;15416:2;15411:3;15407:12;15400:19;;15059:366;;;:::o;15431:::-;15573:3;15594:67;15658:2;15653:3;15594:67;:::i;:::-;15587:74;;15670:93;15759:3;15670:93;:::i;:::-;15788:2;15783:3;15779:12;15772:19;;15431:366;;;:::o;15803:::-;15945:3;15966:67;16030:2;16025:3;15966:67;:::i;:::-;15959:74;;16042:93;16131:3;16042:93;:::i;:::-;16160:2;16155:3;16151:12;16144:19;;15803:366;;;:::o;16175:::-;16317:3;16338:67;16402:2;16397:3;16338:67;:::i;:::-;16331:74;;16414:93;16503:3;16414:93;:::i;:::-;16532:2;16527:3;16523:12;16516:19;;16175:366;;;:::o;16547:400::-;16707:3;16728:84;16810:1;16805:3;16728:84;:::i;:::-;16721:91;;16821:93;16910:3;16821:93;:::i;:::-;16939:1;16934:3;16930:11;16923:18;;16547:400;;;:::o;16953:365::-;17095:3;17116:66;17180:1;17175:3;17116:66;:::i;:::-;17109:73;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16953:365;;;:::o;17324:366::-;17466:3;17487:67;17551:2;17546:3;17487:67;:::i;:::-;17480:74;;17563:93;17652:3;17563:93;:::i;:::-;17681:2;17676:3;17672:12;17665:19;;17324:366;;;:::o;17696:::-;17838:3;17859:67;17923:2;17918:3;17859:67;:::i;:::-;17852:74;;17935:93;18024:3;17935:93;:::i;:::-;18053:2;18048:3;18044:12;18037:19;;17696:366;;;:::o;18068:::-;18210:3;18231:67;18295:2;18290:3;18231:67;:::i;:::-;18224:74;;18307:93;18396:3;18307:93;:::i;:::-;18425:2;18420:3;18416:12;18409:19;;18068:366;;;:::o;18440:::-;18582:3;18603:67;18667:2;18662:3;18603:67;:::i;:::-;18596:74;;18679:93;18768:3;18679:93;:::i;:::-;18797:2;18792:3;18788:12;18781:19;;18440:366;;;:::o;18812:398::-;18971:3;18992:83;19073:1;19068:3;18992:83;:::i;:::-;18985:90;;19084:93;19173:3;19084:93;:::i;:::-;19202:1;19197:3;19193:11;19186:18;;18812:398;;;:::o;19216:366::-;19358:3;19379:67;19443:2;19438:3;19379:67;:::i;:::-;19372:74;;19455:93;19544:3;19455:93;:::i;:::-;19573:2;19568:3;19564:12;19557:19;;19216:366;;;:::o;19588:::-;19730:3;19751:67;19815:2;19810:3;19751:67;:::i;:::-;19744:74;;19827:93;19916:3;19827:93;:::i;:::-;19945:2;19940:3;19936:12;19929:19;;19588:366;;;:::o;19960:::-;20102:3;20123:67;20187:2;20182:3;20123:67;:::i;:::-;20116:74;;20199:93;20288:3;20199:93;:::i;:::-;20317:2;20312:3;20308:12;20301:19;;19960:366;;;:::o;20332:::-;20474:3;20495:67;20559:2;20554:3;20495:67;:::i;:::-;20488:74;;20571:93;20660:3;20571:93;:::i;:::-;20689:2;20684:3;20680:12;20673:19;;20332:366;;;:::o;20704:::-;20846:3;20867:67;20931:2;20926:3;20867:67;:::i;:::-;20860:74;;20943:93;21032:3;20943:93;:::i;:::-;21061:2;21056:3;21052:12;21045:19;;20704:366;;;:::o;21076:::-;21218:3;21239:67;21303:2;21298:3;21239:67;:::i;:::-;21232:74;;21315:93;21404:3;21315:93;:::i;:::-;21433:2;21428:3;21424:12;21417:19;;21076:366;;;:::o;21448:::-;21590:3;21611:67;21675:2;21670:3;21611:67;:::i;:::-;21604:74;;21687:93;21776:3;21687:93;:::i;:::-;21805:2;21800:3;21796:12;21789:19;;21448:366;;;:::o;21820:::-;21962:3;21983:67;22047:2;22042:3;21983:67;:::i;:::-;21976:74;;22059:93;22148:3;22059:93;:::i;:::-;22177:2;22172:3;22168:12;22161:19;;21820:366;;;:::o;22192:118::-;22279:24;22297:5;22279:24;:::i;:::-;22274:3;22267:37;22192:118;;:::o;22316:701::-;22597:3;22619:95;22710:3;22701:6;22619:95;:::i;:::-;22612:102;;22731:95;22822:3;22813:6;22731:95;:::i;:::-;22724:102;;22843:148;22987:3;22843:148;:::i;:::-;22836:155;;23008:3;23001:10;;22316:701;;;;;:::o;23023:379::-;23207:3;23229:147;23372:3;23229:147;:::i;:::-;23222:154;;23393:3;23386:10;;23023:379;;;:::o;23408:222::-;23501:4;23539:2;23528:9;23524:18;23516:26;;23552:71;23620:1;23609:9;23605:17;23596:6;23552:71;:::i;:::-;23408:222;;;;:::o;23636:640::-;23831:4;23869:3;23858:9;23854:19;23846:27;;23883:71;23951:1;23940:9;23936:17;23927:6;23883:71;:::i;:::-;23964:72;24032:2;24021:9;24017:18;24008:6;23964:72;:::i;:::-;24046;24114:2;24103:9;24099:18;24090:6;24046:72;:::i;:::-;24165:9;24159:4;24155:20;24150:2;24139:9;24135:18;24128:48;24193:76;24264:4;24255:6;24193:76;:::i;:::-;24185:84;;23636:640;;;;;;;:::o;24282:210::-;24369:4;24407:2;24396:9;24392:18;24384:26;;24420:65;24482:1;24471:9;24467:17;24458:6;24420:65;:::i;:::-;24282:210;;;;:::o;24498:313::-;24611:4;24649:2;24638:9;24634:18;24626:26;;24698:9;24692:4;24688:20;24684:1;24673:9;24669:17;24662:47;24726:78;24799:4;24790:6;24726:78;:::i;:::-;24718:86;;24498:313;;;;:::o;24817:419::-;24983:4;25021:2;25010:9;25006:18;24998:26;;25070:9;25064:4;25060:20;25056:1;25045:9;25041:17;25034:47;25098:131;25224:4;25098:131;:::i;:::-;25090:139;;24817:419;;;:::o;25242:::-;25408:4;25446:2;25435:9;25431:18;25423:26;;25495:9;25489:4;25485:20;25481:1;25470:9;25466:17;25459:47;25523:131;25649:4;25523:131;:::i;:::-;25515:139;;25242:419;;;:::o;25667:::-;25833:4;25871:2;25860:9;25856:18;25848:26;;25920:9;25914:4;25910:20;25906:1;25895:9;25891:17;25884:47;25948:131;26074:4;25948:131;:::i;:::-;25940:139;;25667:419;;;:::o;26092:::-;26258:4;26296:2;26285:9;26281:18;26273:26;;26345:9;26339:4;26335:20;26331:1;26320:9;26316:17;26309:47;26373:131;26499:4;26373:131;:::i;:::-;26365:139;;26092:419;;;:::o;26517:::-;26683:4;26721:2;26710:9;26706:18;26698:26;;26770:9;26764:4;26760:20;26756:1;26745:9;26741:17;26734:47;26798:131;26924:4;26798:131;:::i;:::-;26790:139;;26517:419;;;:::o;26942:::-;27108:4;27146:2;27135:9;27131:18;27123:26;;27195:9;27189:4;27185:20;27181:1;27170:9;27166:17;27159:47;27223:131;27349:4;27223:131;:::i;:::-;27215:139;;26942:419;;;:::o;27367:::-;27533:4;27571:2;27560:9;27556:18;27548:26;;27620:9;27614:4;27610:20;27606:1;27595:9;27591:17;27584:47;27648:131;27774:4;27648:131;:::i;:::-;27640:139;;27367:419;;;:::o;27792:::-;27958:4;27996:2;27985:9;27981:18;27973:26;;28045:9;28039:4;28035:20;28031:1;28020:9;28016:17;28009:47;28073:131;28199:4;28073:131;:::i;:::-;28065:139;;27792:419;;;:::o;28217:::-;28383:4;28421:2;28410:9;28406:18;28398:26;;28470:9;28464:4;28460:20;28456:1;28445:9;28441:17;28434:47;28498:131;28624:4;28498:131;:::i;:::-;28490:139;;28217:419;;;:::o;28642:::-;28808:4;28846:2;28835:9;28831:18;28823:26;;28895:9;28889:4;28885:20;28881:1;28870:9;28866:17;28859:47;28923:131;29049:4;28923:131;:::i;:::-;28915:139;;28642:419;;;:::o;29067:::-;29233:4;29271:2;29260:9;29256:18;29248:26;;29320:9;29314:4;29310:20;29306:1;29295:9;29291:17;29284:47;29348:131;29474:4;29348:131;:::i;:::-;29340:139;;29067:419;;;:::o;29492:::-;29658:4;29696:2;29685:9;29681:18;29673:26;;29745:9;29739:4;29735:20;29731:1;29720:9;29716:17;29709:47;29773:131;29899:4;29773:131;:::i;:::-;29765:139;;29492:419;;;:::o;29917:::-;30083:4;30121:2;30110:9;30106:18;30098:26;;30170:9;30164:4;30160:20;30156:1;30145:9;30141:17;30134:47;30198:131;30324:4;30198:131;:::i;:::-;30190:139;;29917:419;;;:::o;30342:::-;30508:4;30546:2;30535:9;30531:18;30523:26;;30595:9;30589:4;30585:20;30581:1;30570:9;30566:17;30559:47;30623:131;30749:4;30623:131;:::i;:::-;30615:139;;30342:419;;;:::o;30767:::-;30933:4;30971:2;30960:9;30956:18;30948:26;;31020:9;31014:4;31010:20;31006:1;30995:9;30991:17;30984:47;31048:131;31174:4;31048:131;:::i;:::-;31040:139;;30767:419;;;:::o;31192:::-;31358:4;31396:2;31385:9;31381:18;31373:26;;31445:9;31439:4;31435:20;31431:1;31420:9;31416:17;31409:47;31473:131;31599:4;31473:131;:::i;:::-;31465:139;;31192:419;;;:::o;31617:::-;31783:4;31821:2;31810:9;31806:18;31798:26;;31870:9;31864:4;31860:20;31856:1;31845:9;31841:17;31834:47;31898:131;32024:4;31898:131;:::i;:::-;31890:139;;31617:419;;;:::o;32042:::-;32208:4;32246:2;32235:9;32231:18;32223:26;;32295:9;32289:4;32285:20;32281:1;32270:9;32266:17;32259:47;32323:131;32449:4;32323:131;:::i;:::-;32315:139;;32042:419;;;:::o;32467:::-;32633:4;32671:2;32660:9;32656:18;32648:26;;32720:9;32714:4;32710:20;32706:1;32695:9;32691:17;32684:47;32748:131;32874:4;32748:131;:::i;:::-;32740:139;;32467:419;;;:::o;32892:::-;33058:4;33096:2;33085:9;33081:18;33073:26;;33145:9;33139:4;33135:20;33131:1;33120:9;33116:17;33109:47;33173:131;33299:4;33173:131;:::i;:::-;33165:139;;32892:419;;;:::o;33317:::-;33483:4;33521:2;33510:9;33506:18;33498:26;;33570:9;33564:4;33560:20;33556:1;33545:9;33541:17;33534:47;33598:131;33724:4;33598:131;:::i;:::-;33590:139;;33317:419;;;:::o;33742:::-;33908:4;33946:2;33935:9;33931:18;33923:26;;33995:9;33989:4;33985:20;33981:1;33970:9;33966:17;33959:47;34023:131;34149:4;34023:131;:::i;:::-;34015:139;;33742:419;;;:::o;34167:::-;34333:4;34371:2;34360:9;34356:18;34348:26;;34420:9;34414:4;34410:20;34406:1;34395:9;34391:17;34384:47;34448:131;34574:4;34448:131;:::i;:::-;34440:139;;34167:419;;;:::o;34592:::-;34758:4;34796:2;34785:9;34781:18;34773:26;;34845:9;34839:4;34835:20;34831:1;34820:9;34816:17;34809:47;34873:131;34999:4;34873:131;:::i;:::-;34865:139;;34592:419;;;:::o;35017:::-;35183:4;35221:2;35210:9;35206:18;35198:26;;35270:9;35264:4;35260:20;35256:1;35245:9;35241:17;35234:47;35298:131;35424:4;35298:131;:::i;:::-;35290:139;;35017:419;;;:::o;35442:::-;35608:4;35646:2;35635:9;35631:18;35623:26;;35695:9;35689:4;35685:20;35681:1;35670:9;35666:17;35659:47;35723:131;35849:4;35723:131;:::i;:::-;35715:139;;35442:419;;;:::o;35867:::-;36033:4;36071:2;36060:9;36056:18;36048:26;;36120:9;36114:4;36110:20;36106:1;36095:9;36091:17;36084:47;36148:131;36274:4;36148:131;:::i;:::-;36140:139;;35867:419;;;:::o;36292:::-;36458:4;36496:2;36485:9;36481:18;36473:26;;36545:9;36539:4;36535:20;36531:1;36520:9;36516:17;36509:47;36573:131;36699:4;36573:131;:::i;:::-;36565:139;;36292:419;;;:::o;36717:222::-;36810:4;36848:2;36837:9;36833:18;36825:26;;36861:71;36929:1;36918:9;36914:17;36905:6;36861:71;:::i;:::-;36717:222;;;;:::o;36945:129::-;36979:6;37006:20;;:::i;:::-;36996:30;;37035:33;37063:4;37055:6;37035:33;:::i;:::-;36945:129;;;:::o;37080:75::-;37113:6;37146:2;37140:9;37130:19;;37080:75;:::o;37161:307::-;37222:4;37312:18;37304:6;37301:30;37298:56;;;37334:18;;:::i;:::-;37298:56;37372:29;37394:6;37372:29;:::i;:::-;37364:37;;37456:4;37450;37446:15;37438:23;;37161:307;;;:::o;37474:308::-;37536:4;37626:18;37618:6;37615:30;37612:56;;;37648:18;;:::i;:::-;37612:56;37686:29;37708:6;37686:29;:::i;:::-;37678:37;;37770:4;37764;37760:15;37752:23;;37474:308;;;:::o;37788:98::-;37839:6;37873:5;37867:12;37857:22;;37788:98;;;:::o;37892:99::-;37944:6;37978:5;37972:12;37962:22;;37892:99;;;:::o;37997:168::-;38080:11;38114:6;38109:3;38102:19;38154:4;38149:3;38145:14;38130:29;;37997:168;;;;:::o;38171:147::-;38272:11;38309:3;38294:18;;38171:147;;;;:::o;38324:169::-;38408:11;38442:6;38437:3;38430:19;38482:4;38477:3;38473:14;38458:29;;38324:169;;;;:::o;38499:148::-;38601:11;38638:3;38623:18;;38499:148;;;;:::o;38653:305::-;38693:3;38712:20;38730:1;38712:20;:::i;:::-;38707:25;;38746:20;38764:1;38746:20;:::i;:::-;38741:25;;38900:1;38832:66;38828:74;38825:1;38822:81;38819:107;;;38906:18;;:::i;:::-;38819:107;38950:1;38947;38943:9;38936:16;;38653:305;;;;:::o;38964:185::-;39004:1;39021:20;39039:1;39021:20;:::i;:::-;39016:25;;39055:20;39073:1;39055:20;:::i;:::-;39050:25;;39094:1;39084:35;;39099:18;;:::i;:::-;39084:35;39141:1;39138;39134:9;39129:14;;38964:185;;;;:::o;39155:348::-;39195:7;39218:20;39236:1;39218:20;:::i;:::-;39213:25;;39252:20;39270:1;39252:20;:::i;:::-;39247:25;;39440:1;39372:66;39368:74;39365:1;39362:81;39357:1;39350:9;39343:17;39339:105;39336:131;;;39447:18;;:::i;:::-;39336:131;39495:1;39492;39488:9;39477:20;;39155:348;;;;:::o;39509:191::-;39549:4;39569:20;39587:1;39569:20;:::i;:::-;39564:25;;39603:20;39621:1;39603:20;:::i;:::-;39598:25;;39642:1;39639;39636:8;39633:34;;;39647:18;;:::i;:::-;39633:34;39692:1;39689;39685:9;39677:17;;39509:191;;;;:::o;39706:96::-;39743:7;39772:24;39790:5;39772:24;:::i;:::-;39761:35;;39706:96;;;:::o;39808:90::-;39842:7;39885:5;39878:13;39871:21;39860:32;;39808:90;;;:::o;39904:149::-;39940:7;39980:66;39973:5;39969:78;39958:89;;39904:149;;;:::o;40059:126::-;40096:7;40136:42;40129:5;40125:54;40114:65;;40059:126;;;:::o;40191:77::-;40228:7;40257:5;40246:16;;40191:77;;;:::o;40274:154::-;40358:6;40353:3;40348;40335:30;40420:1;40411:6;40406:3;40402:16;40395:27;40274:154;;;:::o;40434:307::-;40502:1;40512:113;40526:6;40523:1;40520:13;40512:113;;;40611:1;40606:3;40602:11;40596:18;40592:1;40587:3;40583:11;40576:39;40548:2;40545:1;40541:10;40536:15;;40512:113;;;40643:6;40640:1;40637:13;40634:101;;;40723:1;40714:6;40709:3;40705:16;40698:27;40634:101;40483:258;40434:307;;;:::o;40747:320::-;40791:6;40828:1;40822:4;40818:12;40808:22;;40875:1;40869:4;40865:12;40896:18;40886:81;;40952:4;40944:6;40940:17;40930:27;;40886:81;41014:2;41006:6;41003:14;40983:18;40980:38;40977:84;;;41033:18;;:::i;:::-;40977:84;40798:269;40747:320;;;:::o;41073:281::-;41156:27;41178:4;41156:27;:::i;:::-;41148:6;41144:40;41286:6;41274:10;41271:22;41250:18;41238:10;41235:34;41232:62;41229:88;;;41297:18;;:::i;:::-;41229:88;41337:10;41333:2;41326:22;41116:238;41073:281;;:::o;41360:233::-;41399:3;41422:24;41440:5;41422:24;:::i;:::-;41413:33;;41468:66;41461:5;41458:77;41455:103;;;41538:18;;:::i;:::-;41455:103;41585:1;41578:5;41574:13;41567:20;;41360:233;;;:::o;41599:176::-;41631:1;41648:20;41666:1;41648:20;:::i;:::-;41643:25;;41682:20;41700:1;41682:20;:::i;:::-;41677:25;;41721:1;41711:35;;41726:18;;:::i;:::-;41711:35;41767:1;41764;41760:9;41755:14;;41599:176;;;;:::o;41781:180::-;41829:77;41826:1;41819:88;41926:4;41923:1;41916:15;41950:4;41947:1;41940:15;41967:180;42015:77;42012:1;42005:88;42112:4;42109:1;42102:15;42136:4;42133:1;42126:15;42153:180;42201:77;42198:1;42191:88;42298:4;42295:1;42288:15;42322:4;42319:1;42312:15;42339:180;42387:77;42384:1;42377:88;42484:4;42481:1;42474:15;42508:4;42505:1;42498:15;42525:180;42573:77;42570:1;42563:88;42670:4;42667:1;42660:15;42694:4;42691:1;42684:15;42711:117;42820:1;42817;42810:12;42834:117;42943:1;42940;42933:12;42957:117;43066:1;43063;43056:12;43080:117;43189:1;43186;43179:12;43203:117;43312:1;43309;43302:12;43326:117;43435:1;43432;43425:12;43449:102;43490:6;43541:2;43537:7;43532:2;43525:5;43521:14;43517:28;43507:38;;43449:102;;;:::o;43557:221::-;43697:34;43693:1;43685:6;43681:14;43674:58;43766:4;43761:2;43753:6;43749:15;43742:29;43557:221;:::o;43784:161::-;43924:13;43920:1;43912:6;43908:14;43901:37;43784:161;:::o;43951:220::-;44091:34;44087:1;44079:6;44075:14;44068:58;44160:3;44155:2;44147:6;44143:15;44136:28;43951:220;:::o;44177:225::-;44317:34;44313:1;44305:6;44301:14;44294:58;44386:8;44381:2;44373:6;44369:15;44362:33;44177:225;:::o;44408:229::-;44548:34;44544:1;44536:6;44532:14;44525:58;44617:12;44612:2;44604:6;44600:15;44593:37;44408:229;:::o;44643:165::-;44783:17;44779:1;44771:6;44767:14;44760:41;44643:165;:::o;44814:178::-;44954:30;44950:1;44942:6;44938:14;44931:54;44814:178;:::o;44998:222::-;45138:34;45134:1;45126:6;45122:14;45115:58;45207:5;45202:2;45194:6;45190:15;45183:30;44998:222;:::o;45226:224::-;45366:34;45362:1;45354:6;45350:14;45343:58;45435:7;45430:2;45422:6;45418:15;45411:32;45226:224;:::o;45456:220::-;45596:34;45592:1;45584:6;45580:14;45573:58;45665:3;45660:2;45652:6;45648:15;45641:28;45456:220;:::o;45682:244::-;45822:34;45818:1;45810:6;45806:14;45799:58;45891:27;45886:2;45878:6;45874:15;45867:52;45682:244;:::o;45932:176::-;46072:28;46068:1;46060:6;46056:14;46049:52;45932:176;:::o;46114:230::-;46254:34;46250:1;46242:6;46238:14;46231:58;46323:13;46318:2;46310:6;46306:15;46299:38;46114:230;:::o;46350:169::-;46490:21;46486:1;46478:6;46474:14;46467:45;46350:169;:::o;46525:225::-;46665:34;46661:1;46653:6;46649:14;46642:58;46734:8;46729:2;46721:6;46717:15;46710:33;46525:225;:::o;46756:155::-;46896:7;46892:1;46884:6;46880:14;46873:31;46756:155;:::o;46917:158::-;47057:10;47053:1;47045:6;47041:14;47034:34;46917:158;:::o;47081:182::-;47221:34;47217:1;47209:6;47205:14;47198:58;47081:182;:::o;47269:176::-;47409:28;47405:1;47397:6;47393:14;47386:52;47269:176;:::o;47451:237::-;47591:34;47587:1;47579:6;47575:14;47568:58;47660:20;47655:2;47647:6;47643:15;47636:45;47451:237;:::o;47694:221::-;47834:34;47830:1;47822:6;47818:14;47811:58;47903:4;47898:2;47890:6;47886:15;47879:29;47694:221;:::o;47921:114::-;;:::o;48041:238::-;48181:34;48177:1;48169:6;48165:14;48158:58;48250:21;48245:2;48237:6;48233:15;48226:46;48041:238;:::o;48285:177::-;48425:29;48421:1;48413:6;48409:14;48402:53;48285:177;:::o;48468:220::-;48608:34;48604:1;48596:6;48592:14;48585:58;48677:3;48672:2;48664:6;48660:15;48653:28;48468:220;:::o;48694:227::-;48834:34;48830:1;48822:6;48818:14;48811:58;48903:10;48898:2;48890:6;48886:15;48879:35;48694:227;:::o;48927:233::-;49067:34;49063:1;49055:6;49051:14;49044:58;49136:16;49131:2;49123:6;49119:15;49112:41;48927:233;:::o;49166:181::-;49306:33;49302:1;49294:6;49290:14;49283:57;49166:181;:::o;49353:234::-;49493:34;49489:1;49481:6;49477:14;49470:58;49562:17;49557:2;49549:6;49545:15;49538:42;49353:234;:::o;49593:232::-;49733:34;49729:1;49721:6;49717:14;49710:58;49802:15;49797:2;49789:6;49785:15;49778:40;49593:232;:::o;49831:122::-;49904:24;49922:5;49904:24;:::i;:::-;49897:5;49894:35;49884:63;;49943:1;49940;49933:12;49884:63;49831:122;:::o;49959:116::-;50029:21;50044:5;50029:21;:::i;:::-;50022:5;50019:32;50009:60;;50065:1;50062;50055:12;50009:60;49959:116;:::o;50081:120::-;50153:23;50170:5;50153:23;:::i;:::-;50146:5;50143:34;50133:62;;50191:1;50188;50181:12;50133:62;50081:120;:::o;50207:122::-;50280:24;50298:5;50280:24;:::i;:::-;50273:5;50270:35;50260:63;;50319:1;50316;50309:12;50260:63;50207:122;:::o

Swarm Source

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