ETH Price: $3,398.24 (+6.28%)
Gas: 23 Gwei

Token

Deadhead Apes (DHA)
 

Overview

Max Total Supply

8,000 DHA

Holders

300

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mafeoza.eth
Balance
1 DHA
0x55EE617c98986440C8dc43094EA0A0e745226f89
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

5,000 Zombified Apes. Not affiliated with BAYC or MAYC.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeadHeadApes

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**
 * @title Deadhead Apes
 * @author Shahid Ahmed
 * @dev Used for Ethereum projects compatible with OpenSea
 */
pragma solidity >=0.8.4;

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


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 {}
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]


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


// File @openzeppelin/contracts/utils/math/[email protected]


pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract DeadHeadApes is ERC721, Ownable { 

    bool    public  sale        = true;
    bool    public  salefree    = false;
    bool    public  presale     = false;
    string  private _baseURIextended;
    uint16  public  nonce       = 0;
    uint    public  price;
    uint16  public  earlySupply;
    uint16  public  totalSupply;
    uint8   public  maxTx;
    uint8   public  maxTxFree;
    uint256 public  maxFree;

    mapping (address => uint8) private presaleWallets;

    constructor(
        string memory _name,
        string memory _ticker,
        uint _price, 
        uint16 _totalSupply,
        uint8 _maxTx,
        uint8 _maxTxFree,
        uint256 _maxFree,
        string memory baseURI_
    ) ERC721(_name, _ticker) {
        price       = _price;
        earlySupply = _totalSupply;
        totalSupply = _totalSupply;
        maxTx       = _maxTx;
        maxTxFree   = _maxTxFree;
        maxFree     = _maxFree;
        _baseURIextended = baseURI_;
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        _baseURIextended = baseURI_;
    }

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

    function setPrice(uint _newPrice) external onlyOwner {
        price = _newPrice;
    }

    function setEarlySupply(uint16 _newSupply) external onlyOwner {
        earlySupply = _newSupply;
    }

    function setTotalSupply(uint16 _newSupply) external onlyOwner {
        totalSupply = _newSupply;
        earlySupply = _newSupply;
    }

    function setPresale(bool _value) public onlyOwner {
        presale = _value;
    }

    function setSale(bool _value) public onlyOwner {
        sale = _value;
    }

    function setSaleFree() public onlyOwner {
        salefree = !salefree;
    }

    function setPresaleWalletsAmounts(address[] memory _a, uint8[] memory _amount) public onlyOwner {
        for (uint8 i; i < _a.length; i++) {
            presaleWallets[_a[i]] = _amount[i];
        }
    }

    function setMaxTx(uint8 _newMax) external onlyOwner {
        maxTx = _newMax;
    }

    function setMaxTxFree(uint8 _newMax) external onlyOwner {
        maxTxFree = _newMax;
    }

    function setMaxFree(uint256 _newMax) external onlyOwner {
        maxFree = _newMax;
    }

    function getPresaleWalletAmount(address _wallet) public view returns(uint8) {
        return presaleWallets[_wallet];
    }

    function buyPresale(uint8 _qty) external payable {
        uint8 _qtyAllowed = presaleWallets[msg.sender];
        require(presale, 'Presale is not active');
        require(_qty <= _qtyAllowed, 'You can not buy more than allowed');
        require(_qtyAllowed > 0, 'You can not mint on presale');
        require(uint16(_qty) + nonce - 1 <= earlySupply, 'No more supply');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');
        require(msg.value >= price * _qty, 'Invalid price');
        presaleWallets[msg.sender] = _qtyAllowed - _qty;

        mintNFTs(msg.sender, _qty);
    }

    function buy(uint8 _qty) external payable {
        require(sale, 'Sale is not active');
        require(uint16(_qty) + nonce - 1 <= earlySupply, 'No more supply');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');
        if (nonce < maxFree) {
            require(_qty <= maxTxFree || _qty < 1, 'You can not buy more than allowed');
        }else{
            require(_qty <= maxTx || _qty < 1, 'You can not buy more than allowed');
            require(msg.value >= price * _qty, 'Invalid price');
        }

        mintNFTs(msg.sender, _qty);
    }

    function buyfree(uint8 _qty) external payable {
        require(salefree, 'Free Sale is not active');
        require(_qty <= maxTxFree || _qty < 1, 'You can not buy more than allowed');
        require(uint16(_qty) + nonce - 1 <= earlySupply, 'No more supply');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');

        mintNFTs(msg.sender, _qty);
    }

    function giveaway(address _to, uint8 _qty) external onlyOwner {
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');

        mintNFTs(_to, _qty);
    }

    function mintNFTs(address _to, uint8 _qty) private {
        for (uint8 i = 0; i < _qty; i++) {
            uint16 _tokenId = nonce;
            _safeMint(_to, _tokenId);
            nonce++;
        }
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint16","name":"_totalSupply","type":"uint16"},{"internalType":"uint8","name":"_maxTx","type":"uint8"},{"internalType":"uint8","name":"_maxTxFree","type":"uint8"},{"internalType":"uint256","name":"_maxFree","type":"uint256"},{"internalType":"string","name":"baseURI_","type":"string"}],"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":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buyPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buyfree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"earlySupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"_wallet","type":"address"}],"name":"getPresaleWalletAmount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxFree","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salefree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setEarlySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint8[]","name":"_amount","type":"uint8[]"}],"name":"setPresaleWalletsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setTotalSupply","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":"uint16","name":"","type":"uint16"}],"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"}]

