ETH Price: $2,304.87 (+0.71%)

Token

Animoon Potion 2 (Potion)
 

Overview

Max Total Supply

1,000 Potion

Holders

142

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 Potion
0x9e26703e7331004cd7ea48bd18d39b365524a4de
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:
AnimoonPotion

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-02-16
*/

// SPDX-License-Identifier: MIT

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;
    }
}
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);
    }
}
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
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);
}
pragma solidity ^0.8.0;

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


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

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

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

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

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

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

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

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


/**
 * @dev 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;
    }
}
pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
}

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);
}
pragma solidity ^0.8.0;


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


pragma solidity ^0.8.0;


contract AnimoonPotion is Ownable, ERC721 {
    

    uint constant maxSupply = 1000;
    uint public totalSupply = 0;
    bool public public_sale_status = false;
    uint public minimumrequired = 1;
    string public baseURI;
    uint public maxPerTransaction = 10;  //Max Limit for Sale
    uint public maxPerWallet = 10; //Max Limit perwallet
         
    constructor() ERC721("Animoon Potion 2", "Potion"){}

   function buy(uint _count) public payable {
         require(public_sale_status == true, "Sale is Paused.");
        require(_count <= maxPerTransaction, "mint limit is 10 tokens");
         require(checknftholder(msg.sender) >= minimumrequired, "You do not have enough Animoon nfts");
        require(balanceOf(msg.sender) < maxPerTransaction, "maximum limit reached");
        require(totalSupply + _count <= maxSupply, "Not enough tokens left");
        
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }


    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(_wallets.length > 0, "mint at least one token");
        require(_wallets.length <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }

    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }

    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
   function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

 function checknftholder(address recnft) public view returns(uint) {
    address othercontractadd = 0x988a3e9834f1a4977e6F727E18EA167089349bA2;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

}

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":"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":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder","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":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumrequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","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":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006007556000600860006101000a81548160ff0219169083151502179055506001600955600a600b55600a600c553480156200004057600080fd5b506040518060400160405280601081526020017f416e696d6f6f6e20506f74696f6e2032000000000000000000000000000000008152506040518060400160405280600681526020017f506f74696f6e0000000000000000000000000000000000000000000000000000815250620000cd620000c16200010760201b60201c565b6200010f60201b60201c565b8160019080519060200190620000e5929190620001d3565b508060029080519060200190620000fe929190620001d3565b505050620002e8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e19062000283565b90600052602060002090601f01602090048101928262000205576000855562000251565b82601f106200022057805160ff191683800117855562000251565b8280016001018555821562000251579182015b828111156200025057825182559160200191906001019062000233565b5b50905062000260919062000264565b5090565b5b808211156200027f57600081600090555060010162000265565b5090565b600060028204905060018216806200029c57607f821691505b60208210811415620002b357620002b2620002b9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613c7080620002f86000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec578063a0bcfc7f1161008a578063c87b56dd11610064578063c87b56dd146105e6578063d96a094a14610623578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0bcfc7f1461056b578063a22cb46514610594578063b88d4fde146105bd576101b7565b806389b52e65116100c657806389b52e65146104ad5780638da5cb5b146104ea57806395d89b411461051557806395ea5e6714610540576101b7565b806370a0823114610430578063715018a61461046d5780637c8255db14610484576101b7565b80633c28081111610159578063453c231011610133578063453c2310146103725780634b980d671461039d5780636352211e146103c85780636c0360eb14610405576101b7565b80633c280811146103075780633ccfd60b1461033257806342842e0e14610349576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631cef37e4146102b557806323b872dd146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de91906128c7565b6106a5565b6040516101f09190612e67565b60405180910390f35b34801561020557600080fd5b5061020e610787565b60405161021b9190612e82565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061296a565b610819565b6040516102589190612e00565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612811565b61089e565b005b34801561029657600080fd5b5061029f6109b6565b6040516102ac91906131a4565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d7919061289a565b6109bc565b005b3480156102ea57600080fd5b50610305600480360381019061030091906126fb565b610a55565b005b34801561031357600080fd5b5061031c610ab5565b60405161032991906131a4565b60405180910390f35b34801561033e57600080fd5b50610347610abb565b005b34801561035557600080fd5b50610370600480360381019061036b91906126fb565b610b87565b005b34801561037e57600080fd5b50610387610ba7565b60405161039491906131a4565b60405180910390f35b3480156103a957600080fd5b506103b2610bad565b6040516103bf91906131a4565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea919061296a565b610bb3565b6040516103fc9190612e00565b60405180910390f35b34801561041157600080fd5b5061041a610c65565b6040516104279190612e82565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061268e565b610cf3565b60405161046491906131a4565b60405180910390f35b34801561047957600080fd5b50610482610dab565b005b34801561049057600080fd5b506104ab60048036038101906104a69190612851565b610e33565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061268e565b611006565b6040516104e191906131a4565b60405180910390f35b3480156104f657600080fd5b506104ff6110b7565b60405161050c9190612e00565b60405180910390f35b34801561052157600080fd5b5061052a6110e0565b6040516105379190612e82565b60405180910390f35b34801561054c57600080fd5b50610555611172565b6040516105629190612e67565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612921565b611185565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906127d1565b61121b565b005b3480156105c957600080fd5b506105e460048036038101906105df919061274e565b61139c565b005b3480156105f257600080fd5b5061060d6004803603810190610608919061296a565b6113fe565b60405161061a9190612e82565b60405180910390f35b61063d6004803603810190610638919061296a565b6114a5565b005b34801561064b57600080fd5b50610666600480360381019061066191906126bb565b611689565b6040516106739190612e67565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061268e565b61171d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610780575061077f82611815565b5b9050919050565b60606001805461079690613426565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290613426565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b60006108248261187f565b610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90613044565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a982610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906130c4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109396118eb565b73ffffffffffffffffffffffffffffffffffffffff1614806109685750610967816109626118eb565b611689565b5b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612f64565b60405180910390fd5b6109b183836118f3565b505050565b60075481565b6109c46118eb565b73ffffffffffffffffffffffffffffffffffffffff166109e26110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613064565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b610a66610a606118eb565b826119ac565b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906130e4565b60405180910390fd5b610ab0838383611a8a565b505050565b60095481565b610ac36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610ae16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613064565b60405180910390fd5b610b3f6110b7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b84573d6000803e3d6000fd5b50565b610ba28383836040518060200160405280600081525061139c565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390612fa4565b60405180910390fd5b80915050919050565b600a8054610c7290613426565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90613426565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90612f84565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610dd16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90613064565b60405180910390fd5b610e316000611ce6565b565b610e3b6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610e596110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613064565b60405180910390fd5b6000815111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613104565b60405180910390fd5b600b5481511115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090613144565b60405180910390fd5b6103e88151600754610f4b91906132b5565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613164565b60405180910390fd5b60005b8151811015610fe857610fd5828281518110610fae57610fad613590565b5b6020026020010151826001600754610fc691906132b5565b610fd091906132b5565b611daa565b8080610fe090613489565b915050610f8f565b50805160076000828254610ffc91906132b5565b9250508190555050565b60008073988a3e9834f1a4977e6f727e18ea167089349ba2905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161105e9190612e00565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190612997565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110ef90613426565b80601f016020809104026020016040519081016040528092919081815260200182805461111b90613426565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b61118d6118eb565b73ffffffffffffffffffffffffffffffffffffffff166111ab6110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613064565b60405180910390fd5b80600a90805190602001906112179291906123ef565b5050565b6112236118eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612f24565b60405180910390fd5b806006600061129e6118eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134b6118eb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113909190612e67565b60405180910390a35050565b6113ad6113a76118eb565b836119ac565b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130e4565b60405180910390fd5b6113f884848484611dc8565b50505050565b60606114098261187f565b611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f906130a4565b60405180910390fd5b6000611452611e24565b90506000815111611472576040518060200160405280600081525061149d565b8061147c84611eb6565b60405160200161148d929190612ddc565b6040516020818303038152906040525b915050919050565b60011515600860009054906101000a900460ff161515146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613184565b60405180910390fd5b600b54811115611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613124565b60405180910390fd5b60095461154c33611006565b101561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613004565b60405180910390fd5b600b5461159933610cf3565b106115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090612fe4565b60405180910390fd5b6103e8816007546115ea91906132b5565b111561162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290612fc4565b60405180910390fd5b60005b8181101561166c576116593382600160075461164a91906132b5565b61165491906132b5565b611daa565b808061166490613489565b91505061162e565b50806007600082825461167f91906132b5565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117256118eb565b73ffffffffffffffffffffffffffffffffffffffff166117436110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613064565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612ec4565b60405180910390fd5b61181281611ce6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196683610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b78261187f565b6119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90612f44565b60405180910390fd5b6000611a0183610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a7057508373ffffffffffffffffffffffffffffffffffffffff16611a5884610819565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a815750611a808185611689565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aaa82610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613084565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612f04565b60405180910390fd5b611b7b838383612017565b611b866000826118f3565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd6919061333c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2d91906132b5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dc482826040518060200160405280600081525061201c565b5050565b611dd3848484611a8a565b611ddf84848484612077565b611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590612ea4565b60405180910390fd5b50505050565b6060600a8054611e3390613426565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5f90613426565b8015611eac5780601f10611e8157610100808354040283529160200191611eac565b820191906000526020600020905b815481529060010190602001808311611e8f57829003601f168201915b5050505050905090565b60606000821415611efe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612012565b600082905060005b60008214611f30578080611f1990613489565b915050600a82611f29919061330b565b9150611f06565b60008167ffffffffffffffff811115611f4c57611f4b6135bf565b5b6040519080825280601f01601f191660200182016040528015611f7e5781602001600182028036833780820191505090505b5090505b6000851461200b57600182611f97919061333c565b9150600a85611fa691906134d2565b6030611fb291906132b5565b60f81b818381518110611fc857611fc7613590565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612004919061330b565b9450611f82565b8093505050505b919050565b505050565b612026838361220e565b6120336000848484612077565b612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990612ea4565b60405180910390fd5b505050565b60006120988473ffffffffffffffffffffffffffffffffffffffff166123dc565b15612201578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120c16118eb565b8786866040518563ffffffff1660e01b81526004016120e39493929190612e1b565b602060405180830381600087803b1580156120fd57600080fd5b505af192505050801561212e57506040513d601f19601f8201168201806040525081019061212b91906128f4565b60015b6121b1573d806000811461215e576040519150601f19603f3d011682016040523d82523d6000602084013e612163565b606091505b506000815114156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090612ea4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612206565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613024565b60405180910390fd5b6122878161187f565b156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90612ee4565b60405180910390fd5b6122d360008383612017565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232391906132b5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546123fb90613426565b90600052602060002090601f01602090048101928261241d5760008555612464565b82601f1061243657805160ff1916838001178555612464565b82800160010185558215612464579182015b82811115612463578251825591602001919060010190612448565b5b5090506124719190612475565b5090565b5b8082111561248e576000816000905550600101612476565b5090565b60006124a56124a0846131e4565b6131bf565b905080838252602082019050828560208602820111156124c8576124c76135f3565b5b60005b858110156124f857816124de8882612586565b8452602084019350602083019250506001810190506124cb565b5050509392505050565b600061251561251084613210565b6131bf565b905082815260208101848484011115612531576125306135f8565b5b61253c8482856133e4565b509392505050565b600061255761255284613241565b6131bf565b905082815260208101848484011115612573576125726135f8565b5b61257e8482856133e4565b509392505050565b60008135905061259581613bde565b92915050565b600082601f8301126125b0576125af6135ee565b5b81356125c0848260208601612492565b91505092915050565b6000813590506125d881613bf5565b92915050565b6000813590506125ed81613c0c565b92915050565b60008151905061260281613c0c565b92915050565b600082601f83011261261d5761261c6135ee565b5b813561262d848260208601612502565b91505092915050565b600082601f83011261264b5761264a6135ee565b5b813561265b848260208601612544565b91505092915050565b60008135905061267381613c23565b92915050565b60008151905061268881613c23565b92915050565b6000602082840312156126a4576126a3613602565b5b60006126b284828501612586565b91505092915050565b600080604083850312156126d2576126d1613602565b5b60006126e085828601612586565b92505060206126f185828601612586565b9150509250929050565b60008060006060848603121561271457612713613602565b5b600061272286828701612586565b935050602061273386828701612586565b925050604061274486828701612664565b9150509250925092565b6000806000806080858703121561276857612767613602565b5b600061277687828801612586565b945050602061278787828801612586565b935050604061279887828801612664565b925050606085013567ffffffffffffffff8111156127b9576127b86135fd565b5b6127c587828801612608565b91505092959194509250565b600080604083850312156127e8576127e7613602565b5b60006127f685828601612586565b9250506020612807858286016125c9565b9150509250929050565b6000806040838503121561282857612827613602565b5b600061283685828601612586565b925050602061284785828601612664565b9150509250929050565b60006020828403121561286757612866613602565b5b600082013567ffffffffffffffff811115612885576128846135fd565b5b6128918482850161259b565b91505092915050565b6000602082840312156128b0576128af613602565b5b60006128be848285016125c9565b91505092915050565b6000602082840312156128dd576128dc613602565b5b60006128eb848285016125de565b91505092915050565b60006020828403121561290a57612909613602565b5b6000612918848285016125f3565b91505092915050565b60006020828403121561293757612936613602565b5b600082013567ffffffffffffffff811115612955576129546135fd565b5b61296184828501612636565b91505092915050565b6000602082840312156129805761297f613602565b5b600061298e84828501612664565b91505092915050565b6000602082840312156129ad576129ac613602565b5b60006129bb84828501612679565b91505092915050565b6129cd81613370565b82525050565b6129dc81613382565b82525050565b60006129ed82613272565b6129f78185613288565b9350612a078185602086016133f3565b612a1081613607565b840191505092915050565b6000612a268261327d565b612a308185613299565b9350612a408185602086016133f3565b612a4981613607565b840191505092915050565b6000612a5f8261327d565b612a6981856132aa565b9350612a798185602086016133f3565b80840191505092915050565b6000612a92603283613299565b9150612a9d82613618565b604082019050919050565b6000612ab5602683613299565b9150612ac082613667565b604082019050919050565b6000612ad8601c83613299565b9150612ae3826136b6565b602082019050919050565b6000612afb602483613299565b9150612b06826136df565b604082019050919050565b6000612b1e601983613299565b9150612b298261372e565b602082019050919050565b6000612b41602c83613299565b9150612b4c82613757565b604082019050919050565b6000612b64603883613299565b9150612b6f826137a6565b604082019050919050565b6000612b87602a83613299565b9150612b92826137f5565b604082019050919050565b6000612baa602983613299565b9150612bb582613844565b604082019050919050565b6000612bcd601683613299565b9150612bd882613893565b602082019050919050565b6000612bf0601583613299565b9150612bfb826138bc565b602082019050919050565b6000612c13602383613299565b9150612c1e826138e5565b604082019050919050565b6000612c36602083613299565b9150612c4182613934565b602082019050919050565b6000612c59602c83613299565b9150612c648261395d565b604082019050919050565b6000612c7c602083613299565b9150612c87826139ac565b602082019050919050565b6000612c9f602983613299565b9150612caa826139d5565b604082019050919050565b6000612cc2602f83613299565b9150612ccd82613a24565b604082019050919050565b6000612ce5602183613299565b9150612cf082613a73565b604082019050919050565b6000612d08603183613299565b9150612d1382613ac2565b604082019050919050565b6000612d2b601783613299565b9150612d3682613b11565b602082019050919050565b6000612d4e601783613299565b9150612d5982613b3a565b602082019050919050565b6000612d71601683613299565b9150612d7c82613b63565b602082019050919050565b6000612d94601683613299565b9150612d9f82613b8c565b602082019050919050565b6000612db7600f83613299565b9150612dc282613bb5565b602082019050919050565b612dd6816133da565b82525050565b6000612de88285612a54565b9150612df48284612a54565b91508190509392505050565b6000602082019050612e1560008301846129c4565b92915050565b6000608082019050612e3060008301876129c4565b612e3d60208301866129c4565b612e4a6040830185612dcd565b8181036060830152612e5c81846129e2565b905095945050505050565b6000602082019050612e7c60008301846129d3565b92915050565b60006020820190508181036000830152612e9c8184612a1b565b905092915050565b60006020820190508181036000830152612ebd81612a85565b9050919050565b60006020820190508181036000830152612edd81612aa8565b9050919050565b60006020820190508181036000830152612efd81612acb565b9050919050565b60006020820190508181036000830152612f1d81612aee565b9050919050565b60006020820190508181036000830152612f3d81612b11565b9050919050565b60006020820190508181036000830152612f5d81612b34565b9050919050565b60006020820190508181036000830152612f7d81612b57565b9050919050565b60006020820190508181036000830152612f9d81612b7a565b9050919050565b60006020820190508181036000830152612fbd81612b9d565b9050919050565b60006020820190508181036000830152612fdd81612bc0565b9050919050565b60006020820190508181036000830152612ffd81612be3565b9050919050565b6000602082019050818103600083015261301d81612c06565b9050919050565b6000602082019050818103600083015261303d81612c29565b9050919050565b6000602082019050818103600083015261305d81612c4c565b9050919050565b6000602082019050818103600083015261307d81612c6f565b9050919050565b6000602082019050818103600083015261309d81612c92565b9050919050565b600060208201905081810360008301526130bd81612cb5565b9050919050565b600060208201905081810360008301526130dd81612cd8565b9050919050565b600060208201905081810360008301526130fd81612cfb565b9050919050565b6000602082019050818103600083015261311d81612d1e565b9050919050565b6000602082019050818103600083015261313d81612d41565b9050919050565b6000602082019050818103600083015261315d81612d64565b9050919050565b6000602082019050818103600083015261317d81612d87565b9050919050565b6000602082019050818103600083015261319d81612daa565b9050919050565b60006020820190506131b96000830184612dcd565b92915050565b60006131c96131da565b90506131d58282613458565b919050565b6000604051905090565b600067ffffffffffffffff8211156131ff576131fe6135bf565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561322b5761322a6135bf565b5b61323482613607565b9050602081019050919050565b600067ffffffffffffffff82111561325c5761325b6135bf565b5b61326582613607565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132c0826133da565b91506132cb836133da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613300576132ff613503565b5b828201905092915050565b6000613316826133da565b9150613321836133da565b92508261333157613330613532565b5b828204905092915050565b6000613347826133da565b9150613352836133da565b92508282101561336557613364613503565b5b828203905092915050565b600061337b826133ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134115780820151818401526020810190506133f6565b83811115613420576000848401525b50505050565b6000600282049050600182168061343e57607f821691505b6020821081141561345257613451613561565b5b50919050565b61346182613607565b810181811067ffffffffffffffff821117156134805761347f6135bf565b5b80604052505050565b6000613494826133da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134c7576134c6613503565b5b600182019050919050565b60006134dd826133da565b91506134e8836133da565b9250826134f8576134f7613532565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f6d6178696d756d206c696d697420726561636865640000000000000000000000600082015250565b7f596f7520646f206e6f74206861766520656e6f75676820416e696d6f6f6e206e60008201527f6674730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d696e74206c696d697420697320313020746f6b656e73000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613be781613370565b8114613bf257600080fd5b50565b613bfe81613382565b8114613c0957600080fd5b50565b613c158161338e565b8114613c2057600080fd5b50565b613c2c816133da565b8114613c3757600080fd5b5056fea2646970667358221220398d64c27bc4130bade6cc99e59fa4b9e03e29ec667f8eda7c30e5596e4b390b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec578063a0bcfc7f1161008a578063c87b56dd11610064578063c87b56dd146105e6578063d96a094a14610623578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0bcfc7f1461056b578063a22cb46514610594578063b88d4fde146105bd576101b7565b806389b52e65116100c657806389b52e65146104ad5780638da5cb5b146104ea57806395d89b411461051557806395ea5e6714610540576101b7565b806370a0823114610430578063715018a61461046d5780637c8255db14610484576101b7565b80633c28081111610159578063453c231011610133578063453c2310146103725780634b980d671461039d5780636352211e146103c85780636c0360eb14610405576101b7565b80633c280811146103075780633ccfd60b1461033257806342842e0e14610349576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631cef37e4146102b557806323b872dd146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de91906128c7565b6106a5565b6040516101f09190612e67565b60405180910390f35b34801561020557600080fd5b5061020e610787565b60405161021b9190612e82565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061296a565b610819565b6040516102589190612e00565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612811565b61089e565b005b34801561029657600080fd5b5061029f6109b6565b6040516102ac91906131a4565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d7919061289a565b6109bc565b005b3480156102ea57600080fd5b50610305600480360381019061030091906126fb565b610a55565b005b34801561031357600080fd5b5061031c610ab5565b60405161032991906131a4565b60405180910390f35b34801561033e57600080fd5b50610347610abb565b005b34801561035557600080fd5b50610370600480360381019061036b91906126fb565b610b87565b005b34801561037e57600080fd5b50610387610ba7565b60405161039491906131a4565b60405180910390f35b3480156103a957600080fd5b506103b2610bad565b6040516103bf91906131a4565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea919061296a565b610bb3565b6040516103fc9190612e00565b60405180910390f35b34801561041157600080fd5b5061041a610c65565b6040516104279190612e82565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061268e565b610cf3565b60405161046491906131a4565b60405180910390f35b34801561047957600080fd5b50610482610dab565b005b34801561049057600080fd5b506104ab60048036038101906104a69190612851565b610e33565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061268e565b611006565b6040516104e191906131a4565b60405180910390f35b3480156104f657600080fd5b506104ff6110b7565b60405161050c9190612e00565b60405180910390f35b34801561052157600080fd5b5061052a6110e0565b6040516105379190612e82565b60405180910390f35b34801561054c57600080fd5b50610555611172565b6040516105629190612e67565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612921565b611185565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906127d1565b61121b565b005b3480156105c957600080fd5b506105e460048036038101906105df919061274e565b61139c565b005b3480156105f257600080fd5b5061060d6004803603810190610608919061296a565b6113fe565b60405161061a9190612e82565b60405180910390f35b61063d6004803603810190610638919061296a565b6114a5565b005b34801561064b57600080fd5b50610666600480360381019061066191906126bb565b611689565b6040516106739190612e67565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061268e565b61171d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610780575061077f82611815565b5b9050919050565b60606001805461079690613426565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290613426565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b60006108248261187f565b610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90613044565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a982610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906130c4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109396118eb565b73ffffffffffffffffffffffffffffffffffffffff1614806109685750610967816109626118eb565b611689565b5b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612f64565b60405180910390fd5b6109b183836118f3565b505050565b60075481565b6109c46118eb565b73ffffffffffffffffffffffffffffffffffffffff166109e26110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613064565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b610a66610a606118eb565b826119ac565b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906130e4565b60405180910390fd5b610ab0838383611a8a565b505050565b60095481565b610ac36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610ae16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613064565b60405180910390fd5b610b3f6110b7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b84573d6000803e3d6000fd5b50565b610ba28383836040518060200160405280600081525061139c565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390612fa4565b60405180910390fd5b80915050919050565b600a8054610c7290613426565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90613426565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90612f84565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610dd16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90613064565b60405180910390fd5b610e316000611ce6565b565b610e3b6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610e596110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613064565b60405180910390fd5b6000815111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613104565b60405180910390fd5b600b5481511115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090613144565b60405180910390fd5b6103e88151600754610f4b91906132b5565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613164565b60405180910390fd5b60005b8151811015610fe857610fd5828281518110610fae57610fad613590565b5b6020026020010151826001600754610fc691906132b5565b610fd091906132b5565b611daa565b8080610fe090613489565b915050610f8f565b50805160076000828254610ffc91906132b5565b9250508190555050565b60008073988a3e9834f1a4977e6f727e18ea167089349ba2905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161105e9190612e00565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190612997565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110ef90613426565b80601f016020809104026020016040519081016040528092919081815260200182805461111b90613426565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b61118d6118eb565b73ffffffffffffffffffffffffffffffffffffffff166111ab6110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613064565b60405180910390fd5b80600a90805190602001906112179291906123ef565b5050565b6112236118eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612f24565b60405180910390fd5b806006600061129e6118eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134b6118eb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113909190612e67565b60405180910390a35050565b6113ad6113a76118eb565b836119ac565b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130e4565b60405180910390fd5b6113f884848484611dc8565b50505050565b60606114098261187f565b611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f906130a4565b60405180910390fd5b6000611452611e24565b90506000815111611472576040518060200160405280600081525061149d565b8061147c84611eb6565b60405160200161148d929190612ddc565b6040516020818303038152906040525b915050919050565b60011515600860009054906101000a900460ff161515146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613184565b60405180910390fd5b600b54811115611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613124565b60405180910390fd5b60095461154c33611006565b101561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613004565b60405180910390fd5b600b5461159933610cf3565b106115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090612fe4565b60405180910390fd5b6103e8816007546115ea91906132b5565b111561162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290612fc4565b60405180910390fd5b60005b8181101561166c576116593382600160075461164a91906132b5565b61165491906132b5565b611daa565b808061166490613489565b91505061162e565b50806007600082825461167f91906132b5565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117256118eb565b73ffffffffffffffffffffffffffffffffffffffff166117436110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613064565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612ec4565b60405180910390fd5b61181281611ce6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196683610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b78261187f565b6119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90612f44565b60405180910390fd5b6000611a0183610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a7057508373ffffffffffffffffffffffffffffffffffffffff16611a5884610819565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a815750611a808185611689565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aaa82610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613084565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612f04565b60405180910390fd5b611b7b838383612017565b611b866000826118f3565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd6919061333c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2d91906132b5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dc482826040518060200160405280600081525061201c565b5050565b611dd3848484611a8a565b611ddf84848484612077565b611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590612ea4565b60405180910390fd5b50505050565b6060600a8054611e3390613426565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5f90613426565b8015611eac5780601f10611e8157610100808354040283529160200191611eac565b820191906000526020600020905b815481529060010190602001808311611e8f57829003601f168201915b5050505050905090565b60606000821415611efe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612012565b600082905060005b60008214611f30578080611f1990613489565b915050600a82611f29919061330b565b9150611f06565b60008167ffffffffffffffff811115611f4c57611f4b6135bf565b5b6040519080825280601f01601f191660200182016040528015611f7e5781602001600182028036833780820191505090505b5090505b6000851461200b57600182611f97919061333c565b9150600a85611fa691906134d2565b6030611fb291906132b5565b60f81b818381518110611fc857611fc7613590565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612004919061330b565b9450611f82565b8093505050505b919050565b505050565b612026838361220e565b6120336000848484612077565b612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990612ea4565b60405180910390fd5b505050565b60006120988473ffffffffffffffffffffffffffffffffffffffff166123dc565b15612201578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120c16118eb565b8786866040518563ffffffff1660e01b81526004016120e39493929190612e1b565b602060405180830381600087803b1580156120fd57600080fd5b505af192505050801561212e57506040513d601f19601f8201168201806040525081019061212b91906128f4565b60015b6121b1573d806000811461215e576040519150601f19603f3d011682016040523d82523d6000602084013e612163565b606091505b506000815114156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090612ea4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612206565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613024565b60405180910390fd5b6122878161187f565b156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90612ee4565b60405180910390fd5b6122d360008383612017565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232391906132b5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546123fb90613426565b90600052602060002090601f01602090048101928261241d5760008555612464565b82601f1061243657805160ff1916838001178555612464565b82800160010185558215612464579182015b82811115612463578251825591602001919060010190612448565b5b5090506124719190612475565b5090565b5b8082111561248e576000816000905550600101612476565b5090565b60006124a56124a0846131e4565b6131bf565b905080838252602082019050828560208602820111156124c8576124c76135f3565b5b60005b858110156124f857816124de8882612586565b8452602084019350602083019250506001810190506124cb565b5050509392505050565b600061251561251084613210565b6131bf565b905082815260208101848484011115612531576125306135f8565b5b61253c8482856133e4565b509392505050565b600061255761255284613241565b6131bf565b905082815260208101848484011115612573576125726135f8565b5b61257e8482856133e4565b509392505050565b60008135905061259581613bde565b92915050565b600082601f8301126125b0576125af6135ee565b5b81356125c0848260208601612492565b91505092915050565b6000813590506125d881613bf5565b92915050565b6000813590506125ed81613c0c565b92915050565b60008151905061260281613c0c565b92915050565b600082601f83011261261d5761261c6135ee565b5b813561262d848260208601612502565b91505092915050565b600082601f83011261264b5761264a6135ee565b5b813561265b848260208601612544565b91505092915050565b60008135905061267381613c23565b92915050565b60008151905061268881613c23565b92915050565b6000602082840312156126a4576126a3613602565b5b60006126b284828501612586565b91505092915050565b600080604083850312156126d2576126d1613602565b5b60006126e085828601612586565b92505060206126f185828601612586565b9150509250929050565b60008060006060848603121561271457612713613602565b5b600061272286828701612586565b935050602061273386828701612586565b925050604061274486828701612664565b9150509250925092565b6000806000806080858703121561276857612767613602565b5b600061277687828801612586565b945050602061278787828801612586565b935050604061279887828801612664565b925050606085013567ffffffffffffffff8111156127b9576127b86135fd565b5b6127c587828801612608565b91505092959194509250565b600080604083850312156127e8576127e7613602565b5b60006127f685828601612586565b9250506020612807858286016125c9565b9150509250929050565b6000806040838503121561282857612827613602565b5b600061283685828601612586565b925050602061284785828601612664565b9150509250929050565b60006020828403121561286757612866613602565b5b600082013567ffffffffffffffff811115612885576128846135fd565b5b6128918482850161259b565b91505092915050565b6000602082840312156128b0576128af613602565b5b60006128be848285016125c9565b91505092915050565b6000602082840312156128dd576128dc613602565b5b60006128eb848285016125de565b91505092915050565b60006020828403121561290a57612909613602565b5b6000612918848285016125f3565b91505092915050565b60006020828403121561293757612936613602565b5b600082013567ffffffffffffffff811115612955576129546135fd565b5b61296184828501612636565b91505092915050565b6000602082840312156129805761297f613602565b5b600061298e84828501612664565b91505092915050565b6000602082840312156129ad576129ac613602565b5b60006129bb84828501612679565b91505092915050565b6129cd81613370565b82525050565b6129dc81613382565b82525050565b60006129ed82613272565b6129f78185613288565b9350612a078185602086016133f3565b612a1081613607565b840191505092915050565b6000612a268261327d565b612a308185613299565b9350612a408185602086016133f3565b612a4981613607565b840191505092915050565b6000612a5f8261327d565b612a6981856132aa565b9350612a798185602086016133f3565b80840191505092915050565b6000612a92603283613299565b9150612a9d82613618565b604082019050919050565b6000612ab5602683613299565b9150612ac082613667565b604082019050919050565b6000612ad8601c83613299565b9150612ae3826136b6565b602082019050919050565b6000612afb602483613299565b9150612b06826136df565b604082019050919050565b6000612b1e601983613299565b9150612b298261372e565b602082019050919050565b6000612b41602c83613299565b9150612b4c82613757565b604082019050919050565b6000612b64603883613299565b9150612b6f826137a6565b604082019050919050565b6000612b87602a83613299565b9150612b92826137f5565b604082019050919050565b6000612baa602983613299565b9150612bb582613844565b604082019050919050565b6000612bcd601683613299565b9150612bd882613893565b602082019050919050565b6000612bf0601583613299565b9150612bfb826138bc565b602082019050919050565b6000612c13602383613299565b9150612c1e826138e5565b604082019050919050565b6000612c36602083613299565b9150612c4182613934565b602082019050919050565b6000612c59602c83613299565b9150612c648261395d565b604082019050919050565b6000612c7c602083613299565b9150612c87826139ac565b602082019050919050565b6000612c9f602983613299565b9150612caa826139d5565b604082019050919050565b6000612cc2602f83613299565b9150612ccd82613a24565b604082019050919050565b6000612ce5602183613299565b9150612cf082613a73565b604082019050919050565b6000612d08603183613299565b9150612d1382613ac2565b604082019050919050565b6000612d2b601783613299565b9150612d3682613b11565b602082019050919050565b6000612d4e601783613299565b9150612d5982613b3a565b602082019050919050565b6000612d71601683613299565b9150612d7c82613b63565b602082019050919050565b6000612d94601683613299565b9150612d9f82613b8c565b602082019050919050565b6000612db7600f83613299565b9150612dc282613bb5565b602082019050919050565b612dd6816133da565b82525050565b6000612de88285612a54565b9150612df48284612a54565b91508190509392505050565b6000602082019050612e1560008301846129c4565b92915050565b6000608082019050612e3060008301876129c4565b612e3d60208301866129c4565b612e4a6040830185612dcd565b8181036060830152612e5c81846129e2565b905095945050505050565b6000602082019050612e7c60008301846129d3565b92915050565b60006020820190508181036000830152612e9c8184612a1b565b905092915050565b60006020820190508181036000830152612ebd81612a85565b9050919050565b60006020820190508181036000830152612edd81612aa8565b9050919050565b60006020820190508181036000830152612efd81612acb565b9050919050565b60006020820190508181036000830152612f1d81612aee565b9050919050565b60006020820190508181036000830152612f3d81612b11565b9050919050565b60006020820190508181036000830152612f5d81612b34565b9050919050565b60006020820190508181036000830152612f7d81612b57565b9050919050565b60006020820190508181036000830152612f9d81612b7a565b9050919050565b60006020820190508181036000830152612fbd81612b9d565b9050919050565b60006020820190508181036000830152612fdd81612bc0565b9050919050565b60006020820190508181036000830152612ffd81612be3565b9050919050565b6000602082019050818103600083015261301d81612c06565b9050919050565b6000602082019050818103600083015261303d81612c29565b9050919050565b6000602082019050818103600083015261305d81612c4c565b9050919050565b6000602082019050818103600083015261307d81612c6f565b9050919050565b6000602082019050818103600083015261309d81612c92565b9050919050565b600060208201905081810360008301526130bd81612cb5565b9050919050565b600060208201905081810360008301526130dd81612cd8565b9050919050565b600060208201905081810360008301526130fd81612cfb565b9050919050565b6000602082019050818103600083015261311d81612d1e565b9050919050565b6000602082019050818103600083015261313d81612d41565b9050919050565b6000602082019050818103600083015261315d81612d64565b9050919050565b6000602082019050818103600083015261317d81612d87565b9050919050565b6000602082019050818103600083015261319d81612daa565b9050919050565b60006020820190506131b96000830184612dcd565b92915050565b60006131c96131da565b90506131d58282613458565b919050565b6000604051905090565b600067ffffffffffffffff8211156131ff576131fe6135bf565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561322b5761322a6135bf565b5b61323482613607565b9050602081019050919050565b600067ffffffffffffffff82111561325c5761325b6135bf565b5b61326582613607565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132c0826133da565b91506132cb836133da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613300576132ff613503565b5b828201905092915050565b6000613316826133da565b9150613321836133da565b92508261333157613330613532565b5b828204905092915050565b6000613347826133da565b9150613352836133da565b92508282101561336557613364613503565b5b828203905092915050565b600061337b826133ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134115780820151818401526020810190506133f6565b83811115613420576000848401525b50505050565b6000600282049050600182168061343e57607f821691505b6020821081141561345257613451613561565b5b50919050565b61346182613607565b810181811067ffffffffffffffff821117156134805761347f6135bf565b5b80604052505050565b6000613494826133da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134c7576134c6613503565b5b600182019050919050565b60006134dd826133da565b91506134e8836133da565b9250826134f8576134f7613532565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f6d6178696d756d206c696d697420726561636865640000000000000000000000600082015250565b7f596f7520646f206e6f74206861766520656e6f75676820416e696d6f6f6e206e60008201527f6674730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d696e74206c696d697420697320313020746f6b656e73000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613be781613370565b8114613bf257600080fd5b50565b613bfe81613382565b8114613c0957600080fd5b50565b613c158161338e565b8114613c2057600080fd5b50565b613c2c816133da565b8114613c3757600080fd5b5056fea2646970667358221220398d64c27bc4130bade6cc99e59fa4b9e03e29ec667f8eda7c30e5596e4b390b64736f6c63430008070033

Deployed Bytecode Sourcemap

34838:2175:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22684:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23629:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25188:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24711:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34932:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26078:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35011:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36662:106;;;;;;;;;;;;;:::i;:::-;;26488:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35140:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35077:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23323:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35049:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23053:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14184:94;;;;;;;;;;;;;:::i;:::-;;35878:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36773:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13533:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23798:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34966:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36342:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25481:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23973:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35268:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25847:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14433:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22684:305;22786:4;22838:25;22823:40;;;:11;:40;;;;:105;;;;22895:33;22880:48;;;:11;:48;;;;22823:105;:158;;;;22945:36;22969:11;22945:23;:36::i;:::-;22823:158;22803:178;;22684:305;;;:::o;23629:100::-;23683:13;23716:5;23709:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23629:100;:::o;25188:221::-;25264:7;25292:16;25300:7;25292;:16::i;:::-;25284:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25377:15;:24;25393:7;25377:24;;;;;;;;;;;;;;;;;;;;;25370:31;;25188:221;;;:::o;24711:411::-;24792:13;24808:23;24823:7;24808:14;:23::i;:::-;24792:39;;24856:5;24850:11;;:2;:11;;;;24842:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24950:5;24934:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24959:37;24976:5;24983:12;:10;:12::i;:::-;24959:16;:37::i;:::-;24934:62;24912:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:21;25102:2;25106:7;25093:8;:21::i;:::-;24781:341;24711:411;;:::o;34932:27::-;;;;:::o;36442:101::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36531:4:::1;36510:18;;:25;;;;;;;;;;;;;;;;;;36442:101:::0;:::o;26078:339::-;26273:41;26292:12;:10;:12::i;:::-;26306:7;26273:18;:41::i;:::-;26265:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26381:28;26391:4;26397:2;26401:7;26381:9;:28::i;:::-;26078:339;;;:::o;35011:31::-;;;;:::o;36662:106::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36720:7:::1;:5;:7::i;:::-;36712:25;;:48;36738:21;36712:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36662:106::o:0;26488:185::-;26626:39;26643:4;26649:2;26653:7;26626:39;;;;;;;;;;;;:16;:39::i;:::-;26488:185;;;:::o;35140:29::-;;;;:::o;35077:34::-;;;;:::o;23323:239::-;23395:7;23415:13;23431:7;:16;23439:7;23431:16;;;;;;;;;;;;;;;;;;;;;23415:32;;23483:1;23466:19;;:5;:19;;;;23458:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23549:5;23542:12;;;23323:239;;;:::o;35049:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23053:208::-;23125:7;23170:1;23153:19;;:5;:19;;;;23145:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23237:9;:16;23247:5;23237:16;;;;;;;;;;;;;;;;23230:23;;23053:208;;;:::o;14184:94::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:21:::1;14267:1;14249:9;:21::i;:::-;14184:94::o:0;35878:456::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35977:1:::1;35959:8;:15;:19;35951:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36044:17;;36025:8;:15;:36;;36017:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34921:4;36121:8;:15;36107:11;;:29;;;;:::i;:::-;:42;;36099:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36191:6;36187:98;36207:8;:15;36203:1;:19;36187:98;;;36242:43;36252:8;36261:1;36252:11;;;;;;;;:::i;:::-;;;;;;;;36283:1;36279;36265:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36242:9;:43::i;:::-;36224:3;;;;;:::i;:::-;;;;36187:98;;;;36311:8;:15;36296:11;;:30;;;;;;;:::i;:::-;;;;;;;;35878:456:::0;:::o;36773:235::-;36833:4;36846:24;36873:42;36846:69;;36922:14;36946:16;36922:41;;36977:7;:17;;;36995:6;36977:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36970:32;;;;36773:235;;;:::o;13533:87::-;13579:7;13606:6;;;;;;;;;;;13599:13;;13533:87;:::o;23798:104::-;23854:13;23887:7;23880:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23798:104;:::o;34966:38::-;;;;;;;;;;;;;:::o;36342:92::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36422:4:::1;36412:7;:14;;;;;;;;;;;;:::i;:::-;;36342:92:::0;:::o;25481:295::-;25596:12;:10;:12::i;:::-;25584:24;;:8;:24;;;;25576:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25696:8;25651:18;:32;25670:12;:10;:12::i;:::-;25651:32;;;;;;;;;;;;;;;:42;25684:8;25651:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25749:8;25720:48;;25735:12;:10;:12::i;:::-;25720:48;;;25759:8;25720:48;;;;;;:::i;:::-;;;;;;;;25481:295;;:::o;26744:328::-;26919:41;26938:12;:10;:12::i;:::-;26952:7;26919:18;:41::i;:::-;26911:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27025:39;27039:4;27045:2;27049:7;27058:5;27025:13;:39::i;:::-;26744:328;;;;:::o;23973:334::-;24046:13;24080:16;24088:7;24080;:16::i;:::-;24072:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24161:21;24185:10;:8;:10::i;:::-;24161:34;;24237:1;24219:7;24213:21;:25;:86;;;;;;;;;;;;;;;;;24265:7;24274:18;:7;:16;:18::i;:::-;24248:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24213:86;24206:93;;;23973:334;;;:::o;35268:600::-;35351:4;35329:26;;:18;;;;;;;;;;;:26;;;35321:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35404:17;;35394:6;:27;;35386:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35499:15;;35469:26;35484:10;35469:14;:26::i;:::-;:45;;35461:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;35597:17;;35573:21;35583:10;35573:9;:21::i;:::-;:41;35565:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34921:4;35673:6;35659:11;;:20;;;;:::i;:::-;:33;;35651:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35744:6;35740:88;35760:6;35756:1;:10;35740:88;;;35786:42;35796:10;35826:1;35822;35808:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;35786:9;:42::i;:::-;35768:3;;;;;:::i;:::-;;;;35740:88;;;;35854:6;35839:11;;:21;;;;;;;:::i;:::-;;;;;;;;35268:600;:::o;25847:164::-;25944:4;25968:18;:25;25987:5;25968:25;;;;;;;;;;;;;;;:35;25994:8;25968:35;;;;;;;;;;;;;;;;;;;;;;;;;25961:42;;25847:164;;;;:::o;14433:192::-;13764:12;:10;:12::i;:::-;13753:23;;:7;:5;:7::i;:::-;:23;;;13745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14542:1:::1;14522:22;;:8;:22;;;;14514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14598:19;14608:8;14598:9;:19::i;:::-;14433:192:::0;:::o;15538:157::-;15623:4;15662:25;15647:40;;;:11;:40;;;;15640:47;;15538:157;;;:::o;28582:127::-;28647:4;28699:1;28671:30;;:7;:16;28679:7;28671:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28664:37;;28582:127;;;:::o;673:98::-;726:7;753:10;746:17;;673:98;:::o;32564:174::-;32666:2;32639:15;:24;32655:7;32639:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32722:7;32718:2;32684:46;;32693:23;32708:7;32693:14;:23::i;:::-;32684:46;;;;;;;;;;;;32564:174;;:::o;28876:348::-;28969:4;28994:16;29002:7;28994;:16::i;:::-;28986:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29070:13;29086:23;29101:7;29086:14;:23::i;:::-;29070:39;;29139:5;29128:16;;:7;:16;;;:51;;;;29172:7;29148:31;;:20;29160:7;29148:11;:20::i;:::-;:31;;;29128:51;:87;;;;29183:32;29200:5;29207:7;29183:16;:32::i;:::-;29128:87;29120:96;;;28876:348;;;;:::o;31868:578::-;32027:4;32000:31;;:23;32015:7;32000:14;:23::i;:::-;:31;;;31992:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32110:1;32096:16;;:2;:16;;;;32088:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32166:39;32187:4;32193:2;32197:7;32166:20;:39::i;:::-;32270:29;32287:1;32291:7;32270:8;:29::i;:::-;32331:1;32312:9;:15;32322:4;32312:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32360:1;32343:9;:13;32353:2;32343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32391:2;32372:7;:16;32380:7;32372:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32430:7;32426:2;32411:27;;32420:4;32411:27;;;;;;;;;;;;31868:578;;;:::o;14633:173::-;14689:16;14708:6;;;;;;;;;;;14689:25;;14734:8;14725:6;;:17;;;;;;;;;;;;;;;;;;14789:8;14758:40;;14779:8;14758:40;;;;;;;;;;;;14678:128;14633:173;:::o;29566:110::-;29642:26;29652:2;29656:7;29642:26;;;;;;;;;;;;:9;:26::i;:::-;29566:110;;:::o;27954:315::-;28111:28;28121:4;28127:2;28131:7;28111:9;:28::i;:::-;28158:48;28181:4;28187:2;28191:7;28200:5;28158:22;:48::i;:::-;28150:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27954:315;;;;:::o;36549:108::-;36609:13;36642:7;36635:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36549:108;:::o;1138:723::-;1194:13;1424:1;1415:5;:10;1411:53;;;1442:10;;;;;;;;;;;;;;;;;;;;;1411:53;1474:12;1489:5;1474:20;;1505:14;1530:78;1545:1;1537:4;:9;1530:78;;1563:8;;;;;:::i;:::-;;;;1594:2;1586:10;;;;;:::i;:::-;;;1530:78;;;1618:19;1650:6;1640:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:39;;1668:154;1684:1;1675:5;:10;1668:154;;1712:1;1702:11;;;;;:::i;:::-;;;1779:2;1771:5;:10;;;;:::i;:::-;1758:2;:24;;;;:::i;:::-;1745:39;;1728:6;1735;1728:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1808:2;1799:11;;;;;:::i;:::-;;;1668:154;;;1846:6;1832:21;;;;;1138:723;;;;:::o;34674:126::-;;;;:::o;29903:321::-;30033:18;30039:2;30043:7;30033:5;:18::i;:::-;30084:54;30115:1;30119:2;30123:7;30132:5;30084:22;:54::i;:::-;30062:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29903:321;;;:::o;33303:799::-;33458:4;33479:15;:2;:13;;;:15::i;:::-;33475:620;;;33531:2;33515:36;;;33552:12;:10;:12::i;:::-;33566:4;33572:7;33581:5;33515:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33511:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33774:1;33757:6;:13;:18;33753:272;;;33800:60;;;;;;;;;;:::i;:::-;;;;;;;;33753:272;33975:6;33969:13;33960:6;33956:2;33952:15;33945:38;33511:529;33648:41;;;33638:51;;;:6;:51;;;;33631:58;;;;;33475:620;34079:4;34072:11;;33303:799;;;;;;;:::o;30560:382::-;30654:1;30640:16;;:2;:16;;;;30632:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30713:16;30721:7;30713;:16::i;:::-;30712:17;30704:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30775:45;30804:1;30808:2;30812:7;30775:20;:45::i;:::-;30850:1;30833:9;:13;30843:2;30833:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30881:2;30862:7;:16;30870:7;30862:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30926:7;30922:2;30901:33;;30918:1;30901:33;;;;;;;;;;;;30560:382;;:::o;3603:387::-;3663:4;3871:12;3938:7;3926:20;3918:28;;3981:1;3974:4;:8;3967:15;;;3603:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:143::-;3472:5;3503:6;3497:13;3488:22;;3519:33;3546:5;3519:33;:::i;:::-;3415:143;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:619::-;4456:6;4464;4472;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:53;4717:7;4708:6;4697:9;4693:22;4672:53;:::i;:::-;4662:63;;4618:117;4774:2;4800:53;4845:7;4836:6;4825:9;4821:22;4800:53;:::i;:::-;4790:63;;4745:118;4902:2;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4873:118;4379:619;;;;;:::o;5004:943::-;5099:6;5107;5115;5123;5172:3;5160:9;5151:7;5147:23;5143:33;5140:120;;;5179:79;;:::i;:::-;5140:120;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:117;;;5763:79;;:::i;:::-;5727:117;5868:62;5922:7;5913:6;5902:9;5898:22;5868:62;:::i;:::-;5858:72;;5653:287;5004:943;;;;;;;:::o;5953:468::-;6018:6;6026;6075:2;6063:9;6054:7;6050:23;6046:32;6043:119;;;6081:79;;:::i;:::-;6043:119;6201:1;6226:53;6271:7;6262:6;6251:9;6247:22;6226:53;:::i;:::-;6216:63;;6172:117;6328:2;6354:50;6396:7;6387:6;6376:9;6372:22;6354:50;:::i;:::-;6344:60;;6299:115;5953:468;;;;;:::o;6427:474::-;6495:6;6503;6552:2;6540:9;6531:7;6527:23;6523:32;6520:119;;;6558:79;;:::i;:::-;6520:119;6678:1;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6649:117;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6427:474;;;;;:::o;6907:539::-;6991:6;7040:2;7028:9;7019:7;7015:23;7011:32;7008:119;;;7046:79;;:::i;:::-;7008:119;7194:1;7183:9;7179:17;7166:31;7224:18;7216:6;7213:30;7210:117;;;7246:79;;:::i;:::-;7210:117;7351:78;7421:7;7412:6;7401:9;7397:22;7351:78;:::i;:::-;7341:88;;7137:302;6907:539;;;;:::o;7452:323::-;7508:6;7557:2;7545:9;7536:7;7532:23;7528:32;7525:119;;;7563:79;;:::i;:::-;7525:119;7683:1;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7654:114;7452:323;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:349::-;8183:6;8232:2;8220:9;8211:7;8207:23;8203:32;8200:119;;;8238:79;;:::i;:::-;8200:119;8358:1;8383:63;8438:7;8429:6;8418:9;8414:22;8383:63;:::i;:::-;8373:73;;8329:127;8114:349;;;;:::o;8469:509::-;8538:6;8587:2;8575:9;8566:7;8562:23;8558:32;8555:119;;;8593:79;;:::i;:::-;8555:119;8741:1;8730:9;8726:17;8713:31;8771:18;8763:6;8760:30;8757:117;;;8793:79;;:::i;:::-;8757:117;8898:63;8953:7;8944:6;8933:9;8929:22;8898:63;:::i;:::-;8888:73;;8684:287;8469:509;;;;:::o;8984:329::-;9043:6;9092:2;9080:9;9071:7;9067:23;9063:32;9060:119;;;9098:79;;:::i;:::-;9060:119;9218:1;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9189:117;8984:329;;;;:::o;9319:351::-;9389:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:119;;;9444:79;;:::i;:::-;9406:119;9564:1;9589:64;9645:7;9636:6;9625:9;9621:22;9589:64;:::i;:::-;9579:74;;9535:128;9319:351;;;;:::o;9676:118::-;9763:24;9781:5;9763:24;:::i;:::-;9758:3;9751:37;9676:118;;:::o;9800:109::-;9881:21;9896:5;9881:21;:::i;:::-;9876:3;9869:34;9800:109;;:::o;9915:360::-;10001:3;10029:38;10061:5;10029:38;:::i;:::-;10083:70;10146:6;10141:3;10083:70;:::i;:::-;10076:77;;10162:52;10207:6;10202:3;10195:4;10188:5;10184:16;10162:52;:::i;:::-;10239:29;10261:6;10239:29;:::i;:::-;10234:3;10230:39;10223:46;;10005:270;9915:360;;;;:::o;10281:364::-;10369:3;10397:39;10430:5;10397:39;:::i;:::-;10452:71;10516:6;10511:3;10452:71;:::i;:::-;10445:78;;10532:52;10577:6;10572:3;10565:4;10558:5;10554:16;10532:52;:::i;:::-;10609:29;10631:6;10609:29;:::i;:::-;10604:3;10600:39;10593:46;;10373:272;10281:364;;;;:::o;10651:377::-;10757:3;10785:39;10818:5;10785:39;:::i;:::-;10840:89;10922:6;10917:3;10840:89;:::i;:::-;10833:96;;10938:52;10983:6;10978:3;10971:4;10964:5;10960:16;10938:52;:::i;:::-;11015:6;11010:3;11006:16;10999:23;;10761:267;10651:377;;;;:::o;11034:366::-;11176:3;11197:67;11261:2;11256:3;11197:67;:::i;:::-;11190:74;;11273:93;11362:3;11273:93;:::i;:::-;11391:2;11386:3;11382:12;11375:19;;11034:366;;;:::o;11406:::-;11548:3;11569:67;11633:2;11628:3;11569:67;:::i;:::-;11562:74;;11645:93;11734:3;11645:93;:::i;:::-;11763:2;11758:3;11754:12;11747:19;;11406:366;;;:::o;11778:::-;11920:3;11941:67;12005:2;12000:3;11941:67;:::i;:::-;11934:74;;12017:93;12106:3;12017:93;:::i;:::-;12135:2;12130:3;12126:12;12119:19;;11778:366;;;:::o;12150:::-;12292:3;12313:67;12377:2;12372:3;12313:67;:::i;:::-;12306:74;;12389:93;12478:3;12389:93;:::i;:::-;12507:2;12502:3;12498:12;12491:19;;12150:366;;;:::o;12522:::-;12664:3;12685:67;12749:2;12744:3;12685:67;:::i;:::-;12678:74;;12761:93;12850:3;12761:93;:::i;:::-;12879:2;12874:3;12870:12;12863:19;;12522:366;;;:::o;12894:::-;13036:3;13057:67;13121:2;13116:3;13057:67;:::i;:::-;13050:74;;13133:93;13222:3;13133:93;:::i;:::-;13251:2;13246:3;13242:12;13235:19;;12894:366;;;:::o;13266:::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13638:366;;;:::o;14010:::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:118::-;20049:24;20067:5;20049:24;:::i;:::-;20044:3;20037:37;19962:118;;:::o;20086:435::-;20266:3;20288:95;20379:3;20370:6;20288:95;:::i;:::-;20281:102;;20400:95;20491:3;20482:6;20400:95;:::i;:::-;20393:102;;20512:3;20505:10;;20086:435;;;;;:::o;20527:222::-;20620:4;20658:2;20647:9;20643:18;20635:26;;20671:71;20739:1;20728:9;20724:17;20715:6;20671:71;:::i;:::-;20527:222;;;;:::o;20755:640::-;20950:4;20988:3;20977:9;20973:19;20965:27;;21002:71;21070:1;21059:9;21055:17;21046:6;21002:71;:::i;:::-;21083:72;21151:2;21140:9;21136:18;21127:6;21083:72;:::i;:::-;21165;21233:2;21222:9;21218:18;21209:6;21165:72;:::i;:::-;21284:9;21278:4;21274:20;21269:2;21258:9;21254:18;21247:48;21312:76;21383:4;21374:6;21312:76;:::i;:::-;21304:84;;20755:640;;;;;;;:::o;21401:210::-;21488:4;21526:2;21515:9;21511:18;21503:26;;21539:65;21601:1;21590:9;21586:17;21577:6;21539:65;:::i;:::-;21401:210;;;;:::o;21617:313::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:78;21918:4;21909:6;21845:78;:::i;:::-;21837:86;;21617:313;;;;:::o;21936:419::-;22102:4;22140:2;22129:9;22125:18;22117:26;;22189:9;22183:4;22179:20;22175:1;22164:9;22160:17;22153:47;22217:131;22343:4;22217:131;:::i;:::-;22209:139;;21936:419;;;:::o;22361:::-;22527:4;22565:2;22554:9;22550:18;22542:26;;22614:9;22608:4;22604:20;22600:1;22589:9;22585:17;22578:47;22642:131;22768:4;22642:131;:::i;:::-;22634:139;;22361:419;;;:::o;22786:::-;22952:4;22990:2;22979:9;22975:18;22967:26;;23039:9;23033:4;23029:20;23025:1;23014:9;23010:17;23003:47;23067:131;23193:4;23067:131;:::i;:::-;23059:139;;22786:419;;;:::o;23211:::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:::-;23802:4;23840:2;23829:9;23825:18;23817:26;;23889:9;23883:4;23879:20;23875:1;23864:9;23860:17;23853:47;23917:131;24043:4;23917:131;:::i;:::-;23909:139;;23636:419;;;:::o;24061:::-;24227:4;24265:2;24254:9;24250:18;24242:26;;24314:9;24308:4;24304:20;24300:1;24289:9;24285:17;24278:47;24342:131;24468:4;24342:131;:::i;:::-;24334:139;;24061:419;;;:::o;24486:::-;24652:4;24690:2;24679:9;24675:18;24667:26;;24739:9;24733:4;24729:20;24725:1;24714:9;24710:17;24703:47;24767:131;24893:4;24767:131;:::i;:::-;24759:139;;24486:419;;;:::o;24911:::-;25077:4;25115:2;25104:9;25100:18;25092:26;;25164:9;25158:4;25154:20;25150:1;25139:9;25135:17;25128:47;25192:131;25318:4;25192:131;:::i;:::-;25184:139;;24911:419;;;:::o;25336:::-;25502:4;25540:2;25529:9;25525:18;25517:26;;25589:9;25583:4;25579:20;25575:1;25564:9;25560:17;25553:47;25617:131;25743:4;25617:131;:::i;:::-;25609:139;;25336:419;;;:::o;25761:::-;25927:4;25965:2;25954:9;25950:18;25942:26;;26014:9;26008:4;26004:20;26000:1;25989:9;25985:17;25978:47;26042:131;26168:4;26042:131;:::i;:::-;26034:139;;25761:419;;;:::o;26186:::-;26352:4;26390:2;26379:9;26375:18;26367:26;;26439:9;26433:4;26429:20;26425:1;26414:9;26410:17;26403:47;26467:131;26593:4;26467:131;:::i;:::-;26459:139;;26186:419;;;:::o;26611:::-;26777:4;26815:2;26804:9;26800:18;26792:26;;26864:9;26858:4;26854:20;26850:1;26839:9;26835:17;26828:47;26892:131;27018:4;26892:131;:::i;:::-;26884:139;;26611:419;;;:::o;27036:::-;27202:4;27240:2;27229:9;27225:18;27217:26;;27289:9;27283:4;27279:20;27275:1;27264:9;27260:17;27253:47;27317:131;27443:4;27317:131;:::i;:::-;27309:139;;27036:419;;;:::o;27461:::-;27627:4;27665:2;27654:9;27650:18;27642:26;;27714:9;27708:4;27704:20;27700:1;27689:9;27685:17;27678:47;27742:131;27868:4;27742:131;:::i;:::-;27734:139;;27461:419;;;:::o;27886:::-;28052:4;28090:2;28079:9;28075:18;28067:26;;28139:9;28133:4;28129:20;28125:1;28114:9;28110:17;28103:47;28167:131;28293:4;28167:131;:::i;:::-;28159:139;;27886:419;;;:::o;28311:::-;28477:4;28515:2;28504:9;28500:18;28492:26;;28564:9;28558:4;28554:20;28550:1;28539:9;28535:17;28528:47;28592:131;28718:4;28592:131;:::i;:::-;28584:139;;28311:419;;;:::o;28736:::-;28902:4;28940:2;28929:9;28925:18;28917:26;;28989:9;28983:4;28979:20;28975:1;28964:9;28960:17;28953:47;29017:131;29143:4;29017:131;:::i;:::-;29009:139;;28736:419;;;:::o;29161:::-;29327:4;29365:2;29354:9;29350:18;29342:26;;29414:9;29408:4;29404:20;29400:1;29389:9;29385:17;29378:47;29442:131;29568:4;29442:131;:::i;:::-;29434:139;;29161:419;;;:::o;29586:::-;29752:4;29790:2;29779:9;29775:18;29767:26;;29839:9;29833:4;29829:20;29825:1;29814:9;29810:17;29803:47;29867:131;29993:4;29867:131;:::i;:::-;29859:139;;29586:419;;;:::o;30011:::-;30177:4;30215:2;30204:9;30200:18;30192:26;;30264:9;30258:4;30254:20;30250:1;30239:9;30235:17;30228:47;30292:131;30418:4;30292:131;:::i;:::-;30284:139;;30011:419;;;:::o;30436:::-;30602:4;30640:2;30629:9;30625:18;30617:26;;30689:9;30683:4;30679:20;30675:1;30664:9;30660:17;30653:47;30717:131;30843:4;30717:131;:::i;:::-;30709:139;;30436:419;;;:::o;30861:::-;31027:4;31065:2;31054:9;31050:18;31042:26;;31114:9;31108:4;31104:20;31100:1;31089:9;31085:17;31078:47;31142:131;31268:4;31142:131;:::i;:::-;31134:139;;30861:419;;;:::o;31286:::-;31452:4;31490:2;31479:9;31475:18;31467:26;;31539:9;31533:4;31529:20;31525:1;31514:9;31510:17;31503:47;31567:131;31693:4;31567:131;:::i;:::-;31559:139;;31286:419;;;:::o;31711:::-;31877:4;31915:2;31904:9;31900:18;31892:26;;31964:9;31958:4;31954:20;31950:1;31939:9;31935:17;31928:47;31992:131;32118:4;31992:131;:::i;:::-;31984:139;;31711:419;;;:::o;32136:222::-;32229:4;32267:2;32256:9;32252:18;32244:26;;32280:71;32348:1;32337:9;32333:17;32324:6;32280:71;:::i;:::-;32136:222;;;;:::o;32364:129::-;32398:6;32425:20;;:::i;:::-;32415:30;;32454:33;32482:4;32474:6;32454:33;:::i;:::-;32364:129;;;:::o;32499:75::-;32532:6;32565:2;32559:9;32549:19;;32499:75;:::o;32580:311::-;32657:4;32747:18;32739:6;32736:30;32733:56;;;32769:18;;:::i;:::-;32733:56;32819:4;32811:6;32807:17;32799:25;;32879:4;32873;32869:15;32861:23;;32580:311;;;:::o;32897:307::-;32958:4;33048:18;33040:6;33037:30;33034:56;;;33070:18;;:::i;:::-;33034:56;33108:29;33130:6;33108:29;:::i;:::-;33100:37;;33192:4;33186;33182:15;33174:23;;32897:307;;;:::o;33210:308::-;33272:4;33362:18;33354:6;33351:30;33348:56;;;33384:18;;:::i;:::-;33348:56;33422:29;33444:6;33422:29;:::i;:::-;33414:37;;33506:4;33500;33496:15;33488:23;;33210:308;;;:::o;33524:98::-;33575:6;33609:5;33603:12;33593:22;;33524:98;;;:::o;33628:99::-;33680:6;33714:5;33708:12;33698:22;;33628:99;;;:::o;33733:168::-;33816:11;33850:6;33845:3;33838:19;33890:4;33885:3;33881:14;33866:29;;33733:168;;;;:::o;33907:169::-;33991:11;34025:6;34020:3;34013:19;34065:4;34060:3;34056:14;34041:29;;33907:169;;;;:::o;34082:148::-;34184:11;34221:3;34206:18;;34082:148;;;;:::o;34236:305::-;34276:3;34295:20;34313:1;34295:20;:::i;:::-;34290:25;;34329:20;34347:1;34329:20;:::i;:::-;34324:25;;34483:1;34415:66;34411:74;34408:1;34405:81;34402:107;;;34489:18;;:::i;:::-;34402:107;34533:1;34530;34526:9;34519:16;;34236:305;;;;:::o;34547:185::-;34587:1;34604:20;34622:1;34604:20;:::i;:::-;34599:25;;34638:20;34656:1;34638:20;:::i;:::-;34633:25;;34677:1;34667:35;;34682:18;;:::i;:::-;34667:35;34724:1;34721;34717:9;34712:14;;34547:185;;;;:::o;34738:191::-;34778:4;34798:20;34816:1;34798:20;:::i;:::-;34793:25;;34832:20;34850:1;34832:20;:::i;:::-;34827:25;;34871:1;34868;34865:8;34862:34;;;34876:18;;:::i;:::-;34862:34;34921:1;34918;34914:9;34906:17;;34738:191;;;;:::o;34935:96::-;34972:7;35001:24;35019:5;35001:24;:::i;:::-;34990:35;;34935:96;;;:::o;35037:90::-;35071:7;35114:5;35107:13;35100:21;35089:32;;35037:90;;;:::o;35133:149::-;35169:7;35209:66;35202:5;35198:78;35187:89;;35133:149;;;:::o;35288:126::-;35325:7;35365:42;35358:5;35354:54;35343:65;;35288:126;;;:::o;35420:77::-;35457:7;35486:5;35475:16;;35420:77;;;:::o;35503:154::-;35587:6;35582:3;35577;35564:30;35649:1;35640:6;35635:3;35631:16;35624:27;35503:154;;;:::o;35663:307::-;35731:1;35741:113;35755:6;35752:1;35749:13;35741:113;;;35840:1;35835:3;35831:11;35825:18;35821:1;35816:3;35812:11;35805:39;35777:2;35774:1;35770:10;35765:15;;35741:113;;;35872:6;35869:1;35866:13;35863:101;;;35952:1;35943:6;35938:3;35934:16;35927:27;35863:101;35712:258;35663:307;;;:::o;35976:320::-;36020:6;36057:1;36051:4;36047:12;36037:22;;36104:1;36098:4;36094:12;36125:18;36115:81;;36181:4;36173:6;36169:17;36159:27;;36115:81;36243:2;36235:6;36232:14;36212:18;36209:38;36206:84;;;36262:18;;:::i;:::-;36206:84;36027:269;35976:320;;;:::o;36302:281::-;36385:27;36407:4;36385:27;:::i;:::-;36377:6;36373:40;36515:6;36503:10;36500:22;36479:18;36467:10;36464:34;36461:62;36458:88;;;36526:18;;:::i;:::-;36458:88;36566:10;36562:2;36555:22;36345:238;36302:281;;:::o;36589:233::-;36628:3;36651:24;36669:5;36651:24;:::i;:::-;36642:33;;36697:66;36690:5;36687:77;36684:103;;;36767:18;;:::i;:::-;36684:103;36814:1;36807:5;36803:13;36796:20;;36589:233;;;:::o;36828:176::-;36860:1;36877:20;36895:1;36877:20;:::i;:::-;36872:25;;36911:20;36929:1;36911:20;:::i;:::-;36906:25;;36950:1;36940:35;;36955:18;;:::i;:::-;36940:35;36996:1;36993;36989:9;36984:14;;36828:176;;;;:::o;37010:180::-;37058:77;37055:1;37048:88;37155:4;37152:1;37145:15;37179:4;37176:1;37169:15;37196:180;37244:77;37241:1;37234:88;37341:4;37338:1;37331:15;37365:4;37362:1;37355:15;37382:180;37430:77;37427:1;37420:88;37527:4;37524:1;37517:15;37551:4;37548:1;37541:15;37568:180;37616:77;37613:1;37606:88;37713:4;37710:1;37703:15;37737:4;37734:1;37727:15;37754:180;37802:77;37799:1;37792:88;37899:4;37896:1;37889:15;37923:4;37920:1;37913:15;37940:117;38049:1;38046;38039:12;38063:117;38172:1;38169;38162:12;38186:117;38295:1;38292;38285:12;38309:117;38418:1;38415;38408:12;38432:117;38541:1;38538;38531:12;38555:102;38596:6;38647:2;38643:7;38638:2;38631:5;38627:14;38623:28;38613:38;;38555:102;;;:::o;38663:237::-;38803:34;38799:1;38791:6;38787:14;38780:58;38872:20;38867:2;38859:6;38855:15;38848:45;38663:237;:::o;38906:225::-;39046:34;39042:1;39034:6;39030:14;39023:58;39115:8;39110:2;39102:6;39098:15;39091:33;38906:225;:::o;39137:178::-;39277:30;39273:1;39265:6;39261:14;39254:54;39137:178;:::o;39321:223::-;39461:34;39457:1;39449:6;39445:14;39438:58;39530:6;39525:2;39517:6;39513:15;39506:31;39321:223;:::o;39550:175::-;39690:27;39686:1;39678:6;39674:14;39667:51;39550:175;:::o;39731:231::-;39871:34;39867:1;39859:6;39855:14;39848:58;39940:14;39935:2;39927:6;39923:15;39916:39;39731:231;:::o;39968:243::-;40108:34;40104:1;40096:6;40092:14;40085:58;40177:26;40172:2;40164:6;40160:15;40153:51;39968:243;:::o;40217:229::-;40357:34;40353:1;40345:6;40341:14;40334:58;40426:12;40421:2;40413:6;40409:15;40402:37;40217:229;:::o;40452:228::-;40592:34;40588:1;40580:6;40576:14;40569:58;40661:11;40656:2;40648:6;40644:15;40637:36;40452:228;:::o;40686:172::-;40826:24;40822:1;40814:6;40810:14;40803:48;40686:172;:::o;40864:171::-;41004:23;41000:1;40992:6;40988:14;40981:47;40864:171;:::o;41041:222::-;41181:34;41177:1;41169:6;41165:14;41158:58;41250:5;41245:2;41237:6;41233:15;41226:30;41041:222;:::o;41269:182::-;41409:34;41405:1;41397:6;41393:14;41386:58;41269:182;:::o;41457:231::-;41597:34;41593:1;41585:6;41581:14;41574:58;41666:14;41661:2;41653:6;41649:15;41642:39;41457:231;:::o;41694:182::-;41834:34;41830:1;41822:6;41818:14;41811:58;41694:182;:::o;41882:228::-;42022:34;42018:1;42010:6;42006:14;41999:58;42091:11;42086:2;42078:6;42074:15;42067:36;41882:228;:::o;42116:234::-;42256:34;42252:1;42244:6;42240:14;42233:58;42325:17;42320:2;42312:6;42308:15;42301:42;42116:234;:::o;42356:220::-;42496:34;42492:1;42484:6;42480:14;42473:58;42565:3;42560:2;42552:6;42548:15;42541:28;42356:220;:::o;42582:236::-;42722:34;42718:1;42710:6;42706:14;42699:58;42791:19;42786:2;42778:6;42774:15;42767:44;42582:236;:::o;42824:173::-;42964:25;42960:1;42952:6;42948:14;42941:49;42824:173;:::o;43003:::-;43143:25;43139:1;43131:6;43127:14;43120:49;43003:173;:::o;43182:172::-;43322:24;43318:1;43310:6;43306:14;43299:48;43182:172;:::o;43360:::-;43500:24;43496:1;43488:6;43484:14;43477:48;43360:172;:::o;43538:165::-;43678:17;43674:1;43666:6;43662:14;43655:41;43538:165;:::o;43709:122::-;43782:24;43800:5;43782:24;:::i;:::-;43775:5;43772:35;43762:63;;43821:1;43818;43811:12;43762:63;43709:122;:::o;43837:116::-;43907:21;43922:5;43907:21;:::i;:::-;43900:5;43897:32;43887:60;;43943:1;43940;43933:12;43887:60;43837:116;:::o;43959:120::-;44031:23;44048:5;44031:23;:::i;:::-;44024:5;44021:34;44011:62;;44069:1;44066;44059:12;44011:62;43959:120;:::o;44085:122::-;44158:24;44176:5;44158:24;:::i;:::-;44151:5;44148:35;44138:63;;44197:1;44194;44187:12;44138:63;44085:122;:::o

Swarm Source

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