ETH Price: $2,617.91 (+7.05%)

Token

Nekoverse (NEKO)
 

Overview

Max Total Supply

46 NEKO

Holders

5

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 NEKO
0x2cC39B5d1458e0991fB826Bd518Cc279597758EC
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nekoverse

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 11 of 13: Nekoverse.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "./ERC721Enumerable.sol";
import "./Ownable.sol";

contract Nekoverse is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 private maxMint = 20;
    
    uint256 public constant COST_ONE = 0.03 ether;
    uint256 public constant DISCOUNT1 = 0.02 ether;
    
    bool public active = false;
    uint public constant MAX_ENTRIES = 9999;
    uint public reserve = 30;

    constructor(string memory baseURI) ERC721("Nekoverse", "NEKO")  {
        setBaseURI(baseURI);
    }
    
    function getCost(uint256 num) public pure returns (uint256) {
        if (num < 10) {
            return COST_ONE * num;
        } else {
            return DISCOUNT1 * num;
        }
    }

    function mint(uint256 qty) public payable {
        uint256 mintIndex = totalSupply();

        if(msg.sender != owner()) {
          require(active, "Sale is not active");
          require( qty < (maxMint+1),"You can mint a maximum of maxMint Nekos" );
          require(msg.value >= getCost(qty), "ETH sent is not correct");
        }
        
        require( mintIndex + qty < MAX_ENTRIES, "Exceeds maximum supply" );

        for(uint256 i; i < qty; i++){
          _safeMint(msg.sender, mintIndex + i );
        }
    }
    
    function reserveMint(uint256 reserveQty) public onlyOwner {        
        uint mintIndex = totalSupply();
        require(reserveQty > 0 && reserveQty <= reserve, "Not enough reserve left for team");
        for (uint i = 0; i < reserveQty; i++) {
            _safeMint(msg.sender, mintIndex + i);
        }
        reserve = reserve - reserveQty;
    }

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

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

    function isActive() public view returns(bool) {
        return active;
    }

    function saleActive(bool val) public onlyOwner {
        active = val;
    }

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

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

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 2 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 4 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @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 5 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @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 6 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

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 7 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 8 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 9 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 10 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

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 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"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":[],"name":"COST_ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISCOUNT1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ENTRIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveQty","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"saleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526014600c556000600d60006101000a81548160ff021916908315150217905550601e600e553480156200003657600080fd5b50604051620046b3380380620046b383398181016040528101906200005c919062000405565b6040518060400160405280600981526020017f4e656b6f766572736500000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e454b4f000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e0929190620002d7565b508060019080519060200190620000f9929190620002d7565b5050506200011c620001106200013460201b60201c565b6200013c60201b60201c565b6200012d816200020260201b60201c565b506200065d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002126200013460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000238620002ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000288906200047d565b60405180910390fd5b80600b9080519060200190620002a9929190620002d7565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e59062000545565b90600052602060002090601f01602090048101928262000309576000855562000355565b82601f106200032457805160ff191683800117855562000355565b8280016001018555821562000355579182015b828111156200035457825182559160200191906001019062000337565b5b50905062000364919062000368565b5090565b5b808211156200038357600081600090555060010162000369565b5090565b60006200039e6200039884620004c8565b6200049f565b905082815260208101848484011115620003bd57620003bc62000614565b5b620003ca8482856200050f565b509392505050565b600082601f830112620003ea57620003e96200060f565b5b8151620003fc84826020860162000387565b91505092915050565b6000602082840312156200041e576200041d6200061e565b5b600082015167ffffffffffffffff8111156200043f576200043e62000619565b5b6200044d84828501620003d2565b91505092915050565b600062000465602083620004fe565b9150620004728262000634565b602082019050919050565b60006020820190508181036000830152620004988162000456565b9050919050565b6000620004ab620004be565b9050620004b982826200057b565b919050565b6000604051905090565b600067ffffffffffffffff821115620004e657620004e5620005e0565b5b620004f18262000623565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200052f57808201518184015260208101905062000512565b838111156200053f576000848401525b50505050565b600060028204905060018216806200055e57607f821691505b60208210811415620005755762000574620005b1565b5b50919050565b620005868262000623565b810181811067ffffffffffffffff82111715620005a857620005a7620005e0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614046806200066d6000396000f3fe6080604052600436106101d85760003560e01c80635a4dd47d11610102578063a0712d6811610095578063cd3293de11610064578063cd3293de146106b1578063deb32f44146106dc578063e985e9c514610705578063f2fde38b14610742576101d8565b8063a0712d6814610606578063a22cb46514610622578063b88d4fde1461064b578063c87b56dd14610674576101d8565b8063715018a6116100d1578063715018a61461056e5780637d4cb964146105855780638da5cb5b146105b057806395d89b41146105db576101d8565b80635a4dd47d1461048c5780635b4c0a25146104c95780636352211e146104f457806370a0823114610531576101d8565b806322f3e2d41161017a57806342842e0e1161014957806342842e0e146103d25780634f6ccce7146103fb57806355f804b31461043857806359ab887514610461576101d8565b806322f3e2d41461032a57806323b872dd146103555780632f745c591461037e5780633ccfd60b146103bb576101d8565b8063081812fc116101b6578063081812fc14610270578063095ea7b3146102ad5780631342ff4c146102d657806318160ddd146102ff576101d8565b806301ffc9a7146101dd57806302fb0c5e1461021a57806306fdde0314610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c92565b61076b565b60405161021191906131e2565b60405180910390f35b34801561022657600080fd5b5061022f6107e5565b60405161023c91906131e2565b60405180910390f35b34801561025157600080fd5b5061025a6107f8565b60405161026791906131fd565b60405180910390f35b34801561027c57600080fd5b5061029760048036038101906102929190612d35565b61088a565b6040516102a4919061317b565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612c25565b61090f565b005b3480156102e257600080fd5b506102fd60048036038101906102f89190612d35565b610a27565b005b34801561030b57600080fd5b50610314610b4c565b60405161032191906134ff565b60405180910390f35b34801561033657600080fd5b5061033f610b59565b60405161034c91906131e2565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190612b0f565b610b70565b005b34801561038a57600080fd5b506103a560048036038101906103a09190612c25565b610bd0565b6040516103b291906134ff565b60405180910390f35b3480156103c757600080fd5b506103d0610c75565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612b0f565b610d40565b005b34801561040757600080fd5b50610422600480360381019061041d9190612d35565b610d60565b60405161042f91906134ff565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612cec565b610dd1565b005b34801561046d57600080fd5b50610476610e67565b60405161048391906134ff565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190612d35565b610e72565b6040516104c091906134ff565b60405180910390f35b3480156104d557600080fd5b506104de610eb2565b6040516104eb91906134ff565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d35565b610ebd565b604051610528919061317b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612aa2565b610f6f565b60405161056591906134ff565b60405180910390f35b34801561057a57600080fd5b50610583611027565b005b34801561059157600080fd5b5061059a6110af565b6040516105a791906134ff565b60405180910390f35b3480156105bc57600080fd5b506105c56110b5565b6040516105d2919061317b565b60405180910390f35b3480156105e757600080fd5b506105f06110df565b6040516105fd91906131fd565b60405180910390f35b610620600480360381019061061b9190612d35565b611171565b005b34801561062e57600080fd5b5061064960048036038101906106449190612be5565b611329565b005b34801561065757600080fd5b50610672600480360381019061066d9190612b62565b6114aa565b005b34801561068057600080fd5b5061069b60048036038101906106969190612d35565b61150c565b6040516106a891906131fd565b60405180910390f35b3480156106bd57600080fd5b506106c66115b3565b6040516106d391906134ff565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612c65565b6115b9565b005b34801561071157600080fd5b5061072c60048036038101906107279190612acf565b611652565b60405161073991906131e2565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612aa2565b6116e6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107de57506107dd826117de565b5b9050919050565b600d60009054906101000a900460ff1681565b606060008054610807906137af565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906137af565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6000610895826118c0565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906133df565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a82610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061345f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa61192c565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d361192c565b611652565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f9061335f565b60405180910390fd5b610a228383611934565b505050565b610a2f61192c565b73ffffffffffffffffffffffffffffffffffffffff16610a4d6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906133ff565b60405180910390fd5b6000610aad610b4c565b9050600082118015610ac15750600e548211155b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906132bf565b60405180910390fd5b60005b82811015610b3357610b20338284610b1b91906135e4565b6119ed565b8080610b2b90613812565b915050610b03565b5081600e54610b4291906136c5565b600e819055505050565b6000600880549050905090565b6000600d60009054906101000a900460ff16905090565b610b81610b7b61192c565b82611a0b565b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061349f565b60405180910390fd5b610bcb838383611ae9565b505050565b6000610bdb83610f6f565b8210610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061323f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c7d61192c565b73ffffffffffffffffffffffffffffffffffffffff16610c9b6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906133ff565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d3c573d6000803e3d6000fd5b5050565b610d5b838383604051806020016040528060008152506114aa565b505050565b6000610d6a610b4c565b8210610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906134bf565b60405180910390fd5b60088281548110610dbf57610dbe613948565b5b90600052602060002001549050919050565b610dd961192c565b73ffffffffffffffffffffffffffffffffffffffff16610df76110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e44906133ff565b60405180910390fd5b80600b9080519060200190610e639291906128b6565b5050565b66470de4df82000081565b6000600a821015610e975781666a94d74f430000610e90919061366b565b9050610ead565b8166470de4df820000610eaa919061366b565b90505b919050565b666a94d74f43000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061339f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd79061337f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102f61192c565b73ffffffffffffffffffffffffffffffffffffffff1661104d6110b5565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906133ff565b60405180910390fd5b6110ad6000611d45565b565b61270f81565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110ee906137af565b80601f016020809104026020016040519081016040528092919081815260200182805461111a906137af565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905090565b600061117b610b4c565b90506111856110b5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a257600d60009054906101000a900460ff16611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9061331f565b60405180910390fd5b6001600c5461121591906135e4565b8210611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9061321f565b60405180910390fd5b61125f82610e72565b3410156112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134df565b60405180910390fd5b5b61270f82826112b191906135e4565b106112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e89061347f565b60405180910390fd5b60005b828110156113245761131133828461130c91906135e4565b6119ed565b808061131c90613812565b9150506112f4565b505050565b61133161192c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611396906132ff565b60405180910390fd5b80600560006113ac61192c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661145961192c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149e91906131e2565b60405180910390a35050565b6114bb6114b561192c565b83611a0b565b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061349f565b60405180910390fd5b61150684848484611e0b565b50505050565b6060611517826118c0565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d9061343f565b60405180910390fd5b6000611560611e67565b9050600081511161158057604051806020016040528060008152506115ab565b8061158a84611ef9565b60405160200161159b929190613157565b6040516020818303038152906040525b915050919050565b600e5481565b6115c161192c565b73ffffffffffffffffffffffffffffffffffffffff166115df6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906133ff565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116ee61192c565b73ffffffffffffffffffffffffffffffffffffffff1661170c6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611759906133ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061327f565b60405180910390fd5b6117db81611d45565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118b957506118b88261205a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119a783610ebd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a078282604051806020016040528060008152506120c4565b5050565b6000611a16826118c0565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c9061333f565b60405180910390fd5b6000611a6083610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611acf57508373ffffffffffffffffffffffffffffffffffffffff16611ab78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ae05750611adf8185611652565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b0982610ebd565b73ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b569061341f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc6906132df565b60405180910390fd5b611bda83838361211f565b611be5600082611934565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3591906136c5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8c91906135e4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e16848484611ae9565b611e2284848484612233565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061325f565b60405180910390fd5b50505050565b6060600b8054611e76906137af565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea2906137af565b8015611eef5780601f10611ec457610100808354040283529160200191611eef565b820191906000526020600020905b815481529060010190602001808311611ed257829003601f168201915b5050505050905090565b60606000821415611f41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612055565b600082905060005b60008214611f73578080611f5c90613812565b915050600a82611f6c919061363a565b9150611f49565b60008167ffffffffffffffff811115611f8f57611f8e613977565b5b6040519080825280601f01601f191660200182016040528015611fc15781602001600182028036833780820191505090505b5090505b6000851461204e57600182611fda91906136c5565b9150600a85611fe9919061385b565b6030611ff591906135e4565b60f81b81838151811061200b5761200a613948565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612047919061363a565b9450611fc5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120ce83836123ca565b6120db6000848484612233565b61211a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121119061325f565b60405180910390fd5b505050565b61212a838383612598565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561216d576121688161259d565b6121ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121ab576121aa83826125e6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ef576121ea81612753565b61222e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461222d5761222c8282612824565b5b5b505050565b60006122548473ffffffffffffffffffffffffffffffffffffffff166128a3565b156123bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227d61192c565b8786866040518563ffffffff1660e01b815260040161229f9493929190613196565b602060405180830381600087803b1580156122b957600080fd5b505af19250505080156122ea57506040513d601f19601f820116820180604052508101906122e79190612cbf565b60015b61236d573d806000811461231a576040519150601f19603f3d011682016040523d82523d6000602084013e61231f565b606091505b50600081511415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c9061325f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123c2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906133bf565b60405180910390fd5b612443816118c0565b15612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061329f565b60405180910390fd5b61248f6000838361211f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124df91906135e4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125f384610f6f565b6125fd91906136c5565b90506000600760008481526020019081526020016000205490508181146126e2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061276791906136c5565b905060006009600084815260200190815260200160002054905060006008838154811061279757612796613948565b5b9060005260206000200154905080600883815481106127b9576127b8613948565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061280857612807613919565b5b6001900381819060005260206000200160009055905550505050565b600061282f83610f6f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546128c2906137af565b90600052602060002090601f0160209004810192826128e4576000855561292b565b82601f106128fd57805160ff191683800117855561292b565b8280016001018555821561292b579182015b8281111561292a57825182559160200191906001019061290f565b5b509050612938919061293c565b5090565b5b8082111561295557600081600090555060010161293d565b5090565b600061296c6129678461353f565b61351a565b905082815260208101848484011115612988576129876139ab565b5b61299384828561376d565b509392505050565b60006129ae6129a984613570565b61351a565b9050828152602081018484840111156129ca576129c96139ab565b5b6129d584828561376d565b509392505050565b6000813590506129ec81613fb4565b92915050565b600081359050612a0181613fcb565b92915050565b600081359050612a1681613fe2565b92915050565b600081519050612a2b81613fe2565b92915050565b600082601f830112612a4657612a456139a6565b5b8135612a56848260208601612959565b91505092915050565b600082601f830112612a7457612a736139a6565b5b8135612a8484826020860161299b565b91505092915050565b600081359050612a9c81613ff9565b92915050565b600060208284031215612ab857612ab76139b5565b5b6000612ac6848285016129dd565b91505092915050565b60008060408385031215612ae657612ae56139b5565b5b6000612af4858286016129dd565b9250506020612b05858286016129dd565b9150509250929050565b600080600060608486031215612b2857612b276139b5565b5b6000612b36868287016129dd565b9350506020612b47868287016129dd565b9250506040612b5886828701612a8d565b9150509250925092565b60008060008060808587031215612b7c57612b7b6139b5565b5b6000612b8a878288016129dd565b9450506020612b9b878288016129dd565b9350506040612bac87828801612a8d565b925050606085013567ffffffffffffffff811115612bcd57612bcc6139b0565b5b612bd987828801612a31565b91505092959194509250565b60008060408385031215612bfc57612bfb6139b5565b5b6000612c0a858286016129dd565b9250506020612c1b858286016129f2565b9150509250929050565b60008060408385031215612c3c57612c3b6139b5565b5b6000612c4a858286016129dd565b9250506020612c5b85828601612a8d565b9150509250929050565b600060208284031215612c7b57612c7a6139b5565b5b6000612c89848285016129f2565b91505092915050565b600060208284031215612ca857612ca76139b5565b5b6000612cb684828501612a07565b91505092915050565b600060208284031215612cd557612cd46139b5565b5b6000612ce384828501612a1c565b91505092915050565b600060208284031215612d0257612d016139b5565b5b600082013567ffffffffffffffff811115612d2057612d1f6139b0565b5b612d2c84828501612a5f565b91505092915050565b600060208284031215612d4b57612d4a6139b5565b5b6000612d5984828501612a8d565b91505092915050565b612d6b816136f9565b82525050565b612d7a8161370b565b82525050565b6000612d8b826135a1565b612d9581856135b7565b9350612da581856020860161377c565b612dae816139ba565b840191505092915050565b6000612dc4826135ac565b612dce81856135c8565b9350612dde81856020860161377c565b612de7816139ba565b840191505092915050565b6000612dfd826135ac565b612e0781856135d9565b9350612e1781856020860161377c565b80840191505092915050565b6000612e306027836135c8565b9150612e3b826139cb565b604082019050919050565b6000612e53602b836135c8565b9150612e5e82613a1a565b604082019050919050565b6000612e766032836135c8565b9150612e8182613a69565b604082019050919050565b6000612e996026836135c8565b9150612ea482613ab8565b604082019050919050565b6000612ebc601c836135c8565b9150612ec782613b07565b602082019050919050565b6000612edf6020836135c8565b9150612eea82613b30565b602082019050919050565b6000612f026024836135c8565b9150612f0d82613b59565b604082019050919050565b6000612f256019836135c8565b9150612f3082613ba8565b602082019050919050565b6000612f486012836135c8565b9150612f5382613bd1565b602082019050919050565b6000612f6b602c836135c8565b9150612f7682613bfa565b604082019050919050565b6000612f8e6038836135c8565b9150612f9982613c49565b604082019050919050565b6000612fb1602a836135c8565b9150612fbc82613c98565b604082019050919050565b6000612fd46029836135c8565b9150612fdf82613ce7565b604082019050919050565b6000612ff76020836135c8565b915061300282613d36565b602082019050919050565b600061301a602c836135c8565b915061302582613d5f565b604082019050919050565b600061303d6020836135c8565b915061304882613dae565b602082019050919050565b60006130606029836135c8565b915061306b82613dd7565b604082019050919050565b6000613083602f836135c8565b915061308e82613e26565b604082019050919050565b60006130a66021836135c8565b91506130b182613e75565b604082019050919050565b60006130c96016836135c8565b91506130d482613ec4565b602082019050919050565b60006130ec6031836135c8565b91506130f782613eed565b604082019050919050565b600061310f602c836135c8565b915061311a82613f3c565b604082019050919050565b60006131326017836135c8565b915061313d82613f8b565b602082019050919050565b61315181613763565b82525050565b60006131638285612df2565b915061316f8284612df2565b91508190509392505050565b60006020820190506131906000830184612d62565b92915050565b60006080820190506131ab6000830187612d62565b6131b86020830186612d62565b6131c56040830185613148565b81810360608301526131d78184612d80565b905095945050505050565b60006020820190506131f76000830184612d71565b92915050565b600060208201905081810360008301526132178184612db9565b905092915050565b6000602082019050818103600083015261323881612e23565b9050919050565b6000602082019050818103600083015261325881612e46565b9050919050565b6000602082019050818103600083015261327881612e69565b9050919050565b6000602082019050818103600083015261329881612e8c565b9050919050565b600060208201905081810360008301526132b881612eaf565b9050919050565b600060208201905081810360008301526132d881612ed2565b9050919050565b600060208201905081810360008301526132f881612ef5565b9050919050565b6000602082019050818103600083015261331881612f18565b9050919050565b6000602082019050818103600083015261333881612f3b565b9050919050565b6000602082019050818103600083015261335881612f5e565b9050919050565b6000602082019050818103600083015261337881612f81565b9050919050565b6000602082019050818103600083015261339881612fa4565b9050919050565b600060208201905081810360008301526133b881612fc7565b9050919050565b600060208201905081810360008301526133d881612fea565b9050919050565b600060208201905081810360008301526133f88161300d565b9050919050565b6000602082019050818103600083015261341881613030565b9050919050565b6000602082019050818103600083015261343881613053565b9050919050565b6000602082019050818103600083015261345881613076565b9050919050565b6000602082019050818103600083015261347881613099565b9050919050565b60006020820190508181036000830152613498816130bc565b9050919050565b600060208201905081810360008301526134b8816130df565b9050919050565b600060208201905081810360008301526134d881613102565b9050919050565b600060208201905081810360008301526134f881613125565b9050919050565b60006020820190506135146000830184613148565b92915050565b6000613524613535565b905061353082826137e1565b919050565b6000604051905090565b600067ffffffffffffffff82111561355a57613559613977565b5b613563826139ba565b9050602081019050919050565b600067ffffffffffffffff82111561358b5761358a613977565b5b613594826139ba565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135ef82613763565b91506135fa83613763565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362f5761362e61388c565b5b828201905092915050565b600061364582613763565b915061365083613763565b9250826136605761365f6138bb565b5b828204905092915050565b600061367682613763565b915061368183613763565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136ba576136b961388c565b5b828202905092915050565b60006136d082613763565b91506136db83613763565b9250828210156136ee576136ed61388c565b5b828203905092915050565b600061370482613743565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379a57808201518184015260208101905061377f565b838111156137a9576000848401525b50505050565b600060028204905060018216806137c757607f821691505b602082108114156137db576137da6138ea565b5b50919050565b6137ea826139ba565b810181811067ffffffffffffffff8211171561380957613808613977565b5b80604052505050565b600061381d82613763565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138505761384f61388c565b5b600182019050919050565b600061386682613763565b915061387183613763565b925082613881576138806138bb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206d696e742061206d6178696d756d206f66206d61784d696e60008201527f74204e656b6f7300000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482073656e74206973206e6f7420636f7272656374000000000000000000600082015250565b613fbd816136f9565b8114613fc857600080fd5b50565b613fd48161370b565b8114613fdf57600080fd5b50565b613feb81613717565b8114613ff657600080fd5b50565b61400281613763565b811461400d57600080fd5b5056fea2646970667358221220f654105e817fceea8f79728a1aa58c0dfbfca062a5381b11de7d68e9f8cac4da64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f6e656b6f76657273656e66742e696f2f6170692f00000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80635a4dd47d11610102578063a0712d6811610095578063cd3293de11610064578063cd3293de146106b1578063deb32f44146106dc578063e985e9c514610705578063f2fde38b14610742576101d8565b8063a0712d6814610606578063a22cb46514610622578063b88d4fde1461064b578063c87b56dd14610674576101d8565b8063715018a6116100d1578063715018a61461056e5780637d4cb964146105855780638da5cb5b146105b057806395d89b41146105db576101d8565b80635a4dd47d1461048c5780635b4c0a25146104c95780636352211e146104f457806370a0823114610531576101d8565b806322f3e2d41161017a57806342842e0e1161014957806342842e0e146103d25780634f6ccce7146103fb57806355f804b31461043857806359ab887514610461576101d8565b806322f3e2d41461032a57806323b872dd146103555780632f745c591461037e5780633ccfd60b146103bb576101d8565b8063081812fc116101b6578063081812fc14610270578063095ea7b3146102ad5780631342ff4c146102d657806318160ddd146102ff576101d8565b806301ffc9a7146101dd57806302fb0c5e1461021a57806306fdde0314610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c92565b61076b565b60405161021191906131e2565b60405180910390f35b34801561022657600080fd5b5061022f6107e5565b60405161023c91906131e2565b60405180910390f35b34801561025157600080fd5b5061025a6107f8565b60405161026791906131fd565b60405180910390f35b34801561027c57600080fd5b5061029760048036038101906102929190612d35565b61088a565b6040516102a4919061317b565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612c25565b61090f565b005b3480156102e257600080fd5b506102fd60048036038101906102f89190612d35565b610a27565b005b34801561030b57600080fd5b50610314610b4c565b60405161032191906134ff565b60405180910390f35b34801561033657600080fd5b5061033f610b59565b60405161034c91906131e2565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190612b0f565b610b70565b005b34801561038a57600080fd5b506103a560048036038101906103a09190612c25565b610bd0565b6040516103b291906134ff565b60405180910390f35b3480156103c757600080fd5b506103d0610c75565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612b0f565b610d40565b005b34801561040757600080fd5b50610422600480360381019061041d9190612d35565b610d60565b60405161042f91906134ff565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612cec565b610dd1565b005b34801561046d57600080fd5b50610476610e67565b60405161048391906134ff565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190612d35565b610e72565b6040516104c091906134ff565b60405180910390f35b3480156104d557600080fd5b506104de610eb2565b6040516104eb91906134ff565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d35565b610ebd565b604051610528919061317b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612aa2565b610f6f565b60405161056591906134ff565b60405180910390f35b34801561057a57600080fd5b50610583611027565b005b34801561059157600080fd5b5061059a6110af565b6040516105a791906134ff565b60405180910390f35b3480156105bc57600080fd5b506105c56110b5565b6040516105d2919061317b565b60405180910390f35b3480156105e757600080fd5b506105f06110df565b6040516105fd91906131fd565b60405180910390f35b610620600480360381019061061b9190612d35565b611171565b005b34801561062e57600080fd5b5061064960048036038101906106449190612be5565b611329565b005b34801561065757600080fd5b50610672600480360381019061066d9190612b62565b6114aa565b005b34801561068057600080fd5b5061069b60048036038101906106969190612d35565b61150c565b6040516106a891906131fd565b60405180910390f35b3480156106bd57600080fd5b506106c66115b3565b6040516106d391906134ff565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612c65565b6115b9565b005b34801561071157600080fd5b5061072c60048036038101906107279190612acf565b611652565b60405161073991906131e2565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612aa2565b6116e6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107de57506107dd826117de565b5b9050919050565b600d60009054906101000a900460ff1681565b606060008054610807906137af565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906137af565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6000610895826118c0565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906133df565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a82610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061345f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa61192c565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d361192c565b611652565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f9061335f565b60405180910390fd5b610a228383611934565b505050565b610a2f61192c565b73ffffffffffffffffffffffffffffffffffffffff16610a4d6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906133ff565b60405180910390fd5b6000610aad610b4c565b9050600082118015610ac15750600e548211155b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906132bf565b60405180910390fd5b60005b82811015610b3357610b20338284610b1b91906135e4565b6119ed565b8080610b2b90613812565b915050610b03565b5081600e54610b4291906136c5565b600e819055505050565b6000600880549050905090565b6000600d60009054906101000a900460ff16905090565b610b81610b7b61192c565b82611a0b565b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061349f565b60405180910390fd5b610bcb838383611ae9565b505050565b6000610bdb83610f6f565b8210610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061323f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c7d61192c565b73ffffffffffffffffffffffffffffffffffffffff16610c9b6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906133ff565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d3c573d6000803e3d6000fd5b5050565b610d5b838383604051806020016040528060008152506114aa565b505050565b6000610d6a610b4c565b8210610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906134bf565b60405180910390fd5b60088281548110610dbf57610dbe613948565b5b90600052602060002001549050919050565b610dd961192c565b73ffffffffffffffffffffffffffffffffffffffff16610df76110b5565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e44906133ff565b60405180910390fd5b80600b9080519060200190610e639291906128b6565b5050565b66470de4df82000081565b6000600a821015610e975781666a94d74f430000610e90919061366b565b9050610ead565b8166470de4df820000610eaa919061366b565b90505b919050565b666a94d74f43000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061339f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd79061337f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102f61192c565b73ffffffffffffffffffffffffffffffffffffffff1661104d6110b5565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906133ff565b60405180910390fd5b6110ad6000611d45565b565b61270f81565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110ee906137af565b80601f016020809104026020016040519081016040528092919081815260200182805461111a906137af565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905090565b600061117b610b4c565b90506111856110b5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a257600d60009054906101000a900460ff16611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9061331f565b60405180910390fd5b6001600c5461121591906135e4565b8210611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9061321f565b60405180910390fd5b61125f82610e72565b3410156112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134df565b60405180910390fd5b5b61270f82826112b191906135e4565b106112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e89061347f565b60405180910390fd5b60005b828110156113245761131133828461130c91906135e4565b6119ed565b808061131c90613812565b9150506112f4565b505050565b61133161192c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611396906132ff565b60405180910390fd5b80600560006113ac61192c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661145961192c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149e91906131e2565b60405180910390a35050565b6114bb6114b561192c565b83611a0b565b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061349f565b60405180910390fd5b61150684848484611e0b565b50505050565b6060611517826118c0565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d9061343f565b60405180910390fd5b6000611560611e67565b9050600081511161158057604051806020016040528060008152506115ab565b8061158a84611ef9565b60405160200161159b929190613157565b6040516020818303038152906040525b915050919050565b600e5481565b6115c161192c565b73ffffffffffffffffffffffffffffffffffffffff166115df6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906133ff565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116ee61192c565b73ffffffffffffffffffffffffffffffffffffffff1661170c6110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611759906133ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061327f565b60405180910390fd5b6117db81611d45565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118b957506118b88261205a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119a783610ebd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a078282604051806020016040528060008152506120c4565b5050565b6000611a16826118c0565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c9061333f565b60405180910390fd5b6000611a6083610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611acf57508373ffffffffffffffffffffffffffffffffffffffff16611ab78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ae05750611adf8185611652565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b0982610ebd565b73ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b569061341f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc6906132df565b60405180910390fd5b611bda83838361211f565b611be5600082611934565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3591906136c5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8c91906135e4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e16848484611ae9565b611e2284848484612233565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061325f565b60405180910390fd5b50505050565b6060600b8054611e76906137af565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea2906137af565b8015611eef5780601f10611ec457610100808354040283529160200191611eef565b820191906000526020600020905b815481529060010190602001808311611ed257829003601f168201915b5050505050905090565b60606000821415611f41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612055565b600082905060005b60008214611f73578080611f5c90613812565b915050600a82611f6c919061363a565b9150611f49565b60008167ffffffffffffffff811115611f8f57611f8e613977565b5b6040519080825280601f01601f191660200182016040528015611fc15781602001600182028036833780820191505090505b5090505b6000851461204e57600182611fda91906136c5565b9150600a85611fe9919061385b565b6030611ff591906135e4565b60f81b81838151811061200b5761200a613948565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612047919061363a565b9450611fc5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120ce83836123ca565b6120db6000848484612233565b61211a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121119061325f565b60405180910390fd5b505050565b61212a838383612598565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561216d576121688161259d565b6121ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121ab576121aa83826125e6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ef576121ea81612753565b61222e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461222d5761222c8282612824565b5b5b505050565b60006122548473ffffffffffffffffffffffffffffffffffffffff166128a3565b156123bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227d61192c565b8786866040518563ffffffff1660e01b815260040161229f9493929190613196565b602060405180830381600087803b1580156122b957600080fd5b505af19250505080156122ea57506040513d601f19601f820116820180604052508101906122e79190612cbf565b60015b61236d573d806000811461231a576040519150601f19603f3d011682016040523d82523d6000602084013e61231f565b606091505b50600081511415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c9061325f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123c2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906133bf565b60405180910390fd5b612443816118c0565b15612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061329f565b60405180910390fd5b61248f6000838361211f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124df91906135e4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125f384610f6f565b6125fd91906136c5565b90506000600760008481526020019081526020016000205490508181146126e2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061276791906136c5565b905060006009600084815260200190815260200160002054905060006008838154811061279757612796613948565b5b9060005260206000200154905080600883815481106127b9576127b8613948565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061280857612807613919565b5b6001900381819060005260206000200160009055905550505050565b600061282f83610f6f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546128c2906137af565b90600052602060002090601f0160209004810192826128e4576000855561292b565b82601f106128fd57805160ff191683800117855561292b565b8280016001018555821561292b579182015b8281111561292a57825182559160200191906001019061290f565b5b509050612938919061293c565b5090565b5b8082111561295557600081600090555060010161293d565b5090565b600061296c6129678461353f565b61351a565b905082815260208101848484011115612988576129876139ab565b5b61299384828561376d565b509392505050565b60006129ae6129a984613570565b61351a565b9050828152602081018484840111156129ca576129c96139ab565b5b6129d584828561376d565b509392505050565b6000813590506129ec81613fb4565b92915050565b600081359050612a0181613fcb565b92915050565b600081359050612a1681613fe2565b92915050565b600081519050612a2b81613fe2565b92915050565b600082601f830112612a4657612a456139a6565b5b8135612a56848260208601612959565b91505092915050565b600082601f830112612a7457612a736139a6565b5b8135612a8484826020860161299b565b91505092915050565b600081359050612a9c81613ff9565b92915050565b600060208284031215612ab857612ab76139b5565b5b6000612ac6848285016129dd565b91505092915050565b60008060408385031215612ae657612ae56139b5565b5b6000612af4858286016129dd565b9250506020612b05858286016129dd565b9150509250929050565b600080600060608486031215612b2857612b276139b5565b5b6000612b36868287016129dd565b9350506020612b47868287016129dd565b9250506040612b5886828701612a8d565b9150509250925092565b60008060008060808587031215612b7c57612b7b6139b5565b5b6000612b8a878288016129dd565b9450506020612b9b878288016129dd565b9350506040612bac87828801612a8d565b925050606085013567ffffffffffffffff811115612bcd57612bcc6139b0565b5b612bd987828801612a31565b91505092959194509250565b60008060408385031215612bfc57612bfb6139b5565b5b6000612c0a858286016129dd565b9250506020612c1b858286016129f2565b9150509250929050565b60008060408385031215612c3c57612c3b6139b5565b5b6000612c4a858286016129dd565b9250506020612c5b85828601612a8d565b9150509250929050565b600060208284031215612c7b57612c7a6139b5565b5b6000612c89848285016129f2565b91505092915050565b600060208284031215612ca857612ca76139b5565b5b6000612cb684828501612a07565b91505092915050565b600060208284031215612cd557612cd46139b5565b5b6000612ce384828501612a1c565b91505092915050565b600060208284031215612d0257612d016139b5565b5b600082013567ffffffffffffffff811115612d2057612d1f6139b0565b5b612d2c84828501612a5f565b91505092915050565b600060208284031215612d4b57612d4a6139b5565b5b6000612d5984828501612a8d565b91505092915050565b612d6b816136f9565b82525050565b612d7a8161370b565b82525050565b6000612d8b826135a1565b612d9581856135b7565b9350612da581856020860161377c565b612dae816139ba565b840191505092915050565b6000612dc4826135ac565b612dce81856135c8565b9350612dde81856020860161377c565b612de7816139ba565b840191505092915050565b6000612dfd826135ac565b612e0781856135d9565b9350612e1781856020860161377c565b80840191505092915050565b6000612e306027836135c8565b9150612e3b826139cb565b604082019050919050565b6000612e53602b836135c8565b9150612e5e82613a1a565b604082019050919050565b6000612e766032836135c8565b9150612e8182613a69565b604082019050919050565b6000612e996026836135c8565b9150612ea482613ab8565b604082019050919050565b6000612ebc601c836135c8565b9150612ec782613b07565b602082019050919050565b6000612edf6020836135c8565b9150612eea82613b30565b602082019050919050565b6000612f026024836135c8565b9150612f0d82613b59565b604082019050919050565b6000612f256019836135c8565b9150612f3082613ba8565b602082019050919050565b6000612f486012836135c8565b9150612f5382613bd1565b602082019050919050565b6000612f6b602c836135c8565b9150612f7682613bfa565b604082019050919050565b6000612f8e6038836135c8565b9150612f9982613c49565b604082019050919050565b6000612fb1602a836135c8565b9150612fbc82613c98565b604082019050919050565b6000612fd46029836135c8565b9150612fdf82613ce7565b604082019050919050565b6000612ff76020836135c8565b915061300282613d36565b602082019050919050565b600061301a602c836135c8565b915061302582613d5f565b604082019050919050565b600061303d6020836135c8565b915061304882613dae565b602082019050919050565b60006130606029836135c8565b915061306b82613dd7565b604082019050919050565b6000613083602f836135c8565b915061308e82613e26565b604082019050919050565b60006130a66021836135c8565b91506130b182613e75565b604082019050919050565b60006130c96016836135c8565b91506130d482613ec4565b602082019050919050565b60006130ec6031836135c8565b91506130f782613eed565b604082019050919050565b600061310f602c836135c8565b915061311a82613f3c565b604082019050919050565b60006131326017836135c8565b915061313d82613f8b565b602082019050919050565b61315181613763565b82525050565b60006131638285612df2565b915061316f8284612df2565b91508190509392505050565b60006020820190506131906000830184612d62565b92915050565b60006080820190506131ab6000830187612d62565b6131b86020830186612d62565b6131c56040830185613148565b81810360608301526131d78184612d80565b905095945050505050565b60006020820190506131f76000830184612d71565b92915050565b600060208201905081810360008301526132178184612db9565b905092915050565b6000602082019050818103600083015261323881612e23565b9050919050565b6000602082019050818103600083015261325881612e46565b9050919050565b6000602082019050818103600083015261327881612e69565b9050919050565b6000602082019050818103600083015261329881612e8c565b9050919050565b600060208201905081810360008301526132b881612eaf565b9050919050565b600060208201905081810360008301526132d881612ed2565b9050919050565b600060208201905081810360008301526132f881612ef5565b9050919050565b6000602082019050818103600083015261331881612f18565b9050919050565b6000602082019050818103600083015261333881612f3b565b9050919050565b6000602082019050818103600083015261335881612f5e565b9050919050565b6000602082019050818103600083015261337881612f81565b9050919050565b6000602082019050818103600083015261339881612fa4565b9050919050565b600060208201905081810360008301526133b881612fc7565b9050919050565b600060208201905081810360008301526133d881612fea565b9050919050565b600060208201905081810360008301526133f88161300d565b9050919050565b6000602082019050818103600083015261341881613030565b9050919050565b6000602082019050818103600083015261343881613053565b9050919050565b6000602082019050818103600083015261345881613076565b9050919050565b6000602082019050818103600083015261347881613099565b9050919050565b60006020820190508181036000830152613498816130bc565b9050919050565b600060208201905081810360008301526134b8816130df565b9050919050565b600060208201905081810360008301526134d881613102565b9050919050565b600060208201905081810360008301526134f881613125565b9050919050565b60006020820190506135146000830184613148565b92915050565b6000613524613535565b905061353082826137e1565b919050565b6000604051905090565b600067ffffffffffffffff82111561355a57613559613977565b5b613563826139ba565b9050602081019050919050565b600067ffffffffffffffff82111561358b5761358a613977565b5b613594826139ba565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135ef82613763565b91506135fa83613763565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362f5761362e61388c565b5b828201905092915050565b600061364582613763565b915061365083613763565b9250826136605761365f6138bb565b5b828204905092915050565b600061367682613763565b915061368183613763565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136ba576136b961388c565b5b828202905092915050565b60006136d082613763565b91506136db83613763565b9250828210156136ee576136ed61388c565b5b828203905092915050565b600061370482613743565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379a57808201518184015260208101905061377f565b838111156137a9576000848401525b50505050565b600060028204905060018216806137c757607f821691505b602082108114156137db576137da6138ea565b5b50919050565b6137ea826139ba565b810181811067ffffffffffffffff8211171561380957613808613977565b5b80604052505050565b600061381d82613763565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138505761384f61388c565b5b600182019050919050565b600061386682613763565b915061387183613763565b925082613881576138806138bb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206d696e742061206d6178696d756d206f66206d61784d696e60008201527f74204e656b6f7300000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482073656e74206973206e6f7420636f7272656374000000000000000000600082015250565b613fbd816136f9565b8114613fc857600080fd5b50565b613fd48161370b565b8114613fdf57600080fd5b50565b613feb81613717565b8114613ff657600080fd5b50565b61400281613763565b811461400d57600080fd5b5056fea2646970667358221220f654105e817fceea8f79728a1aa58c0dfbfca062a5381b11de7d68e9f8cac4da64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f6e656b6f76657273656e66742e696f2f6170692f00000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://nekoversenft.io/api/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [2] : 68747470733a2f2f6e656b6f76657273656e66742e696f2f6170692f00000000