60806040526001600660146101000a81548160ff0219169083151502179055506000600660156101000a81548160ff0219169083151502179055506000600660166101000a81548160ff0219169083151502179055506000600860006101000a81548161ffff021916908361ffff1602179055503480156200008057600080fd5b50604051620053fa380380620053fa8339818101604052810190620000a69190620003d6565b87878160009080519060200190620000c09291906200026f565b508060019080519060200190620000d99291906200026f565b505050620000fc620000f0620001a160201b60201c565b620001a960201b60201c565b8560098190555084600a60006101000a81548161ffff021916908361ffff16021790555084600a60026101000a81548161ffff021916908361ffff16021790555083600a60046101000a81548160ff021916908360ff16021790555082600a60056101000a81548160ff021916908360ff16021790555081600b819055508060079080519060200190620001929291906200026f565b505050505050505050620006c7565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027d906200059e565b90600052602060002090601f016020900481019282620002a15760008555620002ed565b82601f10620002bc57805160ff1916838001178555620002ed565b82800160010185558215620002ed579182015b82811115620002ec578251825591602001919060010190620002cf565b5b509050620002fc919062000300565b5090565b5b808211156200031b57600081600090555060010162000301565b5090565b60006200033662000330846200050d565b620004e4565b9050828152602081018484840111156200034f57600080fd5b6200035c84828562000568565b509392505050565b600082601f8301126200037657600080fd5b8151620003888482602086016200031f565b91505092915050565b600081519050620003a28162000679565b92915050565b600081519050620003b98162000693565b92915050565b600081519050620003d081620006ad565b92915050565b600080600080600080600080610100898b031215620003f457600080fd5b600089015167ffffffffffffffff8111156200040f57600080fd5b6200041d8b828c0162000364565b985050602089015167ffffffffffffffff8111156200043b57600080fd5b620004498b828c0162000364565b97505060406200045c8b828c01620003a8565b96505060606200046f8b828c0162000391565b9550506080620004828b828c01620003bf565b94505060a0620004958b828c01620003bf565b93505060c0620004a88b828c01620003a8565b92505060e089015167ffffffffffffffff811115620004c657600080fd5b620004d48b828c0162000364565b9150509295985092959890939650565b6000620004f062000503565b9050620004fe8282620005d4565b919050565b6000604051905090565b600067ffffffffffffffff8211156200052b576200052a62000639565b5b620005368262000668565b9050602081019050919050565b600061ffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620005885780820151818401526020810190506200056b565b8381111562000598576000848401525b50505050565b60006002820490506001821680620005b757607f821691505b60208210811415620005ce57620005cd6200060a565b5b50919050565b620005df8262000668565b810181811067ffffffffffffffff8211171562000601576200060062000639565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620006848162000543565b81146200069057600080fd5b50565b6200069e8162000551565b8114620006aa57600080fd5b50565b620006b8816200055b565b8114620006c457600080fd5b50565b614d2380620006d76000396000f3fe60806040526004361061025c5760003560e01c80637437681e11610144578063a63b94f5116100b6578063c54e73e31161007a578063c54e73e31461086d578063c87b56dd14610896578063d755bf99146108d3578063e985e9c5146108fc578063f2fde38b14610939578063fdea8e0b146109625761025c565b8063a63b94f5146107ab578063aa6781f9146107c7578063affed0e0146107f0578063b88d4fde1461081b578063c1408d79146108445761025c565b806391b7f5ed1161010857806391b7f5ed1461069d57806395d89b41146106c65780639dcd8cde146106f1578063a035b1fe1461072e578063a22cb46514610759578063a24ffbd4146107825761025c565b80637437681e146105da57806379fddd96146106055780638bd5486c1461061c5780638cb2923c146106475780638da5cb5b146106725761025c565b8063485a68a3116101dd57806365f48e62116101a157806365f48e62146104ed57806369d957f4146105165780636ad1fe021461053257806370a082311461055d578063715018a61461059a57806373bfad87146105b15761025c565b8063485a68a314610408578063503ec9331461043357806355f804b31461045e578063562e438b146104875780636352211e146104b05761025c565b806318160ddd1161022457806318160ddd1461034b5780631d2e5a3a1461037657806323b872dd1461039f5780633ccfd60b146103c857806342842e0e146103df5761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806314107f3c1461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613805565b61098d565b6040516102959190613db1565b60405180910390f35b3480156102aa57600080fd5b506102b3610a6f565b6040516102c09190613dcc565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906138c1565b610b01565b6040516102fd9190613d4a565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906136f8565b610b86565b005b610349600480360381019061034491906138ea565b610c9e565b005b34801561035757600080fd5b50610360610f47565b60405161036d91906140ce565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906137dc565b610f5b565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906135f2565b610ff4565b005b3480156103d457600080fd5b506103dd611054565b005b3480156103eb57600080fd5b50610406600480360381019061040191906135f2565b611119565b005b34801561041457600080fd5b5061041d611139565b60405161042a91906140e9565b60405180910390f35b34801561043f57600080fd5b5061044861113f565b6040516104559190614104565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613857565b611152565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613898565b6111e8565b005b3480156104bc57600080fd5b506104d760048036038101906104d291906138c1565b6112a1565b6040516104e49190613d4a565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906138ea565b611353565b005b610530600480360381019061052b91906138ea565b6113ed565b005b34801561053e57600080fd5b506105476115b9565b6040516105549190613db1565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f919061358d565b6115cc565b60405161059191906140e9565b60405180910390f35b3480156105a657600080fd5b506105af611684565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613770565b61170c565b005b3480156105e657600080fd5b506105ef61188d565b6040516105fc9190614104565b60405180910390f35b34801561061157600080fd5b5061061a6118a0565b005b34801561062857600080fd5b50610631611948565b60405161063e9190613db1565b60405180910390f35b34801561065357600080fd5b5061065c61195b565b60405161066991906140ce565b60405180910390f35b34801561067e57600080fd5b5061068761196f565b6040516106949190613d4a565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906138c1565b611999565b005b3480156106d257600080fd5b506106db611a1f565b6040516106e89190613dcc565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061358d565b611ab1565b6040516107259190614104565b60405180910390f35b34801561073a57600080fd5b50610743611b07565b60405161075091906140e9565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906136bc565b611b0d565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613734565b611c8e565b005b6107c560048036038101906107c091906138ea565b611d9d565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906138ea565b61209a565b005b3480156107fc57600080fd5b50610805612134565b60405161081291906140ce565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613641565b612148565b005b34801561085057600080fd5b5061086b60048036038101906108669190613898565b6121aa565b005b34801561087957600080fd5b50610894600480360381019061088f91906137dc565b612246565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906138c1565b6122df565b6040516108ca9190613dcc565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f591906138c1565b612386565b005b34801561090857600080fd5b50610923600480360381019061091e91906135b6565b61240c565b6040516109309190613db1565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b919061358d565b6124a0565b005b34801561096e57600080fd5b50610977612598565b6040516109849190613db1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a685750610a67826125ab565b5b9050919050565b606060008054610a7e906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa906144c7565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b5050505050905090565b6000610b0c82612615565b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613f8e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b91826112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf99061400e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c21612681565b73ffffffffffffffffffffffffffffffffffffffff161480610c505750610c4f81610c4a612681565b61240c565b5b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690613eee565b60405180910390fd5b610c998383612689565b505050565b600660149054906101000a900460ff16610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613eae565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16610d239190614241565b610d2d919061435a565b61ffff161115610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d699061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16610da89190614241565b610db2919061435a565b61ffff161115610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061406e565b60405180910390fd5b600b54600860009054906101000a900461ffff1661ffff161015610e8057600a60059054906101000a900460ff1660ff168160ff16111580610e3c575060018160ff16105b610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613f0e565b60405180910390fd5b610f3a565b600a60049054906101000a900460ff1660ff168160ff16111580610ea7575060018160ff16105b610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90613f0e565b60405180910390fd5b8060ff16600954610ef79190614300565b341015610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061408e565b60405180910390fd5b5b610f443382612742565b50565b600a60029054906101000a900461ffff1681565b610f63612681565b73ffffffffffffffffffffffffffffffffffffffff16610f8161196f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613fae565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b611005610fff612681565b826127ca565b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b9061402e565b60405180910390fd5b61104f8383836128a8565b505050565b61105c612681565b73ffffffffffffffffffffffffffffffffffffffff1661107a61196f565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613fae565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611116573d6000803e3d6000fd5b50565b61113483838360405180602001604052806000815250612148565b505050565b600b5481565b600a60059054906101000a900460ff1681565b61115a612681565b73ffffffffffffffffffffffffffffffffffffffff1661117861196f565b73ffffffffffffffffffffffffffffffffffffffff16146111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613fae565b60405180910390fd5b80600790805190602001906111e492919061325b565b5050565b6111f0612681565b73ffffffffffffffffffffffffffffffffffffffff1661120e61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613fae565b60405180910390fd5b80600a60026101000a81548161ffff021916908361ffff16021790555080600a60006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613f4e565b60405180910390fd5b80915050919050565b61135b612681565b73ffffffffffffffffffffffffffffffffffffffff1661137961196f565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613fae565b60405180910390fd5b80600a60046101000a81548160ff021916908360ff16021790555050565b600660159054906101000a900460ff1661143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390613e4e565b60405180910390fd5b600a60059054906101000a900460ff1660ff168160ff16111580611463575060018160ff16105b6114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613f0e565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff166114d89190614241565b6114e2919061435a565b61ffff161115611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e9061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff1661155d9190614241565b611567919061435a565b61ffff1611156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061406e565b60405180910390fd5b6115b63382612742565b50565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613f2e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168c612681565b73ffffffffffffffffffffffffffffffffffffffff166116aa61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613fae565b60405180910390fd5b61170a6000612b04565b565b611714612681565b73ffffffffffffffffffffffffffffffffffffffff1661173261196f565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90613fae565b60405180910390fd5b60005b82518160ff16101561188857818160ff16815181106117d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600c6000858460ff168151811061181b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806118809061459e565b91505061178b565b505050565b600a60049054906101000a900460ff1681565b6118a8612681565b73ffffffffffffffffffffffffffffffffffffffff166118c661196f565b73ffffffffffffffffffffffffffffffffffffffff161461191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613fae565b60405180910390fd5b600660159054906101000a900460ff1615600660156101000a81548160ff021916908315150217905550565b600660159054906101000a900460ff1681565b600a60009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a1612681565b73ffffffffffffffffffffffffffffffffffffffff166119bf61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90613fae565b60405180910390fd5b8060098190555050565b606060018054611a2e906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5a906144c7565b8015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b5050505050905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b611b15612681565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613e8e565b60405180910390fd5b8060056000611b90612681565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c3d612681565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c829190613db1565b60405180910390a35050565b611c96612681565b73ffffffffffffffffffffffffffffffffffffffff16611cb461196f565b73ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613fae565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16611d409190614241565b611d4a919061435a565b61ffff161115611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d869061406e565b60405180910390fd5b611d998282612742565b5050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660169054906101000a900460ff16611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061404e565b60405180910390fd5b8060ff168260ff161115611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613f0e565b60405180910390fd5b60008160ff1611611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906140ae565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16611f029190614241565b611f0c919061435a565b61ffff161115611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16611f879190614241565b611f91919061435a565b61ffff161115611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd9061406e565b60405180910390fd5b8160ff16600954611fe79190614300565b341015612029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120209061408e565b60405180910390fd5b818161203591906143c2565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506120963383612742565b5050565b6120a2612681565b73ffffffffffffffffffffffffffffffffffffffff166120c061196f565b73ffffffffffffffffffffffffffffffffffffffff1614612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90613fae565b60405180910390fd5b80600a60056101000a81548160ff021916908360ff16021790555050565b600860009054906101000a900461ffff1681565b612159612153612681565b836127ca565b612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f9061402e565b60405180910390fd5b6121a484848484612bca565b50505050565b6121b2612681565b73ffffffffffffffffffffffffffffffffffffffff166121d061196f565b73ffffffffffffffffffffffffffffffffffffffff1614612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90613fae565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b61224e612681565b73ffffffffffffffffffffffffffffffffffffffff1661226c61196f565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990613fae565b60405180910390fd5b80600660166101000a81548160ff02191690831515021790555050565b60606122ea82612615565b612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090613fee565b60405180910390fd5b6000612333612c26565b90506000815111612353576040518060200160405280600081525061237e565b8061235d84612cb8565b60405160200161236e929190613d26565b6040516020818303038152906040525b915050919050565b61238e612681565b73ffffffffffffffffffffffffffffffffffffffff166123ac61196f565b73ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613fae565b60405180910390fd5b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a8612681565b73ffffffffffffffffffffffffffffffffffffffff166124c661196f565b73ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390613fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390613e0e565b60405180910390fd5b61259581612b04565b50565b600660169054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126fc836112a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff1610156127c5576000600860009054906101000a900461ffff169050612776848261ffff16612e65565b6008600081819054906101000a900461ffff16809291906127969061452a565b91906101000a81548161ffff021916908361ffff160217905550505080806127bd9061459e565b915050612745565b505050565b60006127d582612615565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613ece565b60405180910390fd5b600061281f836112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061288e57508373ffffffffffffffffffffffffffffffffffffffff1661287684610b01565b73ffffffffffffffffffffffffffffffffffffffff16145b8061289f575061289e818561240c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128c8826112a1565b73ffffffffffffffffffffffffffffffffffffffff161461291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590613fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298590613e6e565b60405180910390fd5b612999838383612e83565b6129a4600082612689565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f4919061438e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a4b9190614279565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bd58484846128a8565b612be184848484612e88565b612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1790613dee565b60405180910390fd5b50505050565b606060078054612c35906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c61906144c7565b8015612cae5780601f10612c8357610100808354040283529160200191612cae565b820191906000526020600020905b815481529060010190602001808311612c9157829003601f168201915b5050505050905090565b60606000821415612d00576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e60565b600082905060005b60008214612d32578080612d1b90614555565b915050600a82612d2b91906142cf565b9150612d08565b60008167ffffffffffffffff811115612d74577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612da65781602001600182028036833780820191505090505b5090505b60008514612e5957600182612dbf919061438e565b9150600a85612dce91906145c8565b6030612dda9190614279565b60f81b818381518110612e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5291906142cf565b9450612daa565b8093505050505b919050565b612e7f82826040518060200160405280600081525061301f565b5050565b505050565b6000612ea98473ffffffffffffffffffffffffffffffffffffffff1661307a565b15613012578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed2612681565b8786866040518563ffffffff1660e01b8152600401612ef49493929190613d65565b602060405180830381600087803b158015612f0e57600080fd5b505af1925050508015612f3f57506040513d601f19601f82011682018060405250810190612f3c919061382e565b60015b612fc2573d8060008114612f6f576040519150601f19603f3d011682016040523d82523d6000602084013e612f74565b606091505b50600081511415612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190613dee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613017565b600190505b949350505050565b613029838361308d565b6130366000848484612e88565b613075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306c90613dee565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f490613f6e565b60405180910390fd5b61310681612615565b15613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90613e2e565b60405180910390fd5b61315260008383612e83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a29190614279565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613267906144c7565b90600052602060002090601f01602090048101928261328957600085556132d0565b82601f106132a257805160ff19168380011785556132d0565b828001600101855582156132d0579182015b828111156132cf5782518255916020019190600101906132b4565b5b5090506132dd91906132e1565b5090565b5b808211156132fa5760008160009055506001016132e2565b5090565b600061331161330c84614144565b61411f565b9050808382526020820190508285602086028201111561333057600080fd5b60005b8581101561336057816133468882613452565b845260208401935060208301925050600181019050613333565b5050509392505050565b600061337d61337884614170565b61411f565b9050808382526020820190508285602086028201111561339c57600080fd5b60005b858110156133cc57816133b28882613578565b84526020840193506020830192505060018101905061339f565b5050509392505050565b60006133e96133e48461419c565b61411f565b90508281526020810184848401111561340157600080fd5b61340c848285614485565b509392505050565b6000613427613422846141cd565b61411f565b90508281526020810184848401111561343f57600080fd5b61344a848285614485565b509392505050565b60008135905061346181614c63565b92915050565b600082601f83011261347857600080fd5b81356134888482602086016132fe565b91505092915050565b600082601f8301126134a257600080fd5b81356134b284826020860161336a565b91505092915050565b6000813590506134ca81614c7a565b92915050565b6000813590506134df81614c91565b92915050565b6000815190506134f481614c91565b92915050565b600082601f83011261350b57600080fd5b813561351b8482602086016133d6565b91505092915050565b600082601f83011261353557600080fd5b8135613545848260208601613414565b91505092915050565b60008135905061355d81614ca8565b92915050565b60008135905061357281614cbf565b92915050565b60008135905061358781614cd6565b92915050565b60006020828403121561359f57600080fd5b60006135ad84828501613452565b91505092915050565b600080604083850312156135c957600080fd5b60006135d785828601613452565b92505060206135e885828601613452565b9150509250929050565b60008060006060848603121561360757600080fd5b600061361586828701613452565b935050602061362686828701613452565b925050604061363786828701613563565b9150509250925092565b6000806000806080858703121561365757600080fd5b600061366587828801613452565b945050602061367687828801613452565b935050604061368787828801613563565b925050606085013567ffffffffffffffff8111156136a457600080fd5b6136b0878288016134fa565b91505092959194509250565b600080604083850312156136cf57600080fd5b60006136dd85828601613452565b92505060206136ee858286016134bb565b9150509250929050565b6000806040838503121561370b57600080fd5b600061371985828601613452565b925050602061372a85828601613563565b9150509250929050565b6000806040838503121561374757600080fd5b600061375585828601613452565b925050602061376685828601613578565b9150509250929050565b6000806040838503121561378357600080fd5b600083013567ffffffffffffffff81111561379d57600080fd5b6137a985828601613467565b925050602083013567ffffffffffffffff8111156137c657600080fd5b6137d285828601613491565b9150509250929050565b6000602082840312156137ee57600080fd5b60006137fc848285016134bb565b91505092915050565b60006020828403121561381757600080fd5b6000613825848285016134d0565b91505092915050565b60006020828403121561384057600080fd5b600061384e848285016134e5565b91505092915050565b60006020828403121561386957600080fd5b600082013567ffffffffffffffff81111561388357600080fd5b61388f84828501613524565b91505092915050565b6000602082840312156138aa57600080fd5b60006138b88482850161354e565b91505092915050565b6000602082840312156138d357600080fd5b60006138e184828501613563565b91505092915050565b6000602082840312156138fc57600080fd5b600061390a84828501613578565b91505092915050565b61391c816143f6565b82525050565b61392b81614408565b82525050565b600061393c826141fe565b6139468185614214565b9350613956818560208601614494565b61395f816146b5565b840191505092915050565b600061397582614209565b61397f8185614225565b935061398f818560208601614494565b613998816146b5565b840191505092915050565b60006139ae82614209565b6139b88185614236565b93506139c8818560208601614494565b80840191505092915050565b60006139e1603283614225565b91506139ec826146c6565b604082019050919050565b6000613a04602683614225565b9150613a0f82614715565b604082019050919050565b6000613a27601c83614225565b9150613a3282614764565b602082019050919050565b6000613a4a601783614225565b9150613a558261478d565b602082019050919050565b6000613a6d602483614225565b9150613a78826147b6565b604082019050919050565b6000613a90601983614225565b9150613a9b82614805565b602082019050919050565b6000613ab3601283614225565b9150613abe8261482e565b602082019050919050565b6000613ad6602c83614225565b9150613ae182614857565b604082019050919050565b6000613af9603883614225565b9150613b04826148a6565b604082019050919050565b6000613b1c602183614225565b9150613b27826148f5565b604082019050919050565b6000613b3f602a83614225565b9150613b4a82614944565b604082019050919050565b6000613b62602983614225565b9150613b6d82614993565b604082019050919050565b6000613b85602083614225565b9150613b90826149e2565b602082019050919050565b6000613ba8602c83614225565b9150613bb382614a0b565b604082019050919050565b6000613bcb602083614225565b9150613bd682614a5a565b602082019050919050565b6000613bee602983614225565b9150613bf982614a83565b604082019050919050565b6000613c11602f83614225565b9150613c1c82614ad2565b604082019050919050565b6000613c34602183614225565b9150613c3f82614b21565b604082019050919050565b6000613c57603183614225565b9150613c6282614b70565b604082019050919050565b6000613c7a601583614225565b9150613c8582614bbf565b602082019050919050565b6000613c9d600e83614225565b9150613ca882614be8565b602082019050919050565b6000613cc0600d83614225565b9150613ccb82614c11565b602082019050919050565b6000613ce3601b83614225565b9150613cee82614c3a565b602082019050919050565b613d0281614440565b82525050565b613d118161446e565b82525050565b613d2081614478565b82525050565b6000613d3282856139a3565b9150613d3e82846139a3565b91508190509392505050565b6000602082019050613d5f6000830184613913565b92915050565b6000608082019050613d7a6000830187613913565b613d876020830186613913565b613d946040830185613d08565b8181036060830152613da68184613931565b905095945050505050565b6000602082019050613dc66000830184613922565b92915050565b60006020820190508181036000830152613de6818461396a565b905092915050565b60006020820190508181036000830152613e07816139d4565b9050919050565b60006020820190508181036000830152613e27816139f7565b9050919050565b60006020820190508181036000830152613e4781613a1a565b9050919050565b60006020820190508181036000830152613e6781613a3d565b9050919050565b60006020820190508181036000830152613e8781613a60565b9050919050565b60006020820190508181036000830152613ea781613a83565b9050919050565b60006020820190508181036000830152613ec781613aa6565b9050919050565b60006020820190508181036000830152613ee781613ac9565b9050919050565b60006020820190508181036000830152613f0781613aec565b9050919050565b60006020820190508181036000830152613f2781613b0f565b9050919050565b60006020820190508181036000830152613f4781613b32565b9050919050565b60006020820190508181036000830152613f6781613b55565b9050919050565b60006020820190508181036000830152613f8781613b78565b9050919050565b60006020820190508181036000830152613fa781613b9b565b9050919050565b60006020820190508181036000830152613fc781613bbe565b9050919050565b60006020820190508181036000830152613fe781613be1565b9050919050565b6000602082019050818103600083015261400781613c04565b9050919050565b6000602082019050818103600083015261402781613c27565b9050919050565b6000602082019050818103600083015261404781613c4a565b9050919050565b6000602082019050818103600083015261406781613c6d565b9050919050565b6000602082019050818103600083015261408781613c90565b9050919050565b600060208201905081810360008301526140a781613cb3565b9050919050565b600060208201905081810360008301526140c781613cd6565b9050919050565b60006020820190506140e36000830184613cf9565b92915050565b60006020820190506140fe6000830184613d08565b92915050565b60006020820190506141196000830184613d17565b92915050565b600061412961413a565b905061413582826144f9565b919050565b6000604051905090565b600067ffffffffffffffff82111561415f5761415e614686565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561418b5761418a614686565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141b7576141b6614686565b5b6141c0826146b5565b9050602081019050919050565b600067ffffffffffffffff8211156141e8576141e7614686565b5b6141f1826146b5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061424c82614440565b915061425783614440565b92508261ffff0382111561426e5761426d6145f9565b5b828201905092915050565b60006142848261446e565b915061428f8361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142c4576142c36145f9565b5b828201905092915050565b60006142da8261446e565b91506142e58361446e565b9250826142f5576142f4614628565b5b828204905092915050565b600061430b8261446e565b91506143168361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561434f5761434e6145f9565b5b828202905092915050565b600061436582614440565b915061437083614440565b925082821015614383576143826145f9565b5b828203905092915050565b60006143998261446e565b91506143a48361446e565b9250828210156143b7576143b66145f9565b5b828203905092915050565b60006143cd82614478565b91506143d883614478565b9250828210156143eb576143ea6145f9565b5b828203905092915050565b60006144018261444e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144b2578082015181840152602081019050614497565b838111156144c1576000848401525b50505050565b600060028204905060018216806144df57607f821691505b602082108114156144f3576144f2614657565b5b50919050565b614502826146b5565b810181811067ffffffffffffffff8211171561452157614520614686565b5b80604052505050565b600061453582614440565b915061ffff82141561454a576145496145f9565b5b600182019050919050565b60006145608261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614593576145926145f9565b5b600182019050919050565b60006145a982614478565b915060ff8214156145bd576145bc6145f9565b5b600182019050919050565b60006145d38261446e565b91506145de8361446e565b9250826145ee576145ed614628565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f467265652053616c65206973206e6f7420616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f496e76616c696420707269636500000000000000000000000000000000000000600082015250565b7f596f752063616e206e6f74206d696e74206f6e2070726573616c650000000000600082015250565b614c6c816143f6565b8114614c7757600080fd5b50565b614c8381614408565b8114614c8e57600080fd5b50565b614c9a81614414565b8114614ca557600080fd5b50565b614cb181614440565b8114614cbc57600080fd5b50565b614cc88161446e565b8114614cd357600080fd5b50565b614cdf81614478565b8114614cea57600080fd5b5056fea2646970667358221220815d580dbbe5ddf000c6662e96a7b0d9cad30ce69646ec5470d0607b0ae079a064736f6c6343000804003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000d4465616468656164204170657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344484100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80637437681e11610144578063a63b94f5116100b6578063c54e73e31161007a578063c54e73e31461086d578063c87b56dd14610896578063d755bf99146108d3578063e985e9c5146108fc578063f2fde38b14610939578063fdea8e0b146109625761025c565b8063a63b94f5146107ab578063aa6781f9146107c7578063affed0e0146107f0578063b88d4fde1461081b578063c1408d79146108445761025c565b806391b7f5ed1161010857806391b7f5ed1461069d57806395d89b41146106c65780639dcd8cde146106f1578063a035b1fe1461072e578063a22cb46514610759578063a24ffbd4146107825761025c565b80637437681e146105da57806379fddd96146106055780638bd5486c1461061c5780638cb2923c146106475780638da5cb5b146106725761025c565b8063485a68a3116101dd57806365f48e62116101a157806365f48e62146104ed57806369d957f4146105165780636ad1fe021461053257806370a082311461055d578063715018a61461059a57806373bfad87146105b15761025c565b8063485a68a314610408578063503ec9331461043357806355f804b31461045e578063562e438b146104875780636352211e146104b05761025c565b806318160ddd1161022457806318160ddd1461034b5780631d2e5a3a1461037657806323b872dd1461039f5780633ccfd60b146103c857806342842e0e146103df5761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806314107f3c1461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613805565b61098d565b6040516102959190613db1565b60405180910390f35b3480156102aa57600080fd5b506102b3610a6f565b6040516102c09190613dcc565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906138c1565b610b01565b6040516102fd9190613d4a565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906136f8565b610b86565b005b610349600480360381019061034491906138ea565b610c9e565b005b34801561035757600080fd5b50610360610f47565b60405161036d91906140ce565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906137dc565b610f5b565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906135f2565b610ff4565b005b3480156103d457600080fd5b506103dd611054565b005b3480156103eb57600080fd5b50610406600480360381019061040191906135f2565b611119565b005b34801561041457600080fd5b5061041d611139565b60405161042a91906140e9565b60405180910390f35b34801561043f57600080fd5b5061044861113f565b6040516104559190614104565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613857565b611152565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613898565b6111e8565b005b3480156104bc57600080fd5b506104d760048036038101906104d291906138c1565b6112a1565b6040516104e49190613d4a565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906138ea565b611353565b005b610530600480360381019061052b91906138ea565b6113ed565b005b34801561053e57600080fd5b506105476115b9565b6040516105549190613db1565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f919061358d565b6115cc565b60405161059191906140e9565b60405180910390f35b3480156105a657600080fd5b506105af611684565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613770565b61170c565b005b3480156105e657600080fd5b506105ef61188d565b6040516105fc9190614104565b60405180910390f35b34801561061157600080fd5b5061061a6118a0565b005b34801561062857600080fd5b50610631611948565b60405161063e9190613db1565b60405180910390f35b34801561065357600080fd5b5061065c61195b565b60405161066991906140ce565b60405180910390f35b34801561067e57600080fd5b5061068761196f565b6040516106949190613d4a565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906138c1565b611999565b005b3480156106d257600080fd5b506106db611a1f565b6040516106e89190613dcc565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061358d565b611ab1565b6040516107259190614104565b60405180910390f35b34801561073a57600080fd5b50610743611b07565b60405161075091906140e9565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906136bc565b611b0d565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613734565b611c8e565b005b6107c560048036038101906107c091906138ea565b611d9d565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906138ea565b61209a565b005b3480156107fc57600080fd5b50610805612134565b60405161081291906140ce565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613641565b612148565b005b34801561085057600080fd5b5061086b60048036038101906108669190613898565b6121aa565b005b34801561087957600080fd5b50610894600480360381019061088f91906137dc565b612246565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906138c1565b6122df565b6040516108ca9190613dcc565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f591906138c1565b612386565b005b34801561090857600080fd5b50610923600480360381019061091e91906135b6565b61240c565b6040516109309190613db1565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b919061358d565b6124a0565b005b34801561096e57600080fd5b50610977612598565b6040516109849190613db1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a685750610a67826125ab565b5b9050919050565b606060008054610a7e906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa906144c7565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b5050505050905090565b6000610b0c82612615565b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613f8e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b91826112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf99061400e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c21612681565b73ffffffffffffffffffffffffffffffffffffffff161480610c505750610c4f81610c4a612681565b61240c565b5b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690613eee565b60405180910390fd5b610c998383612689565b505050565b600660149054906101000a900460ff16610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613eae565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16610d239190614241565b610d2d919061435a565b61ffff161115610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d699061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16610da89190614241565b610db2919061435a565b61ffff161115610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061406e565b60405180910390fd5b600b54600860009054906101000a900461ffff1661ffff161015610e8057600a60059054906101000a900460ff1660ff168160ff16111580610e3c575060018160ff16105b610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613f0e565b60405180910390fd5b610f3a565b600a60049054906101000a900460ff1660ff168160ff16111580610ea7575060018160ff16105b610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90613f0e565b60405180910390fd5b8060ff16600954610ef79190614300565b341015610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061408e565b60405180910390fd5b5b610f443382612742565b50565b600a60029054906101000a900461ffff1681565b610f63612681565b73ffffffffffffffffffffffffffffffffffffffff16610f8161196f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613fae565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b611005610fff612681565b826127ca565b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b9061402e565b60405180910390fd5b61104f8383836128a8565b505050565b61105c612681565b73ffffffffffffffffffffffffffffffffffffffff1661107a61196f565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613fae565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611116573d6000803e3d6000fd5b50565b61113483838360405180602001604052806000815250612148565b505050565b600b5481565b600a60059054906101000a900460ff1681565b61115a612681565b73ffffffffffffffffffffffffffffffffffffffff1661117861196f565b73ffffffffffffffffffffffffffffffffffffffff16146111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613fae565b60405180910390fd5b80600790805190602001906111e492919061325b565b5050565b6111f0612681565b73ffffffffffffffffffffffffffffffffffffffff1661120e61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613fae565b60405180910390fd5b80600a60026101000a81548161ffff021916908361ffff16021790555080600a60006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613f4e565b60405180910390fd5b80915050919050565b61135b612681565b73ffffffffffffffffffffffffffffffffffffffff1661137961196f565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613fae565b60405180910390fd5b80600a60046101000a81548160ff021916908360ff16021790555050565b600660159054906101000a900460ff1661143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390613e4e565b60405180910390fd5b600a60059054906101000a900460ff1660ff168160ff16111580611463575060018160ff16105b6114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613f0e565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff166114d89190614241565b6114e2919061435a565b61ffff161115611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e9061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff1661155d9190614241565b611567919061435a565b61ffff1611156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061406e565b60405180910390fd5b6115b63382612742565b50565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613f2e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168c612681565b73ffffffffffffffffffffffffffffffffffffffff166116aa61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613fae565b60405180910390fd5b61170a6000612b04565b565b611714612681565b73ffffffffffffffffffffffffffffffffffffffff1661173261196f565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90613fae565b60405180910390fd5b60005b82518160ff16101561188857818160ff16815181106117d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600c6000858460ff168151811061181b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806118809061459e565b91505061178b565b505050565b600a60049054906101000a900460ff1681565b6118a8612681565b73ffffffffffffffffffffffffffffffffffffffff166118c661196f565b73ffffffffffffffffffffffffffffffffffffffff161461191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613fae565b60405180910390fd5b600660159054906101000a900460ff1615600660156101000a81548160ff021916908315150217905550565b600660159054906101000a900460ff1681565b600a60009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a1612681565b73ffffffffffffffffffffffffffffffffffffffff166119bf61196f565b73ffffffffffffffffffffffffffffffffffffffff1614611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90613fae565b60405180910390fd5b8060098190555050565b606060018054611a2e906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5a906144c7565b8015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b5050505050905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b611b15612681565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613e8e565b60405180910390fd5b8060056000611b90612681565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c3d612681565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c829190613db1565b60405180910390a35050565b611c96612681565b73ffffffffffffffffffffffffffffffffffffffff16611cb461196f565b73ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613fae565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff16611d409190614241565b611d4a919061435a565b61ffff161115611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d869061406e565b60405180910390fd5b611d998282612742565b5050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660169054906101000a900460ff16611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061404e565b60405180910390fd5b8060ff168260ff161115611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613f0e565b60405180910390fd5b60008160ff1611611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906140ae565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16611f029190614241565b611f0c919061435a565b61ffff161115611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061406e565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16611f879190614241565b611f91919061435a565b61ffff161115611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd9061406e565b60405180910390fd5b8160ff16600954611fe79190614300565b341015612029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120209061408e565b60405180910390fd5b818161203591906143c2565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506120963383612742565b5050565b6120a2612681565b73ffffffffffffffffffffffffffffffffffffffff166120c061196f565b73ffffffffffffffffffffffffffffffffffffffff1614612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90613fae565b60405180910390fd5b80600a60056101000a81548160ff021916908360ff16021790555050565b600860009054906101000a900461ffff1681565b612159612153612681565b836127ca565b612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f9061402e565b60405180910390fd5b6121a484848484612bca565b50505050565b6121b2612681565b73ffffffffffffffffffffffffffffffffffffffff166121d061196f565b73ffffffffffffffffffffffffffffffffffffffff1614612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90613fae565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b61224e612681565b73ffffffffffffffffffffffffffffffffffffffff1661226c61196f565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990613fae565b60405180910390fd5b80600660166101000a81548160ff02191690831515021790555050565b60606122ea82612615565b612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090613fee565b60405180910390fd5b6000612333612c26565b90506000815111612353576040518060200160405280600081525061237e565b8061235d84612cb8565b60405160200161236e929190613d26565b6040516020818303038152906040525b915050919050565b61238e612681565b73ffffffffffffffffffffffffffffffffffffffff166123ac61196f565b73ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613fae565b60405180910390fd5b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a8612681565b73ffffffffffffffffffffffffffffffffffffffff166124c661196f565b73ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390613fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390613e0e565b60405180910390fd5b61259581612b04565b50565b600660169054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126fc836112a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff1610156127c5576000600860009054906101000a900461ffff169050612776848261ffff16612e65565b6008600081819054906101000a900461ffff16809291906127969061452a565b91906101000a81548161ffff021916908361ffff160217905550505080806127bd9061459e565b915050612745565b505050565b60006127d582612615565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613ece565b60405180910390fd5b600061281f836112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061288e57508373ffffffffffffffffffffffffffffffffffffffff1661287684610b01565b73ffffffffffffffffffffffffffffffffffffffff16145b8061289f575061289e818561240c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128c8826112a1565b73ffffffffffffffffffffffffffffffffffffffff161461291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590613fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298590613e6e565b60405180910390fd5b612999838383612e83565b6129a4600082612689565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f4919061438e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a4b9190614279565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bd58484846128a8565b612be184848484612e88565b612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1790613dee565b60405180910390fd5b50505050565b606060078054612c35906144c7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c61906144c7565b8015612cae5780601f10612c8357610100808354040283529160200191612cae565b820191906000526020600020905b815481529060010190602001808311612c9157829003601f168201915b5050505050905090565b60606000821415612d00576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e60565b600082905060005b60008214612d32578080612d1b90614555565b915050600a82612d2b91906142cf565b9150612d08565b60008167ffffffffffffffff811115612d74577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612da65781602001600182028036833780820191505090505b5090505b60008514612e5957600182612dbf919061438e565b9150600a85612dce91906145c8565b6030612dda9190614279565b60f81b818381518110612e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5291906142cf565b9450612daa565b8093505050505b919050565b612e7f82826040518060200160405280600081525061301f565b5050565b505050565b6000612ea98473ffffffffffffffffffffffffffffffffffffffff1661307a565b15613012578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed2612681565b8786866040518563ffffffff1660e01b8152600401612ef49493929190613d65565b602060405180830381600087803b158015612f0e57600080fd5b505af1925050508015612f3f57506040513d601f19601f82011682018060405250810190612f3c919061382e565b60015b612fc2573d8060008114612f6f576040519150601f19603f3d011682016040523d82523d6000602084013e612f74565b606091505b50600081511415612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190613dee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613017565b600190505b949350505050565b613029838361308d565b6130366000848484612e88565b613075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306c90613dee565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f490613f6e565b60405180910390fd5b61310681612615565b15613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90613e2e565b60405180910390fd5b61315260008383612e83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a29190614279565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613267906144c7565b90600052602060002090601f01602090048101928261328957600085556132d0565b82601f106132a257805160ff19168380011785556132d0565b828001600101855582156132d0579182015b828111156132cf5782518255916020019190600101906132b4565b5b5090506132dd91906132e1565b5090565b5b808211156132fa5760008160009055506001016132e2565b5090565b600061331161330c84614144565b61411f565b9050808382526020820190508285602086028201111561333057600080fd5b60005b8581101561336057816133468882613452565b845260208401935060208301925050600181019050613333565b5050509392505050565b600061337d61337884614170565b61411f565b9050808382526020820190508285602086028201111561339c57600080fd5b60005b858110156133cc57816133b28882613578565b84526020840193506020830192505060018101905061339f565b5050509392505050565b60006133e96133e48461419c565b61411f565b90508281526020810184848401111561340157600080fd5b61340c848285614485565b509392505050565b6000613427613422846141cd565b61411f565b90508281526020810184848401111561343f57600080fd5b61344a848285614485565b509392505050565b60008135905061346181614c63565b92915050565b600082601f83011261347857600080fd5b81356134888482602086016132fe565b91505092915050565b600082601f8301126134a257600080fd5b81356134b284826020860161336a565b91505092915050565b6000813590506134ca81614c7a565b92915050565b6000813590506134df81614c91565b92915050565b6000815190506134f481614c91565b92915050565b600082601f83011261350b57600080fd5b813561351b8482602086016133d6565b91505092915050565b600082601f83011261353557600080fd5b8135613545848260208601613414565b91505092915050565b60008135905061355d81614ca8565b92915050565b60008135905061357281614cbf565b92915050565b60008135905061358781614cd6565b92915050565b60006020828403121561359f57600080fd5b60006135ad84828501613452565b91505092915050565b600080604083850312156135c957600080fd5b60006135d785828601613452565b92505060206135e885828601613452565b9150509250929050565b60008060006060848603121561360757600080fd5b600061361586828701613452565b935050602061362686828701613452565b925050604061363786828701613563565b9150509250925092565b6000806000806080858703121561365757600080fd5b600061366587828801613452565b945050602061367687828801613452565b935050604061368787828801613563565b925050606085013567ffffffffffffffff8111156136a457600080fd5b6136b0878288016134fa565b91505092959194509250565b600080604083850312156136cf57600080fd5b60006136dd85828601613452565b92505060206136ee858286016134bb565b9150509250929050565b6000806040838503121561370b57600080fd5b600061371985828601613452565b925050602061372a85828601613563565b9150509250929050565b6000806040838503121561374757600080fd5b600061375585828601613452565b925050602061376685828601613578565b9150509250929050565b6000806040838503121561378357600080fd5b600083013567ffffffffffffffff81111561379d57600080fd5b6137a985828601613467565b925050602083013567ffffffffffffffff8111156137c657600080fd5b6137d285828601613491565b9150509250929050565b6000602082840312156137ee57600080fd5b60006137fc848285016134bb565b91505092915050565b60006020828403121561381757600080fd5b6000613825848285016134d0565b91505092915050565b60006020828403121561384057600080fd5b600061384e848285016134e5565b91505092915050565b60006020828403121561386957600080fd5b600082013567ffffffffffffffff81111561388357600080fd5b61388f84828501613524565b91505092915050565b6000602082840312156138aa57600080fd5b60006138b88482850161354e565b91505092915050565b6000602082840312156138d357600080fd5b60006138e184828501613563565b91505092915050565b6000602082840312156138fc57600080fd5b600061390a84828501613578565b91505092915050565b61391c816143f6565b82525050565b61392b81614408565b82525050565b600061393c826141fe565b6139468185614214565b9350613956818560208601614494565b61395f816146b5565b840191505092915050565b600061397582614209565b61397f8185614225565b935061398f818560208601614494565b613998816146b5565b840191505092915050565b60006139ae82614209565b6139b88185614236565b93506139c8818560208601614494565b80840191505092915050565b60006139e1603283614225565b91506139ec826146c6565b604082019050919050565b6000613a04602683614225565b9150613a0f82614715565b604082019050919050565b6000613a27601c83614225565b9150613a3282614764565b602082019050919050565b6000613a4a601783614225565b9150613a558261478d565b602082019050919050565b6000613a6d602483614225565b9150613a78826147b6565b604082019050919050565b6000613a90601983614225565b9150613a9b82614805565b602082019050919050565b6000613ab3601283614225565b9150613abe8261482e565b602082019050919050565b6000613ad6602c83614225565b9150613ae182614857565b604082019050919050565b6000613af9603883614225565b9150613b04826148a6565b604082019050919050565b6000613b1c602183614225565b9150613b27826148f5565b604082019050919050565b6000613b3f602a83614225565b9150613b4a82614944565b604082019050919050565b6000613b62602983614225565b9150613b6d82614993565b604082019050919050565b6000613b85602083614225565b9150613b90826149e2565b602082019050919050565b6000613ba8602c83614225565b9150613bb382614a0b565b604082019050919050565b6000613bcb602083614225565b9150613bd682614a5a565b602082019050919050565b6000613bee602983614225565b9150613bf982614a83565b604082019050919050565b6000613c11602f83614225565b9150613c1c82614ad2565b604082019050919050565b6000613c34602183614225565b9150613c3f82614b21565b604082019050919050565b6000613c57603183614225565b9150613c6282614b70565b604082019050919050565b6000613c7a601583614225565b9150613c8582614bbf565b602082019050919050565b6000613c9d600e83614225565b9150613ca882614be8565b602082019050919050565b6000613cc0600d83614225565b9150613ccb82614c11565b602082019050919050565b6000613ce3601b83614225565b9150613cee82614c3a565b602082019050919050565b613d0281614440565b82525050565b613d118161446e565b82525050565b613d2081614478565b82525050565b6000613d3282856139a3565b9150613d3e82846139a3565b91508190509392505050565b6000602082019050613d5f6000830184613913565b92915050565b6000608082019050613d7a6000830187613913565b613d876020830186613913565b613d946040830185613d08565b8181036060830152613da68184613931565b905095945050505050565b6000602082019050613dc66000830184613922565b92915050565b60006020820190508181036000830152613de6818461396a565b905092915050565b60006020820190508181036000830152613e07816139d4565b9050919050565b60006020820190508181036000830152613e27816139f7565b9050919050565b60006020820190508181036000830152613e4781613a1a565b9050919050565b60006020820190508181036000830152613e6781613a3d565b9050919050565b60006020820190508181036000830152613e8781613a60565b9050919050565b60006020820190508181036000830152613ea781613a83565b9050919050565b60006020820190508181036000830152613ec781613aa6565b9050919050565b60006020820190508181036000830152613ee781613ac9565b9050919050565b60006020820190508181036000830152613f0781613aec565b9050919050565b60006020820190508181036000830152613f2781613b0f565b9050919050565b60006020820190508181036000830152613f4781613b32565b9050919050565b60006020820190508181036000830152613f6781613b55565b9050919050565b60006020820190508181036000830152613f8781613b78565b9050919050565b60006020820190508181036000830152613fa781613b9b565b9050919050565b60006020820190508181036000830152613fc781613bbe565b9050919050565b60006020820190508181036000830152613fe781613be1565b9050919050565b6000602082019050818103600083015261400781613c04565b9050919050565b6000602082019050818103600083015261402781613c27565b9050919050565b6000602082019050818103600083015261404781613c4a565b9050919050565b6000602082019050818103600083015261406781613c6d565b9050919050565b6000602082019050818103600083015261408781613c90565b9050919050565b600060208201905081810360008301526140a781613cb3565b9050919050565b600060208201905081810360008301526140c781613cd6565b9050919050565b60006020820190506140e36000830184613cf9565b92915050565b60006020820190506140fe6000830184613d08565b92915050565b60006020820190506141196000830184613d17565b92915050565b600061412961413a565b905061413582826144f9565b919050565b6000604051905090565b600067ffffffffffffffff82111561415f5761415e614686565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561418b5761418a614686565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141b7576141b6614686565b5b6141c0826146b5565b9050602081019050919050565b600067ffffffffffffffff8211156141e8576141e7614686565b5b6141f1826146b5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061424c82614440565b915061425783614440565b92508261ffff0382111561426e5761426d6145f9565b5b828201905092915050565b60006142848261446e565b915061428f8361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142c4576142c36145f9565b5b828201905092915050565b60006142da8261446e565b91506142e58361446e565b9250826142f5576142f4614628565b5b828204905092915050565b600061430b8261446e565b91506143168361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561434f5761434e6145f9565b5b828202905092915050565b600061436582614440565b915061437083614440565b925082821015614383576143826145f9565b5b828203905092915050565b60006143998261446e565b91506143a48361446e565b9250828210156143b7576143b66145f9565b5b828203905092915050565b60006143cd82614478565b91506143d883614478565b9250828210156143eb576143ea6145f9565b5b828203905092915050565b60006144018261444e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144b2578082015181840152602081019050614497565b838111156144c1576000848401525b50505050565b600060028204905060018216806144df57607f821691505b602082108114156144f3576144f2614657565b5b50919050565b614502826146b5565b810181811067ffffffffffffffff8211171561452157614520614686565b5b80604052505050565b600061453582614440565b915061ffff82141561454a576145496145f9565b5b600182019050919050565b60006145608261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614593576145926145f9565b5b600182019050919050565b60006145a982614478565b915060ff8214156145bd576145bc6145f9565b5b600182019050919050565b60006145d38261446e565b91506145de8361446e565b9250826145ee576145ed614628565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f467265652053616c65206973206e6f7420616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f496e76616c696420707269636500000000000000000000000000000000000000600082015250565b7f596f752063616e206e6f74206d696e74206f6e2070726573616c650000000000600082015250565b614c6c816143f6565b8114614c7757600080fd5b50565b614c8381614408565b8114614c8e57600080fd5b50565b614c9a81614414565b8114614ca557600080fd5b50565b614cb181614440565b8114614cbc57600080fd5b50565b614cc88161446e565b8114614cd357600080fd5b50565b614cdf81614478565b8114614cea57600080fd5b5056fea2646970667358221220815d580dbbe5ddf000c6662e96a7b0d9cad30ce69646ec5470d0607b0ae079a064736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000d4465616468656164204170657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344484100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Deadhead Apes
Arg [1] : _ticker (string): DHA
Arg [2] : _price (uint256): 30000000000000000
Arg [3] : _totalSupply (uint16): 8000
Arg [4] : _maxTx (uint8): 20
Arg [5] : _maxTxFree (uint8): 2
Arg [6] : _maxFree (uint256): 800
Arg [7] : baseURI_ (string):

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [9] : 4465616468656164204170657300000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 4448410000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

