ETH Price: $3,287.71 (+1.42%)
Gas: 2 Gwei

Token

Crunchy Cows (Crunchy)
 

Overview

Max Total Supply

673 Crunchy

Holders

306

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
kevinsu.eth
Balance
2 Crunchy
0x9DA11D66665e0970c03F171231fC57FF9A6E4816
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:
cows

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-16
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-22
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


pragma solidity ^0.8.0;


contract cows is Ownable, ERC721 {
    uint public maxSupply = 9999;
    uint public pre_one_package;
    uint public pre_two_package;
    uint public pre_three_package;
    uint public one_package;
    uint public two_package;
    uint public three_package;
    uint public presale_total;
    uint public startTime = block.timestamp;
    mapping(address => uint) private buyers_list;
    uint public totalSupply = 0;
    uint public _walletLimit=9;
    string public baseURI;
    bool public public_sale_status=false;
    bool public pre_sale_status=false;
    uint public maxPerTransaction = 20;  //Max Limit for Sale
   
    constructor() ERC721("Crunchy Cows", "Crunchy"){
        pre_one_package=0.02 ether;
        pre_two_package=0.035 ether;
        pre_three_package=0.045 ether;

        one_package=0.025 ether;
        two_package=0.045 ether;
        three_package=0.06 ether;
    }
   function update_presale(uint one, uint two, uint three)external onlyOwner{
        pre_one_package=one;
        pre_two_package=two;
        pre_three_package=three;
    }
   function buy(uint _count) public payable{
       require(totalSupply + _count <= maxSupply, "Max Supply Reached");
       require(checkbuyer() + _count <= _walletLimit, "Wallet limit Reached");
       require(public_sale_status == true, "Sale Paused");
       require(msg.value == one_package || msg.value == two_package || msg.value == three_package, "Incorrect amount");
       uint quantity=0;
        if(msg.value == one_package){quantity=1;}
        if(msg.value == two_package){quantity=2;}
        if(msg.value == three_package){quantity=3;}
           for(uint i = 0; i < quantity; i++)
           { _safeMint(msg.sender, totalSupply + 1);
             totalSupply += 1; 
             addbuyer();
           }
    }

   function buy_presale(uint _count) public payable{
         require(pre_sale_status == true, "Sale Paused");
         require(checkbuyer() + _count <= _walletLimit, "Wallet limit Reached");
         require(msg.value == pre_one_package || msg.value == pre_two_package || msg.value == pre_three_package, "Incorrect amount");
        uint quantity=0;
        if(msg.value == pre_one_package){quantity=1;}
        if(msg.value == pre_two_package){quantity=2;}
        if(msg.value == pre_three_package){quantity=3;}
           for(uint i = 0; i < quantity; i++)
           { _safeMint(msg.sender, totalSupply + 1);
               totalSupply += 1; 
               addbuyer();
           }
    }

    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        require(_wallets.length <= maxPerTransaction, "MAX 20 allowed ");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }

    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
    
    function addbuyer() internal {
         buyers_list[msg.sender] = buyers_list[msg.sender] + 1;
    }
    
    function checkbuyer() public view returns (uint) {
       
         return buyers_list[msg.sender];
    }
    
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
     function preSale_status(bool temp) external onlyOwner {
        pre_sale_status = temp;
    }

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

    function update_wallet_limit(uint number) external onlyOwner {
      _walletLimit = number;
    }

    function withdraw() external onlyOwner {
         uint _balance = address(this).balance;
        payable(owner()).transfer(_balance * 60 / 100);
        payable(0x0818549A2af083FC8DF14Ff185493939093C460e).transfer(_balance * 40 / 100);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkbuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"one_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"preSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pre_one_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pre_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pre_three_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pre_two_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"three_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"two_package","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"one","type":"uint256"},{"internalType":"uint256","name":"two","type":"uint256"},{"internalType":"uint256","name":"three","type":"uint256"}],"name":"update_presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"update_wallet_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261270f60075542600f55600060115560096012556000601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff02191690831515021790555060146015553480156200006057600080fd5b506040518060400160405280600c81526020017f4372756e63687920436f777300000000000000000000000000000000000000008152506040518060400160405280600781526020017f4372756e63687900000000000000000000000000000000000000000000000000815250620000ed620000e16200017b60201b60201c565b6200018360201b60201c565b81600190805190602001906200010592919062000247565b5080600290805190602001906200011e92919062000247565b50505066470de4df820000600881905550667c585087238000600981905550669fdf42f6e48000600a819055506658d15e17628000600b81905550669fdf42f6e48000600c8190555066d529ae9e860000600d819055506200035c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025590620002f7565b90600052602060002090601f016020900481019282620002795760008555620002c5565b82601f106200029457805160ff1916838001178555620002c5565b82800160010185558215620002c5579182015b82811115620002c4578251825591602001919060010190620002a7565b5b509050620002d49190620002d8565b5090565b5b80821115620002f3576000816000905550600101620002d9565b5090565b600060028204905060018216806200031057607f821691505b602082108114156200032757620003266200032d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614278806200036c6000396000f3fe6080604052600436106102465760003560e01c8063715018a611610139578063bb2841c5116100b6578063d96a094a1161007a578063d96a094a14610839578063dc0a0d3814610855578063de0f6eb414610880578063e985e9c5146108ab578063f2fde38b146108e8578063f85fd69e1461091157610246565b8063bb2841c514610761578063c87b56dd1461077d578063ce27aac1146107ba578063d4dd5365146107e3578063d5abeb011461080e57610246565b806395d89b41116100fd57806395d89b411461069057806395ea5e67146106bb578063a0bcfc7f146106e6578063a22cb4651461070f578063b88d4fde1461073857610246565b8063715018a6146105d157806378e97925146105e85780637c8255db146106135780638358090b1461063c5780638da5cb5b1461066557610246565b80632cf9a9e5116101c75780634b980d671161018b5780634b980d67146104d65780636352211e146105015780636c0360eb1461053e5780636e0311661461056957806370a082311461059457610246565b80632cf9a9e51461041557806339ff7253146104405780633b789c541461046b5780633ccfd60b1461049657806342842e0e146104ad57610246565b8063145e8cb61161020e578063145e8cb614610344578063154b70b61461036d57806318160ddd146103985780631cef37e4146103c357806323b872dd146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630e2351e214610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612f4d565b61093c565b60405161027f91906134cd565b60405180910390f35b34801561029457600080fd5b5061029d610a1e565b6040516102aa91906134e8565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612ff0565b610ab0565b6040516102e79190613466565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612e97565b610b35565b005b34801561032557600080fd5b5061032e610c4d565b60405161033b91906137ca565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612f20565b610c53565b005b34801561037957600080fd5b50610382610cec565b60405161038f91906134cd565b60405180910390f35b3480156103a457600080fd5b506103ad610cff565b6040516103ba91906137ca565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612f20565b610d05565b005b3480156103f857600080fd5b50610413600480360381019061040e9190612d81565b610d9e565b005b34801561042157600080fd5b5061042a610dfe565b60405161043791906137ca565b60405180910390f35b34801561044c57600080fd5b50610455610e04565b60405161046291906137ca565b60405180910390f35b34801561047757600080fd5b50610480610e4b565b60405161048d91906137ca565b60405180910390f35b3480156104a257600080fd5b506104ab610e51565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190612d81565b610fae565b005b3480156104e257600080fd5b506104eb610fce565b6040516104f891906137ca565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190612ff0565b610fd4565b6040516105359190613466565b60405180910390f35b34801561054a57600080fd5b50610553611086565b60405161056091906134e8565b60405180910390f35b34801561057557600080fd5b5061057e611114565b60405161058b91906137ca565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190612d14565b61111a565b6040516105c891906137ca565b60405180910390f35b3480156105dd57600080fd5b506105e66111d2565b005b3480156105f457600080fd5b506105fd61125a565b60405161060a91906137ca565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190612ed7565b611260565b005b34801561064857600080fd5b50610663600480360381019061065e9190612ff0565b6113ef565b005b34801561067157600080fd5b5061067a611475565b6040516106879190613466565b60405180910390f35b34801561069c57600080fd5b506106a561149e565b6040516106b291906134e8565b60405180910390f35b3480156106c757600080fd5b506106d0611530565b6040516106dd91906134cd565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190612fa7565b611543565b005b34801561071b57600080fd5b5061073660048036038101906107319190612e57565b6115d9565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612dd4565b61175a565b005b61077b60048036038101906107769190612ff0565b6117bc565b005b34801561078957600080fd5b506107a4600480360381019061079f9190612ff0565b611951565b6040516107b191906134e8565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061301d565b6119f8565b005b3480156107ef57600080fd5b506107f8611a8e565b60405161080591906137ca565b60405180910390f35b34801561081a57600080fd5b50610823611a94565b60405161083091906137ca565b60405180910390f35b610853600480360381019061084e9190612ff0565b611a9a565b005b34801561086157600080fd5b5061086a611c81565b60405161087791906137ca565b60405180910390f35b34801561088c57600080fd5b50610895611c87565b6040516108a291906137ca565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190612d41565b611c8d565b6040516108df91906134cd565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190612d14565b611d21565b005b34801561091d57600080fd5b50610926611e19565b60405161093391906137ca565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a175750610a1682611e1f565b5b9050919050565b606060018054610a2d90613aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990613aa6565b8015610aa65780601f10610a7b57610100808354040283529160200191610aa6565b820191906000526020600020905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b6000610abb82611e89565b610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061368a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4082610fd4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba89061370a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd0611ef5565b73ffffffffffffffffffffffffffffffffffffffff161480610bff5750610bfe81610bf9611ef5565b611c8d565b5b610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906135ea565b60405180910390fd5b610c488383611efd565b505050565b60125481565b610c5b611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610c79611475565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906136aa565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b601460019054906101000a900460ff1681565b60115481565b610d0d611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610d2b611475565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d78906136aa565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b610daf610da9611ef5565b82611fb6565b610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de59061372a565b60405180910390fd5b610df9838383612094565b505050565b600d5481565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60095481565b610e59611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610e77611475565b73ffffffffffffffffffffffffffffffffffffffff1614610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906136aa565b60405180910390fd5b6000479050610eda611475565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064603c84610f029190613962565b610f0c9190613931565b9081150290604051600060405180830381858888f19350505050158015610f37573d6000803e3d6000fd5b50730818549a2af083fc8df14ff185493939093c460e73ffffffffffffffffffffffffffffffffffffffff166108fc6064602884610f759190613962565b610f7f9190613931565b9081150290604051600060405180830381858888f19350505050158015610faa573d6000803e3d6000fd5b5050565b610fc98383836040518060200160405280600081525061175a565b505050565b60155481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061362a565b60405180910390fd5b80915050919050565b6013805461109390613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546110bf90613aa6565b801561110c5780601f106110e15761010080835404028352916020019161110c565b820191906000526020600020905b8154815290600101906020018083116110ef57829003601f168201915b505050505081565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111829061360a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611ef5565b73ffffffffffffffffffffffffffffffffffffffff166111f8611475565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611245906136aa565b60405180910390fd5b61125860006122f0565b565b600f5481565b611268611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611286611475565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d3906136aa565b60405180910390fd5b60075481516011546112ee91906138db565b111561132f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113269061378a565b60405180910390fd5b60155481511115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061374a565b60405180910390fd5b60005b81518110156113d1576113be82828151811061139757611396613c10565b5b60200260200101518260016011546113af91906138db565b6113b991906138db565b6123b4565b80806113c990613b09565b915050611378565b508051601160008282546113e591906138db565b9250508190555050565b6113f7611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611415611475565b73ffffffffffffffffffffffffffffffffffffffff161461146b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611462906136aa565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114ad90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613aa6565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b601460009054906101000a900460ff1681565b61154b611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611569611475565b73ffffffffffffffffffffffffffffffffffffffff16146115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906136aa565b60405180910390fd5b80601390805190602001906115d5929190612a8a565b5050565b6115e1611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906135aa565b60405180910390fd5b806006600061165c611ef5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611709611ef5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161174e91906134cd565b60405180910390a35050565b61176b611765611ef5565b83611fb6565b6117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a19061372a565b60405180910390fd5b6117b6848484846123d2565b50505050565b60011515601460019054906101000a900460ff16151514611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061366a565b60405180910390fd5b6012548161181e610e04565b61182891906138db565b1115611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061350a565b60405180910390fd5b60085434148061187a575060095434145b806118865750600a5434145b6118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906137aa565b60405180910390fd5b60006008543414156118d657600190505b6009543414156118e557600290505b600a543414156118f457600390505b60005b8181101561194c5761191733600160115461191291906138db565b6123b4565b60016011600082825461192a91906138db565b9250508190555061193961242e565b808061194490613b09565b9150506118f7565b505050565b606061195c82611e89565b61199b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611992906136ea565b60405180910390fd5b60006119a56124bf565b905060008151116119c557604051806020016040528060008152506119f0565b806119cf84612551565b6040516020016119e0929190613442565b6040516020818303038152906040525b915050919050565b611a00611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611475565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906136aa565b60405180910390fd5b826008819055508160098190555080600a81905550505050565b600b5481565b60075481565b60075481601154611aab91906138db565b1115611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061376a565b60405180910390fd5b60125481611af8610e04565b611b0291906138db565b1115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061350a565b60405180910390fd5b60011515601460009054906101000a900460ff16151514611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b909061366a565b60405180910390fd5b600b54341480611baa5750600c5434145b80611bb65750600d5434145b611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906137aa565b60405180910390fd5b6000600b54341415611c0657600190505b600c54341415611c1557600290505b600d54341415611c2457600390505b60005b81811015611c7c57611c47336001601154611c4291906138db565b6123b4565b600160116000828254611c5a91906138db565b92505081905550611c6961242e565b8080611c7490613b09565b915050611c27565b505050565b600c5481565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d29611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611d47611475565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906136aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e049061354a565b60405180910390fd5b611e16816122f0565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7083610fd4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fc182611e89565b612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906135ca565b60405180910390fd5b600061200b83610fd4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061207a57508373ffffffffffffffffffffffffffffffffffffffff1661206284610ab0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061208b575061208a8185611c8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120b482610fd4565b73ffffffffffffffffffffffffffffffffffffffff161461210a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612101906136ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121719061358a565b60405180910390fd5b6121858383836126b2565b612190600082611efd565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e091906139bc565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223791906138db565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123ce8282604051806020016040528060008152506126b7565b5050565b6123dd848484612094565b6123e984848484612712565b612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061352a565b60405180910390fd5b50505050565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247a91906138db565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6060601380546124ce90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546124fa90613aa6565b80156125475780601f1061251c57610100808354040283529160200191612547565b820191906000526020600020905b81548152906001019060200180831161252a57829003601f168201915b5050505050905090565b60606000821415612599576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ad565b600082905060005b600082146125cb5780806125b490613b09565b915050600a826125c49190613931565b91506125a1565b60008167ffffffffffffffff8111156125e7576125e6613c3f565b5b6040519080825280601f01601f1916602001820160405280156126195781602001600182028036833780820191505090505b5090505b600085146126a65760018261263291906139bc565b9150600a856126419190613b52565b603061264d91906138db565b60f81b81838151811061266357612662613c10565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561269f9190613931565b945061261d565b8093505050505b919050565b505050565b6126c183836128a9565b6126ce6000848484612712565b61270d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127049061352a565b60405180910390fd5b505050565b60006127338473ffffffffffffffffffffffffffffffffffffffff16612a77565b1561289c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275c611ef5565b8786866040518563ffffffff1660e01b815260040161277e9493929190613481565b602060405180830381600087803b15801561279857600080fd5b505af19250505080156127c957506040513d601f19601f820116820180604052508101906127c69190612f7a565b60015b61284c573d80600081146127f9576040519150601f19603f3d011682016040523d82523d6000602084013e6127fe565b606091505b50600081511415612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b9061352a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129109061364a565b60405180910390fd5b61292281611e89565b15612962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129599061356a565b60405180910390fd5b61296e600083836126b2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129be91906138db565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a9690613aa6565b90600052602060002090601f016020900481019282612ab85760008555612aff565b82601f10612ad157805160ff1916838001178555612aff565b82800160010185558215612aff579182015b82811115612afe578251825591602001919060010190612ae3565b5b509050612b0c9190612b10565b5090565b5b80821115612b29576000816000905550600101612b11565b5090565b6000612b40612b3b8461380a565b6137e5565b90508083825260208201905082856020860282011115612b6357612b62613c73565b5b60005b85811015612b935781612b798882612c21565b845260208401935060208301925050600181019050612b66565b5050509392505050565b6000612bb0612bab84613836565b6137e5565b905082815260208101848484011115612bcc57612bcb613c78565b5b612bd7848285613a64565b509392505050565b6000612bf2612bed84613867565b6137e5565b905082815260208101848484011115612c0e57612c0d613c78565b5b612c19848285613a64565b509392505050565b600081359050612c30816141e6565b92915050565b600082601f830112612c4b57612c4a613c6e565b5b8135612c5b848260208601612b2d565b91505092915050565b600081359050612c73816141fd565b92915050565b600081359050612c8881614214565b92915050565b600081519050612c9d81614214565b92915050565b600082601f830112612cb857612cb7613c6e565b5b8135612cc8848260208601612b9d565b91505092915050565b600082601f830112612ce657612ce5613c6e565b5b8135612cf6848260208601612bdf565b91505092915050565b600081359050612d0e8161422b565b92915050565b600060208284031215612d2a57612d29613c82565b5b6000612d3884828501612c21565b91505092915050565b60008060408385031215612d5857612d57613c82565b5b6000612d6685828601612c21565b9250506020612d7785828601612c21565b9150509250929050565b600080600060608486031215612d9a57612d99613c82565b5b6000612da886828701612c21565b9350506020612db986828701612c21565b9250506040612dca86828701612cff565b9150509250925092565b60008060008060808587031215612dee57612ded613c82565b5b6000612dfc87828801612c21565b9450506020612e0d87828801612c21565b9350506040612e1e87828801612cff565b925050606085013567ffffffffffffffff811115612e3f57612e3e613c7d565b5b612e4b87828801612ca3565b91505092959194509250565b60008060408385031215612e6e57612e6d613c82565b5b6000612e7c85828601612c21565b9250506020612e8d85828601612c64565b9150509250929050565b60008060408385031215612eae57612ead613c82565b5b6000612ebc85828601612c21565b9250506020612ecd85828601612cff565b9150509250929050565b600060208284031215612eed57612eec613c82565b5b600082013567ffffffffffffffff811115612f0b57612f0a613c7d565b5b612f1784828501612c36565b91505092915050565b600060208284031215612f3657612f35613c82565b5b6000612f4484828501612c64565b91505092915050565b600060208284031215612f6357612f62613c82565b5b6000612f7184828501612c79565b91505092915050565b600060208284031215612f9057612f8f613c82565b5b6000612f9e84828501612c8e565b91505092915050565b600060208284031215612fbd57612fbc613c82565b5b600082013567ffffffffffffffff811115612fdb57612fda613c7d565b5b612fe784828501612cd1565b91505092915050565b60006020828403121561300657613005613c82565b5b600061301484828501612cff565b91505092915050565b60008060006060848603121561303657613035613c82565b5b600061304486828701612cff565b935050602061305586828701612cff565b925050604061306686828701612cff565b9150509250925092565b613079816139f0565b82525050565b61308881613a02565b82525050565b600061309982613898565b6130a381856138ae565b93506130b3818560208601613a73565b6130bc81613c87565b840191505092915050565b60006130d2826138a3565b6130dc81856138bf565b93506130ec818560208601613a73565b6130f581613c87565b840191505092915050565b600061310b826138a3565b61311581856138d0565b9350613125818560208601613a73565b80840191505092915050565b600061313e6014836138bf565b915061314982613c98565b602082019050919050565b60006131616032836138bf565b915061316c82613cc1565b604082019050919050565b60006131846026836138bf565b915061318f82613d10565b604082019050919050565b60006131a7601c836138bf565b91506131b282613d5f565b602082019050919050565b60006131ca6024836138bf565b91506131d582613d88565b604082019050919050565b60006131ed6019836138bf565b91506131f882613dd7565b602082019050919050565b6000613210602c836138bf565b915061321b82613e00565b604082019050919050565b60006132336038836138bf565b915061323e82613e4f565b604082019050919050565b6000613256602a836138bf565b915061326182613e9e565b604082019050919050565b60006132796029836138bf565b915061328482613eed565b604082019050919050565b600061329c6020836138bf565b91506132a782613f3c565b602082019050919050565b60006132bf600b836138bf565b91506132ca82613f65565b602082019050919050565b60006132e2602c836138bf565b91506132ed82613f8e565b604082019050919050565b60006133056020836138bf565b915061331082613fdd565b602082019050919050565b60006133286029836138bf565b915061333382614006565b604082019050919050565b600061334b602f836138bf565b915061335682614055565b604082019050919050565b600061336e6021836138bf565b9150613379826140a4565b604082019050919050565b60006133916031836138bf565b915061339c826140f3565b604082019050919050565b60006133b4600f836138bf565b91506133bf82614142565b602082019050919050565b60006133d76012836138bf565b91506133e28261416b565b602082019050919050565b60006133fa6016836138bf565b915061340582614194565b602082019050919050565b600061341d6010836138bf565b9150613428826141bd565b602082019050919050565b61343c81613a5a565b82525050565b600061344e8285613100565b915061345a8284613100565b91508190509392505050565b600060208201905061347b6000830184613070565b92915050565b60006080820190506134966000830187613070565b6134a36020830186613070565b6134b06040830185613433565b81810360608301526134c2818461308e565b905095945050505050565b60006020820190506134e2600083018461307f565b92915050565b6000602082019050818103600083015261350281846130c7565b905092915050565b6000602082019050818103600083015261352381613131565b9050919050565b6000602082019050818103600083015261354381613154565b9050919050565b6000602082019050818103600083015261356381613177565b9050919050565b600060208201905081810360008301526135838161319a565b9050919050565b600060208201905081810360008301526135a3816131bd565b9050919050565b600060208201905081810360008301526135c3816131e0565b9050919050565b600060208201905081810360008301526135e381613203565b9050919050565b6000602082019050818103600083015261360381613226565b9050919050565b6000602082019050818103600083015261362381613249565b9050919050565b600060208201905081810360008301526136438161326c565b9050919050565b600060208201905081810360008301526136638161328f565b9050919050565b60006020820190508181036000830152613683816132b2565b9050919050565b600060208201905081810360008301526136a3816132d5565b9050919050565b600060208201905081810360008301526136c3816132f8565b9050919050565b600060208201905081810360008301526136e38161331b565b9050919050565b600060208201905081810360008301526137038161333e565b9050919050565b6000602082019050818103600083015261372381613361565b9050919050565b6000602082019050818103600083015261374381613384565b9050919050565b60006020820190508181036000830152613763816133a7565b9050919050565b60006020820190508181036000830152613783816133ca565b9050919050565b600060208201905081810360008301526137a3816133ed565b9050919050565b600060208201905081810360008301526137c381613410565b9050919050565b60006020820190506137df6000830184613433565b92915050565b60006137ef613800565b90506137fb8282613ad8565b919050565b6000604051905090565b600067ffffffffffffffff82111561382557613824613c3f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561385157613850613c3f565b5b61385a82613c87565b9050602081019050919050565b600067ffffffffffffffff82111561388257613881613c3f565b5b61388b82613c87565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138e682613a5a565b91506138f183613a5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392657613925613b83565b5b828201905092915050565b600061393c82613a5a565b915061394783613a5a565b92508261395757613956613bb2565b5b828204905092915050565b600061396d82613a5a565b915061397883613a5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b1576139b0613b83565b5b828202905092915050565b60006139c782613a5a565b91506139d283613a5a565b9250828210156139e5576139e4613b83565b5b828203905092915050565b60006139fb82613a3a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a91578082015181840152602081019050613a76565b83811115613aa0576000848401525b50505050565b60006002820490506001821680613abe57607f821691505b60208210811415613ad257613ad1613be1565b5b50919050565b613ae182613c87565b810181811067ffffffffffffffff82111715613b0057613aff613c3f565b5b80604052505050565b6000613b1482613a5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4757613b46613b83565b5b600182019050919050565b6000613b5d82613a5a565b9150613b6883613a5a565b925082613b7857613b77613bb2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f57616c6c6574206c696d69742052656163686564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520506175736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d415820323020616c6c6f776564200000000000000000000000000000000000600082015250565b7f4d617820537570706c7920526561636865640000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b6141ef816139f0565b81146141fa57600080fd5b50565b61420681613a02565b811461421157600080fd5b50565b61421d81613a0e565b811461422857600080fd5b50565b61423481613a5a565b811461423f57600080fd5b5056fea2646970667358221220b2231b3ab3fab257a28488f081acaa8f650e9fdd55ff034d927ac8e2461519db64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063715018a611610139578063bb2841c5116100b6578063d96a094a1161007a578063d96a094a14610839578063dc0a0d3814610855578063de0f6eb414610880578063e985e9c5146108ab578063f2fde38b146108e8578063f85fd69e1461091157610246565b8063bb2841c514610761578063c87b56dd1461077d578063ce27aac1146107ba578063d4dd5365146107e3578063d5abeb011461080e57610246565b806395d89b41116100fd57806395d89b411461069057806395ea5e67146106bb578063a0bcfc7f146106e6578063a22cb4651461070f578063b88d4fde1461073857610246565b8063715018a6146105d157806378e97925146105e85780637c8255db146106135780638358090b1461063c5780638da5cb5b1461066557610246565b80632cf9a9e5116101c75780634b980d671161018b5780634b980d67146104d65780636352211e146105015780636c0360eb1461053e5780636e0311661461056957806370a082311461059457610246565b80632cf9a9e51461041557806339ff7253146104405780633b789c541461046b5780633ccfd60b1461049657806342842e0e146104ad57610246565b8063145e8cb61161020e578063145e8cb614610344578063154b70b61461036d57806318160ddd146103985780631cef37e4146103c357806323b872dd146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630e2351e214610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612f4d565b61093c565b60405161027f91906134cd565b60405180910390f35b34801561029457600080fd5b5061029d610a1e565b6040516102aa91906134e8565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612ff0565b610ab0565b6040516102e79190613466565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612e97565b610b35565b005b34801561032557600080fd5b5061032e610c4d565b60405161033b91906137ca565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612f20565b610c53565b005b34801561037957600080fd5b50610382610cec565b60405161038f91906134cd565b60405180910390f35b3480156103a457600080fd5b506103ad610cff565b6040516103ba91906137ca565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612f20565b610d05565b005b3480156103f857600080fd5b50610413600480360381019061040e9190612d81565b610d9e565b005b34801561042157600080fd5b5061042a610dfe565b60405161043791906137ca565b60405180910390f35b34801561044c57600080fd5b50610455610e04565b60405161046291906137ca565b60405180910390f35b34801561047757600080fd5b50610480610e4b565b60405161048d91906137ca565b60405180910390f35b3480156104a257600080fd5b506104ab610e51565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190612d81565b610fae565b005b3480156104e257600080fd5b506104eb610fce565b6040516104f891906137ca565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190612ff0565b610fd4565b6040516105359190613466565b60405180910390f35b34801561054a57600080fd5b50610553611086565b60405161056091906134e8565b60405180910390f35b34801561057557600080fd5b5061057e611114565b60405161058b91906137ca565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190612d14565b61111a565b6040516105c891906137ca565b60405180910390f35b3480156105dd57600080fd5b506105e66111d2565b005b3480156105f457600080fd5b506105fd61125a565b60405161060a91906137ca565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190612ed7565b611260565b005b34801561064857600080fd5b50610663600480360381019061065e9190612ff0565b6113ef565b005b34801561067157600080fd5b5061067a611475565b6040516106879190613466565b60405180910390f35b34801561069c57600080fd5b506106a561149e565b6040516106b291906134e8565b60405180910390f35b3480156106c757600080fd5b506106d0611530565b6040516106dd91906134cd565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190612fa7565b611543565b005b34801561071b57600080fd5b5061073660048036038101906107319190612e57565b6115d9565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612dd4565b61175a565b005b61077b60048036038101906107769190612ff0565b6117bc565b005b34801561078957600080fd5b506107a4600480360381019061079f9190612ff0565b611951565b6040516107b191906134e8565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061301d565b6119f8565b005b3480156107ef57600080fd5b506107f8611a8e565b60405161080591906137ca565b60405180910390f35b34801561081a57600080fd5b50610823611a94565b60405161083091906137ca565b60405180910390f35b610853600480360381019061084e9190612ff0565b611a9a565b005b34801561086157600080fd5b5061086a611c81565b60405161087791906137ca565b60405180910390f35b34801561088c57600080fd5b50610895611c87565b6040516108a291906137ca565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190612d41565b611c8d565b6040516108df91906134cd565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190612d14565b611d21565b005b34801561091d57600080fd5b50610926611e19565b60405161093391906137ca565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a175750610a1682611e1f565b5b9050919050565b606060018054610a2d90613aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990613aa6565b8015610aa65780601f10610a7b57610100808354040283529160200191610aa6565b820191906000526020600020905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b6000610abb82611e89565b610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061368a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4082610fd4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba89061370a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd0611ef5565b73ffffffffffffffffffffffffffffffffffffffff161480610bff5750610bfe81610bf9611ef5565b611c8d565b5b610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906135ea565b60405180910390fd5b610c488383611efd565b505050565b60125481565b610c5b611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610c79611475565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906136aa565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b601460019054906101000a900460ff1681565b60115481565b610d0d611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610d2b611475565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d78906136aa565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b610daf610da9611ef5565b82611fb6565b610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de59061372a565b60405180910390fd5b610df9838383612094565b505050565b600d5481565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60095481565b610e59611ef5565b73ffffffffffffffffffffffffffffffffffffffff16610e77611475565b73ffffffffffffffffffffffffffffffffffffffff1614610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906136aa565b60405180910390fd5b6000479050610eda611475565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064603c84610f029190613962565b610f0c9190613931565b9081150290604051600060405180830381858888f19350505050158015610f37573d6000803e3d6000fd5b50730818549a2af083fc8df14ff185493939093c460e73ffffffffffffffffffffffffffffffffffffffff166108fc6064602884610f759190613962565b610f7f9190613931565b9081150290604051600060405180830381858888f19350505050158015610faa573d6000803e3d6000fd5b5050565b610fc98383836040518060200160405280600081525061175a565b505050565b60155481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061362a565b60405180910390fd5b80915050919050565b6013805461109390613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546110bf90613aa6565b801561110c5780601f106110e15761010080835404028352916020019161110c565b820191906000526020600020905b8154815290600101906020018083116110ef57829003601f168201915b505050505081565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111829061360a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611ef5565b73ffffffffffffffffffffffffffffffffffffffff166111f8611475565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611245906136aa565b60405180910390fd5b61125860006122f0565b565b600f5481565b611268611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611286611475565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d3906136aa565b60405180910390fd5b60075481516011546112ee91906138db565b111561132f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113269061378a565b60405180910390fd5b60155481511115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061374a565b60405180910390fd5b60005b81518110156113d1576113be82828151811061139757611396613c10565b5b60200260200101518260016011546113af91906138db565b6113b991906138db565b6123b4565b80806113c990613b09565b915050611378565b508051601160008282546113e591906138db565b9250508190555050565b6113f7611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611415611475565b73ffffffffffffffffffffffffffffffffffffffff161461146b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611462906136aa565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114ad90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613aa6565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b601460009054906101000a900460ff1681565b61154b611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611569611475565b73ffffffffffffffffffffffffffffffffffffffff16146115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906136aa565b60405180910390fd5b80601390805190602001906115d5929190612a8a565b5050565b6115e1611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906135aa565b60405180910390fd5b806006600061165c611ef5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611709611ef5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161174e91906134cd565b60405180910390a35050565b61176b611765611ef5565b83611fb6565b6117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a19061372a565b60405180910390fd5b6117b6848484846123d2565b50505050565b60011515601460019054906101000a900460ff16151514611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061366a565b60405180910390fd5b6012548161181e610e04565b61182891906138db565b1115611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061350a565b60405180910390fd5b60085434148061187a575060095434145b806118865750600a5434145b6118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906137aa565b60405180910390fd5b60006008543414156118d657600190505b6009543414156118e557600290505b600a543414156118f457600390505b60005b8181101561194c5761191733600160115461191291906138db565b6123b4565b60016011600082825461192a91906138db565b9250508190555061193961242e565b808061194490613b09565b9150506118f7565b505050565b606061195c82611e89565b61199b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611992906136ea565b60405180910390fd5b60006119a56124bf565b905060008151116119c557604051806020016040528060008152506119f0565b806119cf84612551565b6040516020016119e0929190613442565b6040516020818303038152906040525b915050919050565b611a00611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611475565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906136aa565b60405180910390fd5b826008819055508160098190555080600a81905550505050565b600b5481565b60075481565b60075481601154611aab91906138db565b1115611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061376a565b60405180910390fd5b60125481611af8610e04565b611b0291906138db565b1115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061350a565b60405180910390fd5b60011515601460009054906101000a900460ff16151514611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b909061366a565b60405180910390fd5b600b54341480611baa5750600c5434145b80611bb65750600d5434145b611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906137aa565b60405180910390fd5b6000600b54341415611c0657600190505b600c54341415611c1557600290505b600d54341415611c2457600390505b60005b81811015611c7c57611c47336001601154611c4291906138db565b6123b4565b600160116000828254611c5a91906138db565b92505081905550611c6961242e565b8080611c7490613b09565b915050611c27565b505050565b600c5481565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d29611ef5565b73ffffffffffffffffffffffffffffffffffffffff16611d47611475565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906136aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e049061354a565b60405180910390fd5b611e16816122f0565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7083610fd4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fc182611e89565b612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906135ca565b60405180910390fd5b600061200b83610fd4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061207a57508373ffffffffffffffffffffffffffffffffffffffff1661206284610ab0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061208b575061208a8185611c8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120b482610fd4565b73ffffffffffffffffffffffffffffffffffffffff161461210a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612101906136ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121719061358a565b60405180910390fd5b6121858383836126b2565b612190600082611efd565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e091906139bc565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223791906138db565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123ce8282604051806020016040528060008152506126b7565b5050565b6123dd848484612094565b6123e984848484612712565b612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061352a565b60405180910390fd5b50505050565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247a91906138db565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6060601380546124ce90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546124fa90613aa6565b80156125475780601f1061251c57610100808354040283529160200191612547565b820191906000526020600020905b81548152906001019060200180831161252a57829003601f168201915b5050505050905090565b60606000821415612599576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ad565b600082905060005b600082146125cb5780806125b490613b09565b915050600a826125c49190613931565b91506125a1565b60008167ffffffffffffffff8111156125e7576125e6613c3f565b5b6040519080825280601f01601f1916602001820160405280156126195781602001600182028036833780820191505090505b5090505b600085146126a65760018261263291906139bc565b9150600a856126419190613b52565b603061264d91906138db565b60f81b81838151811061266357612662613c10565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561269f9190613931565b945061261d565b8093505050505b919050565b505050565b6126c183836128a9565b6126ce6000848484612712565b61270d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127049061352a565b60405180910390fd5b505050565b60006127338473ffffffffffffffffffffffffffffffffffffffff16612a77565b1561289c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275c611ef5565b8786866040518563ffffffff1660e01b815260040161277e9493929190613481565b602060405180830381600087803b15801561279857600080fd5b505af19250505080156127c957506040513d601f19601f820116820180604052508101906127c69190612f7a565b60015b61284c573d80600081146127f9576040519150601f19603f3d011682016040523d82523d6000602084013e6127fe565b606091505b50600081511415612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b9061352a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129109061364a565b60405180910390fd5b61292281611e89565b15612962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129599061356a565b60405180910390fd5b61296e600083836126b2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129be91906138db565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a9690613aa6565b90600052602060002090601f016020900481019282612ab85760008555612aff565b82601f10612ad157805160ff1916838001178555612aff565b82800160010185558215612aff579182015b82811115612afe578251825591602001919060010190612ae3565b5b509050612b0c9190612b10565b5090565b5b80821115612b29576000816000905550600101612b11565b5090565b6000612b40612b3b8461380a565b6137e5565b90508083825260208201905082856020860282011115612b6357612b62613c73565b5b60005b85811015612b935781612b798882612c21565b845260208401935060208301925050600181019050612b66565b5050509392505050565b6000612bb0612bab84613836565b6137e5565b905082815260208101848484011115612bcc57612bcb613c78565b5b612bd7848285613a64565b509392505050565b6000612bf2612bed84613867565b6137e5565b905082815260208101848484011115612c0e57612c0d613c78565b5b612c19848285613a64565b509392505050565b600081359050612c30816141e6565b92915050565b600082601f830112612c4b57612c4a613c6e565b5b8135612c5b848260208601612b2d565b91505092915050565b600081359050612c73816141fd565b92915050565b600081359050612c8881614214565b92915050565b600081519050612c9d81614214565b92915050565b600082601f830112612cb857612cb7613c6e565b5b8135612cc8848260208601612b9d565b91505092915050565b600082601f830112612ce657612ce5613c6e565b5b8135612cf6848260208601612bdf565b91505092915050565b600081359050612d0e8161422b565b92915050565b600060208284031215612d2a57612d29613c82565b5b6000612d3884828501612c21565b91505092915050565b60008060408385031215612d5857612d57613c82565b5b6000612d6685828601612c21565b9250506020612d7785828601612c21565b9150509250929050565b600080600060608486031215612d9a57612d99613c82565b5b6000612da886828701612c21565b9350506020612db986828701612c21565b9250506040612dca86828701612cff565b9150509250925092565b60008060008060808587031215612dee57612ded613c82565b5b6000612dfc87828801612c21565b9450506020612e0d87828801612c21565b9350506040612e1e87828801612cff565b925050606085013567ffffffffffffffff811115612e3f57612e3e613c7d565b5b612e4b87828801612ca3565b91505092959194509250565b60008060408385031215612e6e57612e6d613c82565b5b6000612e7c85828601612c21565b9250506020612e8d85828601612c64565b9150509250929050565b60008060408385031215612eae57612ead613c82565b5b6000612ebc85828601612c21565b9250506020612ecd85828601612cff565b9150509250929050565b600060208284031215612eed57612eec613c82565b5b600082013567ffffffffffffffff811115612f0b57612f0a613c7d565b5b612f1784828501612c36565b91505092915050565b600060208284031215612f3657612f35613c82565b5b6000612f4484828501612c64565b91505092915050565b600060208284031215612f6357612f62613c82565b5b6000612f7184828501612c79565b91505092915050565b600060208284031215612f9057612f8f613c82565b5b6000612f9e84828501612c8e565b91505092915050565b600060208284031215612fbd57612fbc613c82565b5b600082013567ffffffffffffffff811115612fdb57612fda613c7d565b5b612fe784828501612cd1565b91505092915050565b60006020828403121561300657613005613c82565b5b600061301484828501612cff565b91505092915050565b60008060006060848603121561303657613035613c82565b5b600061304486828701612cff565b935050602061305586828701612cff565b925050604061306686828701612cff565b9150509250925092565b613079816139f0565b82525050565b61308881613a02565b82525050565b600061309982613898565b6130a381856138ae565b93506130b3818560208601613a73565b6130bc81613c87565b840191505092915050565b60006130d2826138a3565b6130dc81856138bf565b93506130ec818560208601613a73565b6130f581613c87565b840191505092915050565b600061310b826138a3565b61311581856138d0565b9350613125818560208601613a73565b80840191505092915050565b600061313e6014836138bf565b915061314982613c98565b602082019050919050565b60006131616032836138bf565b915061316c82613cc1565b604082019050919050565b60006131846026836138bf565b915061318f82613d10565b604082019050919050565b60006131a7601c836138bf565b91506131b282613d5f565b602082019050919050565b60006131ca6024836138bf565b91506131d582613d88565b604082019050919050565b60006131ed6019836138bf565b91506131f882613dd7565b602082019050919050565b6000613210602c836138bf565b915061321b82613e00565b604082019050919050565b60006132336038836138bf565b915061323e82613e4f565b604082019050919050565b6000613256602a836138bf565b915061326182613e9e565b604082019050919050565b60006132796029836138bf565b915061328482613eed565b604082019050919050565b600061329c6020836138bf565b91506132a782613f3c565b602082019050919050565b60006132bf600b836138bf565b91506132ca82613f65565b602082019050919050565b60006132e2602c836138bf565b91506132ed82613f8e565b604082019050919050565b60006133056020836138bf565b915061331082613fdd565b602082019050919050565b60006133286029836138bf565b915061333382614006565b604082019050919050565b600061334b602f836138bf565b915061335682614055565b604082019050919050565b600061336e6021836138bf565b9150613379826140a4565b604082019050919050565b60006133916031836138bf565b915061339c826140f3565b604082019050919050565b60006133b4600f836138bf565b91506133bf82614142565b602082019050919050565b60006133d76012836138bf565b91506133e28261416b565b602082019050919050565b60006133fa6016836138bf565b915061340582614194565b602082019050919050565b600061341d6010836138bf565b9150613428826141bd565b602082019050919050565b61343c81613a5a565b82525050565b600061344e8285613100565b915061345a8284613100565b91508190509392505050565b600060208201905061347b6000830184613070565b92915050565b60006080820190506134966000830187613070565b6134a36020830186613070565b6134b06040830185613433565b81810360608301526134c2818461308e565b905095945050505050565b60006020820190506134e2600083018461307f565b92915050565b6000602082019050818103600083015261350281846130c7565b905092915050565b6000602082019050818103600083015261352381613131565b9050919050565b6000602082019050818103600083015261354381613154565b9050919050565b6000602082019050818103600083015261356381613177565b9050919050565b600060208201905081810360008301526135838161319a565b9050919050565b600060208201905081810360008301526135a3816131bd565b9050919050565b600060208201905081810360008301526135c3816131e0565b9050919050565b600060208201905081810360008301526135e381613203565b9050919050565b6000602082019050818103600083015261360381613226565b9050919050565b6000602082019050818103600083015261362381613249565b9050919050565b600060208201905081810360008301526136438161326c565b9050919050565b600060208201905081810360008301526136638161328f565b9050919050565b60006020820190508181036000830152613683816132b2565b9050919050565b600060208201905081810360008301526136a3816132d5565b9050919050565b600060208201905081810360008301526136c3816132f8565b9050919050565b600060208201905081810360008301526136e38161331b565b9050919050565b600060208201905081810360008301526137038161333e565b9050919050565b6000602082019050818103600083015261372381613361565b9050919050565b6000602082019050818103600083015261374381613384565b9050919050565b60006020820190508181036000830152613763816133a7565b9050919050565b60006020820190508181036000830152613783816133ca565b9050919050565b600060208201905081810360008301526137a3816133ed565b9050919050565b600060208201905081810360008301526137c381613410565b9050919050565b60006020820190506137df6000830184613433565b92915050565b60006137ef613800565b90506137fb8282613ad8565b919050565b6000604051905090565b600067ffffffffffffffff82111561382557613824613c3f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561385157613850613c3f565b5b61385a82613c87565b9050602081019050919050565b600067ffffffffffffffff82111561388257613881613c3f565b5b61388b82613c87565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138e682613a5a565b91506138f183613a5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392657613925613b83565b5b828201905092915050565b600061393c82613a5a565b915061394783613a5a565b92508261395757613956613bb2565b5b828204905092915050565b600061396d82613a5a565b915061397883613a5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b1576139b0613b83565b5b828202905092915050565b60006139c782613a5a565b91506139d283613a5a565b9250828210156139e5576139e4613b83565b5b828203905092915050565b60006139fb82613a3a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a91578082015181840152602081019050613a76565b83811115613aa0576000848401525b50505050565b60006002820490506001821680613abe57607f821691505b60208210811415613ad257613ad1613be1565b5b50919050565b613ae182613c87565b810181811067ffffffffffffffff82111715613b0057613aff613c3f565b5b80604052505050565b6000613b1482613a5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4757613b46613b83565b5b600182019050919050565b6000613b5d82613a5a565b9150613b6883613a5a565b925082613b7857613b77613bb2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f57616c6c6574206c696d69742052656163686564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520506175736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d415820323020616c6c6f776564200000000000000000000000000000000000600082015250565b7f4d617820537570706c7920526561636865640000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b6141ef816139f0565b81146141fa57600080fd5b50565b61420681613a02565b811461421157600080fd5b50565b61421d81613a0e565b811461422857600080fd5b50565b61423481613a5a565b811461423f57600080fd5b5056fea2646970667358221220b2231b3ab3fab257a28488f081acaa8f650e9fdd55ff034d927ac8e2461519db64736f6c63430008070033