Deployed Bytecode Sourcemap

121:2168:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;391:26:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1372:362:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1534:111:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1974:78:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2146:140:10;;;;;;;;;;;;;:::i;:::-;;5120:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1864:102:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;332:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;617:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;280:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2052:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;424:39:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;820:540:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4144:290:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2679:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;470:24:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2060:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4500:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;909:222:4;1011:4;1049:35;1034:50;;;:11;:50;;;;:90;;;;1088:36;1112:11;1088:23;:36::i;:::-;1034:90;1027:97;;909:222;;;:::o;391:26:10:-;;;;;;;;;;;;;:::o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;1372:362:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1449:14:10::1;1466:13;:11;:13::i;:::-;1449:30;;1511:1;1498:10;:14;:39;;;;;1530:7;;1516:10;:21;;1498:39;1490:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;1590:6;1585:101;1606:10;1602:1;:14;1585:101;;;1638:36;1648:10;1672:1;1660:9;:13;;;;:::i;:::-;1638:9;:36::i;:::-;1618:3;;;;;:::i;:::-;;;;1585:101;;;;1716:10;1706:7;;:20;;;;:::i;:::-;1696:7;:30;;;;1430:304;1372:362:::0;:::o;1534:111:4:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;1974:78:10:-;2014:4;2038:6;;;;;;;;;;;2031:13;;1974:78;:::o;4724:330:3:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:4:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;2146:140:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2194:12:10::1;2209:21;2194:36;;2249:10;2241:28;;:37;2270:7;2241:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2183:103;2146:140::o:0;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1717:230:4:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;;1916:24;;1717:230;;;:::o;1864:102:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1951:7:10::1;1935:13;:23;;;;;;;;;;;;:::i;:::-;;1864:102:::0;:::o;332:46::-;368:10;332:46;:::o;617:195::-;668:7;698:2;692:3;:8;688:117;;;735:3;315:10;724:14;;;;:::i;:::-;717:21;;;;688:117;790:3;368:10;778:15;;;;:::i;:::-;771:22;;617:195;;;;:::o;280:45::-;315:10;280:45;:::o;2052:235:3:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;424:39:10:-;459:4;424:39;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;820:540:10:-;873:17;893:13;:11;:13::i;:::-;873:33;;936:7;:5;:7::i;:::-;922:21;;:10;:21;;;919:245;;966:6;;;;;;;;;;;958:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;1032:1;1024:7;;:9;;;;:::i;:::-;1017:3;:17;1008:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;1112:12;1120:3;1112:7;:12::i;:::-;1099:9;:25;;1091:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;919:245;459:4;1205:3;1193:9;:15;;;;:::i;:::-;:29;1184:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1267:9;1263:90;1282:3;1278:1;:7;1263:90;;;1304:37;1314:10;1338:1;1326:9;:13;;;;:::i;:::-;1304:9;:37::i;:::-;1287:3;;;;;:::i;:::-;;;;1263:90;;;;862:498;820:540;:::o;4144:290:3:-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;2679:329::-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;470:24:10:-;;;;:::o;2060:78::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2127:3:10::1;2118:6;;:12;;;;;;;;;;;;;;;;;;2060:78:::0;:::o;4500:162:3:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;1431:300:3:-;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;7157:125::-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11008:171:3:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;6547:307:3:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;1742:114:10:-;1802:13;1835;1828:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1742:114;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;8443:311:3:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;2543:572:4:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;11732:778:3:-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;9076:372::-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;13066:122::-;;;;:::o;3821:161:4:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5103:289;5069:323;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4680:889;;4599:970;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;:::i;:::-;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3483:143;3409:217;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:::-;14567:3;14588:67;14652:2;14647:3;14588:67;:::i;:::-;14581:74;;14664:93;14753:3;14664:93;:::i;:::-;14782:2;14777:3;14773:12;14766:19;;14425:366;;;:::o;14797:::-;14939:3;14960:67;15024:2;15019:3;14960:67;:::i;:::-;14953:74;;15036:93;15125:3;15036:93;:::i;:::-;15154:2;15149:3;15145:12;15138:19;;14797:366;;;:::o;15169:::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:::-;15683:3;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15780:93;15869:3;15780:93;:::i;:::-;15898:2;15893:3;15889:12;15882:19;;15541:366;;;:::o;15913:::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:::-;16427:3;16448:67;16512:2;16507:3;16448:67;:::i;:::-;16441:74;;16524:93;16613:3;16524:93;:::i;:::-;16642:2;16637:3;16633:12;16626:19;;16285:366;;;:::o;16657:::-;16799:3;16820:67;16884:2;16879:3;16820:67;:::i;:::-;16813:74;;16896:93;16985:3;16896:93;:::i;:::-;17014:2;17009:3;17005:12;16998:19;;16657:366;;;:::o;17029:::-;17171:3;17192:67;17256:2;17251:3;17192:67;:::i;:::-;17185:74;;17268:93;17357:3;17268:93;:::i;:::-;17386:2;17381:3;17377:12;17370:19;;17029:366;;;:::o;17401:118::-;17488:24;17506:5;17488:24;:::i;:::-;17483:3;17476:37;17401:118;;:::o;17525:435::-;17705:3;17727:95;17818:3;17809:6;17727:95;:::i;:::-;17720:102;;17839:95;17930:3;17921:6;17839:95;:::i;:::-;17832:102;;17951:3;17944:10;;17525:435;;;;;:::o;17966:222::-;18059:4;18097:2;18086:9;18082:18;18074:26;;18110:71;18178:1;18167:9;18163:17;18154:6;18110:71;:::i;:::-;17966:222;;;;:::o;18194:640::-;18389:4;18427:3;18416:9;18412:19;18404:27;;18441:71;18509:1;18498:9;18494:17;18485:6;18441:71;:::i;:::-;18522:72;18590:2;18579:9;18575:18;18566:6;18522:72;:::i;:::-;18604;18672:2;18661:9;18657:18;18648:6;18604:72;:::i;:::-;18723:9;18717:4;18713:20;18708:2;18697:9;18693:18;18686:48;18751:76;18822:4;18813:6;18751:76;:::i;:::-;18743:84;;18194:640;;;;;;;:::o;18840:210::-;18927:4;18965:2;18954:9;18950:18;18942:26;;18978:65;19040:1;19029:9;19025:17;19016:6;18978:65;:::i;:::-;18840:210;;;;:::o;19056:313::-;19169:4;19207:2;19196:9;19192:18;19184:26;;19256:9;19250:4;19246:20;19242:1;19231:9;19227:17;19220:47;19284:78;19357:4;19348:6;19284:78;:::i;:::-;19276:86;;19056:313;;;;:::o;19375:419::-;19541:4;19579:2;19568:9;19564:18;19556:26;;19628:9;19622:4;19618:20;19614:1;19603:9;19599:17;19592:47;19656:131;19782:4;19656:131;:::i;:::-;19648:139;;19375:419;;;:::o;19800:::-;19966:4;20004:2;19993:9;19989:18;19981:26;;20053:9;20047:4;20043:20;20039:1;20028:9;20024:17;20017:47;20081:131;20207:4;20081:131;:::i;:::-;20073:139;;19800:419;;;:::o;20225:::-;20391:4;20429:2;20418:9;20414:18;20406:26;;20478:9;20472:4;20468:20;20464:1;20453:9;20449:17;20442:47;20506:131;20632:4;20506:131;:::i;:::-;20498:139;;20225:419;;;:::o;20650:::-;20816:4;20854:2;20843:9;20839:18;20831:26;;20903:9;20897:4;20893:20;20889:1;20878:9;20874:17;20867:47;20931:131;21057:4;20931:131;:::i;:::-;20923:139;;20650:419;;;:::o;21075:::-;21241:4;21279:2;21268:9;21264:18;21256:26;;21328:9;21322:4;21318:20;21314:1;21303:9;21299:17;21292:47;21356:131;21482:4;21356:131;:::i;:::-;21348:139;;21075:419;;;:::o;21500:::-;21666:4;21704:2;21693:9;21689:18;21681:26;;21753:9;21747:4;21743:20;21739:1;21728:9;21724:17;21717:47;21781:131;21907:4;21781:131;:::i;:::-;21773:139;;21500:419;;;:::o;21925:::-;22091:4;22129:2;22118:9;22114:18;22106:26;;22178:9;22172:4;22168:20;22164:1;22153:9;22149:17;22142:47;22206:131;22332:4;22206:131;:::i;:::-;22198:139;;21925:419;;;:::o;22350:::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:131;22757:4;22631:131;:::i;:::-;22623:139;;22350:419;;;:::o;22775:::-;22941:4;22979:2;22968:9;22964:18;22956:26;;23028:9;23022:4;23018:20;23014:1;23003:9;22999:17;22992:47;23056:131;23182:4;23056:131;:::i;:::-;23048:139;;22775:419;;;:::o;23200:::-;23366:4;23404:2;23393:9;23389:18;23381:26;;23453:9;23447:4;23443:20;23439:1;23428:9;23424:17;23417:47;23481:131;23607:4;23481:131;:::i;:::-;23473:139;;23200:419;;;:::o;23625:::-;23791:4;23829:2;23818:9;23814:18;23806:26;;23878:9;23872:4;23868:20;23864:1;23853:9;23849:17;23842:47;23906:131;24032:4;23906:131;:::i;:::-;23898:139;;23625:419;;;:::o;24050:::-;24216:4;24254:2;24243:9;24239:18;24231:26;;24303:9;24297:4;24293:20;24289:1;24278:9;24274:17;24267:47;24331:131;24457:4;24331:131;:::i;:::-;24323:139;;24050:419;;;:::o;24475:::-;24641:4;24679:2;24668:9;24664:18;24656:26;;24728:9;24722:4;24718:20;24714:1;24703:9;24699:17;24692:47;24756:131;24882:4;24756:131;:::i;:::-;24748:139;;24475:419;;;:::o;24900:::-;25066:4;25104:2;25093:9;25089:18;25081:26;;25153:9;25147:4;25143:20;25139:1;25128:9;25124:17;25117:47;25181:131;25307:4;25181:131;:::i;:::-;25173:139;;24900:419;;;:::o;25325:::-;25491:4;25529:2;25518:9;25514:18;25506:26;;25578:9;25572:4;25568:20;25564:1;25553:9;25549:17;25542:47;25606:131;25732:4;25606:131;:::i;:::-;25598:139;;25325:419;;;:::o;25750:::-;25916:4;25954:2;25943:9;25939:18;25931:26;;26003:9;25997:4;25993:20;25989:1;25978:9;25974:17;25967:47;26031:131;26157:4;26031:131;:::i;:::-;26023:139;;25750:419;;;:::o;26175:::-;26341:4;26379:2;26368:9;26364:18;26356:26;;26428:9;26422:4;26418:20;26414:1;26403:9;26399:17;26392:47;26456:131;26582:4;26456:131;:::i;:::-;26448:139;;26175:419;;;:::o;26600:::-;26766:4;26804:2;26793:9;26789:18;26781:26;;26853:9;26847:4;26843:20;26839:1;26828:9;26824:17;26817:47;26881:131;27007:4;26881:131;:::i;:::-;26873:139;;26600:419;;;:::o;27025:::-;27191:4;27229:2;27218:9;27214:18;27206:26;;27278:9;27272:4;27268:20;27264:1;27253:9;27249:17;27242:47;27306:131;27432:4;27306:131;:::i;:::-;27298:139;;27025:419;;;:::o;27450:::-;27616:4;27654:2;27643:9;27639:18;27631:26;;27703:9;27697:4;27693:20;27689:1;27678:9;27674:17;27667:47;27731:131;27857:4;27731:131;:::i;:::-;27723:139;;27450:419;;;:::o;27875:::-;28041:4;28079:2;28068:9;28064:18;28056:26;;28128:9;28122:4;28118:20;28114:1;28103:9;28099:17;28092:47;28156:131;28282:4;28156:131;:::i;:::-;28148:139;;27875:419;;;:::o;28300:::-;28466:4;28504:2;28493:9;28489:18;28481:26;;28553:9;28547:4;28543:20;28539:1;28528:9;28524:17;28517:47;28581:131;28707:4;28581:131;:::i;:::-;28573:139;;28300:419;;;:::o;28725:::-;28891:4;28929:2;28918:9;28914:18;28906:26;;28978:9;28972:4;28968:20;28964:1;28953:9;28949:17;28942:47;29006:131;29132:4;29006:131;:::i;:::-;28998:139;;28725:419;;;:::o;29150:222::-;29243:4;29281:2;29270:9;29266:18;29258:26;;29294:71;29362:1;29351:9;29347:17;29338:6;29294:71;:::i;:::-;29150:222;;;;:::o;29378:129::-;29412:6;29439:20;;:::i;:::-;29429:30;;29468:33;29496:4;29488:6;29468:33;:::i;:::-;29378:129;;;:::o;29513:75::-;29546:6;29579:2;29573:9;29563:19;;29513:75;:::o;29594:307::-;29655:4;29745:18;29737:6;29734:30;29731:56;;;29767:18;;:::i;:::-;29731:56;29805:29;29827:6;29805:29;:::i;:::-;29797:37;;29889:4;29883;29879:15;29871:23;;29594:307;;;:::o;29907:308::-;29969:4;30059:18;30051:6;30048:30;30045:56;;;30081:18;;:::i;:::-;30045:56;30119:29;30141:6;30119:29;:::i;:::-;30111:37;;30203:4;30197;30193:15;30185:23;;29907:308;;;:::o;30221:98::-;30272:6;30306:5;30300:12;30290:22;;30221:98;;;:::o;30325:99::-;30377:6;30411:5;30405:12;30395:22;;30325:99;;;:::o;30430:168::-;30513:11;30547:6;30542:3;30535:19;30587:4;30582:3;30578:14;30563:29;;30430:168;;;;:::o;30604:169::-;30688:11;30722:6;30717:3;30710:19;30762:4;30757:3;30753:14;30738:29;;30604:169;;;;:::o;30779:148::-;30881:11;30918:3;30903:18;;30779:148;;;;:::o;30933:305::-;30973:3;30992:20;31010:1;30992:20;:::i;:::-;30987:25;;31026:20;31044:1;31026:20;:::i;:::-;31021:25;;31180:1;31112:66;31108:74;31105:1;31102:81;31099:107;;;31186:18;;:::i;:::-;31099:107;31230:1;31227;31223:9;31216:16;;30933:305;;;;:::o;31244:185::-;31284:1;31301:20;31319:1;31301:20;:::i;:::-;31296:25;;31335:20;31353:1;31335:20;:::i;:::-;31330:25;;31374:1;31364:35;;31379:18;;:::i;:::-;31364:35;31421:1;31418;31414:9;31409:14;;31244:185;;;;:::o;31435:348::-;31475:7;31498:20;31516:1;31498:20;:::i;:::-;31493:25;;31532:20;31550:1;31532:20;:::i;:::-;31527:25;;31720:1;31652:66;31648:74;31645:1;31642:81;31637:1;31630:9;31623:17;31619:105;31616:131;;;31727:18;;:::i;:::-;31616:131;31775:1;31772;31768:9;31757:20;;31435:348;;;;:::o;31789:191::-;31829:4;31849:20;31867:1;31849:20;:::i;:::-;31844:25;;31883:20;31901:1;31883:20;:::i;:::-;31878:25;;31922:1;31919;31916:8;31913:34;;;31927:18;;:::i;:::-;31913:34;31972:1;31969;31965:9;31957:17;;31789:191;;;;:::o;31986:96::-;32023:7;32052:24;32070:5;32052:24;:::i;:::-;32041:35;;31986:96;;;:::o;32088:90::-;32122:7;32165:5;32158:13;32151:21;32140:32;;32088:90;;;:::o;32184:149::-;32220:7;32260:66;32253:5;32249:78;32238:89;;32184:149;;;:::o;32339:126::-;32376:7;32416:42;32409:5;32405:54;32394:65;;32339:126;;;:::o;32471:77::-;32508:7;32537:5;32526:16;;32471:77;;;:::o;32554:154::-;32638:6;32633:3;32628;32615:30;32700:1;32691:6;32686:3;32682:16;32675:27;32554:154;;;:::o;32714:307::-;32782:1;32792:113;32806:6;32803:1;32800:13;32792:113;;;32891:1;32886:3;32882:11;32876:18;32872:1;32867:3;32863:11;32856:39;32828:2;32825:1;32821:10;32816:15;;32792:113;;;32923:6;32920:1;32917:13;32914:101;;;33003:1;32994:6;32989:3;32985:16;32978:27;32914:101;32763:258;32714:307;;;:::o;33027:320::-;33071:6;33108:1;33102:4;33098:12;33088:22;;33155:1;33149:4;33145:12;33176:18;33166:81;;33232:4;33224:6;33220:17;33210:27;;33166:81;33294:2;33286:6;33283:14;33263:18;33260:38;33257:84;;;33313:18;;:::i;:::-;33257:84;33078:269;33027:320;;;:::o;33353:281::-;33436:27;33458:4;33436:27;:::i;:::-;33428:6;33424:40;33566:6;33554:10;33551:22;33530:18;33518:10;33515:34;33512:62;33509:88;;;33577:18;;:::i;:::-;33509:88;33617:10;33613:2;33606:22;33396:238;33353:281;;:::o;33640:233::-;33679:3;33702:24;33720:5;33702:24;:::i;:::-;33693:33;;33748:66;33741:5;33738:77;33735:103;;;33818:18;;:::i;:::-;33735:103;33865:1;33858:5;33854:13;33847:20;;33640:233;;;:::o;33879:176::-;33911:1;33928:20;33946:1;33928:20;:::i;:::-;33923:25;;33962:20;33980:1;33962:20;:::i;:::-;33957:25;;34001:1;33991:35;;34006:18;;:::i;:::-;33991:35;34047:1;34044;34040:9;34035:14;;33879:176;;;;:::o;34061:180::-;34109:77;34106:1;34099:88;34206:4;34203:1;34196:15;34230:4;34227:1;34220:15;34247:180;34295:77;34292:1;34285:88;34392:4;34389:1;34382:15;34416:4;34413:1;34406:15;34433:180;34481:77;34478:1;34471:88;34578:4;34575:1;34568:15;34602:4;34599:1;34592:15;34619:180;34667:77;34664:1;34657:88;34764:4;34761:1;34754:15;34788:4;34785:1;34778:15;34805:180;34853:77;34850:1;34843:88;34950:4;34947:1;34940:15;34974:4;34971:1;34964:15;34991:180;35039:77;35036:1;35029:88;35136:4;35133:1;35126:15;35160:4;35157:1;35150:15;35177:117;35286:1;35283;35276:12;35300:117;35409:1;35406;35399:12;35423:117;35532:1;35529;35522:12;35546:117;35655:1;35652;35645:12;35669:102;35710:6;35761:2;35757:7;35752:2;35745:5;35741:14;35737:28;35727:38;;35669:102;;;:::o;35777:226::-;35917:34;35913:1;35905:6;35901:14;35894:58;35986:9;35981:2;35973:6;35969:15;35962:34;35777:226;:::o;36009:230::-;36149:34;36145:1;36137:6;36133:14;36126:58;36218:13;36213:2;36205:6;36201:15;36194:38;36009:230;:::o;36245:237::-;36385:34;36381:1;36373:6;36369:14;36362:58;36454:20;36449:2;36441:6;36437:15;36430:45;36245:237;:::o;36488:225::-;36628:34;36624:1;36616:6;36612:14;36605:58;36697:8;36692:2;36684:6;36680:15;36673:33;36488:225;:::o;36719:178::-;36859:30;36855:1;36847:6;36843:14;36836:54;36719:178;:::o;36903:182::-;37043:34;37039:1;37031:6;37027:14;37020:58;36903:182;:::o;37091:223::-;37231:34;37227:1;37219:6;37215:14;37208:58;37300:6;37295:2;37287:6;37283:15;37276:31;37091:223;:::o;37320:175::-;37460:27;37456:1;37448:6;37444:14;37437:51;37320:175;:::o;37501:168::-;37641:20;37637:1;37629:6;37625:14;37618:44;37501:168;:::o;37675:231::-;37815:34;37811:1;37803:6;37799:14;37792:58;37884:14;37879:2;37871:6;37867:15;37860:39;37675:231;:::o;37912:243::-;38052:34;38048:1;38040:6;38036:14;38029:58;38121:26;38116:2;38108:6;38104:15;38097:51;37912:243;:::o;38161:229::-;38301:34;38297:1;38289:6;38285:14;38278:58;38370:12;38365:2;38357:6;38353:15;38346:37;38161:229;:::o;38396:228::-;38536:34;38532:1;38524:6;38520:14;38513:58;38605:11;38600:2;38592:6;38588:15;38581:36;38396:228;:::o;38630:182::-;38770:34;38766:1;38758:6;38754:14;38747:58;38630:182;:::o;38818:231::-;38958:34;38954:1;38946:6;38942:14;38935:58;39027:14;39022:2;39014:6;39010:15;39003:39;38818:231;:::o;39055:182::-;39195:34;39191:1;39183:6;39179:14;39172:58;39055:182;:::o;39243:228::-;39383:34;39379:1;39371:6;39367:14;39360:58;39452:11;39447:2;39439:6;39435:15;39428:36;39243:228;:::o;39477:234::-;39617:34;39613:1;39605:6;39601:14;39594:58;39686:17;39681:2;39673:6;39669:15;39662:42;39477:234;:::o;39717:220::-;39857:34;39853:1;39845:6;39841:14;39834:58;39926:3;39921:2;39913:6;39909:15;39902:28;39717:220;:::o;39943:172::-;40083:24;40079:1;40071:6;40067:14;40060:48;39943:172;:::o;40121:236::-;40261:34;40257:1;40249:6;40245:14;40238:58;40330:19;40325:2;40317:6;40313:15;40306:44;40121:236;:::o;40363:231::-;40503:34;40499:1;40491:6;40487:14;40480:58;40572:14;40567:2;40559:6;40555:15;40548:39;40363:231;:::o;40600:173::-;40740:25;40736:1;40728:6;40724:14;40717:49;40600:173;:::o;40779:122::-;40852:24;40870:5;40852:24;:::i;:::-;40845:5;40842:35;40832:63;;40891:1;40888;40881:12;40832:63;40779:122;:::o;40907:116::-;40977:21;40992:5;40977:21;:::i;:::-;40970:5;40967:32;40957:60;;41013:1;41010;41003:12;40957:60;40907:116;:::o;41029:120::-;41101:23;41118:5;41101:23;:::i;:::-;41094:5;41091:34;41081:62;;41139:1;41136;41129:12;41081:62;41029:120;:::o;41155:122::-;41228:24;41246:5;41228:24;:::i;:::-;41221:5;41218:35;41208:63;;41267:1;41264;41257:12;41208:63;41155:122;:::o

Swarm Source

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