51655:4680:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20794:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21739:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23298:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22821:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54819:590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51970:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53370:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24188:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56221:109;;;;;;;;;;;;;:::i;:::-;;24598:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52064:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52032:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52679:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53129:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21433:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53761:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55417:388;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51706:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21163:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44063:94;;;;;;;;;;;;;:::i;:::-;;53544:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52004:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53457:79;;;;;;;;;;;;;:::i;:::-;;51747:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51936:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43412:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52919:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21908:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54057:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51908:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23591:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55813:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54190:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53855:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51870:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24854:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53016:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53277:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22083:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53957:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23957:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44312:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51789:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20794:305;20896:4;20948:25;20933:40;;;:11;:40;;;;:105;;;;21005:33;20990:48;;;:11;:48;;;;20933:105;:158;;;;21055:36;21079:11;21055:23;:36::i;:::-;20933:158;20913:178;;20794:305;;;:::o;21739:100::-;21793:13;21826:5;21819:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21739:100;:::o;23298:221::-;23374:7;23402:16;23410:7;23402;:16::i;:::-;23394:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23487:15;:24;23503:7;23487:24;;;;;;;;;;;;;;;;;;;;;23480:31;;23298:221;;;:::o;22821:411::-;22902:13;22918:23;22933:7;22918:14;:23::i;:::-;22902:39;;22966:5;22960:11;;:2;:11;;;;22952:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23060:5;23044:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23069:37;23086:5;23093:12;:10;:12::i;:::-;23069:16;:37::i;:::-;23044:62;23022:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23203:21;23212:2;23216:7;23203:8;:21::i;:::-;22821:411;;;:::o;54819:590::-;54880:4;;;;;;;;;;;54872:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;54954:11;;;;;;;;;;;54926:39;;54949:1;54941:5;;;;;;;;;;;54933:4;54926:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54918:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55031:11;;;;;;;;;;;55003:39;;55026:1;55018:5;;;;;;;;;;;55010:4;55003:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54995:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55084:7;;55076:5;;;;;;;;;;;:15;;;55072:291;;;55124:9;;;;;;;;;;;55116:17;;:4;:17;;;;:29;;;;55144:1;55137:4;:8;;;55116:29;55108:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;55072:291;;;55230:5;;;;;;;;;;;55222:13;;:4;:13;;;;:25;;;;55246:1;55239:4;:8;;;55222:25;55214:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;55329:4;55321:12;;:5;;:12;;;;:::i;:::-;55308:9;:25;;55300:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;55072:291;55375:26;55384:10;55396:4;55375:8;:26::i;:::-;54819:590;:::o;51970:27::-;;;;;;;;;;;;;:::o;53370:79::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53435:6:::1;53428:4;;:13;;;;;;;;;;;;;;;;;;53370:79:::0;:::o;24188:339::-;24383:41;24402:12;:10;:12::i;:::-;24416:7;24383:18;:41::i;:::-;24375:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24491:28;24501:4;24507:2;24511:7;24491:9;:28::i;:::-;24188:339;;;:::o;56221:109::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56279:10:::1;56271:28;;:51;56300:21;56271:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56221:109::o:0;24598:185::-;24736:39;24753:4;24759:2;24763:7;24736:39;;;;;;;;;;;;:16;:39::i;:::-;24598:185;;;:::o;52064:23::-;;;;:::o;52032:25::-;;;;;;;;;;;;;:::o;52679:107::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52770:8:::1;52751:16;:27;;;;;;;;;;;;:::i;:::-;;52679:107:::0;:::o;53129:140::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53216:10:::1;53202:11;;:24;;;;;;;;;;;;;;;;;;53251:10;53237:11;;:24;;;;;;;;;;;;;;;;;;53129:140:::0;:::o;21433:239::-;21505:7;21525:13;21541:7;:16;21549:7;21541:16;;;;;;;;;;;;;;;;;;;;;21525:32;;21593:1;21576:19;;:5;:19;;;;21568:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21659:5;21652:12;;;21433:239;;;:::o;53761:86::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53832:7:::1;53824:5;;:15;;;;;;;;;;;;;;;;;;53761:86:::0;:::o;55417:388::-;55482:8;;;;;;;;;;;55474:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;55545:9;;;;;;;;;;;55537:17;;:4;:17;;;;:29;;;;55565:1;55558:4;:8;;;55537:29;55529:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;55651:11;;;;;;;;;;;55623:39;;55646:1;55638:5;;;;;;;;;;;55630:4;55623:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;55615:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55728:11;;;;;;;;;;;55700:39;;55723:1;55715:5;;;;;;;;;;;55707:4;55700:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;55692:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55771:26;55780:10;55792:4;55771:8;:26::i;:::-;55417:388;:::o;51706:34::-;;;;;;;;;;;;;:::o;21163:208::-;21235:7;21280:1;21263:19;;:5;:19;;;;21255:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21347:9;:16;21357:5;21347:16;;;;;;;;;;;;;;;;21340:23;;21163:208;;;:::o;44063:94::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44128:21:::1;44146:1;44128:9;:21::i;:::-;44063:94::o:0;53544:209::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53656:7:::1;53651:95;53669:2;:9;53665:1;:13;;;53651:95;;;53724:7;53732:1;53724:10;;;;;;;;;;;;;;;;;;;;;;;;53700:14;:21;53715:2;53718:1;53715:5;;;;;;;;;;;;;;;;;;;;;;;;53700:21;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;53680:3;;;;;:::i;:::-;;;;53651:95;;;;53544:209:::0;;:::o;52004:21::-;;;;;;;;;;;;;:::o;53457:79::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53520:8:::1;;;;;;;;;;;53519:9;53508:8;;:20;;;;;;;;;;;;;;;;;;53457:79::o:0;51747:35::-;;;;;;;;;;;;;:::o;51936:27::-;;;;;;;;;;;;;:::o;43412:87::-;43458:7;43485:6;;;;;;;;;;;43478:13;;43412:87;:::o;52919:89::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52991:9:::1;52983:5;:17;;;;52919:89:::0;:::o;21908:104::-;21964:13;21997:7;21990:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21908:104;:::o;54057:125::-;54126:5;54151:14;:23;54166:7;54151:23;;;;;;;;;;;;;;;;;;;;;;;;;54144:30;;54057:125;;;:::o;51908:21::-;;;;:::o;23591:295::-;23706:12;:10;:12::i;:::-;23694:24;;:8;:24;;;;23686:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23806:8;23761:18;:32;23780:12;:10;:12::i;:::-;23761:32;;;;;;;;;;;;;;;:42;23794:8;23761:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23859:8;23830:48;;23845:12;:10;:12::i;:::-;23830:48;;;23869:8;23830:48;;;;;;:::i;:::-;;;;;;;;23591:295;;:::o;55813:179::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55922:11:::1;;;;;;;;;;;55894:39;;55917:1;55909:5;;;;;;;;;;;55901:4;55894:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;55886:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55965:19;55974:3;55979:4;55965:8;:19::i;:::-;55813:179:::0;;:::o;54190:621::-;54250:17;54270:14;:26;54285:10;54270:26;;;;;;;;;;;;;;;;;;;;;;;;;54250:46;;54315:7;;;;;;;;;;;54307:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;54375:11;54367:19;;:4;:19;;;;54359:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;54457:1;54443:11;:15;;;54435:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;54537:11;;;;;;;;;;;54509:39;;54532:1;54524:5;;;;;;;;;;;54516:4;54509:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54501:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54614:11;;;;;;;;;;;54586:39;;54609:1;54601:5;;;;;;;;;;;54593:4;54586:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54578:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54684:4;54676:12;;:5;;:12;;;;:::i;:::-;54663:9;:25;;54655:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;54760:4;54746:11;:18;;;;:::i;:::-;54717:14;:26;54732:10;54717:26;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;54777:26;54786:10;54798:4;54777:8;:26::i;:::-;54190:621;;:::o;53855:94::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53934:7:::1;53922:9;;:19;;;;;;;;;;;;;;;;;;53855:94:::0;:::o;51870:31::-;;;;;;;;;;;;;:::o;24854:328::-;25029:41;25048:12;:10;:12::i;:::-;25062:7;25029:18;:41::i;:::-;25021:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25135:39;25149:4;25155:2;25159:7;25168:5;25135:13;:39::i;:::-;24854:328;;;;:::o;53016:105::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53103:10:::1;53089:11;;:24;;;;;;;;;;;;;;;;;;53016:105:::0;:::o;53277:85::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53348:6:::1;53338:7;;:16;;;;;;;;;;;;;;;;;;53277:85:::0;:::o;22083:334::-;22156:13;22190:16;22198:7;22190;:16::i;:::-;22182:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22271:21;22295:10;:8;:10::i;:::-;22271:34;;22347:1;22329:7;22323:21;:25;:86;;;;;;;;;;;;;;;;;22375:7;22384:18;:7;:16;:18::i;:::-;22358:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22323:86;22316:93;;;22083:334;;;:::o;53957:92::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54034:7:::1;54024;:17;;;;53957:92:::0;:::o;23957:164::-;24054:4;24078:18;:25;24097:5;24078:25;;;;;;;;;;;;;;;:35;24104:8;24078:35;;;;;;;;;;;;;;;;;;;;;;;;;24071:42;;23957:164;;;;:::o;44312:192::-;43643:12;:10;:12::i;:::-;43632:23;;:7;:5;:7::i;:::-;:23;;;43624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44421:1:::1;44401:22;;:8;:22;;;;44393:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44477:19;44487:8;44477:9;:19::i;:::-;44312:192:::0;:::o;51789:35::-;;;;;;;;;;;;;:::o;19294:157::-;19379:4;19418:25;19403:40;;;:11;:40;;;;19396:47;;19294:157;;;:::o;26692:127::-;26757:4;26809:1;26781:30;;:7;:16;26789:7;26781:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26774:37;;26692:127;;;:::o;16202:98::-;16255:7;16282:10;16275:17;;16202:98;:::o;30674:174::-;30776:2;30749:15;:24;30765:7;30749:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30832:7;30828:2;30794:46;;30803:23;30818:7;30803:14;:23::i;:::-;30794:46;;;;;;;;;;;;30674:174;;:::o;56000:213::-;56067:7;56062:144;56084:4;56080:8;;:1;:8;;;56062:144;;;56110:15;56128:5;;;;;;;;;;;56110:23;;56148:24;56158:3;56163:8;56148:24;;:9;:24::i;:::-;56187:5;;:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;56062:144;56090:3;;;;;:::i;:::-;;;;56062:144;;;;56000:213;;:::o;26986:348::-;27079:4;27104:16;27112:7;27104;:16::i;:::-;27096:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:13;27196:23;27211:7;27196:14;:23::i;:::-;27180:39;;27249:5;27238:16;;:7;:16;;;:51;;;;27282:7;27258:31;;:20;27270:7;27258:11;:20::i;:::-;:31;;;27238:51;:87;;;;27293:32;27310:5;27317:7;27293:16;:32::i;:::-;27238:87;27230:96;;;26986:348;;;;:::o;29978:578::-;30137:4;30110:31;;:23;30125:7;30110:14;:23::i;:::-;:31;;;30102:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30220:1;30206:16;;:2;:16;;;;30198:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30276:39;30297:4;30303:2;30307:7;30276:20;:39::i;:::-;30380:29;30397:1;30401:7;30380:8;:29::i;:::-;30441:1;30422:9;:15;30432:4;30422:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30470:1;30453:9;:13;30463:2;30453:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30501:2;30482:7;:16;30490:7;30482:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30540:7;30536:2;30521:27;;30530:4;30521:27;;;;;;;;;;;;29978:578;;;:::o;44512:173::-;44568:16;44587:6;;;;;;;;;;;44568:25;;44613:8;44604:6;;:17;;;;;;;;;;;;;;;;;;44668:8;44637:40;;44658:8;44637:40;;;;;;;;;;;;44512:173;;:::o;26064:315::-;26221:28;26231:4;26237:2;26241:7;26221:9;:28::i;:::-;26268:48;26291:4;26297:2;26301:7;26310:5;26268:22;:48::i;:::-;26260:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:315;;;;:::o;52794:117::-;52854:13;52887:16;52880:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52794:117;:::o;16733:723::-;16789:13;17019:1;17010:5;:10;17006:53;;;17037:10;;;;;;;;;;;;;;;;;;;;;17006:53;17069:12;17084:5;17069:20;;17100:14;17125:78;17140:1;17132:4;:9;17125:78;;17158:8;;;;;:::i;:::-;;;;17189:2;17181:10;;;;;:::i;:::-;;;17125:78;;;17213:19;17245:6;17235:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17213:39;;17263:154;17279:1;17270:5;:10;17263:154;;17307:1;17297:11;;;;;:::i;:::-;;;17374:2;17366:5;:10;;;;:::i;:::-;17353:2;:24;;;;:::i;:::-;17340:39;;17323:6;17330;17323:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17403:2;17394:11;;;;;:::i;:::-;;;17263:154;;;17441:6;17427:21;;;;;16733:723;;;;:::o;27676:110::-;27752:26;27762:2;27766:7;27752:26;;;;;;;;;;;;:9;:26::i;:::-;27676:110;;:::o;32784:126::-;;;;:::o;31413:799::-;31568:4;31589:15;:2;:13;;;:15::i;:::-;31585:620;;;31641:2;31625:36;;;31662:12;:10;:12::i;:::-;31676:4;31682:7;31691:5;31625:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31621:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31884:1;31867:6;:13;:18;31863:272;;;31910:60;;;;;;;;;;:::i;:::-;;;;;;;;31863:272;32085:6;32079:13;32070:6;32066:2;32062:15;32055:38;31621:529;31758:41;;;31748:51;;;:6;:51;;;;31741:58;;;;;31585:620;32189:4;32182:11;;31413:799;;;;;;;:::o;28013:321::-;28143:18;28149:2;28153:7;28143:5;:18::i;:::-;28194:54;28225:1;28229:2;28233:7;28242:5;28194:22;:54::i;:::-;28172:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:321;;;:::o;8240:387::-;8300:4;8508:12;8575:7;8563:20;8555:28;;8618:1;8611:4;:8;8604:15;;;8240:387;;;:::o;28670:382::-;28764:1;28750:16;;:2;:16;;;;28742:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28823:16;28831:7;28823;:16::i;:::-;28822:17;28814:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28885:45;28914:1;28918:2;28922:7;28885:20;:45::i;:::-;28960:1;28943:9;:13;28953:2;28943:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28991:2;28972:7;:16;28980:7;28972:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29036:7;29032:2;29011:33;;29028:1;29011:33;;;;;;;;;;;;28670:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655: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:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;700:649::-;794:5;819:79;835:62;890:6;835:62;:::i;:::-;819:79;:::i;:::-;810:88;;918:5;947:6;940:5;933:21;981:4;974:5;970:16;963:23;;1007:6;1057:3;1049:4;1041:6;1037:17;1032:3;1028:27;1025:36;1022:2;;;1086:1;1083;1076:12;1022:2;1122:1;1107:236;1132:6;1129:1;1126:13;1107:236;;;1200:3;1229:35;1260:3;1248:10;1229:35;:::i;:::-;1224:3;1217:48;1294:4;1289:3;1285:14;1278:21;;1328:4;1323:3;1319:14;1312:21;;1167:176;1154:1;1151;1147:9;1142:14;;1107:236;;;1111:14;800:549;;;;;;;:::o;1355:343::-;1432:5;1457:65;1473:48;1514:6;1473:48;:::i;:::-;1457:65;:::i;:::-;1448:74;;1545:6;1538:5;1531:21;1583:4;1576:5;1572:16;1621:3;1612:6;1607:3;1603:16;1600:25;1597:2;;;1638:1;1635;1628:12;1597:2;1651:41;1685:6;1680:3;1675;1651:41;:::i;:::-;1438:260;;;;;;:::o;1704:345::-;1782:5;1807:66;1823:49;1865:6;1823:49;:::i;:::-;1807:66;:::i;:::-;1798:75;;1896:6;1889:5;1882:21;1934:4;1927:5;1923:16;1972:3;1963:6;1958:3;1954:16;1951:25;1948:2;;;1989:1;1986;1979:12;1948:2;2002:41;2036:6;2031:3;2026;2002:41;:::i;:::-;1788:261;;;;;;:::o;2055:139::-;2101:5;2139:6;2126:20;2117:29;;2155:33;2182:5;2155:33;:::i;:::-;2107:87;;;;:::o;2217:303::-;2288:5;2337:3;2330:4;2322:6;2318:17;2314:27;2304:2;;2355:1;2352;2345:12;2304:2;2395:6;2382:20;2420:94;2510:3;2502:6;2495:4;2487:6;2483:17;2420:94;:::i;:::-;2411:103;;2294:226;;;;;:::o;2541:299::-;2610:5;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:92;2830:3;2822:6;2815:4;2807:6;2803:17;2742:92;:::i;:::-;2733:101;;2616:224;;;;;:::o;2846:133::-;2889:5;2927:6;2914:20;2905:29;;2943:30;2967:5;2943:30;:::i;:::-;2895:84;;;;:::o;2985:137::-;3030:5;3068:6;3055:20;3046:29;;3084:32;3110:5;3084:32;:::i;:::-;3036:86;;;;:::o;3128:141::-;3184:5;3215:6;3209:13;3200:22;;3231:32;3257:5;3231:32;:::i;:::-;3190:79;;;;:::o;3288:271::-;3343:5;3392:3;3385:4;3377:6;3373:17;3369:27;3359:2;;3410:1;3407;3400:12;3359:2;3450:6;3437:20;3475:78;3549:3;3541:6;3534:4;3526:6;3522:17;3475:78;:::i;:::-;3466:87;;3349:210;;;;;:::o;3579:273::-;3635:5;3684:3;3677:4;3669:6;3665:17;3661:27;3651:2;;3702:1;3699;3692:12;3651:2;3742:6;3729:20;3767:79;3842:3;3834:6;3827:4;3819:6;3815:17;3767:79;:::i;:::-;3758:88;;3641:211;;;;;:::o;3858:137::-;3903:5;3941:6;3928:20;3919:29;;3957:32;3983:5;3957:32;:::i;:::-;3909:86;;;;:::o;4001:139::-;4047:5;4085:6;4072:20;4063:29;;4101:33;4128:5;4101:33;:::i;:::-;4053:87;;;;:::o;4146:135::-;4190:5;4228:6;4215:20;4206:29;;4244:31;4269:5;4244:31;:::i;:::-;4196:85;;;;:::o;4287:262::-;4346:6;4395:2;4383:9;4374:7;4370:23;4366:32;4363:2;;;4411:1;4408;4401:12;4363:2;4454:1;4479:53;4524:7;4515:6;4504:9;4500:22;4479:53;:::i;:::-;4469:63;;4425:117;4353:196;;;;:::o;4555:407::-;4623:6;4631;4680:2;4668:9;4659:7;4655:23;4651:32;4648:2;;;4696:1;4693;4686:12;4648:2;4739:1;4764:53;4809:7;4800:6;4789:9;4785:22;4764:53;:::i;:::-;4754:63;;4710:117;4866:2;4892:53;4937:7;4928:6;4917:9;4913:22;4892:53;:::i;:::-;4882:63;;4837:118;4638:324;;;;;:::o;4968:552::-;5045:6;5053;5061;5110:2;5098:9;5089:7;5085:23;5081:32;5078:2;;;5126:1;5123;5116:12;5078:2;5169:1;5194:53;5239:7;5230:6;5219:9;5215:22;5194:53;:::i;:::-;5184:63;;5140:117;5296:2;5322:53;5367:7;5358:6;5347:9;5343:22;5322:53;:::i;:::-;5312:63;;5267:118;5424:2;5450:53;5495:7;5486:6;5475:9;5471:22;5450:53;:::i;:::-;5440:63;;5395:118;5068:452;;;;;:::o;5526:809::-;5621:6;5629;5637;5645;5694:3;5682:9;5673:7;5669:23;5665:33;5662:2;;;5711:1;5708;5701:12;5662:2;5754:1;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5725:117;5881:2;5907:53;5952:7;5943:6;5932:9;5928:22;5907:53;:::i;:::-;5897:63;;5852:118;6009:2;6035:53;6080:7;6071:6;6060:9;6056:22;6035:53;:::i;:::-;6025:63;;5980:118;6165:2;6154:9;6150:18;6137:32;6196:18;6188:6;6185:30;6182:2;;;6228:1;6225;6218:12;6182:2;6256:62;6310:7;6301:6;6290:9;6286:22;6256:62;:::i;:::-;6246:72;;6108:220;5652:683;;;;;;;:::o;6341:401::-;6406:6;6414;6463:2;6451:9;6442:7;6438:23;6434:32;6431:2;;;6479:1;6476;6469:12;6431:2;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6649:2;6675:50;6717:7;6708:6;6697:9;6693:22;6675:50;:::i;:::-;6665:60;;6620:115;6421:321;;;;;:::o;6748:407::-;6816:6;6824;6873:2;6861:9;6852:7;6848:23;6844:32;6841:2;;;6889:1;6886;6879:12;6841:2;6932:1;6957:53;7002:7;6993:6;6982:9;6978:22;6957:53;:::i;:::-;6947:63;;6903:117;7059:2;7085:53;7130:7;7121:6;7110:9;7106:22;7085:53;:::i;:::-;7075:63;;7030:118;6831:324;;;;;:::o;7161:403::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:2;;;7300:1;7297;7290:12;7252:2;7343:1;7368:53;7413:7;7404:6;7393:9;7389:22;7368:53;:::i;:::-;7358:63;;7314:117;7470:2;7496:51;7539:7;7530:6;7519:9;7515:22;7496:51;:::i;:::-;7486:61;;7441:116;7242:322;;;;;:::o;7570:689::-;7686:6;7694;7743:2;7731:9;7722:7;7718:23;7714:32;7711:2;;;7759:1;7756;7749:12;7711:2;7830:1;7819:9;7815:17;7802:31;7860:18;7852:6;7849:30;7846:2;;;7892:1;7889;7882:12;7846:2;7920:78;7990:7;7981:6;7970:9;7966:22;7920:78;:::i;:::-;7910:88;;7773:235;8075:2;8064:9;8060:18;8047:32;8106:18;8098:6;8095:30;8092:2;;;8138:1;8135;8128:12;8092:2;8166:76;8234:7;8225:6;8214:9;8210:22;8166:76;:::i;:::-;8156:86;;8018:234;7701:558;;;;;:::o;8265:256::-;8321:6;8370:2;8358:9;8349:7;8345:23;8341:32;8338:2;;;8386:1;8383;8376:12;8338:2;8429:1;8454:50;8496:7;8487:6;8476:9;8472:22;8454:50;:::i;:::-;8444:60;;8400:114;8328:193;;;;:::o;8527:260::-;8585:6;8634:2;8622:9;8613:7;8609:23;8605:32;8602:2;;;8650:1;8647;8640:12;8602:2;8693:1;8718:52;8762:7;8753:6;8742:9;8738:22;8718:52;:::i;:::-;8708:62;;8664:116;8592:195;;;;:::o;8793:282::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:2;;;8927:1;8924;8917:12;8879:2;8970:1;8995:63;9050:7;9041:6;9030:9;9026:22;8995:63;:::i;:::-;8985:73;;8941:127;8869:206;;;;:::o;9081:375::-;9150:6;9199:2;9187:9;9178:7;9174:23;9170:32;9167:2;;;9215:1;9212;9205:12;9167:2;9286:1;9275:9;9271:17;9258:31;9316:18;9308:6;9305:30;9302:2;;;9348:1;9345;9338:12;9302:2;9376:63;9431:7;9422:6;9411:9;9407:22;9376:63;:::i;:::-;9366:73;;9229:220;9157:299;;;;:::o;9462:260::-;9520:6;9569:2;9557:9;9548:7;9544:23;9540:32;9537:2;;;9585:1;9582;9575:12;9537:2;9628:1;9653:52;9697:7;9688:6;9677:9;9673:22;9653:52;:::i;:::-;9643:62;;9599:116;9527:195;;;;:::o;9728:262::-;9787:6;9836:2;9824:9;9815:7;9811:23;9807:32;9804:2;;;9852:1;9849;9842:12;9804:2;9895:1;9920:53;9965:7;9956:6;9945:9;9941:22;9920:53;:::i;:::-;9910:63;;9866:117;9794:196;;;;:::o;9996:258::-;10053:6;10102:2;10090:9;10081:7;10077:23;10073:32;10070:2;;;10118:1;10115;10108:12;10070:2;10161:1;10186:51;10229:7;10220:6;10209:9;10205:22;10186:51;:::i;:::-;10176:61;;10132:115;10060:194;;;;:::o;10260:118::-;10347:24;10365:5;10347:24;:::i;:::-;10342:3;10335:37;10325:53;;:::o;10384:109::-;10465:21;10480:5;10465:21;:::i;:::-;10460:3;10453:34;10443:50;;:::o;10499:360::-;10585:3;10613:38;10645:5;10613:38;:::i;:::-;10667:70;10730:6;10725:3;10667:70;:::i;:::-;10660:77;;10746:52;10791:6;10786:3;10779:4;10772:5;10768:16;10746:52;:::i;:::-;10823:29;10845:6;10823:29;:::i;:::-;10818:3;10814:39;10807:46;;10589:270;;;;;:::o;10865:364::-;10953:3;10981:39;11014:5;10981:39;:::i;:::-;11036:71;11100:6;11095:3;11036:71;:::i;:::-;11029:78;;11116:52;11161:6;11156:3;11149:4;11142:5;11138:16;11116:52;:::i;:::-;11193:29;11215:6;11193:29;:::i;:::-;11188:3;11184:39;11177:46;;10957:272;;;;;:::o;11235:377::-;11341:3;11369:39;11402:5;11369:39;:::i;:::-;11424:89;11506:6;11501:3;11424:89;:::i;:::-;11417:96;;11522:52;11567:6;11562:3;11555:4;11548:5;11544:16;11522:52;:::i;:::-;11599:6;11594:3;11590:16;11583:23;;11345:267;;;;;:::o;11618:366::-;11760:3;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11857:93;11946:3;11857:93;:::i;:::-;11975:2;11970:3;11966:12;11959:19;;11764:220;;;:::o;11990:366::-;12132:3;12153:67;12217:2;12212:3;12153:67;:::i;:::-;12146:74;;12229:93;12318:3;12229:93;:::i;:::-;12347:2;12342:3;12338:12;12331:19;;12136:220;;;:::o;12362:366::-;12504:3;12525:67;12589:2;12584:3;12525:67;:::i;:::-;12518:74;;12601:93;12690:3;12601:93;:::i;:::-;12719:2;12714:3;12710:12;12703:19;;12508:220;;;:::o;12734:366::-;12876:3;12897:67;12961:2;12956:3;12897:67;:::i;:::-;12890:74;;12973:93;13062:3;12973:93;:::i;:::-;13091:2;13086:3;13082:12;13075:19;;12880:220;;;:::o;13106:366::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13252:220;;;:::o;13478:366::-;13620:3;13641:67;13705:2;13700:3;13641:67;:::i;:::-;13634:74;;13717:93;13806:3;13717:93;:::i;:::-;13835:2;13830:3;13826:12;13819:19;;13624:220;;;:::o;13850:366::-;13992:3;14013:67;14077:2;14072:3;14013:67;:::i;:::-;14006:74;;14089:93;14178:3;14089:93;:::i;:::-;14207:2;14202:3;14198:12;14191:19;;13996:220;;;:::o;14222:366::-;14364:3;14385:67;14449:2;14444:3;14385:67;:::i;:::-;14378:74;;14461:93;14550:3;14461:93;:::i;:::-;14579:2;14574:3;14570:12;14563:19;;14368:220;;;:::o;14594:366::-;14736:3;14757:67;14821:2;14816:3;14757:67;:::i;:::-;14750:74;;14833:93;14922:3;14833:93;:::i;:::-;14951:2;14946:3;14942:12;14935:19;;14740:220;;;:::o;14966:366::-;15108:3;15129:67;15193:2;15188:3;15129:67;:::i;:::-;15122:74;;15205:93;15294:3;15205:93;:::i;:::-;15323:2;15318:3;15314:12;15307:19;;15112:220;;;:::o;15338:366::-;15480:3;15501:67;15565:2;15560:3;15501:67;:::i;:::-;15494:74;;15577:93;15666:3;15577:93;:::i;:::-;15695:2;15690:3;15686:12;15679:19;;15484:220;;;:::o;15710:366::-;15852:3;15873:67;15937:2;15932:3;15873:67;:::i;:::-;15866:74;;15949:93;16038:3;15949:93;:::i;:::-;16067:2;16062:3;16058:12;16051:19;;15856:220;;;:::o;16082:366::-;16224:3;16245:67;16309:2;16304:3;16245:67;:::i;:::-;16238:74;;16321:93;16410:3;16321:93;:::i;:::-;16439:2;16434:3;16430:12;16423:19;;16228:220;;;:::o;16454:366::-;16596:3;16617:67;16681:2;16676:3;16617:67;:::i;:::-;16610:74;;16693:93;16782:3;16693:93;:::i;:::-;16811:2;16806:3;16802:12;16795:19;;16600:220;;;:::o;16826:366::-;16968:3;16989:67;17053:2;17048:3;16989:67;:::i;:::-;16982:74;;17065:93;17154:3;17065:93;:::i;:::-;17183:2;17178:3;17174:12;17167:19;;16972:220;;;:::o;17198:366::-;17340:3;17361:67;17425:2;17420:3;17361:67;:::i;:::-;17354:74;;17437:93;17526:3;17437:93;:::i;:::-;17555:2;17550:3;17546:12;17539:19;;17344:220;;;:::o;17570:366::-;17712:3;17733:67;17797:2;17792:3;17733:67;:::i;:::-;17726:74;;17809:93;17898:3;17809:93;:::i;:::-;17927:2;17922:3;17918:12;17911:19;;17716:220;;;:::o;17942:366::-;18084:3;18105:67;18169:2;18164:3;18105:67;:::i;:::-;18098:74;;18181:93;18270:3;18181:93;:::i;:::-;18299:2;18294:3;18290:12;18283:19;;18088:220;;;:::o;18314:366::-;18456:3;18477:67;18541:2;18536:3;18477:67;:::i;:::-;18470:74;;18553:93;18642:3;18553:93;:::i;:::-;18671:2;18666:3;18662:12;18655:19;;18460:220;;;:::o;18686:366::-;18828:3;18849:67;18913:2;18908:3;18849:67;:::i;:::-;18842:74;;18925:93;19014:3;18925:93;:::i;:::-;19043:2;19038:3;19034:12;19027:19;;18832:220;;;:::o;19058:366::-;19200:3;19221:67;19285:2;19280:3;19221:67;:::i;:::-;19214:74;;19297:93;19386:3;19297:93;:::i;:::-;19415:2;19410:3;19406:12;19399:19;;19204:220;;;:::o;19430:366::-;19572:3;19593:67;19657:2;19652:3;19593:67;:::i;:::-;19586:74;;19669:93;19758:3;19669:93;:::i;:::-;19787:2;19782:3;19778:12;19771:19;;19576:220;;;:::o;19802:366::-;19944:3;19965:67;20029:2;20024:3;19965:67;:::i;:::-;19958:74;;20041:93;20130:3;20041:93;:::i;:::-;20159:2;20154:3;20150:12;20143:19;;19948:220;;;:::o;20174:115::-;20259:23;20276:5;20259:23;:::i;:::-;20254:3;20247:36;20237:52;;:::o;20295:118::-;20382:24;20400:5;20382:24;:::i;:::-;20377:3;20370:37;20360:53;;:::o;20419:112::-;20502:22;20518:5;20502:22;:::i;:::-;20497:3;20490:35;20480:51;;:::o;20537:435::-;20717:3;20739:95;20830:3;20821:6;20739:95;:::i;:::-;20732:102;;20851:95;20942:3;20933:6;20851:95;:::i;:::-;20844:102;;20963:3;20956:10;;20721:251;;;;;:::o;20978:222::-;21071:4;21109:2;21098:9;21094:18;21086:26;;21122:71;21190:1;21179:9;21175:17;21166:6;21122:71;:::i;:::-;21076:124;;;;:::o;21206:640::-;21401:4;21439:3;21428:9;21424:19;21416:27;;21453:71;21521:1;21510:9;21506:17;21497:6;21453:71;:::i;:::-;21534:72;21602:2;21591:9;21587:18;21578:6;21534:72;:::i;:::-;21616;21684:2;21673:9;21669:18;21660:6;21616:72;:::i;:::-;21735:9;21729:4;21725:20;21720:2;21709:9;21705:18;21698:48;21763:76;21834:4;21825:6;21763:76;:::i;:::-;21755:84;;21406:440;;;;;;;:::o;21852:210::-;21939:4;21977:2;21966:9;21962:18;21954:26;;21990:65;22052:1;22041:9;22037:17;22028:6;21990:65;:::i;:::-;21944:118;;;;:::o;22068:313::-;22181:4;22219:2;22208:9;22204:18;22196:26;;22268:9;22262:4;22258:20;22254:1;22243:9;22239:17;22232:47;22296:78;22369:4;22360:6;22296:78;:::i;:::-;22288:86;;22186:195;;;;:::o;22387:419::-;22553:4;22591:2;22580:9;22576:18;22568:26;;22640:9;22634:4;22630:20;22626:1;22615:9;22611:17;22604:47;22668:131;22794:4;22668:131;:::i;:::-;22660:139;;22558:248;;;:::o;22812:419::-;22978:4;23016:2;23005:9;23001:18;22993:26;;23065:9;23059:4;23055:20;23051:1;23040:9;23036:17;23029:47;23093:131;23219:4;23093:131;:::i;:::-;23085:139;;22983:248;;;:::o;23237:419::-;23403:4;23441:2;23430:9;23426:18;23418:26;;23490:9;23484:4;23480:20;23476:1;23465:9;23461:17;23454:47;23518:131;23644:4;23518:131;:::i;:::-;23510:139;;23408:248;;;:::o;23662:419::-;23828:4;23866:2;23855:9;23851:18;23843:26;;23915:9;23909:4;23905:20;23901:1;23890:9;23886:17;23879:47;23943:131;24069:4;23943:131;:::i;:::-;23935:139;;23833:248;;;:::o;24087:419::-;24253:4;24291:2;24280:9;24276:18;24268:26;;24340:9;24334:4;24330:20;24326:1;24315:9;24311:17;24304:47;24368:131;24494:4;24368:131;:::i;:::-;24360:139;;24258:248;;;:::o;24512:419::-;24678:4;24716:2;24705:9;24701:18;24693:26;;24765:9;24759:4;24755:20;24751:1;24740:9;24736:17;24729:47;24793:131;24919:4;24793:131;:::i;:::-;24785:139;;24683:248;;;:::o;24937:419::-;25103:4;25141:2;25130:9;25126:18;25118:26;;25190:9;25184:4;25180:20;25176:1;25165:9;25161:17;25154:47;25218:131;25344:4;25218:131;:::i;:::-;25210:139;;25108:248;;;:::o;25362:419::-;25528:4;25566:2;25555:9;25551:18;25543:26;;25615:9;25609:4;25605:20;25601:1;25590:9;25586:17;25579:47;25643:131;25769:4;25643:131;:::i;:::-;25635:139;;25533:248;;;:::o;25787:419::-;25953:4;25991:2;25980:9;25976:18;25968:26;;26040:9;26034:4;26030:20;26026:1;26015:9;26011:17;26004:47;26068:131;26194:4;26068:131;:::i;:::-;26060:139;;25958:248;;;:::o;26212:419::-;26378:4;26416:2;26405:9;26401:18;26393:26;;26465:9;26459:4;26455:20;26451:1;26440:9;26436:17;26429:47;26493:131;26619:4;26493:131;:::i;:::-;26485:139;;26383:248;;;:::o;26637:419::-;26803:4;26841:2;26830:9;26826:18;26818:26;;26890:9;26884:4;26880:20;26876:1;26865:9;26861:17;26854:47;26918:131;27044:4;26918:131;:::i;:::-;26910:139;;26808:248;;;:::o;27062:419::-;27228:4;27266:2;27255:9;27251:18;27243:26;;27315:9;27309:4;27305:20;27301:1;27290:9;27286:17;27279:47;27343:131;27469:4;27343:131;:::i;:::-;27335:139;;27233:248;;;:::o;27487:419::-;27653:4;27691:2;27680:9;27676:18;27668:26;;27740:9;27734:4;27730:20;27726:1;27715:9;27711:17;27704:47;27768:131;27894:4;27768:131;:::i;:::-;27760:139;;27658:248;;;:::o;27912:419::-;28078:4;28116:2;28105:9;28101:18;28093:26;;28165:9;28159:4;28155:20;28151:1;28140:9;28136:17;28129:47;28193:131;28319:4;28193:131;:::i;:::-;28185:139;;28083:248;;;:::o;28337:419::-;28503:4;28541:2;28530:9;28526:18;28518:26;;28590:9;28584:4;28580:20;28576:1;28565:9;28561:17;28554:47;28618:131;28744:4;28618:131;:::i;:::-;28610:139;;28508:248;;;:::o;28762:419::-;28928:4;28966:2;28955:9;28951:18;28943:26;;29015:9;29009:4;29005:20;29001:1;28990:9;28986:17;28979:47;29043:131;29169:4;29043:131;:::i;:::-;29035:139;;28933:248;;;:::o;29187:419::-;29353:4;29391:2;29380:9;29376:18;29368:26;;29440:9;29434:4;29430:20;29426:1;29415:9;29411:17;29404:47;29468:131;29594:4;29468:131;:::i;:::-;29460:139;;29358:248;;;:::o;29612:419::-;29778:4;29816:2;29805:9;29801:18;29793:26;;29865:9;29859:4;29855:20;29851:1;29840:9;29836:17;29829:47;29893:131;30019:4;29893:131;:::i;:::-;29885:139;;29783:248;;;:::o;30037:419::-;30203:4;30241:2;30230:9;30226:18;30218:26;;30290:9;30284:4;30280:20;30276:1;30265:9;30261:17;30254:47;30318:131;30444:4;30318:131;:::i;:::-;30310:139;;30208:248;;;:::o;30462:419::-;30628:4;30666:2;30655:9;30651:18;30643:26;;30715:9;30709:4;30705:20;30701:1;30690:9;30686:17;30679:47;30743:131;30869:4;30743:131;:::i;:::-;30735:139;;30633:248;;;:::o;30887:419::-;31053:4;31091:2;31080:9;31076:18;31068:26;;31140:9;31134:4;31130:20;31126:1;31115:9;31111:17;31104:47;31168:131;31294:4;31168:131;:::i;:::-;31160:139;;31058:248;;;:::o;31312:419::-;31478:4;31516:2;31505:9;31501:18;31493:26;;31565:9;31559:4;31555:20;31551:1;31540:9;31536:17;31529:47;31593:131;31719:4;31593:131;:::i;:::-;31585:139;;31483:248;;;:::o;31737:419::-;31903:4;31941:2;31930:9;31926:18;31918:26;;31990:9;31984:4;31980:20;31976:1;31965:9;31961:17;31954:47;32018:131;32144:4;32018:131;:::i;:::-;32010:139;;31908:248;;;:::o;32162:218::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32304:69;32370:1;32359:9;32355:17;32346:6;32304:69;:::i;:::-;32258:122;;;;:::o;32386:222::-;32479:4;32517:2;32506:9;32502:18;32494:26;;32530:71;32598:1;32587:9;32583:17;32574:6;32530:71;:::i;:::-;32484:124;;;;:::o;32614:214::-;32703:4;32741:2;32730:9;32726:18;32718:26;;32754:67;32818:1;32807:9;32803:17;32794:6;32754:67;:::i;:::-;32708:120;;;;:::o;32834:129::-;32868:6;32895:20;;:::i;:::-;32885:30;;32924:33;32952:4;32944:6;32924:33;:::i;:::-;32875:88;;;:::o;32969:75::-;33002:6;33035:2;33029:9;33019:19;;33009:35;:::o;33050:311::-;33127:4;33217:18;33209:6;33206:30;33203:2;;;33239:18;;:::i;:::-;33203:2;33289:4;33281:6;33277:17;33269:25;;33349:4;33343;33339:15;33331:23;;33132:229;;;:::o;33367:309::-;33442:4;33532:18;33524:6;33521:30;33518:2;;;33554:18;;:::i;:::-;33518:2;33604:4;33596:6;33592:17;33584:25;;33664:4;33658;33654:15;33646:23;;33447:229;;;:::o;33682:307::-;33743:4;33833:18;33825:6;33822:30;33819:2;;;33855:18;;:::i;:::-;33819:2;33893:29;33915:6;33893:29;:::i;:::-;33885:37;;33977:4;33971;33967:15;33959:23;;33748:241;;;:::o;33995:308::-;34057:4;34147:18;34139:6;34136:30;34133:2;;;34169:18;;:::i;:::-;34133:2;34207:29;34229:6;34207:29;:::i;:::-;34199:37;;34291:4;34285;34281:15;34273:23;;34062:241;;;:::o;34309:98::-;34360:6;34394:5;34388:12;34378:22;;34367:40;;;:::o;34413:99::-;34465:6;34499:5;34493:12;34483:22;;34472:40;;;:::o;34518:168::-;34601:11;34635:6;34630:3;34623:19;34675:4;34670:3;34666:14;34651:29;;34613:73;;;;:::o;34692:169::-;34776:11;34810:6;34805:3;34798:19;34850:4;34845:3;34841:14;34826:29;;34788:73;;;;:::o;34867:148::-;34969:11;35006:3;34991:18;;34981:34;;;;:::o;35021:242::-;35060:3;35079:19;35096:1;35079:19;:::i;:::-;35074:24;;35112:19;35129:1;35112:19;:::i;:::-;35107:24;;35205:1;35197:6;35193:14;35190:1;35187:21;35184:2;;;35211:18;;:::i;:::-;35184:2;35255:1;35252;35248:9;35241:16;;35064:199;;;;:::o;35269:305::-;35309:3;35328:20;35346:1;35328:20;:::i;:::-;35323:25;;35362:20;35380:1;35362:20;:::i;:::-;35357:25;;35516:1;35448:66;35444:74;35441:1;35438:81;35435:2;;;35522:18;;:::i;:::-;35435:2;35566:1;35563;35559:9;35552:16;;35313:261;;;;:::o;35580:185::-;35620:1;35637:20;35655:1;35637:20;:::i;:::-;35632:25;;35671:20;35689:1;35671:20;:::i;:::-;35666:25;;35710:1;35700:2;;35715:18;;:::i;:::-;35700:2;35757:1;35754;35750:9;35745:14;;35622:143;;;;:::o;35771:348::-;35811:7;35834:20;35852:1;35834:20;:::i;:::-;35829:25;;35868:20;35886:1;35868:20;:::i;:::-;35863:25;;36056:1;35988:66;35984:74;35981:1;35978:81;35973:1;35966:9;35959:17;35955:105;35952:2;;;36063:18;;:::i;:::-;35952:2;36111:1;36108;36104:9;36093:20;;35819:300;;;;:::o;36125:188::-;36164:4;36184:19;36201:1;36184:19;:::i;:::-;36179:24;;36217:19;36234:1;36217:19;:::i;:::-;36212:24;;36255:1;36252;36249:8;36246:2;;;36260:18;;:::i;:::-;36246:2;36305:1;36302;36298:9;36290:17;;36169:144;;;;:::o;36319:191::-;36359:4;36379:20;36397:1;36379:20;:::i;:::-;36374:25;;36413:20;36431:1;36413:20;:::i;:::-;36408:25;;36452:1;36449;36446:8;36443:2;;;36457:18;;:::i;:::-;36443:2;36502:1;36499;36495:9;36487:17;;36364:146;;;;:::o;36516:185::-;36554:4;36574:18;36590:1;36574:18;:::i;:::-;36569:23;;36606:18;36622:1;36606:18;:::i;:::-;36601:23;;36643:1;36640;36637:8;36634:2;;;36648:18;;:::i;:::-;36634:2;36693:1;36690;36686:9;36678:17;;36559:142;;;;:::o;36707:96::-;36744:7;36773:24;36791:5;36773:24;:::i;:::-;36762:35;;36752:51;;;:::o;36809:90::-;36843:7;36886:5;36879:13;36872:21;36861:32;;36851:48;;;:::o;36905:149::-;36941:7;36981:66;36974:5;36970:78;36959:89;;36949:105;;;:::o;37060:89::-;37096:7;37136:6;37129:5;37125:18;37114:29;;37104:45;;;:::o;37155:126::-;37192:7;37232:42;37225:5;37221:54;37210:65;;37200:81;;;:::o;37287:77::-;37324:7;37353:5;37342:16;;37332:32;;;:::o;37370:86::-;37405:7;37445:4;37438:5;37434:16;37423:27;;37413:43;;;:::o;37462:154::-;37546:6;37541:3;37536;37523:30;37608:1;37599:6;37594:3;37590:16;37583:27;37513:103;;;:::o;37622:307::-;37690:1;37700:113;37714:6;37711:1;37708:13;37700:113;;;37799:1;37794:3;37790:11;37784:18;37780:1;37775:3;37771:11;37764:39;37736:2;37733:1;37729:10;37724:15;;37700:113;;;37831:6;37828:1;37825:13;37822:2;;;37911:1;37902:6;37897:3;37893:16;37886:27;37822:2;37671:258;;;;:::o;37935:320::-;37979:6;38016:1;38010:4;38006:12;37996:22;;38063:1;38057:4;38053:12;38084:18;38074:2;;38140:4;38132:6;38128:17;38118:27;;38074:2;38202;38194:6;38191:14;38171:18;38168:38;38165:2;;;38221:18;;:::i;:::-;38165:2;37986:269;;;;:::o;38261:281::-;38344:27;38366:4;38344:27;:::i;:::-;38336:6;38332:40;38474:6;38462:10;38459:22;38438:18;38426:10;38423:34;38420:62;38417:2;;;38485:18;;:::i;:::-;38417:2;38525:10;38521:2;38514:22;38304:238;;;:::o;38548:171::-;38586:3;38609:23;38626:5;38609:23;:::i;:::-;38600:32;;38654:6;38647:5;38644:17;38641:2;;;38664:18;;:::i;:::-;38641:2;38711:1;38704:5;38700:13;38693:20;;38590:129;;;:::o;38725:233::-;38764:3;38787:24;38805:5;38787:24;:::i;:::-;38778:33;;38833:66;38826:5;38823:77;38820:2;;;38903:18;;:::i;:::-;38820:2;38950:1;38943:5;38939:13;38932:20;;38768:190;;;:::o;38964:167::-;39001:3;39024:22;39040:5;39024:22;:::i;:::-;39015:31;;39068:4;39061:5;39058:15;39055:2;;;39076:18;;:::i;:::-;39055:2;39123:1;39116:5;39112:13;39105:20;;39005:126;;;:::o;39137:176::-;39169:1;39186:20;39204:1;39186:20;:::i;:::-;39181:25;;39220:20;39238:1;39220:20;:::i;:::-;39215:25;;39259:1;39249:2;;39264:18;;:::i;:::-;39249:2;39305:1;39302;39298:9;39293:14;;39171:142;;;;:::o;39319:180::-;39367:77;39364:1;39357:88;39464:4;39461:1;39454:15;39488:4;39485:1;39478:15;39505:180;39553:77;39550:1;39543:88;39650:4;39647:1;39640:15;39674:4;39671:1;39664:15;39691:180;39739:77;39736:1;39729:88;39836:4;39833:1;39826:15;39860:4;39857:1;39850:15;39877:180;39925:77;39922:1;39915:88;40022:4;40019:1;40012:15;40046:4;40043:1;40036:15;40063:102;40104:6;40155:2;40151:7;40146:2;40139:5;40135:14;40131:28;40121:38;;40111:54;;;:::o;40171:237::-;40311:34;40307:1;40299:6;40295:14;40288:58;40380:20;40375:2;40367:6;40363:15;40356:45;40277:131;:::o;40414:225::-;40554:34;40550:1;40542:6;40538:14;40531:58;40623:8;40618:2;40610:6;40606:15;40599:33;40520:119;:::o;40645:178::-;40785:30;40781:1;40773:6;40769:14;40762:54;40751:72;:::o;40829:173::-;40969:25;40965:1;40957:6;40953:14;40946:49;40935:67;:::o;41008:223::-;41148:34;41144:1;41136:6;41132:14;41125:58;41217:6;41212:2;41204:6;41200:15;41193:31;41114:117;:::o;41237:175::-;41377:27;41373:1;41365:6;41361:14;41354:51;41343:69;:::o;41418:168::-;41558:20;41554:1;41546:6;41542:14;41535:44;41524:62;:::o;41592:231::-;41732:34;41728:1;41720:6;41716:14;41709:58;41801:14;41796:2;41788:6;41784:15;41777:39;41698:125;:::o;41829:243::-;41969:34;41965:1;41957:6;41953:14;41946:58;42038:26;42033:2;42025:6;42021:15;42014:51;41935:137;:::o;42078:220::-;42218:34;42214:1;42206:6;42202:14;42195:58;42287:3;42282:2;42274:6;42270:15;42263:28;42184:114;:::o;42304:229::-;42444:34;42440:1;42432:6;42428:14;42421:58;42513:12;42508:2;42500:6;42496:15;42489:37;42410:123;:::o;42539:228::-;42679:34;42675:1;42667:6;42663:14;42656:58;42748:11;42743:2;42735:6;42731:15;42724:36;42645:122;:::o;42773:182::-;42913:34;42909:1;42901:6;42897:14;42890:58;42879:76;:::o;42961:231::-;43101:34;43097:1;43089:6;43085:14;43078:58;43170:14;43165:2;43157:6;43153:15;43146:39;43067:125;:::o;43198:182::-;43338:34;43334:1;43326:6;43322:14;43315:58;43304:76;:::o;43386:228::-;43526:34;43522:1;43514:6;43510:14;43503:58;43595:11;43590:2;43582:6;43578:15;43571:36;43492:122;:::o;43620:234::-;43760:34;43756:1;43748:6;43744:14;43737:58;43829:17;43824:2;43816:6;43812:15;43805:42;43726:128;:::o;43860:220::-;44000:34;43996:1;43988:6;43984:14;43977:58;44069:3;44064:2;44056:6;44052:15;44045:28;43966:114;:::o;44086:236::-;44226:34;44222:1;44214:6;44210:14;44203:58;44295:19;44290:2;44282:6;44278:15;44271:44;44192:130;:::o;44328:171::-;44468:23;44464:1;44456:6;44452:14;44445:47;44434:65;:::o;44505:164::-;44645:16;44641:1;44633:6;44629:14;44622:40;44611:58;:::o;44675:163::-;44815:15;44811:1;44803:6;44799:14;44792:39;44781:57;:::o;44844:177::-;44984:29;44980:1;44972:6;44968:14;44961:53;44950:71;:::o;45027:122::-;45100:24;45118:5;45100:24;:::i;:::-;45093:5;45090:35;45080:2;;45139:1;45136;45129:12;45080:2;45070:79;:::o;45155:116::-;45225:21;45240:5;45225:21;:::i;:::-;45218:5;45215:32;45205:2;;45261:1;45258;45251:12;45205:2;45195:76;:::o;45277:120::-;45349:23;45366:5;45349:23;:::i;:::-;45342:5;45339:34;45329:2;;45387:1;45384;45377:12;45329:2;45319:78;:::o;45403:120::-;45475:23;45492:5;45475:23;:::i;:::-;45468:5;45465:34;45455:2;;45513:1;45510;45503:12;45455:2;45445:78;:::o;45529:122::-;45602:24;45620:5;45602:24;:::i;:::-;45595:5;45592:35;45582:2;;45641:1;45638;45631:12;45582:2;45572:79;:::o;45657:118::-;45728:22;45744:5;45728:22;:::i;:::-;45721:5;45718:33;45708:2;;45765:1;45762;45755:12;45708:2;45698:77;:::o

Swarm Source

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