ETH Price: $3,168.22 (-7.81%)
Gas: 9 Gwei

Token

HAYC (HAYC)
 

Overview

Max Total Supply

0 HAYC

Holders

368

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
funkykong.eth
Balance
1 HAYC
0xe8112dc79B6F9d8f1e3A9e663aD895cE7Ab47e7F
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:
HAYC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-10
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-31
*/

/**
##,                                   ,##
'##,                                 ,##'
 '##                                 ##'
  ##               __,               ##
  ##          __.-'   \              ##
  ##    ___.-'__.--'\ |              ##,
  ## .-' .-, (      | |        _     '##
  ##/ / /""=\ \     | |       / \     ##,
  '#| |_\   / /     | |      /   \    '##
  / `-` 0 0 '-'`\   | |      | |  \   ,##
  \_,   (__)  ,_/  / /       |  \  \  ##'
   / /    \   \\  / /        |  |\  \ ## __
  | /`.__.-'-._)|/ /         |  | \  \##`__)
  \        ^    / /          |  |  | v## '--.
   '._    '-'_.' / _.----.   |  |  l ,##  (_,'
    '##'-,  ` `"""/       `'/|  | / ,##--,  )
     '#/`        `         '    |'  ##'   `"
      |                         /\_/#'
 jgs  |              __.  .-,_.;###`
     _|___/_..---'''`   _/  (###'
 .-'`   ____,...---""```     `._
(   --''        __,.,---.    ',_)
 `.,___,..---'``  / /    \     '._
      |  |       ( (      `.  '-._)
      |  /        \ \      \'-._)
      | |          \ \      `"`
      | |           \ \
      | |    .-,     ) |
      | |   ( (     / /
      | |    \ '---' /
      /  \    `-----`
     | , /
     |(_/\-,
     \  ,_`)
      `-._)
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org
 
// File contracts/utils/introspection/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 contracts/token/ERC721/IERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
 
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
 
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, 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 contracts/token/ERC721/IERC721Receiver.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
 
 
// File contracts/token/ERC721/extensions/IERC721Metadata.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
 
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
 
 
// File contracts/utils/Address.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    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;
        // solhint-disable-next-line no-inline-assembly
        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");
 
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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
 
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
 
// File contracts/utils/Context.sol
 
 
 
pragma solidity ^0.8.0;
 
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
 
// File contracts/utils/Strings.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
 
}
 
 
// File contracts/utils/introspection/ERC165.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
 
 
// File contracts/token/ERC721/ERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
 
 
 
 
 
 
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
 
    // Token name
    string private _name;
 
    // Token symbol
    string private _symbol;
 
    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;
 
    // Mapping owner address to token count
    mapping (address => uint256) private _balances;
 
    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;
 
    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;
 
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
 
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
 
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
 
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }
 
    /**
     * @dev Base URI for computing {tokenURI}. 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` 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 { }
}
 
 
// File contracts/token/ERC721/extensions/ERC721URIStorage.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
 
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
 
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
 
        return super.tokenURI(tokenId);
    }
 
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
 
    /**
     * @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 override {
        super._burn(tokenId);
 
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
 
 
// File contracts/access/Ownable.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 

contract HAYC is ERC721URIStorage, Ownable {

    event MintHAYC (address indexed minter, uint256 startWith, uint256 times);
   
    
    uint256 public totalFreeHAYC;
    uint256 public totalPaidHAYC;
    uint256 public totalCount = 1500; 
    uint256 public maxBatch = 15; 
    uint256 public price = 40000000000000000; // 0.02 eth
    string public baseURI;
    bool public started;
    
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    } 

    modifier mintEnabled() {
        require(started, "not started");
        _;
    }
 
    function totalFreeSupply() public view virtual returns (uint256) {
        return totalFreeHAYC;
       
    }

    function totalPaidSupply() public view virtual returns (uint256) {
        return totalPaidHAYC;
       
    }
 
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
 
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }
 
    function changePrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }

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

    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }
 
    function setNormalStart(bool _start) public onlyOwner {
        started = _start;
    }
 
    function mintHAYC(uint256 _times) payable public mintEnabled {
        require(_times >0 && _times <= maxBatch, "Incorrect number to mint");
        require(totalPaidHAYC + _times <= totalCount, "Too many HAYC");
        require(msg.value == _times * getPrice(), "Incorrect Value");
        payable(owner()).transfer(msg.value);
        emit MintHAYC(_msgSender(), totalPaidHAYC+1+1500, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1500 + 1 + totalPaidHAYC++);
        }
    }


    function mintFreeHAYC(uint256 _times) public mintEnabled {
        require(_times >0 && _times <= maxBatch, "Incorrect number to mint");
        require(totalFreeHAYC + _times <= totalCount, "Too many HAYC");
        emit MintHAYC(_msgSender(), totalFreeHAYC+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalFreeHAYC++);
        }
    }  
    
    function adminMint(uint256 _times) public onlyOwner {
        require(totalFreeHAYC + _times <= totalCount, "Too many HAYC");
        emit MintHAYC(_msgSender(), totalFreeHAYC+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalFreeHAYC++);
        }
    }
    
    
    function adminMintToAddress(address _addr) public onlyOwner {
        require(totalFreeHAYC + 1 <= totalCount, "Mint amount will exceed total collection amount.");
        emit MintHAYC(_addr, totalFreeHAYC+1, 1);
        _mint(_addr, 1 + totalFreeHAYC++);
    } 
    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"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":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintHAYC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mintFreeHAYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mintHAYC","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFreeHAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaidHAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaidSupply","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"}]

60806040526105dc600a55600f600b55668e1bc9bf040000600c553480156200002757600080fd5b50604051620047163803806200471683398181016040528101906200004d91906200028c565b82828160009080519060200190620000679291906200015e565b508060019080519060200190620000809291906200015e565b5050506000620000956200015660201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600d90805190602001906200014c9291906200015e565b50505050620004c9565b600033905090565b8280546200016c90620003da565b90600052602060002090601f016020900481019282620001905760008555620001dc565b82601f10620001ab57805160ff1916838001178555620001dc565b82800160010185558215620001dc579182015b82811115620001db578251825591602001919060010190620001be565b5b509050620001eb9190620001ef565b5090565b5b808211156200020a576000816000905550600101620001f0565b5090565b6000620002256200021f846200036e565b62000345565b905082815260208101848484011115620002445762000243620004a9565b5b62000251848285620003a4565b509392505050565b600082601f830112620002715762000270620004a4565b5b8151620002838482602086016200020e565b91505092915050565b600080600060608486031215620002a857620002a7620004b3565b5b600084015167ffffffffffffffff811115620002c957620002c8620004ae565b5b620002d78682870162000259565b935050602084015167ffffffffffffffff811115620002fb57620002fa620004ae565b5b620003098682870162000259565b925050604084015167ffffffffffffffff8111156200032d576200032c620004ae565b5b6200033b8682870162000259565b9150509250925092565b60006200035162000364565b90506200035f828262000410565b919050565b6000604051905090565b600067ffffffffffffffff8211156200038c576200038b62000475565b5b6200039782620004b8565b9050602081019050919050565b60005b83811015620003c4578082015181840152602081019050620003a7565b83811115620003d4576000848401525b50505050565b60006002820490506001821680620003f357607f821691505b602082108114156200040a576200040962000446565b5b50919050565b6200041b82620004b8565b810181811067ffffffffffffffff821117156200043d576200043c62000475565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61423d80620004d96000396000f3fe6080604052600436106101f95760003560e01c80638da5cb5b1161010d578063b88d4fde116100a0578063c87b56dd1161006f578063c87b56dd146106f9578063cfcf3cfb14610736578063dd99e6e014610761578063e985e9c51461077d578063f2fde38b146107ba576101f9565b8063b88d4fde14610653578063ba4c2cf31461067c578063c1f26123146106a7578063c3b69c73146106d0576101f9565b806398d5fdca116100dc57806398d5fdca146105ab578063a035b1fe146105d6578063a22cb46514610601578063a2b40d191461062a576101f9565b80638da5cb5b14610503578063917bb57f1461052e578063936689d01461055757806395d89b4114610580576101f9565b806334eafb11116101905780636352211e1161015f5780636352211e1461041c57806367765b87146104595780636c0360eb1461048457806370a08231146104af578063715018a6146104ec576101f9565b806334eafb111461037457806342842e0e1461039f57806355f804b3146103c85780635d0b179a146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102ce578063162094c4146102f75780631f2698ab1461032057806323b872dd1461034b576101f9565b806301ffc9a7146101fe578063027c89771461023b57806306fdde0314610266578063081812fc14610291575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612de9565b6107e3565b60405161023291906133a4565b60405180910390f35b34801561024757600080fd5b506102506108c5565b60405161025d91906136c1565b60405180910390f35b34801561027257600080fd5b5061027b6108cf565b60405161028891906133bf565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190612e8c565b610961565b6040516102c5919061333d565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190612d7c565b6109e6565b005b34801561030357600080fd5b5061031e60048036038101906103199190612eb9565b610afe565b005b34801561032c57600080fd5b50610335610b88565b60405161034291906133a4565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190612c66565b610b9b565b005b34801561038057600080fd5b50610389610bfb565b60405161039691906136c1565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190612c66565b610c01565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612e43565b610c21565b005b3480156103fd57600080fd5b50610406610cb7565b60405161041391906136c1565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612e8c565b610cbd565b604051610450919061333d565b60405180910390f35b34801561046557600080fd5b5061046e610d6f565b60405161047b91906136c1565b60405180910390f35b34801561049057600080fd5b50610499610d75565b6040516104a691906133bf565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612bf9565b610e03565b6040516104e391906136c1565b60405180910390f35b3480156104f857600080fd5b50610501610ebb565b005b34801561050f57600080fd5b50610518610ff8565b604051610525919061333d565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612dbc565b611022565b005b34801561056357600080fd5b5061057e60048036038101906105799190612bf9565b6110bb565b005b34801561058c57600080fd5b50610595611218565b6040516105a291906133bf565b60405180910390f35b3480156105b757600080fd5b506105c06112aa565b6040516105cd91906136c1565b60405180910390f35b3480156105e257600080fd5b506105eb6112b4565b6040516105f891906136c1565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190612d3c565b6112ba565b005b34801561063657600080fd5b50610651600480360381019061064c9190612e8c565b61143b565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612cb9565b6114c1565b005b34801561068857600080fd5b50610691611523565b60405161069e91906136c1565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612e8c565b611529565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190612e8c565b6116b1565b005b34801561070557600080fd5b50610720600480360381019061071b9190612e8c565b61185d565b60405161072d91906133bf565b60405180910390f35b34801561074257600080fd5b5061074b6119af565b60405161075891906136c1565b60405180910390f35b61077b60048036038101906107769190612e8c565b6119b9565b005b34801561078957600080fd5b506107a4600480360381019061079f9190612c26565b611c15565b6040516107b191906133a4565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190612bf9565b611ca9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108be57506108bd82611e55565b5b9050919050565b6000600854905090565b6060600080546108de906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461090a906139d5565b80156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b5050505050905090565b600061096c82611ebf565b6109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a2906135a1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f182610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613621565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a81611f2b565b73ffffffffffffffffffffffffffffffffffffffff161480610ab05750610aaf81610aaa611f2b565b611c15565b5b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae6906134c1565b60405180910390fd5b610af98383611f33565b505050565b610b06611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610b24610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906135c1565b60405180910390fd5b610b848282611fec565b5050565b600e60009054906101000a900460ff1681565b610bac610ba6611f2b565b82612060565b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613641565b60405180910390fd5b610bf683838361213e565b505050565b600a5481565b610c1c838383604051806020016040528060008152506114c1565b505050565b610c29611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610c47610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c94906135c1565b60405180910390fd5b80600d9080519060200190610cb3929190612a0d565b5050565b60085481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613501565b60405180910390fd5b80915050919050565b600b5481565b600d8054610d82906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dae906139d5565b8015610dfb5780601f10610dd057610100808354040283529160200191610dfb565b820191906000526020600020905b815481529060010190602001808311610dde57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906134e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec3611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610ee1610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e906135c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61102a611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611048610ff8565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906135c1565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6110c3611f2b565b73ffffffffffffffffffffffffffffffffffffffff166110e1610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906135c1565b60405180910390fd5b600a54600160085461114991906137f8565b111561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a60016008546111d191906137f8565b60016040516111e19291906136dc565b60405180910390a2611215816008600081548092919061120090613a38565b91905055600161121091906137f8565b61239a565b50565b606060018054611227906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611253906139d5565b80156112a05780601f10611275576101008083540402835291602001916112a0565b820191906000526020600020905b81548152906001019060200180831161128357829003601f168201915b5050505050905090565b6000600c54905090565b600c5481565b6112c2611f2b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132790613481565b60405180910390fd5b806005600061133d611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113ea611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161142f91906133a4565b60405180910390a35050565b611443611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611461610ff8565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906135c1565b60405180910390fd5b80600c8190555050565b6114d26114cc611f2b565b83612060565b611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613641565b60405180910390fd5b61151d84848484612568565b50505050565b60095481565b611531611f2b565b73ffffffffffffffffffffffffffffffffffffffff1661154f610ff8565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906135c1565b60405180910390fd5b600a54816008546115b691906137f8565b11156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90613541565b60405180910390fd5b6115ff611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a600160085461164591906137f8565b83604051611654929190613705565b60405180910390a260005b818110156116ad5761169a611672611f2b565b6008600081548092919061168590613a38565b91905055600161169591906137f8565b61239a565b80806116a590613a38565b91505061165f565b5050565b600e60009054906101000a900460ff16611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613681565b60405180910390fd5b6000811180156117125750600b548111155b611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906136a1565b60405180910390fd5b600a548160085461176291906137f8565b11156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613541565b60405180910390fd5b6117ab611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a60016008546117f191906137f8565b83604051611800929190613705565b60405180910390a260005b818110156118595761184661181e611f2b565b6008600081548092919061183190613a38565b91905055600161184191906137f8565b61239a565b808061185190613a38565b91505061180b565b5050565b606061186882611ebf565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613581565b60405180910390fd5b60006006600084815260200190815260200160002080546118c7906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546118f3906139d5565b80156119405780601f1061191557610100808354040283529160200191611940565b820191906000526020600020905b81548152906001019060200180831161192357829003601f168201915b5050505050905060006119516125c4565b90506000815114156119675781925050506119aa565b60008251111561199c578082604051602001611984929190613319565b604051602081830303815290604052925050506119aa565b6119a584612656565b925050505b919050565b6000600954905090565b600e60009054906101000a900460ff16611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613681565b60405180910390fd5b600081118015611a1a5750600b548111155b611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906136a1565b60405180910390fd5b600a5481600954611a6a91906137f8565b1115611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613541565b60405180910390fd5b611ab36112aa565b81611abe919061387f565b3414611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906133e1565b60405180910390fd5b611b07610ff8565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611b4c573d6000803e3d6000fd5b50611b55611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a6105dc6001600954611b9e91906137f8565b611ba891906137f8565b83604051611bb7929190613705565b60405180910390a260005b81811015611c1157611bfe611bd5611f2b565b60096000815480929190611be890613a38565b919050556105dd611bf991906137f8565b61239a565b8080611c0990613a38565b915050611bc2565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cb1611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611ccf610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c906135c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90613421565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fa683610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611ff582611ebf565b612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90613521565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061205b929190612a0d565b505050565b600061206b82611ebf565b6120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906134a1565b60405180910390fd5b60006120b583610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212457508373ffffffffffffffffffffffffffffffffffffffff1661210c84610961565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213557506121348185611c15565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215e82610cbd565b73ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906135e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613461565b60405180910390fd5b61222f8383836126fd565b61223a600082611f33565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228a91906138d9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e191906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190613561565b60405180910390fd5b61241381611ebf565b15612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90613441565b60405180910390fd5b61245f600083836126fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124af91906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61257384848461213e565b61257f84848484612702565b6125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590613401565b60405180910390fd5b50505050565b6060600d80546125d3906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546125ff906139d5565b801561264c5780601f106126215761010080835404028352916020019161264c565b820191906000526020600020905b81548152906001019060200180831161262f57829003601f168201915b5050505050905090565b606061266182611ebf565b6126a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269790613601565b60405180910390fd5b60006126aa6125c4565b905060008151116126ca57604051806020016040528060008152506126f5565b806126d484612899565b6040516020016126e5929190613319565b6040516020818303038152906040525b915050919050565b505050565b60006127238473ffffffffffffffffffffffffffffffffffffffff166129fa565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261274c611f2b565b8786866040518563ffffffff1660e01b815260040161276e9493929190613358565b602060405180830381600087803b15801561278857600080fd5b505af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190612e16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90613401565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b606060008214156128e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129f5565b600082905060005b600082146129135780806128fc90613a38565b915050600a8261290c919061384e565b91506128e9565b60008167ffffffffffffffff81111561292f5761292e613b6e565b5b6040519080825280601f01601f1916602001820160405280156129615781602001600182028036833780820191505090505b5090505b600085146129ee5760018261297a91906138d9565b9150600a856129899190613a81565b603061299591906137f8565b60f81b8183815181106129ab576129aa613b3f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129e7919061384e565b9450612965565b8093505050505b919050565b600080823b905060008111915050919050565b828054612a19906139d5565b90600052602060002090601f016020900481019282612a3b5760008555612a82565b82601f10612a5457805160ff1916838001178555612a82565b82800160010185558215612a82579182015b82811115612a81578251825591602001919060010190612a66565b5b509050612a8f9190612a93565b5090565b5b80821115612aac576000816000905550600101612a94565b5090565b6000612ac3612abe84613753565b61372e565b905082815260208101848484011115612adf57612ade613ba2565b5b612aea848285613993565b509392505050565b6000612b05612b0084613784565b61372e565b905082815260208101848484011115612b2157612b20613ba2565b5b612b2c848285613993565b509392505050565b600081359050612b43816141ab565b92915050565b600081359050612b58816141c2565b92915050565b600081359050612b6d816141d9565b92915050565b600081519050612b82816141d9565b92915050565b600082601f830112612b9d57612b9c613b9d565b5b8135612bad848260208601612ab0565b91505092915050565b600082601f830112612bcb57612bca613b9d565b5b8135612bdb848260208601612af2565b91505092915050565b600081359050612bf3816141f0565b92915050565b600060208284031215612c0f57612c0e613bac565b5b6000612c1d84828501612b34565b91505092915050565b60008060408385031215612c3d57612c3c613bac565b5b6000612c4b85828601612b34565b9250506020612c5c85828601612b34565b9150509250929050565b600080600060608486031215612c7f57612c7e613bac565b5b6000612c8d86828701612b34565b9350506020612c9e86828701612b34565b9250506040612caf86828701612be4565b9150509250925092565b60008060008060808587031215612cd357612cd2613bac565b5b6000612ce187828801612b34565b9450506020612cf287828801612b34565b9350506040612d0387828801612be4565b925050606085013567ffffffffffffffff811115612d2457612d23613ba7565b5b612d3087828801612b88565b91505092959194509250565b60008060408385031215612d5357612d52613bac565b5b6000612d6185828601612b34565b9250506020612d7285828601612b49565b9150509250929050565b60008060408385031215612d9357612d92613bac565b5b6000612da185828601612b34565b9250506020612db285828601612be4565b9150509250929050565b600060208284031215612dd257612dd1613bac565b5b6000612de084828501612b49565b91505092915050565b600060208284031215612dff57612dfe613bac565b5b6000612e0d84828501612b5e565b91505092915050565b600060208284031215612e2c57612e2b613bac565b5b6000612e3a84828501612b73565b91505092915050565b600060208284031215612e5957612e58613bac565b5b600082013567ffffffffffffffff811115612e7757612e76613ba7565b5b612e8384828501612bb6565b91505092915050565b600060208284031215612ea257612ea1613bac565b5b6000612eb084828501612be4565b91505092915050565b60008060408385031215612ed057612ecf613bac565b5b6000612ede85828601612be4565b925050602083013567ffffffffffffffff811115612eff57612efe613ba7565b5b612f0b85828601612bb6565b9150509250929050565b612f1e8161390d565b82525050565b612f2d8161391f565b82525050565b6000612f3e826137b5565b612f4881856137cb565b9350612f588185602086016139a2565b612f6181613bb1565b840191505092915050565b612f7581613981565b82525050565b6000612f86826137c0565b612f9081856137dc565b9350612fa08185602086016139a2565b612fa981613bb1565b840191505092915050565b6000612fbf826137c0565b612fc981856137ed565b9350612fd98185602086016139a2565b80840191505092915050565b6000612ff2600f836137dc565b9150612ffd82613bc2565b602082019050919050565b60006130156032836137dc565b915061302082613beb565b604082019050919050565b60006130386026836137dc565b915061304382613c3a565b604082019050919050565b600061305b601c836137dc565b915061306682613c89565b602082019050919050565b600061307e6024836137dc565b915061308982613cb2565b604082019050919050565b60006130a16019836137dc565b91506130ac82613d01565b602082019050919050565b60006130c4602c836137dc565b91506130cf82613d2a565b604082019050919050565b60006130e76038836137dc565b91506130f282613d79565b604082019050919050565b600061310a602a836137dc565b915061311582613dc8565b604082019050919050565b600061312d6029836137dc565b915061313882613e17565b604082019050919050565b6000613150602e836137dc565b915061315b82613e66565b604082019050919050565b6000613173600d836137dc565b915061317e82613eb5565b602082019050919050565b60006131966020836137dc565b91506131a182613ede565b602082019050919050565b60006131b96031836137dc565b91506131c482613f07565b604082019050919050565b60006131dc602c836137dc565b91506131e782613f56565b604082019050919050565b60006131ff6020836137dc565b915061320a82613fa5565b602082019050919050565b60006132226029836137dc565b915061322d82613fce565b604082019050919050565b6000613245602f836137dc565b91506132508261401d565b604082019050919050565b60006132686021836137dc565b91506132738261406c565b604082019050919050565b600061328b6031836137dc565b9150613296826140bb565b604082019050919050565b60006132ae6030836137dc565b91506132b98261410a565b604082019050919050565b60006132d1600b836137dc565b91506132dc82614159565b602082019050919050565b60006132f46018836137dc565b91506132ff82614182565b602082019050919050565b61331381613977565b82525050565b60006133258285612fb4565b91506133318284612fb4565b91508190509392505050565b60006020820190506133526000830184612f15565b92915050565b600060808201905061336d6000830187612f15565b61337a6020830186612f15565b613387604083018561330a565b81810360608301526133998184612f33565b905095945050505050565b60006020820190506133b96000830184612f24565b92915050565b600060208201905081810360008301526133d98184612f7b565b905092915050565b600060208201905081810360008301526133fa81612fe5565b9050919050565b6000602082019050818103600083015261341a81613008565b9050919050565b6000602082019050818103600083015261343a8161302b565b9050919050565b6000602082019050818103600083015261345a8161304e565b9050919050565b6000602082019050818103600083015261347a81613071565b9050919050565b6000602082019050818103600083015261349a81613094565b9050919050565b600060208201905081810360008301526134ba816130b7565b9050919050565b600060208201905081810360008301526134da816130da565b9050919050565b600060208201905081810360008301526134fa816130fd565b9050919050565b6000602082019050818103600083015261351a81613120565b9050919050565b6000602082019050818103600083015261353a81613143565b9050919050565b6000602082019050818103600083015261355a81613166565b9050919050565b6000602082019050818103600083015261357a81613189565b9050919050565b6000602082019050818103600083015261359a816131ac565b9050919050565b600060208201905081810360008301526135ba816131cf565b9050919050565b600060208201905081810360008301526135da816131f2565b9050919050565b600060208201905081810360008301526135fa81613215565b9050919050565b6000602082019050818103600083015261361a81613238565b9050919050565b6000602082019050818103600083015261363a8161325b565b9050919050565b6000602082019050818103600083015261365a8161327e565b9050919050565b6000602082019050818103600083015261367a816132a1565b9050919050565b6000602082019050818103600083015261369a816132c4565b9050919050565b600060208201905081810360008301526136ba816132e7565b9050919050565b60006020820190506136d6600083018461330a565b92915050565b60006040820190506136f1600083018561330a565b6136fe6020830184612f6c565b9392505050565b600060408201905061371a600083018561330a565b613727602083018461330a565b9392505050565b6000613738613749565b90506137448282613a07565b919050565b6000604051905090565b600067ffffffffffffffff82111561376e5761376d613b6e565b5b61377782613bb1565b9050602081019050919050565b600067ffffffffffffffff82111561379f5761379e613b6e565b5b6137a882613bb1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061380382613977565b915061380e83613977565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384357613842613ab2565b5b828201905092915050565b600061385982613977565b915061386483613977565b92508261387457613873613ae1565b5b828204905092915050565b600061388a82613977565b915061389583613977565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ce576138cd613ab2565b5b828202905092915050565b60006138e482613977565b91506138ef83613977565b92508282101561390257613901613ab2565b5b828203905092915050565b600061391882613957565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061398c82613977565b9050919050565b82818337600083830152505050565b60005b838110156139c05780820151818401526020810190506139a5565b838111156139cf576000848401525b50505050565b600060028204905060018216806139ed57607f821691505b60208210811415613a0157613a00613b10565b5b50919050565b613a1082613bb1565b810181811067ffffffffffffffff82111715613a2f57613a2e613b6e565b5b80604052505050565b6000613a4382613977565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7657613a75613ab2565b5b600182019050919050565b6000613a8c82613977565b9150613a9783613977565b925082613aa757613aa6613ae1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e636f72726563742056616c75650000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f546f6f206d616e79204841594300000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f496e636f7272656374206e756d62657220746f206d696e740000000000000000600082015250565b6141b48161390d565b81146141bf57600080fd5b50565b6141cb8161391f565b81146141d657600080fd5b50565b6141e28161392b565b81146141ed57600080fd5b50565b6141f981613977565b811461420457600080fd5b5056fea2646970667358221220e2834d0c9907f8fb3f5e405c7d13dd1db73106a4e778646f5b6c6f1a08d2ee0264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000044841594300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448415943000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80638da5cb5b1161010d578063b88d4fde116100a0578063c87b56dd1161006f578063c87b56dd146106f9578063cfcf3cfb14610736578063dd99e6e014610761578063e985e9c51461077d578063f2fde38b146107ba576101f9565b8063b88d4fde14610653578063ba4c2cf31461067c578063c1f26123146106a7578063c3b69c73146106d0576101f9565b806398d5fdca116100dc57806398d5fdca146105ab578063a035b1fe146105d6578063a22cb46514610601578063a2b40d191461062a576101f9565b80638da5cb5b14610503578063917bb57f1461052e578063936689d01461055757806395d89b4114610580576101f9565b806334eafb11116101905780636352211e1161015f5780636352211e1461041c57806367765b87146104595780636c0360eb1461048457806370a08231146104af578063715018a6146104ec576101f9565b806334eafb111461037457806342842e0e1461039f57806355f804b3146103c85780635d0b179a146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102ce578063162094c4146102f75780631f2698ab1461032057806323b872dd1461034b576101f9565b806301ffc9a7146101fe578063027c89771461023b57806306fdde0314610266578063081812fc14610291575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612de9565b6107e3565b60405161023291906133a4565b60405180910390f35b34801561024757600080fd5b506102506108c5565b60405161025d91906136c1565b60405180910390f35b34801561027257600080fd5b5061027b6108cf565b60405161028891906133bf565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190612e8c565b610961565b6040516102c5919061333d565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190612d7c565b6109e6565b005b34801561030357600080fd5b5061031e60048036038101906103199190612eb9565b610afe565b005b34801561032c57600080fd5b50610335610b88565b60405161034291906133a4565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190612c66565b610b9b565b005b34801561038057600080fd5b50610389610bfb565b60405161039691906136c1565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190612c66565b610c01565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612e43565b610c21565b005b3480156103fd57600080fd5b50610406610cb7565b60405161041391906136c1565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612e8c565b610cbd565b604051610450919061333d565b60405180910390f35b34801561046557600080fd5b5061046e610d6f565b60405161047b91906136c1565b60405180910390f35b34801561049057600080fd5b50610499610d75565b6040516104a691906133bf565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612bf9565b610e03565b6040516104e391906136c1565b60405180910390f35b3480156104f857600080fd5b50610501610ebb565b005b34801561050f57600080fd5b50610518610ff8565b604051610525919061333d565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612dbc565b611022565b005b34801561056357600080fd5b5061057e60048036038101906105799190612bf9565b6110bb565b005b34801561058c57600080fd5b50610595611218565b6040516105a291906133bf565b60405180910390f35b3480156105b757600080fd5b506105c06112aa565b6040516105cd91906136c1565b60405180910390f35b3480156105e257600080fd5b506105eb6112b4565b6040516105f891906136c1565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190612d3c565b6112ba565b005b34801561063657600080fd5b50610651600480360381019061064c9190612e8c565b61143b565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612cb9565b6114c1565b005b34801561068857600080fd5b50610691611523565b60405161069e91906136c1565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612e8c565b611529565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190612e8c565b6116b1565b005b34801561070557600080fd5b50610720600480360381019061071b9190612e8c565b61185d565b60405161072d91906133bf565b60405180910390f35b34801561074257600080fd5b5061074b6119af565b60405161075891906136c1565b60405180910390f35b61077b60048036038101906107769190612e8c565b6119b9565b005b34801561078957600080fd5b506107a4600480360381019061079f9190612c26565b611c15565b6040516107b191906133a4565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190612bf9565b611ca9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108be57506108bd82611e55565b5b9050919050565b6000600854905090565b6060600080546108de906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461090a906139d5565b80156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b5050505050905090565b600061096c82611ebf565b6109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a2906135a1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f182610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613621565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a81611f2b565b73ffffffffffffffffffffffffffffffffffffffff161480610ab05750610aaf81610aaa611f2b565b611c15565b5b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae6906134c1565b60405180910390fd5b610af98383611f33565b505050565b610b06611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610b24610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906135c1565b60405180910390fd5b610b848282611fec565b5050565b600e60009054906101000a900460ff1681565b610bac610ba6611f2b565b82612060565b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613641565b60405180910390fd5b610bf683838361213e565b505050565b600a5481565b610c1c838383604051806020016040528060008152506114c1565b505050565b610c29611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610c47610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c94906135c1565b60405180910390fd5b80600d9080519060200190610cb3929190612a0d565b5050565b60085481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613501565b60405180910390fd5b80915050919050565b600b5481565b600d8054610d82906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dae906139d5565b8015610dfb5780601f10610dd057610100808354040283529160200191610dfb565b820191906000526020600020905b815481529060010190602001808311610dde57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906134e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec3611f2b565b73ffffffffffffffffffffffffffffffffffffffff16610ee1610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e906135c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61102a611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611048610ff8565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906135c1565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6110c3611f2b565b73ffffffffffffffffffffffffffffffffffffffff166110e1610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906135c1565b60405180910390fd5b600a54600160085461114991906137f8565b111561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a60016008546111d191906137f8565b60016040516111e19291906136dc565b60405180910390a2611215816008600081548092919061120090613a38565b91905055600161121091906137f8565b61239a565b50565b606060018054611227906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611253906139d5565b80156112a05780601f10611275576101008083540402835291602001916112a0565b820191906000526020600020905b81548152906001019060200180831161128357829003601f168201915b5050505050905090565b6000600c54905090565b600c5481565b6112c2611f2b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132790613481565b60405180910390fd5b806005600061133d611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113ea611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161142f91906133a4565b60405180910390a35050565b611443611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611461610ff8565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906135c1565b60405180910390fd5b80600c8190555050565b6114d26114cc611f2b565b83612060565b611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613641565b60405180910390fd5b61151d84848484612568565b50505050565b60095481565b611531611f2b565b73ffffffffffffffffffffffffffffffffffffffff1661154f610ff8565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906135c1565b60405180910390fd5b600a54816008546115b691906137f8565b11156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90613541565b60405180910390fd5b6115ff611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a600160085461164591906137f8565b83604051611654929190613705565b60405180910390a260005b818110156116ad5761169a611672611f2b565b6008600081548092919061168590613a38565b91905055600161169591906137f8565b61239a565b80806116a590613a38565b91505061165f565b5050565b600e60009054906101000a900460ff16611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613681565b60405180910390fd5b6000811180156117125750600b548111155b611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906136a1565b60405180910390fd5b600a548160085461176291906137f8565b11156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613541565b60405180910390fd5b6117ab611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a60016008546117f191906137f8565b83604051611800929190613705565b60405180910390a260005b818110156118595761184661181e611f2b565b6008600081548092919061183190613a38565b91905055600161184191906137f8565b61239a565b808061185190613a38565b91505061180b565b5050565b606061186882611ebf565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613581565b60405180910390fd5b60006006600084815260200190815260200160002080546118c7906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546118f3906139d5565b80156119405780601f1061191557610100808354040283529160200191611940565b820191906000526020600020905b81548152906001019060200180831161192357829003601f168201915b5050505050905060006119516125c4565b90506000815114156119675781925050506119aa565b60008251111561199c578082604051602001611984929190613319565b604051602081830303815290604052925050506119aa565b6119a584612656565b925050505b919050565b6000600954905090565b600e60009054906101000a900460ff16611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613681565b60405180910390fd5b600081118015611a1a5750600b548111155b611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906136a1565b60405180910390fd5b600a5481600954611a6a91906137f8565b1115611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613541565b60405180910390fd5b611ab36112aa565b81611abe919061387f565b3414611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906133e1565b60405180910390fd5b611b07610ff8565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611b4c573d6000803e3d6000fd5b50611b55611f2b565b73ffffffffffffffffffffffffffffffffffffffff167f09e96591d8987d974f3e24247d0ca86d16892371a1f93ce24fe11ed9797baf1a6105dc6001600954611b9e91906137f8565b611ba891906137f8565b83604051611bb7929190613705565b60405180910390a260005b81811015611c1157611bfe611bd5611f2b565b60096000815480929190611be890613a38565b919050556105dd611bf991906137f8565b61239a565b8080611c0990613a38565b915050611bc2565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cb1611f2b565b73ffffffffffffffffffffffffffffffffffffffff16611ccf610ff8565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c906135c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90613421565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fa683610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611ff582611ebf565b612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90613521565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061205b929190612a0d565b505050565b600061206b82611ebf565b6120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906134a1565b60405180910390fd5b60006120b583610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212457508373ffffffffffffffffffffffffffffffffffffffff1661210c84610961565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213557506121348185611c15565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215e82610cbd565b73ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906135e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613461565b60405180910390fd5b61222f8383836126fd565b61223a600082611f33565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228a91906138d9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e191906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190613561565b60405180910390fd5b61241381611ebf565b15612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90613441565b60405180910390fd5b61245f600083836126fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124af91906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61257384848461213e565b61257f84848484612702565b6125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590613401565b60405180910390fd5b50505050565b6060600d80546125d3906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546125ff906139d5565b801561264c5780601f106126215761010080835404028352916020019161264c565b820191906000526020600020905b81548152906001019060200180831161262f57829003601f168201915b5050505050905090565b606061266182611ebf565b6126a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269790613601565b60405180910390fd5b60006126aa6125c4565b905060008151116126ca57604051806020016040528060008152506126f5565b806126d484612899565b6040516020016126e5929190613319565b6040516020818303038152906040525b915050919050565b505050565b60006127238473ffffffffffffffffffffffffffffffffffffffff166129fa565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261274c611f2b565b8786866040518563ffffffff1660e01b815260040161276e9493929190613358565b602060405180830381600087803b15801561278857600080fd5b505af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190612e16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90613401565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b606060008214156128e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129f5565b600082905060005b600082146129135780806128fc90613a38565b915050600a8261290c919061384e565b91506128e9565b60008167ffffffffffffffff81111561292f5761292e613b6e565b5b6040519080825280601f01601f1916602001820160405280156129615781602001600182028036833780820191505090505b5090505b600085146129ee5760018261297a91906138d9565b9150600a856129899190613a81565b603061299591906137f8565b60f81b8183815181106129ab576129aa613b3f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129e7919061384e565b9450612965565b8093505050505b919050565b600080823b905060008111915050919050565b828054612a19906139d5565b90600052602060002090601f016020900481019282612a3b5760008555612a82565b82601f10612a5457805160ff1916838001178555612a82565b82800160010185558215612a82579182015b82811115612a81578251825591602001919060010190612a66565b5b509050612a8f9190612a93565b5090565b5b80821115612aac576000816000905550600101612a94565b5090565b6000612ac3612abe84613753565b61372e565b905082815260208101848484011115612adf57612ade613ba2565b5b612aea848285613993565b509392505050565b6000612b05612b0084613784565b61372e565b905082815260208101848484011115612b2157612b20613ba2565b5b612b2c848285613993565b509392505050565b600081359050612b43816141ab565b92915050565b600081359050612b58816141c2565b92915050565b600081359050612b6d816141d9565b92915050565b600081519050612b82816141d9565b92915050565b600082601f830112612b9d57612b9c613b9d565b5b8135612bad848260208601612ab0565b91505092915050565b600082601f830112612bcb57612bca613b9d565b5b8135612bdb848260208601612af2565b91505092915050565b600081359050612bf3816141f0565b92915050565b600060208284031215612c0f57612c0e613bac565b5b6000612c1d84828501612b34565b91505092915050565b60008060408385031215612c3d57612c3c613bac565b5b6000612c4b85828601612b34565b9250506020612c5c85828601612b34565b9150509250929050565b600080600060608486031215612c7f57612c7e613bac565b5b6000612c8d86828701612b34565b9350506020612c9e86828701612b34565b9250506040612caf86828701612be4565b9150509250925092565b60008060008060808587031215612cd357612cd2613bac565b5b6000612ce187828801612b34565b9450506020612cf287828801612b34565b9350506040612d0387828801612be4565b925050606085013567ffffffffffffffff811115612d2457612d23613ba7565b5b612d3087828801612b88565b91505092959194509250565b60008060408385031215612d5357612d52613bac565b5b6000612d6185828601612b34565b9250506020612d7285828601612b49565b9150509250929050565b60008060408385031215612d9357612d92613bac565b5b6000612da185828601612b34565b9250506020612db285828601612be4565b9150509250929050565b600060208284031215612dd257612dd1613bac565b5b6000612de084828501612b49565b91505092915050565b600060208284031215612dff57612dfe613bac565b5b6000612e0d84828501612b5e565b91505092915050565b600060208284031215612e2c57612e2b613bac565b5b6000612e3a84828501612b73565b91505092915050565b600060208284031215612e5957612e58613bac565b5b600082013567ffffffffffffffff811115612e7757612e76613ba7565b5b612e8384828501612bb6565b91505092915050565b600060208284031215612ea257612ea1613bac565b5b6000612eb084828501612be4565b91505092915050565b60008060408385031215612ed057612ecf613bac565b5b6000612ede85828601612be4565b925050602083013567ffffffffffffffff811115612eff57612efe613ba7565b5b612f0b85828601612bb6565b9150509250929050565b612f1e8161390d565b82525050565b612f2d8161391f565b82525050565b6000612f3e826137b5565b612f4881856137cb565b9350612f588185602086016139a2565b612f6181613bb1565b840191505092915050565b612f7581613981565b82525050565b6000612f86826137c0565b612f9081856137dc565b9350612fa08185602086016139a2565b612fa981613bb1565b840191505092915050565b6000612fbf826137c0565b612fc981856137ed565b9350612fd98185602086016139a2565b80840191505092915050565b6000612ff2600f836137dc565b9150612ffd82613bc2565b602082019050919050565b60006130156032836137dc565b915061302082613beb565b604082019050919050565b60006130386026836137dc565b915061304382613c3a565b604082019050919050565b600061305b601c836137dc565b915061306682613c89565b602082019050919050565b600061307e6024836137dc565b915061308982613cb2565b604082019050919050565b60006130a16019836137dc565b91506130ac82613d01565b602082019050919050565b60006130c4602c836137dc565b91506130cf82613d2a565b604082019050919050565b60006130e76038836137dc565b91506130f282613d79565b604082019050919050565b600061310a602a836137dc565b915061311582613dc8565b604082019050919050565b600061312d6029836137dc565b915061313882613e17565b604082019050919050565b6000613150602e836137dc565b915061315b82613e66565b604082019050919050565b6000613173600d836137dc565b915061317e82613eb5565b602082019050919050565b60006131966020836137dc565b91506131a182613ede565b602082019050919050565b60006131b96031836137dc565b91506131c482613f07565b604082019050919050565b60006131dc602c836137dc565b91506131e782613f56565b604082019050919050565b60006131ff6020836137dc565b915061320a82613fa5565b602082019050919050565b60006132226029836137dc565b915061322d82613fce565b604082019050919050565b6000613245602f836137dc565b91506132508261401d565b604082019050919050565b60006132686021836137dc565b91506132738261406c565b604082019050919050565b600061328b6031836137dc565b9150613296826140bb565b604082019050919050565b60006132ae6030836137dc565b91506132b98261410a565b604082019050919050565b60006132d1600b836137dc565b91506132dc82614159565b602082019050919050565b60006132f46018836137dc565b91506132ff82614182565b602082019050919050565b61331381613977565b82525050565b60006133258285612fb4565b91506133318284612fb4565b91508190509392505050565b60006020820190506133526000830184612f15565b92915050565b600060808201905061336d6000830187612f15565b61337a6020830186612f15565b613387604083018561330a565b81810360608301526133998184612f33565b905095945050505050565b60006020820190506133b96000830184612f24565b92915050565b600060208201905081810360008301526133d98184612f7b565b905092915050565b600060208201905081810360008301526133fa81612fe5565b9050919050565b6000602082019050818103600083015261341a81613008565b9050919050565b6000602082019050818103600083015261343a8161302b565b9050919050565b6000602082019050818103600083015261345a8161304e565b9050919050565b6000602082019050818103600083015261347a81613071565b9050919050565b6000602082019050818103600083015261349a81613094565b9050919050565b600060208201905081810360008301526134ba816130b7565b9050919050565b600060208201905081810360008301526134da816130da565b9050919050565b600060208201905081810360008301526134fa816130fd565b9050919050565b6000602082019050818103600083015261351a81613120565b9050919050565b6000602082019050818103600083015261353a81613143565b9050919050565b6000602082019050818103600083015261355a81613166565b9050919050565b6000602082019050818103600083015261357a81613189565b9050919050565b6000602082019050818103600083015261359a816131ac565b9050919050565b600060208201905081810360008301526135ba816131cf565b9050919050565b600060208201905081810360008301526135da816131f2565b9050919050565b600060208201905081810360008301526135fa81613215565b9050919050565b6000602082019050818103600083015261361a81613238565b9050919050565b6000602082019050818103600083015261363a8161325b565b9050919050565b6000602082019050818103600083015261365a8161327e565b9050919050565b6000602082019050818103600083015261367a816132a1565b9050919050565b6000602082019050818103600083015261369a816132c4565b9050919050565b600060208201905081810360008301526136ba816132e7565b9050919050565b60006020820190506136d6600083018461330a565b92915050565b60006040820190506136f1600083018561330a565b6136fe6020830184612f6c565b9392505050565b600060408201905061371a600083018561330a565b613727602083018461330a565b9392505050565b6000613738613749565b90506137448282613a07565b919050565b6000604051905090565b600067ffffffffffffffff82111561376e5761376d613b6e565b5b61377782613bb1565b9050602081019050919050565b600067ffffffffffffffff82111561379f5761379e613b6e565b5b6137a882613bb1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061380382613977565b915061380e83613977565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384357613842613ab2565b5b828201905092915050565b600061385982613977565b915061386483613977565b92508261387457613873613ae1565b5b828204905092915050565b600061388a82613977565b915061389583613977565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ce576138cd613ab2565b5b828202905092915050565b60006138e482613977565b91506138ef83613977565b92508282101561390257613901613ab2565b5b828203905092915050565b600061391882613957565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061398c82613977565b9050919050565b82818337600083830152505050565b60005b838110156139c05780820151818401526020810190506139a5565b838111156139cf576000848401525b50505050565b600060028204905060018216806139ed57607f821691505b60208210811415613a0157613a00613b10565b5b50919050565b613a1082613bb1565b810181811067ffffffffffffffff82111715613a2f57613a2e613b6e565b5b80604052505050565b6000613a4382613977565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7657613a75613ab2565b5b600182019050919050565b6000613a8c82613977565b9150613a9783613977565b925082613aa757613aa6613ae1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e636f72726563742056616c75650000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f546f6f206d616e79204841594300000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f496e636f7272656374206e756d62657220746f206d696e740000000000000000600082015250565b6141b48161390d565b81146141bf57600080fd5b50565b6141cb8161391f565b81146141d657600080fd5b50565b6141e28161392b565b81146141ed57600080fd5b50565b6141f981613977565b811461420457600080fd5b5056fea2646970667358221220e2834d0c9907f8fb3f5e405c7d13dd1db73106a4e778646f5b6c6f1a08d2ee0264736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000044841594300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448415943000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): HAYC
Arg [1] : symbol_ (string): HAYC
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 4841594300000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4841594300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38032:3094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21962:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38683:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22897:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24365:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23899:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39345:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38408:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25260:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38245:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25638:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39042:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38175:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22590:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38285:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38380:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22319:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37474:148;;;;;;;;;;;;;:::i;:::-;;36821:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39487:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40844:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23067:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39248:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38321:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24660:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39147:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25861:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38210:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40521:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40118:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34231:682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38804:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39585:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25028:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37778:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21962:292;22064:4;22103:25;22088:40;;;:11;:40;;;;:105;;;;22160:33;22145:48;;;:11;:48;;;;22088:105;:158;;;;22210:36;22234:11;22210:23;:36::i;:::-;22088:158;22081:165;;21962:292;;;:::o;38683:113::-;38739:7;38766:13;;38759:20;;38683:113;:::o;22897:100::-;22951:13;22984:5;22977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22897:100;:::o;24365:222::-;24441:7;24469:16;24477:7;24469;:16::i;:::-;24461:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24555:15;:24;24571:7;24555:24;;;;;;;;;;;;;;;;;;;;;24548:31;;24365:222;;;:::o;23899:399::-;23980:13;23996:23;24011:7;23996:14;:23::i;:::-;23980:39;;24044:5;24038:11;;:2;:11;;;;24030:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24125:5;24109:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24134:37;24151:5;24158:12;:10;:12::i;:::-;24134:16;:37::i;:::-;24109:62;24101:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24269:21;24278:2;24282:7;24269:8;:21::i;:::-;23969:329;23899:399;;:::o;39345:133::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39437:33:::1;39450:8;39460:9;39437:12;:33::i;:::-;39345:133:::0;;:::o;38408:19::-;;;;;;;;;;;;;:::o;25260:306::-;25421:41;25440:12;:10;:12::i;:::-;25454:7;25421:18;:41::i;:::-;25413:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25530:28;25540:4;25546:2;25550:7;25530:9;:28::i;:::-;25260:306;;;:::o;38245:32::-;;;;:::o;25638:151::-;25742:39;25759:4;25765:2;25769:7;25742:39;;;;;;;;;;;;:16;:39::i;:::-;25638:151;;;:::o;39042:96::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39123:7:::1;39113;:17;;;;;;;;;;;;:::i;:::-;;39042:96:::0;:::o;38175:28::-;;;;:::o;22590:239::-;22662:7;22682:13;22698:7;:16;22706:7;22698:16;;;;;;;;;;;;;;;;;;;;;22682:32;;22750:1;22733:19;;:5;:19;;;;22725:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22816:5;22809:12;;;22590:239;;;:::o;38285:28::-;;;;:::o;38380:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22319:208::-;22391:7;22436:1;22419:19;;:5;:19;;;;22411:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22503:9;:16;22513:5;22503:16;;;;;;;;;;;;;;;;22496:23;;22319:208;;;:::o;37474:148::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37581:1:::1;37544:40;;37565:6;;;;;;;;;;;37544:40;;;;;;;;;;;;37612:1;37595:6;;:19;;;;;;;;;;;;;;;;;;37474:148::o:0;36821:87::-;36867:7;36894:6;;;;;;;;;;;36887:13;;36821:87;:::o;39487:89::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39562:6:::1;39552:7;;:16;;;;;;;;;;;;;;;;;;39487:89:::0;:::o;40844:266::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40944:10:::1;;40939:1;40923:13;;:17;;;;:::i;:::-;:31;;40915:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;41032:5;41023:35;;;41053:1;41039:13;;:15;;;;:::i;:::-;41056:1;41023:35;;;;;;;:::i;:::-;;;;;;;;41069:33;41075:5;41086:13;;:15;;;;;;;;;:::i;:::-;;;;;41082:1;:19;;;;:::i;:::-;41069:5;:33::i;:::-;40844:266:::0;:::o;23067:104::-;23123:13;23156:7;23149:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23067:104;:::o;39248:89::-;39297:7;39324:5;;39317:12;;39248:89;:::o;38321:40::-;;;;:::o;24660:296::-;24775:12;:10;:12::i;:::-;24763:24;;:8;:24;;;;24755:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24876:8;24831:18;:32;24850:12;:10;:12::i;:::-;24831:32;;;;;;;;;;;;;;;:42;24864:8;24831:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24929:8;24900:48;;24915:12;:10;:12::i;:::-;24900:48;;;24939:8;24900:48;;;;;;:::i;:::-;;;;;;;;24660:296;;:::o;39147:93::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39223:9:::1;39215:5;:17;;;;39147:93:::0;:::o;25861:285::-;25993:41;26012:12;:10;:12::i;:::-;26026:7;25993:18;:41::i;:::-;25985:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26099:39;26113:4;26119:2;26123:7;26132:5;26099:13;:39::i;:::-;25861:285;;;;:::o;38210:28::-;;;;:::o;40521:305::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40618:10:::1;;40608:6;40592:13;;:22;;;;:::i;:::-;:36;;40584:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40671:12;:10;:12::i;:::-;40662:47;;;40699:1;40685:13;;:15;;;;:::i;:::-;40702:6;40662:47;;;;;;;:::i;:::-;;;;;;;;40724:9;40720:99;40740:6;40737:1;:9;40720:99;;;40767:40;40773:12;:10;:12::i;:::-;40791:13;;:15;;;;;;;;;:::i;:::-;;;;;40787:1;:19;;;;:::i;:::-;40767:5;:40::i;:::-;40748:3;;;;;:::i;:::-;;;;40720:99;;;;40521:305:::0;:::o;40118:389::-;38631:7;;;;;;;;;;;38623:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;40202:1:::1;40194:6;:9;:31;;;;;40217:8;;40207:6;:18;;40194:31;40186:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40299:10;;40289:6;40273:13;;:22;;;;:::i;:::-;:36;;40265:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40352:12;:10;:12::i;:::-;40343:47;;;40380:1;40366:13;;:15;;;;:::i;:::-;40383:6;40343:47;;;;;;;:::i;:::-;;;;;;;;40405:9;40401:99;40421:6;40418:1;:9;40401:99;;;40448:40;40454:12;:10;:12::i;:::-;40472:13;;:15;;;;;;;;;:::i;:::-;;;;;40468:1;:19;;;;:::i;:::-;40448:5;:40::i;:::-;40429:3;;;;;:::i;:::-;;;;40401:99;;;;40118:389:::0;:::o;34231:682::-;34304:13;34338:16;34346:7;34338;:16::i;:::-;34330:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34422:23;34448:10;:19;34459:7;34448:19;;;;;;;;;;;34422:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34478:18;34499:10;:8;:10::i;:::-;34478:31;;34608:1;34592:4;34586:18;:23;34582:72;;;34633:9;34626:16;;;;;;34582:72;34784:1;34764:9;34758:23;:27;34754:108;;;34833:4;34839:9;34816:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34802:48;;;;;;34754:108;34882:23;34897:7;34882:14;:23::i;:::-;34875:30;;;;34231:682;;;;:::o;38804:113::-;38860:7;38887:13;;38880:20;;38804:113;:::o;39585:523::-;38631:7;;;;;;;;;;;38623:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;39673:1:::1;39665:6;:9;:31;;;;;39688:8;;39678:6;:18;;39665:31;39657:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39770:10;;39760:6;39744:13;;:22;;;;:::i;:::-;:36;;39736:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39839:10;:8;:10::i;:::-;39830:6;:19;;;;:::i;:::-;39817:9;:32;39809:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39888:7;:5;:7::i;:::-;39880:25;;:36;39906:9;39880:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39941:12;:10;:12::i;:::-;39932:52;;;39971:4;39969:1;39955:13;;:15;;;;:::i;:::-;:20;;;;:::i;:::-;39977:6;39932:52;;;;;;;:::i;:::-;;;;;;;;39999:9;39995:106;40015:6;40012:1;:9;39995:106;;;40042:47;40048:12;:10;:12::i;:::-;40073:13;;:15;;;;;;;;;:::i;:::-;;;;;40062:8;:26;;;;:::i;:::-;40042:5;:47::i;:::-;40023:3;;;;;:::i;:::-;;;;39995:106;;;;39585:523:::0;:::o;25028:164::-;25125:4;25149:18;:25;25168:5;25149:25;;;;;;;;;;;;;;;:35;25175:8;25149:35;;;;;;;;;;;;;;;;;;;;;;;;;25142:42;;25028:164;;;;:::o;37778:244::-;37053:12;:10;:12::i;:::-;37042:23;;:7;:5;:7::i;:::-;:23;;;37034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:1:::1;37867:22;;:8;:22;;;;37859:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37977:8;37948:38;;37969:6;;;;;;;;;;;37948:38;;;;;;;;;;;;38006:8;37997:6;;:17;;;;;;;;;;;;;;;;;;37778:244:::0;:::o;20455:157::-;20540:4;20579:25;20564:40;;;:11;:40;;;;20557:47;;20455:157;;;:::o;27615:127::-;27680:4;27732:1;27704:30;;:7;:16;27712:7;27704:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27697:37;;27615:127;;;:::o;17255:98::-;17308:7;17335:10;17328:17;;17255:98;:::o;31510:174::-;31612:2;31585:15;:24;31601:7;31585:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31668:7;31664:2;31630:46;;31639:23;31654:7;31639:14;:23::i;:::-;31630:46;;;;;;;;;;;;31510:174;;:::o;35070:217::-;35170:16;35178:7;35170;:16::i;:::-;35162:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35270:9;35248:10;:19;35259:7;35248:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;35070:217;;:::o;27910:348::-;28003:4;28028:16;28036:7;28028;:16::i;:::-;28020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28104:13;28120:23;28135:7;28120:14;:23::i;:::-;28104:39;;28173:5;28162:16;;:7;:16;;;:51;;;;28206:7;28182:31;;:20;28194:7;28182:11;:20::i;:::-;:31;;;28162:51;:87;;;;28217:32;28234:5;28241:7;28217:16;:32::i;:::-;28162:87;28154:96;;;27910:348;;;;:::o;30843:548::-;30968:4;30941:31;;:23;30956:7;30941:14;:23::i;:::-;:31;;;30933:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31051:1;31037:16;;:2;:16;;;;31029:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31108:39;31129:4;31135:2;31139:7;31108:20;:39::i;:::-;31213:29;31230:1;31234:7;31213:8;:29::i;:::-;31275:1;31256:9;:15;31266:4;31256:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31304:1;31287:9;:13;31297:2;31287:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31335:2;31316:7;:16;31324:7;31316:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31375:7;31371:2;31356:27;;31365:4;31356:27;;;;;;;;;;;;30843:548;;;:::o;29526:385::-;29620:1;29606:16;;:2;:16;;;;29598:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29679:16;29687:7;29679;:16::i;:::-;29678:17;29670:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29742:45;29771:1;29775:2;29779:7;29742:20;:45::i;:::-;29818:1;29801:9;:13;29811:2;29801:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29849:2;29830:7;:16;29838:7;29830:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29895:7;29891:2;29870:33;;29887:1;29870:33;;;;;;;;;;;;29526:385;;:::o;27029:272::-;27143:28;27153:4;27159:2;27163:7;27143:9;:28::i;:::-;27190:48;27213:4;27219:2;27223:7;27232:5;27190:22;:48::i;:::-;27182:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27029:272;;;;:::o;38926:107::-;38986:13;39018:7;39011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38926:107;:::o;23243:361::-;23316:13;23350:16;23358:7;23350;:16::i;:::-;23342:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23432:21;23456:10;:8;:10::i;:::-;23432:34;;23508:1;23490:7;23484:21;:25;:112;;;;;;;;;;;;;;;;;23549:7;23558:18;:7;:16;:18::i;:::-;23532:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23484:112;23477:119;;;23243:361;;;:::o;33707:93::-;;;;:::o;32250:843::-;32371:4;32397:15;:2;:13;;;:15::i;:::-;32393:693;;;32449:2;32433:36;;;32470:12;:10;:12::i;:::-;32484:4;32490:7;32499:5;32433:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32429:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32696:1;32679:6;:13;:18;32675:341;;;32722:60;;;;;;;;;;:::i;:::-;;;;;;;;32675:341;32966:6;32960:13;32951:6;32947:2;32943:15;32936:38;32429:602;32566:45;;;32556:55;;;:6;:55;;;;32549:62;;;;;32393:693;33070:4;33063:11;;32250:843;;;;;;;:::o;17905:724::-;17961:13;18192:1;18183:5;:10;18179:53;;;18210:10;;;;;;;;;;;;;;;;;;;;;18179:53;18242:12;18257:5;18242:20;;18273:14;18298:78;18313:1;18305:4;:9;18298:78;;18331:8;;;;;:::i;:::-;;;;18362:2;18354:10;;;;;:::i;:::-;;;18298:78;;;18386:19;18418:6;18408:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18386:39;;18436:154;18452:1;18443:5;:10;18436:154;;18480:1;18470:11;;;;;:::i;:::-;;;18547:2;18539:5;:10;;;;:::i;:::-;18526:2;:24;;;;:::i;:::-;18513:39;;18496:6;18503;18496:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18576:2;18567:11;;;;;:::i;:::-;;;18436:154;;;18614:6;18600:21;;;;;17905:724;;;;:::o;9363:423::-;9423:4;9632:12;9743:7;9731:20;9723:28;;9777:1;9770:4;:8;9763:15;;;9363:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;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:654::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7903:2;7892:9;7888:18;7875:32;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8061:63;8116:7;8107:6;8096:9;8092:22;8061:63;:::i;:::-;8051:73;;7846:288;7487:654;;;;;:::o;8147:118::-;8234:24;8252:5;8234:24;:::i;:::-;8229:3;8222:37;8147:118;;:::o;8271:109::-;8352:21;8367:5;8352:21;:::i;:::-;8347:3;8340:34;8271:109;;:::o;8386:360::-;8472:3;8500:38;8532:5;8500:38;:::i;:::-;8554:70;8617:6;8612:3;8554:70;:::i;:::-;8547:77;;8633:52;8678:6;8673:3;8666:4;8659:5;8655:16;8633:52;:::i;:::-;8710:29;8732:6;8710:29;:::i;:::-;8705:3;8701:39;8694:46;;8476:270;8386:360;;;;:::o;8752:147::-;8847:45;8886:5;8847:45;:::i;:::-;8842:3;8835:58;8752:147;;:::o;8905:364::-;8993:3;9021:39;9054:5;9021:39;:::i;:::-;9076:71;9140:6;9135:3;9076:71;:::i;:::-;9069:78;;9156:52;9201:6;9196:3;9189:4;9182:5;9178:16;9156:52;:::i;:::-;9233:29;9255:6;9233:29;:::i;:::-;9228:3;9224:39;9217:46;;8997:272;8905:364;;;;:::o;9275:377::-;9381:3;9409:39;9442:5;9409:39;:::i;:::-;9464:89;9546:6;9541:3;9464:89;:::i;:::-;9457:96;;9562:52;9607:6;9602:3;9595:4;9588:5;9584:16;9562:52;:::i;:::-;9639:6;9634:3;9630:16;9623:23;;9385:267;9275:377;;;;:::o;9658:366::-;9800:3;9821:67;9885:2;9880:3;9821:67;:::i;:::-;9814:74;;9897:93;9986:3;9897:93;:::i;:::-;10015:2;10010:3;10006:12;9999:19;;9658:366;;;:::o;10030:::-;10172:3;10193:67;10257:2;10252:3;10193:67;:::i;:::-;10186:74;;10269:93;10358:3;10269:93;:::i;:::-;10387:2;10382:3;10378:12;10371:19;;10030:366;;;:::o;10402:::-;10544:3;10565:67;10629:2;10624:3;10565:67;:::i;:::-;10558:74;;10641:93;10730:3;10641:93;:::i;:::-;10759:2;10754:3;10750:12;10743:19;;10402:366;;;:::o;10774:::-;10916:3;10937:67;11001:2;10996:3;10937:67;:::i;:::-;10930:74;;11013:93;11102:3;11013:93;:::i;:::-;11131:2;11126:3;11122:12;11115:19;;10774:366;;;:::o;11146:::-;11288:3;11309:67;11373:2;11368:3;11309:67;:::i;:::-;11302:74;;11385:93;11474:3;11385:93;:::i;:::-;11503:2;11498:3;11494:12;11487:19;;11146:366;;;:::o;11518:::-;11660:3;11681:67;11745:2;11740:3;11681:67;:::i;:::-;11674:74;;11757:93;11846:3;11757:93;:::i;:::-;11875:2;11870:3;11866:12;11859:19;;11518:366;;;:::o;11890:::-;12032:3;12053:67;12117:2;12112:3;12053:67;:::i;:::-;12046:74;;12129:93;12218:3;12129:93;:::i;:::-;12247:2;12242:3;12238:12;12231:19;;11890:366;;;:::o;12262:::-;12404:3;12425:67;12489:2;12484:3;12425:67;:::i;:::-;12418:74;;12501:93;12590:3;12501:93;:::i;:::-;12619:2;12614:3;12610:12;12603:19;;12262:366;;;:::o;12634:::-;12776:3;12797:67;12861:2;12856:3;12797:67;:::i;:::-;12790:74;;12873:93;12962:3;12873:93;:::i;:::-;12991:2;12986:3;12982:12;12975:19;;12634:366;;;:::o;13006:::-;13148:3;13169:67;13233:2;13228:3;13169:67;:::i;:::-;13162:74;;13245:93;13334:3;13245:93;:::i;:::-;13363:2;13358:3;13354:12;13347:19;;13006:366;;;:::o;13378:::-;13520:3;13541:67;13605:2;13600:3;13541:67;:::i;:::-;13534:74;;13617:93;13706:3;13617:93;:::i;:::-;13735:2;13730:3;13726:12;13719:19;;13378:366;;;:::o;13750:::-;13892:3;13913:67;13977:2;13972:3;13913:67;:::i;:::-;13906:74;;13989:93;14078:3;13989:93;:::i;:::-;14107:2;14102:3;14098:12;14091:19;;13750:366;;;:::o;14122:::-;14264:3;14285:67;14349:2;14344:3;14285:67;:::i;:::-;14278:74;;14361:93;14450:3;14361:93;:::i;:::-;14479:2;14474:3;14470:12;14463:19;;14122:366;;;:::o;14494:::-;14636:3;14657:67;14721:2;14716:3;14657:67;:::i;:::-;14650:74;;14733:93;14822:3;14733:93;:::i;:::-;14851:2;14846:3;14842:12;14835:19;;14494:366;;;:::o;14866:::-;15008:3;15029:67;15093:2;15088:3;15029:67;:::i;:::-;15022:74;;15105:93;15194:3;15105:93;:::i;:::-;15223:2;15218:3;15214:12;15207:19;;14866:366;;;:::o;15238:::-;15380:3;15401:67;15465:2;15460:3;15401:67;:::i;:::-;15394:74;;15477:93;15566:3;15477:93;:::i;:::-;15595:2;15590:3;15586:12;15579:19;;15238:366;;;:::o;15610:::-;15752:3;15773:67;15837:2;15832:3;15773:67;:::i;:::-;15766:74;;15849:93;15938:3;15849:93;:::i;:::-;15967:2;15962:3;15958:12;15951:19;;15610:366;;;:::o;15982:::-;16124:3;16145:67;16209:2;16204:3;16145:67;:::i;:::-;16138:74;;16221:93;16310:3;16221:93;:::i;:::-;16339:2;16334:3;16330:12;16323:19;;15982:366;;;:::o;16354:::-;16496:3;16517:67;16581:2;16576:3;16517:67;:::i;:::-;16510:74;;16593:93;16682:3;16593:93;:::i;:::-;16711:2;16706:3;16702:12;16695:19;;16354:366;;;:::o;16726:::-;16868:3;16889:67;16953:2;16948:3;16889:67;:::i;:::-;16882:74;;16965:93;17054:3;16965:93;:::i;:::-;17083:2;17078:3;17074:12;17067:19;;16726:366;;;:::o;17098:::-;17240:3;17261:67;17325:2;17320:3;17261:67;:::i;:::-;17254:74;;17337:93;17426:3;17337:93;:::i;:::-;17455:2;17450:3;17446:12;17439:19;;17098:366;;;:::o;17470:::-;17612:3;17633:67;17697:2;17692:3;17633:67;:::i;:::-;17626:74;;17709:93;17798:3;17709:93;:::i;:::-;17827:2;17822:3;17818:12;17811:19;;17470:366;;;:::o;17842:::-;17984:3;18005:67;18069:2;18064:3;18005:67;:::i;:::-;17998:74;;18081:93;18170:3;18081:93;:::i;:::-;18199:2;18194:3;18190:12;18183:19;;17842:366;;;:::o;18214:118::-;18301:24;18319:5;18301:24;:::i;:::-;18296:3;18289:37;18214:118;;:::o;18338:435::-;18518:3;18540:95;18631:3;18622:6;18540:95;:::i;:::-;18533:102;;18652:95;18743:3;18734:6;18652:95;:::i;:::-;18645:102;;18764:3;18757:10;;18338:435;;;;;:::o;18779:222::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18923:71;18991:1;18980:9;18976:17;18967:6;18923:71;:::i;:::-;18779:222;;;;:::o;19007:640::-;19202:4;19240:3;19229:9;19225:19;19217:27;;19254:71;19322:1;19311:9;19307:17;19298:6;19254:71;:::i;:::-;19335:72;19403:2;19392:9;19388:18;19379:6;19335:72;:::i;:::-;19417;19485:2;19474:9;19470:18;19461:6;19417:72;:::i;:::-;19536:9;19530:4;19526:20;19521:2;19510:9;19506:18;19499:48;19564:76;19635:4;19626:6;19564:76;:::i;:::-;19556:84;;19007:640;;;;;;;:::o;19653:210::-;19740:4;19778:2;19767:9;19763:18;19755:26;;19791:65;19853:1;19842:9;19838:17;19829:6;19791:65;:::i;:::-;19653:210;;;;:::o;19869:313::-;19982:4;20020:2;20009:9;20005:18;19997:26;;20069:9;20063:4;20059:20;20055:1;20044:9;20040:17;20033:47;20097:78;20170:4;20161:6;20097:78;:::i;:::-;20089:86;;19869:313;;;;:::o;20188:419::-;20354:4;20392:2;20381:9;20377:18;20369:26;;20441:9;20435:4;20431:20;20427:1;20416:9;20412:17;20405:47;20469:131;20595:4;20469:131;:::i;:::-;20461:139;;20188:419;;;:::o;20613:::-;20779:4;20817:2;20806:9;20802:18;20794:26;;20866:9;20860:4;20856:20;20852:1;20841:9;20837:17;20830:47;20894:131;21020:4;20894:131;:::i;:::-;20886:139;;20613:419;;;:::o;21038:::-;21204:4;21242:2;21231:9;21227:18;21219:26;;21291:9;21285:4;21281:20;21277:1;21266:9;21262:17;21255:47;21319:131;21445:4;21319:131;:::i;:::-;21311:139;;21038:419;;;:::o;21463:::-;21629:4;21667:2;21656:9;21652:18;21644:26;;21716:9;21710:4;21706:20;21702:1;21691:9;21687:17;21680:47;21744:131;21870:4;21744:131;:::i;:::-;21736:139;;21463:419;;;:::o;21888:::-;22054:4;22092:2;22081:9;22077:18;22069:26;;22141:9;22135:4;22131:20;22127:1;22116:9;22112:17;22105:47;22169:131;22295:4;22169:131;:::i;:::-;22161:139;;21888:419;;;:::o;22313:::-;22479:4;22517:2;22506:9;22502:18;22494:26;;22566:9;22560:4;22556:20;22552:1;22541:9;22537:17;22530:47;22594:131;22720:4;22594:131;:::i;:::-;22586:139;;22313:419;;;:::o;22738:::-;22904:4;22942:2;22931:9;22927:18;22919:26;;22991:9;22985:4;22981:20;22977:1;22966:9;22962:17;22955:47;23019:131;23145:4;23019:131;:::i;:::-;23011:139;;22738:419;;;:::o;23163:::-;23329:4;23367:2;23356:9;23352:18;23344:26;;23416:9;23410:4;23406:20;23402:1;23391:9;23387:17;23380:47;23444:131;23570:4;23444:131;:::i;:::-;23436:139;;23163:419;;;:::o;23588:::-;23754:4;23792:2;23781:9;23777:18;23769:26;;23841:9;23835:4;23831:20;23827:1;23816:9;23812:17;23805:47;23869:131;23995:4;23869:131;:::i;:::-;23861:139;;23588:419;;;:::o;24013:::-;24179:4;24217:2;24206:9;24202:18;24194:26;;24266:9;24260:4;24256:20;24252:1;24241:9;24237:17;24230:47;24294:131;24420:4;24294:131;:::i;:::-;24286:139;;24013:419;;;:::o;24438:::-;24604:4;24642:2;24631:9;24627:18;24619:26;;24691:9;24685:4;24681:20;24677:1;24666:9;24662:17;24655:47;24719:131;24845:4;24719:131;:::i;:::-;24711:139;;24438:419;;;:::o;24863:::-;25029:4;25067:2;25056:9;25052:18;25044:26;;25116:9;25110:4;25106:20;25102:1;25091:9;25087:17;25080:47;25144:131;25270:4;25144:131;:::i;:::-;25136:139;;24863:419;;;:::o;25288:::-;25454:4;25492:2;25481:9;25477:18;25469:26;;25541:9;25535:4;25531:20;25527:1;25516:9;25512:17;25505:47;25569:131;25695:4;25569:131;:::i;:::-;25561:139;;25288:419;;;:::o;25713:::-;25879:4;25917:2;25906:9;25902:18;25894:26;;25966:9;25960:4;25956:20;25952:1;25941:9;25937:17;25930:47;25994:131;26120:4;25994:131;:::i;:::-;25986:139;;25713:419;;;:::o;26138:::-;26304:4;26342:2;26331:9;26327:18;26319:26;;26391:9;26385:4;26381:20;26377:1;26366:9;26362:17;26355:47;26419:131;26545:4;26419:131;:::i;:::-;26411:139;;26138:419;;;:::o;26563:::-;26729:4;26767:2;26756:9;26752:18;26744:26;;26816:9;26810:4;26806:20;26802:1;26791:9;26787:17;26780:47;26844:131;26970:4;26844:131;:::i;:::-;26836:139;;26563:419;;;:::o;26988:::-;27154:4;27192:2;27181:9;27177:18;27169:26;;27241:9;27235:4;27231:20;27227:1;27216:9;27212:17;27205:47;27269:131;27395:4;27269:131;:::i;:::-;27261:139;;26988:419;;;:::o;27413:::-;27579:4;27617:2;27606:9;27602:18;27594:26;;27666:9;27660:4;27656:20;27652:1;27641:9;27637:17;27630:47;27694:131;27820:4;27694:131;:::i;:::-;27686:139;;27413:419;;;:::o;27838:::-;28004:4;28042:2;28031:9;28027:18;28019:26;;28091:9;28085:4;28081:20;28077:1;28066:9;28062:17;28055:47;28119:131;28245:4;28119:131;:::i;:::-;28111:139;;27838:419;;;:::o;28263:::-;28429:4;28467:2;28456:9;28452:18;28444:26;;28516:9;28510:4;28506:20;28502:1;28491:9;28487:17;28480:47;28544:131;28670:4;28544:131;:::i;:::-;28536:139;;28263:419;;;:::o;28688:::-;28854:4;28892:2;28881:9;28877:18;28869:26;;28941:9;28935:4;28931:20;28927:1;28916:9;28912:17;28905:47;28969:131;29095:4;28969:131;:::i;:::-;28961:139;;28688:419;;;:::o;29113:::-;29279:4;29317:2;29306:9;29302:18;29294:26;;29366:9;29360:4;29356:20;29352:1;29341:9;29337:17;29330:47;29394:131;29520:4;29394:131;:::i;:::-;29386:139;;29113:419;;;:::o;29538:::-;29704:4;29742:2;29731:9;29727:18;29719:26;;29791:9;29785:4;29781:20;29777:1;29766:9;29762:17;29755:47;29819:131;29945:4;29819:131;:::i;:::-;29811:139;;29538:419;;;:::o;29963:222::-;30056:4;30094:2;30083:9;30079:18;30071:26;;30107:71;30175:1;30164:9;30160:17;30151:6;30107:71;:::i;:::-;29963:222;;;;:::o;30191:348::-;30320:4;30358:2;30347:9;30343:18;30335:26;;30371:71;30439:1;30428:9;30424:17;30415:6;30371:71;:::i;:::-;30452:80;30528:2;30517:9;30513:18;30504:6;30452:80;:::i;:::-;30191:348;;;;;:::o;30545:332::-;30666:4;30704:2;30693:9;30689:18;30681:26;;30717:71;30785:1;30774:9;30770:17;30761:6;30717:71;:::i;:::-;30798:72;30866:2;30855:9;30851:18;30842:6;30798:72;:::i;:::-;30545:332;;;;;:::o;30883:129::-;30917:6;30944:20;;:::i;:::-;30934:30;;30973:33;31001:4;30993:6;30973:33;:::i;:::-;30883:129;;;:::o;31018:75::-;31051:6;31084:2;31078:9;31068:19;;31018:75;:::o;31099:307::-;31160:4;31250:18;31242:6;31239:30;31236:56;;;31272:18;;:::i;:::-;31236:56;31310:29;31332:6;31310:29;:::i;:::-;31302:37;;31394:4;31388;31384:15;31376:23;;31099:307;;;:::o;31412:308::-;31474:4;31564:18;31556:6;31553:30;31550:56;;;31586:18;;:::i;:::-;31550:56;31624:29;31646:6;31624:29;:::i;:::-;31616:37;;31708:4;31702;31698:15;31690:23;;31412:308;;;:::o;31726:98::-;31777:6;31811:5;31805:12;31795:22;;31726:98;;;:::o;31830:99::-;31882:6;31916:5;31910:12;31900:22;;31830:99;;;:::o;31935:168::-;32018:11;32052:6;32047:3;32040:19;32092:4;32087:3;32083:14;32068:29;;31935:168;;;;:::o;32109:169::-;32193:11;32227:6;32222:3;32215:19;32267:4;32262:3;32258:14;32243:29;;32109:169;;;;:::o;32284:148::-;32386:11;32423:3;32408:18;;32284:148;;;;:::o;32438:305::-;32478:3;32497:20;32515:1;32497:20;:::i;:::-;32492:25;;32531:20;32549:1;32531:20;:::i;:::-;32526:25;;32685:1;32617:66;32613:74;32610:1;32607:81;32604:107;;;32691:18;;:::i;:::-;32604:107;32735:1;32732;32728:9;32721:16;;32438:305;;;;:::o;32749:185::-;32789:1;32806:20;32824:1;32806:20;:::i;:::-;32801:25;;32840:20;32858:1;32840:20;:::i;:::-;32835:25;;32879:1;32869:35;;32884:18;;:::i;:::-;32869:35;32926:1;32923;32919:9;32914:14;;32749:185;;;;:::o;32940:348::-;32980:7;33003:20;33021:1;33003:20;:::i;:::-;32998:25;;33037:20;33055:1;33037:20;:::i;:::-;33032:25;;33225:1;33157:66;33153:74;33150:1;33147:81;33142:1;33135:9;33128:17;33124:105;33121:131;;;33232:18;;:::i;:::-;33121:131;33280:1;33277;33273:9;33262:20;;32940:348;;;;:::o;33294:191::-;33334:4;33354:20;33372:1;33354:20;:::i;:::-;33349:25;;33388:20;33406:1;33388:20;:::i;:::-;33383:25;;33427:1;33424;33421:8;33418:34;;;33432:18;;:::i;:::-;33418:34;33477:1;33474;33470:9;33462:17;;33294:191;;;;:::o;33491:96::-;33528:7;33557:24;33575:5;33557:24;:::i;:::-;33546:35;;33491:96;;;:::o;33593:90::-;33627:7;33670:5;33663:13;33656:21;33645:32;;33593:90;;;:::o;33689:149::-;33725:7;33765:66;33758:5;33754:78;33743:89;;33689:149;;;:::o;33844:126::-;33881:7;33921:42;33914:5;33910:54;33899:65;;33844:126;;;:::o;33976:77::-;34013:7;34042:5;34031:16;;33976:77;;;:::o;34059:121::-;34117:9;34150:24;34168:5;34150:24;:::i;:::-;34137:37;;34059:121;;;:::o;34186:154::-;34270:6;34265:3;34260;34247:30;34332:1;34323:6;34318:3;34314:16;34307:27;34186:154;;;:::o;34346:307::-;34414:1;34424:113;34438:6;34435:1;34432:13;34424:113;;;34523:1;34518:3;34514:11;34508:18;34504:1;34499:3;34495:11;34488:39;34460:2;34457:1;34453:10;34448:15;;34424:113;;;34555:6;34552:1;34549:13;34546:101;;;34635:1;34626:6;34621:3;34617:16;34610:27;34546:101;34395:258;34346:307;;;:::o;34659:320::-;34703:6;34740:1;34734:4;34730:12;34720:22;;34787:1;34781:4;34777:12;34808:18;34798:81;;34864:4;34856:6;34852:17;34842:27;;34798:81;34926:2;34918:6;34915:14;34895:18;34892:38;34889:84;;;34945:18;;:::i;:::-;34889:84;34710:269;34659:320;;;:::o;34985:281::-;35068:27;35090:4;35068:27;:::i;:::-;35060:6;35056:40;35198:6;35186:10;35183:22;35162:18;35150:10;35147:34;35144:62;35141:88;;;35209:18;;:::i;:::-;35141:88;35249:10;35245:2;35238:22;35028:238;34985:281;;:::o;35272:233::-;35311:3;35334:24;35352:5;35334:24;:::i;:::-;35325:33;;35380:66;35373:5;35370:77;35367:103;;;35450:18;;:::i;:::-;35367:103;35497:1;35490:5;35486:13;35479:20;;35272:233;;;:::o;35511:176::-;35543:1;35560:20;35578:1;35560:20;:::i;:::-;35555:25;;35594:20;35612:1;35594:20;:::i;:::-;35589:25;;35633:1;35623:35;;35638:18;;:::i;:::-;35623:35;35679:1;35676;35672:9;35667:14;;35511:176;;;;:::o;35693:180::-;35741:77;35738:1;35731:88;35838:4;35835:1;35828:15;35862:4;35859:1;35852:15;35879:180;35927:77;35924:1;35917:88;36024:4;36021:1;36014:15;36048:4;36045:1;36038:15;36065:180;36113:77;36110:1;36103:88;36210:4;36207:1;36200:15;36234:4;36231:1;36224:15;36251:180;36299:77;36296:1;36289:88;36396:4;36393:1;36386:15;36420:4;36417:1;36410:15;36437:180;36485:77;36482:1;36475:88;36582:4;36579:1;36572:15;36606:4;36603:1;36596:15;36623:117;36732:1;36729;36722:12;36746:117;36855:1;36852;36845:12;36869:117;36978:1;36975;36968:12;36992:117;37101:1;37098;37091:12;37115:102;37156:6;37207:2;37203:7;37198:2;37191:5;37187:14;37183:28;37173:38;;37115:102;;;:::o;37223:165::-;37363:17;37359:1;37351:6;37347:14;37340:41;37223:165;:::o;37394:237::-;37534:34;37530:1;37522:6;37518:14;37511:58;37603:20;37598:2;37590:6;37586:15;37579:45;37394:237;:::o;37637:225::-;37777:34;37773:1;37765:6;37761:14;37754:58;37846:8;37841:2;37833:6;37829:15;37822:33;37637:225;:::o;37868:178::-;38008:30;38004:1;37996:6;37992:14;37985:54;37868:178;:::o;38052:223::-;38192:34;38188:1;38180:6;38176:14;38169:58;38261:6;38256:2;38248:6;38244:15;38237:31;38052:223;:::o;38281:175::-;38421:27;38417:1;38409:6;38405:14;38398:51;38281:175;:::o;38462:231::-;38602:34;38598:1;38590:6;38586:14;38579:58;38671:14;38666:2;38658:6;38654:15;38647:39;38462:231;:::o;38699:243::-;38839:34;38835:1;38827:6;38823:14;38816:58;38908:26;38903:2;38895:6;38891:15;38884:51;38699:243;:::o;38948:229::-;39088:34;39084:1;39076:6;39072:14;39065:58;39157:12;39152:2;39144:6;39140:15;39133:37;38948:229;:::o;39183:228::-;39323:34;39319:1;39311:6;39307:14;39300:58;39392:11;39387:2;39379:6;39375:15;39368:36;39183:228;:::o;39417:233::-;39557:34;39553:1;39545:6;39541:14;39534:58;39626:16;39621:2;39613:6;39609:15;39602:41;39417:233;:::o;39656:163::-;39796:15;39792:1;39784:6;39780:14;39773:39;39656:163;:::o;39825:182::-;39965:34;39961:1;39953:6;39949:14;39942:58;39825:182;:::o;40013:236::-;40153:34;40149:1;40141:6;40137:14;40130:58;40222:19;40217:2;40209:6;40205:15;40198:44;40013:236;:::o;40255:231::-;40395:34;40391:1;40383:6;40379:14;40372:58;40464:14;40459:2;40451:6;40447:15;40440:39;40255:231;:::o;40492:182::-;40632:34;40628:1;40620:6;40616:14;40609:58;40492:182;:::o;40680:228::-;40820:34;40816:1;40808:6;40804:14;40797:58;40889:11;40884:2;40876:6;40872:15;40865:36;40680:228;:::o;40914:234::-;41054:34;41050:1;41042:6;41038:14;41031:58;41123:17;41118:2;41110:6;41106:15;41099:42;40914:234;:::o;41154:220::-;41294:34;41290:1;41282:6;41278:14;41271:58;41363:3;41358:2;41350:6;41346:15;41339:28;41154:220;:::o;41380:236::-;41520:34;41516:1;41508:6;41504:14;41497:58;41589:19;41584:2;41576:6;41572:15;41565:44;41380:236;:::o;41622:235::-;41762:34;41758:1;41750:6;41746:14;41739:58;41831:18;41826:2;41818:6;41814:15;41807:43;41622:235;:::o;41863:161::-;42003:13;41999:1;41991:6;41987:14;41980:37;41863:161;:::o;42030:174::-;42170:26;42166:1;42158:6;42154:14;42147:50;42030:174;:::o;42210:122::-;42283:24;42301:5;42283:24;:::i;:::-;42276:5;42273:35;42263:63;;42322:1;42319;42312:12;42263:63;42210:122;:::o;42338:116::-;42408:21;42423:5;42408:21;:::i;:::-;42401:5;42398:32;42388:60;;42444:1;42441;42434:12;42388:60;42338:116;:::o;42460:120::-;42532:23;42549:5;42532:23;:::i;:::-;42525:5;42522:34;42512:62;;42570:1;42567;42560:12;42512:62;42460:120;:::o;42586:122::-;42659:24;42677:5;42659:24;:::i;:::-;42652:5;42649:35;42639:63;;42698:1;42695;42688:12;42639:63;42586:122;:::o

Swarm Source

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