Deployed Bytecode Sourcemap

34562:3972:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22408:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23353:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24912:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24435:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34996:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37960:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35100:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34962:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37852:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25802:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34801:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37732:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34671:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38286:245;;;;;;;;;;;;;:::i;:::-;;26212:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35140:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23047:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35029:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34637:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22777:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14255:94;;;;;;;;;;;;;:::i;:::-;;34865:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37123:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38179:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23522:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35057:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37514:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25205:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26468:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36412:703;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23697:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35488:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34741:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34602:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35668:737;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34771:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34833:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25571:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14504:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34705:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22408:305;22510:4;22562:25;22547:40;;;:11;:40;;;;:105;;;;22619:33;22604:48;;;:11;:48;;;;22547:105;:158;;;;22669:36;22693:11;22669:23;:36::i;:::-;22547:158;22527:178;;22408:305;;;:::o;23353:100::-;23407:13;23440:5;23433:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23353:100;:::o;24912:221::-;24988:7;25016:16;25024:7;25016;:16::i;:::-;25008:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25101:15;:24;25117:7;25101:24;;;;;;;;;;;;;;;;;;;;;25094:31;;24912:221;;;:::o;24435:411::-;24516:13;24532:23;24547:7;24532:14;:23::i;:::-;24516:39;;24580:5;24574:11;;:2;:11;;;;24566:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:5;24658:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24683:37;24700:5;24707:12;:10;:12::i;:::-;24683:16;:37::i;:::-;24658:62;24636:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24817:21;24826:2;24830:7;24817:8;:21::i;:::-;24505:341;24435:411;;:::o;34996:26::-;;;;:::o;37960:95::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38043:4:::1;38025:15;;:22;;;;;;;;;;;;;;;;;;37960:95:::0;:::o;35100:33::-;;;;;;;;;;;;;:::o;34962:27::-;;;;:::o;37852:101::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37941:4:::1;37920:18;;:25;;;;;;;;;;;;;;;;;;37852:101:::0;:::o;25802:339::-;25997:41;26016:12;:10;:12::i;:::-;26030:7;25997:18;:41::i;:::-;25989:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26105:28;26115:4;26121:2;26125:7;26105:9;:28::i;:::-;25802:339;;;:::o;34801:25::-;;;;:::o;37732:108::-;37775:4;37809:11;:23;37821:10;37809:23;;;;;;;;;;;;;;;;37802:30;;37732:108;:::o;34671:27::-;;;;:::o;38286:245::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:13:::1;38353:21;38337:37;;38393:7;:5;:7::i;:::-;38385:25;;:46;38427:3;38422:2;38411:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;38385:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38450:42;38442:60;;:81;38519:3;38514:2;38503:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;38442:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38325:206;38286:245::o:0;26212:185::-;26350:39;26367:4;26373:2;26377:7;26350:39;;;;;;;;;;;;:16;:39::i;:::-;26212:185;;;:::o;35140:34::-;;;;:::o;23047:239::-;23119:7;23139:13;23155:7;:16;23163:7;23155:16;;;;;;;;;;;;;;;;;;;;;23139:32;;23207:1;23190:19;;:5;:19;;;;23182:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23273:5;23266:12;;;23047:239;;;:::o;35029:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34637:27::-;;;;:::o;22777:208::-;22849:7;22894:1;22877:19;;:5;:19;;;;22869:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22961:9;:16;22971:5;22961:16;;;;;;;;;;;;;;;;22954:23;;22777:208;;;:::o;14255:94::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14320:21:::1;14338:1;14320:9;:21::i;:::-;14255:94::o:0;34865:39::-;;;;:::o;37123:383::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37237:9:::1;;37218:8;:15;37204:11;;:29;;;;:::i;:::-;:42;;37196:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37311:17;;37292:8;:15;:36;;37284:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37363:6;37359:98;37379:8;:15;37375:1;:19;37359:98;;;37414:43;37424:8;37433:1;37424:11;;;;;;;;:::i;:::-;;;;;;;;37455:1;37451;37437:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;37414:9;:43::i;:::-;37396:3;;;;;:::i;:::-;;;;37359:98;;;;37483:8;:15;37468:11;;:30;;;;;;;:::i;:::-;;;;;;;;37123:383:::0;:::o;38179:99::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38264:6:::1;38249:12;:21;;;;38179:99:::0;:::o;13604:87::-;13650:7;13677:6;;;;;;;;;;;13670:13;;13604:87;:::o;23522:104::-;23578:13;23611:7;23604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23522:104;:::o;35057:36::-;;;;;;;;;;;;;:::o;37514:92::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37594:4:::1;37584:7;:14;;;;;;;;;;;;:::i;:::-;;37514:92:::0;:::o;25205:295::-;25320:12;:10;:12::i;:::-;25308:24;;:8;:24;;;;25300:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:8;25375:18;:32;25394:12;:10;:12::i;:::-;25375:32;;;;;;;;;;;;;;;:42;25408:8;25375:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25473:8;25444:48;;25459:12;:10;:12::i;:::-;25444:48;;;25483:8;25444:48;;;;;;:::i;:::-;;;;;;;;25205:295;;:::o;26468:328::-;26643:41;26662:12;:10;:12::i;:::-;26676:7;26643:18;:41::i;:::-;26635:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26749:39;26763:4;26769:2;26773:7;26782:5;26749:13;:39::i;:::-;26468:328;;;;:::o;36412:703::-;36499:4;36480:23;;:15;;;;;;;;;;;:23;;;36472:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36564:12;;36554:6;36539:12;:10;:12::i;:::-;:21;;;;:::i;:::-;:37;;36531:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36634:15;;36621:9;:28;:60;;;;36666:15;;36653:9;:28;36621:60;:94;;;;36698:17;;36685:9;:30;36621:94;36613:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;36747:13;36789:15;;36776:9;:28;36773:45;;;36815:1;36806:10;;36773:45;36844:15;;36831:9;:28;36828:45;;;36870:1;36861:10;;36828:45;36899:17;;36886:9;:30;36883:47;;;36927:1;36918:10;;36883:47;36947:6;36943:165;36963:8;36959:1;:12;36943:165;;;36992:38;37002:10;37028:1;37014:11;;:15;;;;:::i;:::-;36992:9;:38::i;:::-;37063:1;37048:11;;:16;;;;;;;:::i;:::-;;;;;;;;37083:10;:8;:10::i;:::-;36973:3;;;;;:::i;:::-;;;;36943:165;;;;36460:655;36412:703;:::o;23697:334::-;23770:13;23804:16;23812:7;23804;:16::i;:::-;23796:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23885:21;23909:10;:8;:10::i;:::-;23885:34;;23961:1;23943:7;23937:21;:25;:86;;;;;;;;;;;;;;;;;23989:7;23998:18;:7;:16;:18::i;:::-;23972:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23937:86;23930:93;;;23697:334;;;:::o;35488:175::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35588:3:::1;35572:15;:19;;;;35618:3;35602:15;:19;;;;35650:5;35632:17;:23;;;;35488:175:::0;;;:::o;34741:23::-;;;;:::o;34602:28::-;;;;:::o;35668:737::-;35750:9;;35740:6;35726:11;;:20;;;;:::i;:::-;:33;;35718:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35825:12;;35815:6;35800:12;:10;:12::i;:::-;:21;;;;:::i;:::-;:37;;35792:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35902:4;35880:26;;:18;;;;;;;;;;;:26;;;35872:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;35953:11;;35940:9;:24;:52;;;;35981:11;;35968:9;:24;35940:52;:82;;;;36009:13;;35996:9;:26;35940:82;35932:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36053:13;36095:11;;36082:9;:24;36079:41;;;36117:1;36108:10;;36079:41;36146:11;;36133:9;:24;36130:41;;;36168:1;36159:10;;36130:41;36197:13;;36184:9;:26;36181:43;;;36221:1;36212:10;;36181:43;36241:6;36237:161;36257:8;36253:1;:12;36237:161;;;36286:38;36296:10;36322:1;36308:11;;:15;;;;:::i;:::-;36286:9;:38::i;:::-;36355:1;36340:11;;:16;;;;;;;:::i;:::-;;;;;;;;36373:10;:8;:10::i;:::-;36267:3;;;;;:::i;:::-;;;;36237:161;;;;35708:697;35668:737;:::o;34771:23::-;;;;:::o;34833:25::-;;;;:::o;25571:164::-;25668:4;25692:18;:25;25711:5;25692:25;;;;;;;;;;;;;;;:35;25718:8;25692:35;;;;;;;;;;;;;;;;;;;;;;;;;25685:42;;25571:164;;;;:::o;14504:192::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14613:1:::1;14593:22;;:8;:22;;;;14585:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14669:19;14679:8;14669:9;:19::i;:::-;14504:192:::0;:::o;34705:29::-;;;;:::o;15609:157::-;15694:4;15733:25;15718:40;;;:11;:40;;;;15711:47;;15609:157;;;:::o;28306:127::-;28371:4;28423:1;28395:30;;:7;:16;28403:7;28395:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28388:37;;28306:127;;;:::o;744:98::-;797:7;824:10;817:17;;744:98;:::o;32288:174::-;32390:2;32363:15;:24;32379:7;32363:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32446:7;32442:2;32408:46;;32417:23;32432:7;32417:14;:23::i;:::-;32408:46;;;;;;;;;;;;32288:174;;:::o;28600:348::-;28693:4;28718:16;28726:7;28718;:16::i;:::-;28710:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28794:13;28810:23;28825:7;28810:14;:23::i;:::-;28794:39;;28863:5;28852:16;;:7;:16;;;:51;;;;28896:7;28872:31;;:20;28884:7;28872:11;:20::i;:::-;:31;;;28852:51;:87;;;;28907:32;28924:5;28931:7;28907:16;:32::i;:::-;28852:87;28844:96;;;28600:348;;;;:::o;31592:578::-;31751:4;31724:31;;:23;31739:7;31724:14;:23::i;:::-;:31;;;31716:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:1;31820:16;;:2;:16;;;;31812:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31890:39;31911:4;31917:2;31921:7;31890:20;:39::i;:::-;31994:29;32011:1;32015:7;31994:8;:29::i;:::-;32055:1;32036:9;:15;32046:4;32036:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32084:1;32067:9;:13;32077:2;32067:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32115:2;32096:7;:16;32104:7;32096:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32154:7;32150:2;32135:27;;32144:4;32135:27;;;;;;;;;;;;31592:578;;;:::o;14704:173::-;14760:16;14779:6;;;;;;;;;;;14760:25;;14805:8;14796:6;;:17;;;;;;;;;;;;;;;;;;14860:8;14829:40;;14850:8;14829:40;;;;;;;;;;;;14749:128;14704:173;:::o;29290:110::-;29366:26;29376:2;29380:7;29366:26;;;;;;;;;;;;:9;:26::i;:::-;29290:110;;:::o;27678:315::-;27835:28;27845:4;27851:2;27855:7;27835:9;:28::i;:::-;27882:48;27905:4;27911:2;27915:7;27924:5;27882:22;:48::i;:::-;27874:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27678:315;;;;:::o;37618:102::-;37711:1;37685:11;:23;37697:10;37685:23;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;37659:11;:23;37671:10;37659:23;;;;;;;;;;;;;;;:53;;;;37618:102::o;38063:108::-;38123:13;38156:7;38149:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38063:108;:::o;1209:723::-;1265:13;1495:1;1486:5;:10;1482:53;;;1513:10;;;;;;;;;;;;;;;;;;;;;1482:53;1545:12;1560:5;1545:20;;1576:14;1601:78;1616:1;1608:4;:9;1601:78;;1634:8;;;;;:::i;:::-;;;;1665:2;1657:10;;;;;:::i;:::-;;;1601:78;;;1689:19;1721:6;1711:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1689:39;;1739:154;1755:1;1746:5;:10;1739:154;;1783:1;1773:11;;;;;:::i;:::-;;;1850:2;1842:5;:10;;;;:::i;:::-;1829:2;:24;;;;:::i;:::-;1816:39;;1799:6;1806;1799:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1879:2;1870:11;;;;;:::i;:::-;;;1739:154;;;1917:6;1903:21;;;;;1209:723;;;;:::o;34398:126::-;;;;:::o;29627:321::-;29757:18;29763:2;29767:7;29757:5;:18::i;:::-;29808:54;29839:1;29843:2;29847:7;29856:5;29808:22;:54::i;:::-;29786:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29627:321;;;:::o;33027:799::-;33182:4;33203:15;:2;:13;;;:15::i;:::-;33199:620;;;33255:2;33239:36;;;33276:12;:10;:12::i;:::-;33290:4;33296:7;33305:5;33239:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33235:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33498:1;33481:6;:13;:18;33477:272;;;33524:60;;;;;;;;;;:::i;:::-;;;;;;;;33477:272;33699:6;33693:13;33684:6;33680:2;33676:15;33669:38;33235:529;33372:41;;;33362:51;;;:6;:51;;;;33355:58;;;;;33199:620;33803:4;33796:11;;33027:799;;;;;;;:::o;30284:382::-;30378:1;30364:16;;:2;:16;;;;30356:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30437:16;30445:7;30437;:16::i;:::-;30436:17;30428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30499:45;30528:1;30532:2;30536:7;30499:20;:45::i;:::-;30574:1;30557:9;:13;30567:2;30557:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30605:2;30586:7;:16;30594:7;30586:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30650:7;30646:2;30625:33;;30642:1;30625:33;;;;;;;;;;;;30284:382;;:::o;3674:387::-;3734:4;3942:12;4009:7;3997:20;3989:28;;4052:1;4045:4;:8;4038:15;;;3674:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:619::-;9247:6;9255;9263;9312:2;9300:9;9291:7;9287:23;9283:32;9280:119;;;9318:79;;:::i;:::-;9280:119;9438:1;9463:53;9508:7;9499:6;9488:9;9484:22;9463:53;:::i;:::-;9453:63;;9409:117;9565:2;9591:53;9636:7;9627:6;9616:9;9612:22;9591:53;:::i;:::-;9581:63;;9536:118;9693:2;9719:53;9764:7;9755:6;9744:9;9740:22;9719:53;:::i;:::-;9709:63;;9664:118;9170:619;;;;;:::o;9795:118::-;9882:24;9900:5;9882:24;:::i;:::-;9877:3;9870:37;9795:118;;:::o;9919:109::-;10000:21;10015:5;10000:21;:::i;:::-;9995:3;9988:34;9919:109;;:::o;10034:360::-;10120:3;10148:38;10180:5;10148:38;:::i;:::-;10202:70;10265:6;10260:3;10202:70;:::i;:::-;10195:77;;10281:52;10326:6;10321:3;10314:4;10307:5;10303:16;10281:52;:::i;:::-;10358:29;10380:6;10358:29;:::i;:::-;10353:3;10349:39;10342:46;;10124:270;10034:360;;;;:::o;10400:364::-;10488:3;10516:39;10549:5;10516:39;:::i;:::-;10571:71;10635:6;10630:3;10571:71;:::i;:::-;10564:78;;10651:52;10696:6;10691:3;10684:4;10677:5;10673:16;10651:52;:::i;:::-;10728:29;10750:6;10728:29;:::i;:::-;10723:3;10719:39;10712:46;;10492:272;10400:364;;;;:::o;10770:377::-;10876:3;10904:39;10937:5;10904:39;:::i;:::-;10959:89;11041:6;11036:3;10959:89;:::i;:::-;10952:96;;11057:52;11102:6;11097:3;11090:4;11083:5;11079:16;11057:52;:::i;:::-;11134:6;11129:3;11125:16;11118:23;;10880:267;10770:377;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:::-;16503:3;16524:67;16588:2;16583:3;16524:67;:::i;:::-;16517:74;;16600:93;16689:3;16600:93;:::i;:::-;16718:2;16713:3;16709:12;16702:19;;16361:366;;;:::o;16733:::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:::-;17619:3;17640:67;17704:2;17699:3;17640:67;:::i;:::-;17633:74;;17716:93;17805:3;17716:93;:::i;:::-;17834:2;17829:3;17825:12;17818:19;;17477:366;;;:::o;17849:::-;17991:3;18012:67;18076:2;18071:3;18012:67;:::i;:::-;18005:74;;18088:93;18177:3;18088:93;:::i;:::-;18206:2;18201:3;18197:12;18190:19;;17849:366;;;:::o;18221:::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:::-;18735:3;18756:67;18820:2;18815:3;18756:67;:::i;:::-;18749:74;;18832:93;18921:3;18832:93;:::i;:::-;18950:2;18945:3;18941:12;18934:19;;18593:366;;;:::o;18965:::-;19107:3;19128:67;19192:2;19187:3;19128:67;:::i;:::-;19121:74;;19204:93;19293:3;19204:93;:::i;:::-;19322:2;19317:3;19313:12;19306:19;;18965:366;;;:::o;19337:118::-;19424:24;19442:5;19424:24;:::i;:::-;19419:3;19412:37;19337:118;;:::o;19461:435::-;19641:3;19663:95;19754:3;19745:6;19663:95;:::i;:::-;19656:102;;19775:95;19866:3;19857:6;19775:95;:::i;:::-;19768:102;;19887:3;19880:10;;19461:435;;;;;:::o;19902:222::-;19995:4;20033:2;20022:9;20018:18;20010:26;;20046:71;20114:1;20103:9;20099:17;20090:6;20046:71;:::i;:::-;19902:222;;;;:::o;20130:640::-;20325:4;20363:3;20352:9;20348:19;20340:27;;20377:71;20445:1;20434:9;20430:17;20421:6;20377:71;:::i;:::-;20458:72;20526:2;20515:9;20511:18;20502:6;20458:72;:::i;:::-;20540;20608:2;20597:9;20593:18;20584:6;20540:72;:::i;:::-;20659:9;20653:4;20649:20;20644:2;20633:9;20629:18;20622:48;20687:76;20758:4;20749:6;20687:76;:::i;:::-;20679:84;;20130:640;;;;;;;:::o;20776:210::-;20863:4;20901:2;20890:9;20886:18;20878:26;;20914:65;20976:1;20965:9;20961:17;20952:6;20914:65;:::i;:::-;20776:210;;;;:::o;20992:313::-;21105:4;21143:2;21132:9;21128:18;21120:26;;21192:9;21186:4;21182:20;21178:1;21167:9;21163:17;21156:47;21220:78;21293:4;21284:6;21220:78;:::i;:::-;21212:86;;20992:313;;;;:::o;21311:419::-;21477:4;21515:2;21504:9;21500:18;21492:26;;21564:9;21558:4;21554:20;21550:1;21539:9;21535:17;21528:47;21592:131;21718:4;21592:131;:::i;:::-;21584:139;;21311:419;;;:::o;21736:::-;21902:4;21940:2;21929:9;21925:18;21917:26;;21989:9;21983:4;21979:20;21975:1;21964:9;21960:17;21953:47;22017:131;22143:4;22017:131;:::i;:::-;22009:139;;21736:419;;;:::o;22161:::-;22327:4;22365:2;22354:9;22350:18;22342:26;;22414:9;22408:4;22404:20;22400:1;22389:9;22385:17;22378:47;22442:131;22568:4;22442:131;:::i;:::-;22434:139;;22161:419;;;:::o;22586:::-;22752:4;22790:2;22779:9;22775:18;22767:26;;22839:9;22833:4;22829:20;22825:1;22814:9;22810:17;22803:47;22867:131;22993:4;22867:131;:::i;:::-;22859:139;;22586:419;;;:::o;23011:::-;23177:4;23215:2;23204:9;23200:18;23192:26;;23264:9;23258:4;23254:20;23250:1;23239:9;23235:17;23228:47;23292:131;23418:4;23292:131;:::i;:::-;23284:139;;23011:419;;;:::o;23436:::-;23602:4;23640:2;23629:9;23625:18;23617:26;;23689:9;23683:4;23679:20;23675:1;23664:9;23660:17;23653:47;23717:131;23843:4;23717:131;:::i;:::-;23709:139;;23436:419;;;:::o;23861:::-;24027:4;24065:2;24054:9;24050:18;24042:26;;24114:9;24108:4;24104:20;24100:1;24089:9;24085:17;24078:47;24142:131;24268:4;24142:131;:::i;:::-;24134:139;;23861:419;;;:::o;24286:::-;24452:4;24490:2;24479:9;24475:18;24467:26;;24539:9;24533:4;24529:20;24525:1;24514:9;24510:17;24503:47;24567:131;24693:4;24567:131;:::i;:::-;24559:139;;24286:419;;;:::o;24711:::-;24877:4;24915:2;24904:9;24900:18;24892:26;;24964:9;24958:4;24954:20;24950:1;24939:9;24935:17;24928:47;24992:131;25118:4;24992:131;:::i;:::-;24984:139;;24711:419;;;:::o;25136:::-;25302:4;25340:2;25329:9;25325:18;25317:26;;25389:9;25383:4;25379:20;25375:1;25364:9;25360:17;25353:47;25417:131;25543:4;25417:131;:::i;:::-;25409:139;;25136:419;;;:::o;25561:::-;25727:4;25765:2;25754:9;25750:18;25742:26;;25814:9;25808:4;25804:20;25800:1;25789:9;25785:17;25778:47;25842:131;25968:4;25842:131;:::i;:::-;25834:139;;25561:419;;;:::o;25986:::-;26152:4;26190:2;26179:9;26175:18;26167:26;;26239:9;26233:4;26229:20;26225:1;26214:9;26210:17;26203:47;26267:131;26393:4;26267:131;:::i;:::-;26259:139;;25986:419;;;:::o;26411:::-;26577:4;26615:2;26604:9;26600:18;26592:26;;26664:9;26658:4;26654:20;26650:1;26639:9;26635:17;26628:47;26692:131;26818:4;26692:131;:::i;:::-;26684:139;;26411:419;;;:::o;26836:::-;27002:4;27040:2;27029:9;27025:18;27017:26;;27089:9;27083:4;27079:20;27075:1;27064:9;27060:17;27053:47;27117:131;27243:4;27117:131;:::i;:::-;27109:139;;26836:419;;;:::o;27261:::-;27427:4;27465:2;27454:9;27450:18;27442:26;;27514:9;27508:4;27504:20;27500:1;27489:9;27485:17;27478:47;27542:131;27668:4;27542:131;:::i;:::-;27534:139;;27261:419;;;:::o;27686:::-;27852:4;27890:2;27879:9;27875:18;27867:26;;27939:9;27933:4;27929:20;27925:1;27914:9;27910:17;27903:47;27967:131;28093:4;27967:131;:::i;:::-;27959:139;;27686:419;;;:::o;28111:::-;28277:4;28315:2;28304:9;28300:18;28292:26;;28364:9;28358:4;28354:20;28350:1;28339:9;28335:17;28328:47;28392:131;28518:4;28392:131;:::i;:::-;28384:139;;28111:419;;;:::o;28536:::-;28702:4;28740:2;28729:9;28725:18;28717:26;;28789:9;28783:4;28779:20;28775:1;28764:9;28760:17;28753:47;28817:131;28943:4;28817:131;:::i;:::-;28809:139;;28536:419;;;:::o;28961:::-;29127:4;29165:2;29154:9;29150:18;29142:26;;29214:9;29208:4;29204:20;29200:1;29189:9;29185:17;29178:47;29242:131;29368:4;29242:131;:::i;:::-;29234:139;;28961:419;;;:::o;29386:::-;29552:4;29590:2;29579:9;29575:18;29567:26;;29639:9;29633:4;29629:20;29625:1;29614:9;29610:17;29603:47;29667:131;29793:4;29667:131;:::i;:::-;29659:139;;29386:419;;;:::o;29811:::-;29977:4;30015:2;30004:9;30000:18;29992:26;;30064:9;30058:4;30054:20;30050:1;30039:9;30035:17;30028:47;30092:131;30218:4;30092:131;:::i;:::-;30084:139;;29811:419;;;:::o;30236:::-;30402:4;30440:2;30429:9;30425:18;30417:26;;30489:9;30483:4;30479:20;30475:1;30464:9;30460:17;30453:47;30517:131;30643:4;30517:131;:::i;:::-;30509:139;;30236:419;;;:::o;30661:222::-;30754:4;30792:2;30781:9;30777:18;30769:26;;30805:71;30873:1;30862:9;30858:17;30849:6;30805:71;:::i;:::-;30661:222;;;;:::o;30889:129::-;30923:6;30950:20;;:::i;:::-;30940:30;;30979:33;31007:4;30999:6;30979:33;:::i;:::-;30889:129;;;:::o;31024:75::-;31057:6;31090:2;31084:9;31074:19;;31024:75;:::o;31105:311::-;31182:4;31272:18;31264:6;31261:30;31258:56;;;31294:18;;:::i;:::-;31258:56;31344:4;31336:6;31332:17;31324:25;;31404:4;31398;31394:15;31386:23;;31105:311;;;:::o;31422:307::-;31483:4;31573:18;31565:6;31562:30;31559:56;;;31595:18;;:::i;:::-;31559:56;31633:29;31655:6;31633:29;:::i;:::-;31625:37;;31717:4;31711;31707:15;31699:23;;31422:307;;;:::o;31735:308::-;31797:4;31887:18;31879:6;31876:30;31873:56;;;31909:18;;:::i;:::-;31873:56;31947:29;31969:6;31947:29;:::i;:::-;31939:37;;32031:4;32025;32021:15;32013:23;;31735:308;;;:::o;32049:98::-;32100:6;32134:5;32128:12;32118:22;;32049:98;;;:::o;32153:99::-;32205:6;32239:5;32233:12;32223:22;;32153:99;;;:::o;32258:168::-;32341:11;32375:6;32370:3;32363:19;32415:4;32410:3;32406:14;32391:29;;32258:168;;;;:::o;32432:169::-;32516:11;32550:6;32545:3;32538:19;32590:4;32585:3;32581:14;32566:29;;32432:169;;;;:::o;32607:148::-;32709:11;32746:3;32731:18;;32607:148;;;;:::o;32761:305::-;32801:3;32820:20;32838:1;32820:20;:::i;:::-;32815:25;;32854:20;32872:1;32854:20;:::i;:::-;32849:25;;33008:1;32940:66;32936:74;32933:1;32930:81;32927:107;;;33014:18;;:::i;:::-;32927:107;33058:1;33055;33051:9;33044:16;;32761:305;;;;:::o;33072:185::-;33112:1;33129:20;33147:1;33129:20;:::i;:::-;33124:25;;33163:20;33181:1;33163:20;:::i;:::-;33158:25;;33202:1;33192:35;;33207:18;;:::i;:::-;33192:35;33249:1;33246;33242:9;33237:14;;33072:185;;;;:::o;33263:348::-;33303:7;33326:20;33344:1;33326:20;:::i;:::-;33321:25;;33360:20;33378:1;33360:20;:::i;:::-;33355:25;;33548:1;33480:66;33476:74;33473:1;33470:81;33465:1;33458:9;33451:17;33447:105;33444:131;;;33555:18;;:::i;:::-;33444:131;33603:1;33600;33596:9;33585:20;;33263:348;;;;:::o;33617:191::-;33657:4;33677:20;33695:1;33677:20;:::i;:::-;33672:25;;33711:20;33729:1;33711:20;:::i;:::-;33706:25;;33750:1;33747;33744:8;33741:34;;;33755:18;;:::i;:::-;33741:34;33800:1;33797;33793:9;33785:17;;33617:191;;;;:::o;33814:96::-;33851:7;33880:24;33898:5;33880:24;:::i;:::-;33869:35;;33814:96;;;:::o;33916:90::-;33950:7;33993:5;33986:13;33979:21;33968:32;;33916:90;;;:::o;34012:149::-;34048:7;34088:66;34081:5;34077:78;34066:89;;34012:149;;;:::o;34167:126::-;34204:7;34244:42;34237:5;34233:54;34222:65;;34167:126;;;:::o;34299:77::-;34336:7;34365:5;34354:16;;34299:77;;;:::o;34382:154::-;34466:6;34461:3;34456;34443:30;34528:1;34519:6;34514:3;34510:16;34503:27;34382:154;;;:::o;34542:307::-;34610:1;34620:113;34634:6;34631:1;34628:13;34620:113;;;34719:1;34714:3;34710:11;34704:18;34700:1;34695:3;34691:11;34684:39;34656:2;34653:1;34649:10;34644:15;;34620:113;;;34751:6;34748:1;34745:13;34742:101;;;34831:1;34822:6;34817:3;34813:16;34806:27;34742:101;34591:258;34542:307;;;:::o;34855:320::-;34899:6;34936:1;34930:4;34926:12;34916:22;;34983:1;34977:4;34973:12;35004:18;34994:81;;35060:4;35052:6;35048:17;35038:27;;34994:81;35122:2;35114:6;35111:14;35091:18;35088:38;35085:84;;;35141:18;;:::i;:::-;35085:84;34906:269;34855:320;;;:::o;35181:281::-;35264:27;35286:4;35264:27;:::i;:::-;35256:6;35252:40;35394:6;35382:10;35379:22;35358:18;35346:10;35343:34;35340:62;35337:88;;;35405:18;;:::i;:::-;35337:88;35445:10;35441:2;35434:22;35224:238;35181:281;;:::o;35468:233::-;35507:3;35530:24;35548:5;35530:24;:::i;:::-;35521:33;;35576:66;35569:5;35566:77;35563:103;;;35646:18;;:::i;:::-;35563:103;35693:1;35686:5;35682:13;35675:20;;35468:233;;;:::o;35707:176::-;35739:1;35756:20;35774:1;35756:20;:::i;:::-;35751:25;;35790:20;35808:1;35790:20;:::i;:::-;35785:25;;35829:1;35819:35;;35834:18;;:::i;:::-;35819:35;35875:1;35872;35868:9;35863:14;;35707:176;;;;:::o;35889:180::-;35937:77;35934:1;35927:88;36034:4;36031:1;36024:15;36058:4;36055:1;36048:15;36075:180;36123:77;36120:1;36113:88;36220:4;36217:1;36210:15;36244:4;36241:1;36234:15;36261:180;36309:77;36306:1;36299:88;36406:4;36403:1;36396:15;36430:4;36427:1;36420:15;36447:180;36495:77;36492:1;36485:88;36592:4;36589:1;36582:15;36616:4;36613:1;36606:15;36633:180;36681:77;36678:1;36671:88;36778:4;36775:1;36768:15;36802:4;36799:1;36792:15;36819:117;36928:1;36925;36918:12;36942:117;37051:1;37048;37041:12;37065:117;37174:1;37171;37164:12;37188:117;37297:1;37294;37287:12;37311:117;37420:1;37417;37410:12;37434:102;37475:6;37526:2;37522:7;37517:2;37510:5;37506:14;37502:28;37492:38;;37434:102;;;:::o;37542:170::-;37682:22;37678:1;37670:6;37666:14;37659:46;37542:170;:::o;37718:237::-;37858:34;37854:1;37846:6;37842:14;37835:58;37927:20;37922:2;37914:6;37910:15;37903:45;37718:237;:::o;37961:225::-;38101:34;38097:1;38089:6;38085:14;38078:58;38170:8;38165:2;38157:6;38153:15;38146:33;37961:225;:::o;38192:178::-;38332:30;38328:1;38320:6;38316:14;38309:54;38192:178;:::o;38376:223::-;38516:34;38512:1;38504:6;38500:14;38493:58;38585:6;38580:2;38572:6;38568:15;38561:31;38376:223;:::o;38605:175::-;38745:27;38741:1;38733:6;38729:14;38722:51;38605:175;:::o;38786:231::-;38926:34;38922:1;38914:6;38910:14;38903:58;38995:14;38990:2;38982:6;38978:15;38971:39;38786:231;:::o;39023:243::-;39163:34;39159:1;39151:6;39147:14;39140:58;39232:26;39227:2;39219:6;39215:15;39208:51;39023:243;:::o;39272:229::-;39412:34;39408:1;39400:6;39396:14;39389:58;39481:12;39476:2;39468:6;39464:15;39457:37;39272:229;:::o;39507:228::-;39647:34;39643:1;39635:6;39631:14;39624:58;39716:11;39711:2;39703:6;39699:15;39692:36;39507:228;:::o;39741:182::-;39881:34;39877:1;39869:6;39865:14;39858:58;39741:182;:::o;39929:161::-;40069:13;40065:1;40057:6;40053:14;40046:37;39929:161;:::o;40096:231::-;40236:34;40232:1;40224:6;40220:14;40213:58;40305:14;40300:2;40292:6;40288:15;40281:39;40096:231;:::o;40333:182::-;40473:34;40469:1;40461:6;40457:14;40450:58;40333:182;:::o;40521:228::-;40661:34;40657:1;40649:6;40645:14;40638:58;40730:11;40725:2;40717:6;40713:15;40706:36;40521:228;:::o;40755:234::-;40895:34;40891:1;40883:6;40879:14;40872:58;40964:17;40959:2;40951:6;40947:15;40940:42;40755:234;:::o;40995:220::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:3;41199:2;41191:6;41187:15;41180:28;40995:220;:::o;41221:236::-;41361:34;41357:1;41349:6;41345:14;41338:58;41430:19;41425:2;41417:6;41413:15;41406:44;41221:236;:::o;41463:165::-;41603:17;41599:1;41591:6;41587:14;41580:41;41463:165;:::o;41634:168::-;41774:20;41770:1;41762:6;41758:14;41751:44;41634:168;:::o;41808:172::-;41948:24;41944:1;41936:6;41932:14;41925:48;41808:172;:::o;41986:166::-;42126:18;42122:1;42114:6;42110:14;42103:42;41986:166;:::o;42158:122::-;42231:24;42249:5;42231:24;:::i;:::-;42224:5;42221:35;42211:63;;42270:1;42267;42260:12;42211:63;42158:122;:::o;42286:116::-;42356:21;42371:5;42356:21;:::i;:::-;42349:5;42346:32;42336:60;;42392:1;42389;42382:12;42336:60;42286:116;:::o;42408:120::-;42480:23;42497:5;42480:23;:::i;:::-;42473:5;42470:34;42460:62;;42518:1;42515;42508:12;42460:62;42408:120;:::o;42534:122::-;42607:24;42625:5;42607:24;:::i;:::-;42600:5;42597:35;42587:63;;42646:1;42643;42636:12;42587:63;42534:122;:::o

Swarm Source

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