ETH Price: $2,292.58 (-5.25%)

YetiLand (YLAND)
 

Overview

TokenID

992

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
YetiLand

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
*  @author everest
**/


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

/**
 * @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);
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)



/**
 * @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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)


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

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
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);
    }
}
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
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 overridden 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 {
        _setApprovalForAll(_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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
     * consuming from one or the other at each step according to the instructions given by
     * `proofFlags`.
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}
// YetiLand Star Here
//
contract YetiLand is ERC721, Ownable, ReentrancyGuard {
    using Strings for uint;
    using Counters for Counters.Counter;

    struct Sale {
        uint maxTokensPerAddress;
        uint maxTokensPerTransaction;
        uint price;
        uint holderPrice;
    }
    bytes32 public holderMerkleRoot;
    bytes32 public claimableMerkleRoot;
    string public _provenance;
    bool public isClaimLandActive;
    bool public isPublicSaleActive;
    bool public isHolderSaleActive;
    string private baseURI;
    // this will change based on snapshot taken
    uint public maxClaimLandSupply = 2204;
    
    uint public maxSupply = 10000;
    uint public _reserveTokenId = maxClaimLandSupply;
    Sale public sale;
    mapping(address => uint8) public alreadyClaimed;
    mapping(address => uint8) public claimLandAllowance;
    mapping(address => uint) public tokensMintedByAddress;
    Counters.Counter private _tokenId;
    constructor() ERC721("YetiLand", "YLAND") {}

    function totalSupply() public view returns(uint) {
        return _tokenId.current() + _reserveTokenId - maxClaimLandSupply;
    }
    function mint(uint _mintAmount) public payable {
        require(isPublicSaleActive, "Public Sale is not active");
        require(_mintAmount > 0, "You must mint at least 1 NFT");
        require(sale.maxTokensPerTransaction >= _mintAmount, "Mint per transaction exceeded");
        require(tokensMintedByAddress[msg.sender] + _mintAmount <= sale.maxTokensPerAddress, "Max tokens minted for this address");
        require(_reserveTokenId + _mintAmount <= maxSupply, "Max supply exceeded");
        require(msg.value >= sale.price * _mintAmount, "Please send the correct amount of ETH");
        for (uint i = 0; i < _mintAmount; i++) {
            _safeMint(msg.sender, _reserveTokenId);
            _reserveTokenId++;
        }
        tokensMintedByAddress[msg.sender] += _mintAmount;
    }
    function mintHolder(uint _mintAmount, bytes32[] memory merkleProof) public payable {
        require(isHolderSaleActive, "Holder Sale is not active");
        require(_mintAmount > 0, "You must mint at least 1 NFT");
        require(sale.maxTokensPerTransaction >= _mintAmount, "Mint per transaction exceeded");
        require(isSYHolder(msg.sender, merkleProof), "Please use correct Holder address");
        require(tokensMintedByAddress[msg.sender] + _mintAmount <= sale.maxTokensPerAddress, "Max tokens minted for this address");
        require(_reserveTokenId + _mintAmount <= maxSupply, "Max supply exceeded");
        require(msg.value >= sale.holderPrice * _mintAmount, "Please send the correct amount of ETH");
        for (uint i = 0; i < _mintAmount; i++) {
            _safeMint(msg.sender, _reserveTokenId);
            _reserveTokenId++;
        }
        tokensMintedByAddress[msg.sender] += _mintAmount;
    }
    // Will be used for pair that have more that 50 claim
    function claimLandChunk(uint _claimAmount) public {
        require(isClaimLandActive, "Claim land is inactive");
        uint _allowance = claimLandAllowance[msg.sender];
        require(_allowance >= _claimAmount, "You have no land to claim");
        require(_tokenId.current()  + _allowance <= maxSupply, "Max supply exceeded");
        for (uint i = 0; i < _claimAmount; i++) {
            _safeMint(msg.sender, _tokenId.current());
            _tokenId.increment();
            claimLandAllowance[msg.sender]--;
            alreadyClaimed[msg.sender]++;
        }
    }
    // use merkle proof for claim
    function claimLand(uint8 _claimAmount, bytes32[] calldata merkleProof) public {
        require(isClaimLandActive, "Claim land is inactive");
        require(alreadyClaimed[msg.sender] == 0, "Already Claimed");
        require(isClaimable(_claimAmount, msg.sender, merkleProof), "Please use correct Claimable address");
        require(_tokenId.current()  + _claimAmount <= maxSupply, "Max supply exceeded");
        for (uint i = 0; i < _claimAmount; i++) {
            _safeMint(msg.sender, _tokenId.current());
            _tokenId.increment();
        }
        alreadyClaimed[msg.sender]=_claimAmount;
    }
    function isSYHolder(address claimer, bytes32[] memory _merkleProof) public view returns (bool){
        bytes32 leaf = keccak256(abi.encodePacked(claimer));
        return MerkleProof.verify(_merkleProof, holderMerkleRoot, leaf);
    }
    function setHolderList(bytes32 _merkleRoot) public onlyOwner {
        holderMerkleRoot = _merkleRoot;
    }
    function isClaimable(uint _claimAmount, address _claimer, bytes32[] memory _merkleProof) public view returns (bool){
        bytes32 leaf = keccak256(abi.encodePacked(_claimer, _claimAmount));
        return MerkleProof.verify(_merkleProof,claimableMerkleRoot, leaf);
    }
    function setClaimableList(bytes32 _merkleRoot) public onlyOwner {
        claimableMerkleRoot = _merkleRoot;
    }
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    function setBaseURI(string memory uri) public onlyOwner {
        baseURI = uri;
    }
    function setSaleDetails(
        uint _maxTokensPerAddress,
        uint _maxTokensPerTransaction,
        uint _price,
        uint _holderPrice
    ) public onlyOwner {
        sale.maxTokensPerAddress = _maxTokensPerAddress;
        sale.maxTokensPerTransaction = _maxTokensPerTransaction;
        sale.price = _price;
        sale.holderPrice = _holderPrice;
    }
    function setProvenanceHash(string memory provenanceHash) public onlyOwner {
        _provenance = provenanceHash;
    }
    function setMaxClaimLandSupply(uint _maxClaimLandSupply) public onlyOwner {
        maxClaimLandSupply = _maxClaimLandSupply;
    }
    // if need incase when the max claim supply changes
    function setReserveTokenId(uint changereserveTokenId) public onlyOwner {
        _reserveTokenId = changereserveTokenId;
    }
    
    function setClaimLandActive(bool _state) public onlyOwner {
        isClaimLandActive = _state;
    }
    function setPublicSaleActive(bool _state) public onlyOwner {
        isPublicSaleActive = _state;
    }
    function setHolderSaleActive(bool _state) public onlyOwner {
        isHolderSaleActive = _state;
    }
    function setClaimLandAllowance(address[] calldata _users, uint8[] calldata _allowances) public onlyOwner {
        require(_users.length == _allowances.length, "Length mismatch");
        for(uint i = 0; i < _users.length; i++) {
            claimLandAllowance[_users[i]] = _allowances[i];
        }
    }
    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
        require(success, "Withdrawal of funds failed");
    }
}

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":"_provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserveTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"alreadyClaimed","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_claimAmount","type":"uint8"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claimLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimLandAllowance","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimAmount","type":"uint256"}],"name":"claimLandChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimableMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"isClaimLandActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimAmount","type":"uint256"},{"internalType":"address","name":"_claimer","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isHolderSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isSYHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxClaimLandSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintHolder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"uint256","name":"maxTokensPerAddress","type":"uint256"},{"internalType":"uint256","name":"maxTokensPerTransaction","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"holderPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setClaimLandActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint8[]","name":"_allowances","type":"uint8[]"}],"name":"setClaimLandAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setClaimableList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setHolderList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setHolderSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxClaimLandSupply","type":"uint256"}],"name":"setMaxClaimLandSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"changereserveTokenId","type":"uint256"}],"name":"setReserveTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensPerAddress","type":"uint256"},{"internalType":"uint256","name":"_maxTokensPerTransaction","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_holderPrice","type":"uint256"}],"name":"setSaleDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensMintedByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405261089c600d55612710600e55600d54600f553480156200002357600080fd5b506040518060400160405280600881526020017f596574694c616e640000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f594c414e440000000000000000000000000000000000000000000000000000008152508160009081620000a191906200042c565b508060019081620000b391906200042c565b505050620000d6620000ca620000e460201b60201c565b620000ec60201b60201c565b600160078190555062000513565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023457607f821691505b6020821081036200024a5762000249620001ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000275565b620002c0868362000275565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200030d620003076200030184620002d8565b620002e2565b620002d8565b9050919050565b6000819050919050565b6200032983620002ec565b62000341620003388262000314565b84845462000282565b825550505050565b600090565b6200035862000349565b620003658184846200031e565b505050565b5b818110156200038d57620003816000826200034e565b6001810190506200036b565b5050565b601f821115620003dc57620003a68162000250565b620003b18462000265565b81016020851015620003c1578190505b620003d9620003d08562000265565b8301826200036a565b50505b505050565b600082821c905092915050565b60006200040160001984600802620003e1565b1980831691505092915050565b60006200041c8383620003ee565b9150826002028217905092915050565b6200043782620001b2565b67ffffffffffffffff811115620004535762000452620001bd565b5b6200045f82546200021b565b6200046c82828562000391565b600060209050601f831160018114620004a457600084156200048f578287015190505b6200049b85826200040e565b8655506200050b565b601f198416620004b48662000250565b60005b82811015620004de57848901518255600182019150602085019450602081019050620004b7565b86831015620004fe5784890151620004fa601f891682620003ee565b8355505b6001600288020188555050505b505050505050565b615a3780620005236000396000f3fe6080604052600436106102935760003560e01c80639351158c1161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109d8578063ecabe15f14610a15578063f10b74df14610a40578063f2fde38b14610a69578063f54b893b14610a92578063f5f2e61814610acf57610293565b8063c87b56dd146108d7578063d5abeb0114610914578063d69714e71461093f578063d74e52ce1461096a578063db5c69e214610993578063e2e06fa3146109af57610293565b8063a0712d6811610113578063a0712d68146107d8578063a22cb465146107f4578063a816bafc1461081d578063af3b89d914610846578063b88d4fde14610871578063bcc443a61461089a57610293565b80639351158c146106de578063937423cc1461070757806395d89b4114610730578063962467fd1461075b5780639c3e1378146107865780639f127e57146107af57610293565b806355f804b3116101fe578063715018a6116101b7578063715018a6146105e25780637277286d146105f957806383a0fe9b146106225780638d11422a1461064d5780638d22bb0a146106765780638da5cb5b146106b357610293565b806355f804b3146104975780635e8bf9f7146104c05780636352211e146104fd578063651376311461053a5780636ad1fe021461057757806370a08231146105a557610293565b806318160ddd1161025057806318160ddd146103ba5780631e84c413146103e557806323b872dd146104105780633695d947146104395780633ccfd60b1461046457806342842e0e1461046e57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631096952314610366578063143efd1c1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613767565b610af8565b6040516102cc91906137af565b60405180910390f35b3480156102e157600080fd5b506102ea610bda565b6040516102f79190613863565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906138bb565b610c6c565b6040516103349190613929565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613970565b610cf1565b005b34801561037257600080fd5b5061038d60048036038101906103889190613ae5565b610e08565b005b34801561039b57600080fd5b506103a4610e97565b6040516103b19190613b47565b60405180910390f35b3480156103c657600080fd5b506103cf610e9d565b6040516103dc9190613b71565b60405180910390f35b3480156103f157600080fd5b506103fa610ec8565b60405161040791906137af565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613b8c565b610edb565b005b34801561044557600080fd5b5061044e610f3b565b60405161045b91906137af565b60405180910390f35b61046c610f4e565b005b34801561047a57600080fd5b5061049560048036038101906104909190613b8c565b611079565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613ae5565b611099565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613bdf565b611128565b6040516104f49190613b71565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f91906138bb565b611140565b6040516105319190613929565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613d00565b6111f1565b60405161056e91906137af565b60405180910390f35b34801561058357600080fd5b5061058c611236565b60405161059c9493929190613d6f565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190613bdf565b611254565b6040516105d99190613b71565b60405180910390f35b3480156105ee57600080fd5b506105f761130b565b005b34801561060557600080fd5b50610620600480360381019061061b91906138bb565b611393565b005b34801561062e57600080fd5b50610637611419565b6040516106449190613b47565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906138bb565b61141f565b005b34801561068257600080fd5b5061069d60048036038101906106989190613db4565b6114a5565b6040516106aa91906137af565b60405180910390f35b3480156106bf57600080fd5b506106c86114e7565b6040516106d59190613929565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613e10565b611511565b005b34801561071357600080fd5b5061072e60048036038101906107299190613e69565b611597565b005b34801561073c57600080fd5b50610745611630565b6040516107529190613863565b60405180910390f35b34801561076757600080fd5b506107706116c2565b60405161077d9190613b71565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613e96565b6116c8565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613fae565b611772565b005b6107f260048036038101906107ed91906138bb565b611904565b005b34801561080057600080fd5b5061081b6004803603810190610816919061402f565b611bb1565b005b34801561082957600080fd5b50610844600480360381019061083f9190613e69565b611bc7565b005b34801561085257600080fd5b5061085b611c60565b6040516108689190613b71565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190614110565b611c66565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613bdf565b611cc8565b6040516108ce91906141af565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f991906138bb565b611ce8565b60405161090b9190613863565b60405180910390f35b34801561092057600080fd5b50610929611d8f565b6040516109369190613b71565b60405180910390f35b34801561094b57600080fd5b50610954611d95565b6040516109619190613863565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061424c565b611e23565b005b6109ad60048036038101906109a891906142ac565b61208a565b005b3480156109bb57600080fd5b506109d660048036038101906109d19190613e69565b612381565b005b3480156109e457600080fd5b506109ff60048036038101906109fa9190614308565b61241a565b604051610a0c91906137af565b60405180910390f35b348015610a2157600080fd5b50610a2a6124ae565b604051610a3791906137af565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613e10565b6124c1565b005b348015610a7557600080fd5b50610a906004803603810190610a8b9190613bdf565b612547565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190613bdf565b61263e565b604051610ac691906141af565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906138bb565b61265e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd35750610bd2826128c7565b5b9050919050565b606060008054610be990614377565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590614377565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b6000610c7782612931565b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad9061441a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cfc82611140565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d63906144ac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8b61299d565b73ffffffffffffffffffffffffffffffffffffffff161480610dba5750610db981610db461299d565b61241a565b5b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df09061453e565b60405180910390fd5b610e0383836129a5565b505050565b610e1061299d565b73ffffffffffffffffffffffffffffffffffffffff16610e2e6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906145aa565b60405180910390fd5b80600a9081610e939190614776565b5050565b60085481565b6000600d54600f54610eaf6017612a5e565b610eb99190614877565b610ec391906148cd565b905090565b600b60019054906101000a900460ff1681565b610eec610ee661299d565b82612a6c565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290614973565b60405180910390fd5b610f36838383612b4a565b505050565b600b60009054906101000a900460ff1681565b610f5661299d565b73ffffffffffffffffffffffffffffffffffffffff16610f746114e7565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906145aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ff0906149c4565b60006040518083038185875af1925050503d806000811461102d576040519150601f19603f3d011682016040523d82523d6000602084013e611032565b606091505b5050905080611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90614a25565b60405180910390fd5b50565b61109483838360405180602001604052806000815250611c66565b505050565b6110a161299d565b73ffffffffffffffffffffffffffffffffffffffff166110bf6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906145aa565b60405180910390fd5b80600c90816111249190614776565b5050565b60166020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90614ab7565b60405180910390fd5b80915050919050565b6000808385604051602001611207929190614b40565b60405160208183030381529060405280519060200120905061122c8360095483612db0565b9150509392505050565b60108060000154908060010154908060020154908060030154905084565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614bde565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131361299d565b73ffffffffffffffffffffffffffffffffffffffff166113316114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906145aa565b60405180910390fd5b6113916000612dc7565b565b61139b61299d565b73ffffffffffffffffffffffffffffffffffffffff166113b96114e7565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906145aa565b60405180910390fd5b80600d8190555050565b60095481565b61142761299d565b73ffffffffffffffffffffffffffffffffffffffff166114456114e7565b73ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906145aa565b60405180910390fd5b80600f8190555050565b600080836040516020016114b99190614bfe565b6040516020818303038152906040528051906020012090506114de8360085483612db0565b91505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151961299d565b73ffffffffffffffffffffffffffffffffffffffff166115376114e7565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906145aa565b60405180910390fd5b8060098190555050565b61159f61299d565b73ffffffffffffffffffffffffffffffffffffffff166115bd6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a906145aa565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606001805461163f90614377565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90614377565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600d5481565b6116d061299d565b73ffffffffffffffffffffffffffffffffffffffff166116ee6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906145aa565b60405180910390fd5b8360106000018190555082601060010181905550816010600201819055508060106003018190555050505050565b61177a61299d565b73ffffffffffffffffffffffffffffffffffffffff166117986114e7565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e5906145aa565b60405180910390fd5b818190508484905014611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614c65565b60405180910390fd5b60005b848490508110156118fd5782828281811061185757611856614c85565b5b905060200201602081019061186c9190614cb4565b6015600087878581811061188357611882614c85565b5b90506020020160208101906118989190613bdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806118f590614ce1565b915050611839565b5050505050565b600b60019054906101000a900460ff16611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614d75565b60405180910390fd5b60008111611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90614de1565b60405180910390fd5b8060106001015410156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614e4d565b60405180910390fd5b60106000015481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2f9190614877565b1115611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614edf565b60405180910390fd5b600e5481600f54611a819190614877565b1115611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990614f4b565b60405180910390fd5b80601060020154611ad39190614f6b565b341015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90615037565b60405180910390fd5b60005b81811015611b5757611b2c33600f54612e8d565b600f6000815480929190611b3f90614ce1565b91905055508080611b4f90614ce1565b915050611b18565b5080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ba79190614877565b9250508190555050565b611bc3611bbc61299d565b8383612eab565b5050565b611bcf61299d565b73ffffffffffffffffffffffffffffffffffffffff16611bed6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a906145aa565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600f5481565b611c77611c7161299d565b83612a6c565b611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90614973565b60405180910390fd5b611cc284848484613017565b50505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6060611cf382612931565b611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d29906150c9565b60405180910390fd5b6000611d3c613073565b90506000815111611d5c5760405180602001604052806000815250611d87565b80611d6684613105565b604051602001611d77929190615125565b6040516020818303038152906040525b915050919050565b600e5481565b600a8054611da290614377565b80601f0160208091040260200160405190810160405280929190818152602001828054611dce90614377565b8015611e1b5780601f10611df057610100808354040283529160200191611e1b565b820191906000526020600020905b815481529060010190602001808311611dfe57829003601f168201915b505050505081565b600b60009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990615195565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90615201565b60405180910390fd5b611f538360ff1633848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506111f1565b611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990615293565b60405180910390fd5b600e548360ff16611fa36017612a5e565b611fad9190614877565b1115611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614f4b565b60405180910390fd5b60005b8360ff1681101561202c5761200f3361200a6017612a5e565b612e8d565b6120196017613265565b808061202490614ce1565b915050611ff1565b5082601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b600b60029054906101000a900460ff166120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152ff565b60405180910390fd5b6000821161211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211390614de1565b60405180910390fd5b816010600101541015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614e4d565b60405180910390fd5b61216e33826114a5565b6121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490615391565b60405180910390fd5b60106000015482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121fe9190614877565b111561223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690614edf565b60405180910390fd5b600e5482600f546122509190614877565b1115612291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228890614f4b565b60405180910390fd5b816010600301546122a29190614f6b565b3410156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90615037565b60405180910390fd5b60005b82811015612326576122fb33600f54612e8d565b600f600081548092919061230e90614ce1565b9190505550808061231e90614ce1565b9150506122e7565b5081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123769190614877565b925050819055505050565b61238961299d565b73ffffffffffffffffffffffffffffffffffffffff166123a76114e7565b73ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f4906145aa565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60029054906101000a900460ff1681565b6124c961299d565b73ffffffffffffffffffffffffffffffffffffffff166124e76114e7565b73ffffffffffffffffffffffffffffffffffffffff161461253d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612534906145aa565b60405180910390fd5b8060088190555050565b61254f61299d565b73ffffffffffffffffffffffffffffffffffffffff1661256d6114e7565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba906145aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990615423565b60405180910390fd5b61263b81612dc7565b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900460ff166126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490615195565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905081811015612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b9061548f565b60405180910390fd5b600e54816127526017612a5e565b61275c9190614877565b111561279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614f4b565b60405180910390fd5b60005b828110156128c2576127bb336127b66017612a5e565b612e8d565b6127c56017613265565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190612821906154af565b91906101000a81548160ff021916908360ff16021790555050601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190612896906154d8565b91906101000a81548160ff021916908360ff1602179055505080806128ba90614ce1565b9150506127a0565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a1883611140565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612a7782612931565b612ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aad90615573565b60405180910390fd5b6000612ac183611140565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b035750612b02818561241a565b5b80612b4157508373ffffffffffffffffffffffffffffffffffffffff16612b2984610c6c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6a82611140565b73ffffffffffffffffffffffffffffffffffffffff1614612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb790615605565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690615697565b60405180910390fd5b612c3a83838361327b565b612c456000826129a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9591906148cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cec9190614877565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612dab838383613280565b505050565b600082612dbd8584613285565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ea78282604051806020016040528060008152506132db565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615703565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161300a91906137af565b60405180910390a3505050565b613022848484612b4a565b61302e84848484613336565b61306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615795565b60405180910390fd5b50505050565b6060600c805461308290614377565b80601f01602080910402602001604051908101604052809291908181526020018280546130ae90614377565b80156130fb5780601f106130d0576101008083540402835291602001916130fb565b820191906000526020600020905b8154815290600101906020018083116130de57829003601f168201915b5050505050905090565b60606000820361314c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613260565b600082905060005b6000821461317e57808061316790614ce1565b915050600a8261317791906157e4565b9150613154565b60008167ffffffffffffffff81111561319a576131996139ba565b5b6040519080825280601f01601f1916602001820160405280156131cc5781602001600182028036833780820191505090505b5090505b60008514613259576001826131e591906148cd565b9150600a856131f49190615815565b60306132009190614877565b60f81b81838151811061321657613215614c85565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561325291906157e4565b94506131d0565b8093505050505b919050565b6001816000016000828254019250508190555050565b505050565b505050565b60008082905060005b84518110156132d0576132bb828683815181106132ae576132ad614c85565b5b60200260200101516134bd565b915080806132c890614ce1565b91505061328e565b508091505092915050565b6132e583836134e8565b6132f26000848484613336565b613331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332890615795565b60405180910390fd5b505050565b60006133578473ffffffffffffffffffffffffffffffffffffffff166136c1565b156134b0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261338061299d565b8786866040518563ffffffff1660e01b81526004016133a2949392919061589b565b6020604051808303816000875af19250505080156133de57506040513d601f19601f820116820180604052508101906133db91906158fc565b60015b613460573d806000811461340e576040519150601f19603f3d011682016040523d82523d6000602084013e613413565b606091505b506000815103613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f90615795565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134b5565b600190505b949350505050565b60008183106134d5576134d082846136e4565b6134e0565b6134df83836136e4565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354e90615975565b60405180910390fd5b61356081612931565b156135a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613597906159e1565b60405180910390fd5b6135ac6000838361327b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135fc9190614877565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136bd60008383613280565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137448161370f565b811461374f57600080fd5b50565b6000813590506137618161373b565b92915050565b60006020828403121561377d5761377c613705565b5b600061378b84828501613752565b91505092915050565b60008115159050919050565b6137a981613794565b82525050565b60006020820190506137c460008301846137a0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138045780820151818401526020810190506137e9565b83811115613813576000848401525b50505050565b6000601f19601f8301169050919050565b6000613835826137ca565b61383f81856137d5565b935061384f8185602086016137e6565b61385881613819565b840191505092915050565b6000602082019050818103600083015261387d818461382a565b905092915050565b6000819050919050565b61389881613885565b81146138a357600080fd5b50565b6000813590506138b58161388f565b92915050565b6000602082840312156138d1576138d0613705565b5b60006138df848285016138a6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613913826138e8565b9050919050565b61392381613908565b82525050565b600060208201905061393e600083018461391a565b92915050565b61394d81613908565b811461395857600080fd5b50565b60008135905061396a81613944565b92915050565b6000806040838503121561398757613986613705565b5b60006139958582860161395b565b92505060206139a6858286016138a6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139f282613819565b810181811067ffffffffffffffff82111715613a1157613a106139ba565b5b80604052505050565b6000613a246136fb565b9050613a3082826139e9565b919050565b600067ffffffffffffffff821115613a5057613a4f6139ba565b5b613a5982613819565b9050602081019050919050565b82818337600083830152505050565b6000613a88613a8384613a35565b613a1a565b905082815260208101848484011115613aa457613aa36139b5565b5b613aaf848285613a66565b509392505050565b600082601f830112613acc57613acb6139b0565b5b8135613adc848260208601613a75565b91505092915050565b600060208284031215613afb57613afa613705565b5b600082013567ffffffffffffffff811115613b1957613b1861370a565b5b613b2584828501613ab7565b91505092915050565b6000819050919050565b613b4181613b2e565b82525050565b6000602082019050613b5c6000830184613b38565b92915050565b613b6b81613885565b82525050565b6000602082019050613b866000830184613b62565b92915050565b600080600060608486031215613ba557613ba4613705565b5b6000613bb38682870161395b565b9350506020613bc48682870161395b565b9250506040613bd5868287016138a6565b9150509250925092565b600060208284031215613bf557613bf4613705565b5b6000613c038482850161395b565b91505092915050565b600067ffffffffffffffff821115613c2757613c266139ba565b5b602082029050602081019050919050565b600080fd5b613c4681613b2e565b8114613c5157600080fd5b50565b600081359050613c6381613c3d565b92915050565b6000613c7c613c7784613c0c565b613a1a565b90508083825260208201905060208402830185811115613c9f57613c9e613c38565b5b835b81811015613cc85780613cb48882613c54565b845260208401935050602081019050613ca1565b5050509392505050565b600082601f830112613ce757613ce66139b0565b5b8135613cf7848260208601613c69565b91505092915050565b600080600060608486031215613d1957613d18613705565b5b6000613d27868287016138a6565b9350506020613d388682870161395b565b925050604084013567ffffffffffffffff811115613d5957613d5861370a565b5b613d6586828701613cd2565b9150509250925092565b6000608082019050613d846000830187613b62565b613d916020830186613b62565b613d9e6040830185613b62565b613dab6060830184613b62565b95945050505050565b60008060408385031215613dcb57613dca613705565b5b6000613dd98582860161395b565b925050602083013567ffffffffffffffff811115613dfa57613df961370a565b5b613e0685828601613cd2565b9150509250929050565b600060208284031215613e2657613e25613705565b5b6000613e3484828501613c54565b91505092915050565b613e4681613794565b8114613e5157600080fd5b50565b600081359050613e6381613e3d565b92915050565b600060208284031215613e7f57613e7e613705565b5b6000613e8d84828501613e54565b91505092915050565b60008060008060808587031215613eb057613eaf613705565b5b6000613ebe878288016138a6565b9450506020613ecf878288016138a6565b9350506040613ee0878288016138a6565b9250506060613ef1878288016138a6565b91505092959194509250565b600080fd5b60008083601f840112613f1857613f176139b0565b5b8235905067ffffffffffffffff811115613f3557613f34613efd565b5b602083019150836020820283011115613f5157613f50613c38565b5b9250929050565b60008083601f840112613f6e57613f6d6139b0565b5b8235905067ffffffffffffffff811115613f8b57613f8a613efd565b5b602083019150836020820283011115613fa757613fa6613c38565b5b9250929050565b60008060008060408587031215613fc857613fc7613705565b5b600085013567ffffffffffffffff811115613fe657613fe561370a565b5b613ff287828801613f02565b9450945050602085013567ffffffffffffffff8111156140155761401461370a565b5b61402187828801613f58565b925092505092959194509250565b6000806040838503121561404657614045613705565b5b60006140548582860161395b565b925050602061406585828601613e54565b9150509250929050565b600067ffffffffffffffff82111561408a576140896139ba565b5b61409382613819565b9050602081019050919050565b60006140b36140ae8461406f565b613a1a565b9050828152602081018484840111156140cf576140ce6139b5565b5b6140da848285613a66565b509392505050565b600082601f8301126140f7576140f66139b0565b5b81356141078482602086016140a0565b91505092915050565b6000806000806080858703121561412a57614129613705565b5b60006141388782880161395b565b94505060206141498782880161395b565b935050604061415a878288016138a6565b925050606085013567ffffffffffffffff81111561417b5761417a61370a565b5b614187878288016140e2565b91505092959194509250565b600060ff82169050919050565b6141a981614193565b82525050565b60006020820190506141c460008301846141a0565b92915050565b6141d381614193565b81146141de57600080fd5b50565b6000813590506141f0816141ca565b92915050565b60008083601f84011261420c5761420b6139b0565b5b8235905067ffffffffffffffff81111561422957614228613efd565b5b60208301915083602082028301111561424557614244613c38565b5b9250929050565b60008060006040848603121561426557614264613705565b5b6000614273868287016141e1565b935050602084013567ffffffffffffffff8111156142945761429361370a565b5b6142a0868287016141f6565b92509250509250925092565b600080604083850312156142c3576142c2613705565b5b60006142d1858286016138a6565b925050602083013567ffffffffffffffff8111156142f2576142f161370a565b5b6142fe85828601613cd2565b9150509250929050565b6000806040838503121561431f5761431e613705565b5b600061432d8582860161395b565b925050602061433e8582860161395b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438f57607f821691505b6020821081036143a2576143a1614348565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614404602c836137d5565b915061440f826143a8565b604082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006144966021836137d5565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145286038836137d5565b9150614533826144cc565b604082019050919050565b600060208201905081810360008301526145578161451b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145946020836137d5565b915061459f8261455e565b602082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261462c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145ef565b61463686836145ef565b95508019841693508086168417925050509392505050565b6000819050919050565b600061467361466e61466984613885565b61464e565b613885565b9050919050565b6000819050919050565b61468d83614658565b6146a16146998261467a565b8484546145fc565b825550505050565b600090565b6146b66146a9565b6146c1818484614684565b505050565b5b818110156146e5576146da6000826146ae565b6001810190506146c7565b5050565b601f82111561472a576146fb816145ca565b614704846145df565b81016020851015614713578190505b61472761471f856145df565b8301826146c6565b50505b505050565b600082821c905092915050565b600061474d6000198460080261472f565b1980831691505092915050565b6000614766838361473c565b9150826002028217905092915050565b61477f826137ca565b67ffffffffffffffff811115614798576147976139ba565b5b6147a28254614377565b6147ad8282856146e9565b600060209050601f8311600181146147e057600084156147ce578287015190505b6147d8858261475a565b865550614840565b601f1984166147ee866145ca565b60005b82811015614816578489015182556001820191506020850194506020810190506147f1565b86831015614833578489015161482f601f89168261473c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061488282613885565b915061488d83613885565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c2576148c1614848565b5b828201905092915050565b60006148d882613885565b91506148e383613885565b9250828210156148f6576148f5614848565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061495d6031836137d5565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b600081905092915050565b50565b60006149ae600083614993565b91506149b98261499e565b600082019050919050565b60006149cf826149a1565b9150819050919050565b7f5769746864726177616c206f662066756e6473206661696c6564000000000000600082015250565b6000614a0f601a836137d5565b9150614a1a826149d9565b602082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aa16029836137d5565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b60008160601b9050919050565b6000614aef82614ad7565b9050919050565b6000614b0182614ae4565b9050919050565b614b19614b1482613908565b614af6565b82525050565b6000819050919050565b614b3a614b3582613885565b614b1f565b82525050565b6000614b4c8285614b08565b601482019150614b5c8284614b29565b6020820191508190509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614bc8602a836137d5565b9150614bd382614b6c565b604082019050919050565b60006020820190508181036000830152614bf781614bbb565b9050919050565b6000614c0a8284614b08565b60148201915081905092915050565b7f4c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b6000614c4f600f836137d5565b9150614c5a82614c19565b602082019050919050565b60006020820190508181036000830152614c7e81614c42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614cca57614cc9613705565b5b6000614cd8848285016141e1565b91505092915050565b6000614cec82613885565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d1e57614d1d614848565b5b600182019050919050565b7f5075626c69632053616c65206973206e6f742061637469766500000000000000600082015250565b6000614d5f6019836137d5565b9150614d6a82614d29565b602082019050919050565b60006020820190508181036000830152614d8e81614d52565b9050919050565b7f596f75206d757374206d696e74206174206c656173742031204e465400000000600082015250565b6000614dcb601c836137d5565b9150614dd682614d95565b602082019050919050565b60006020820190508181036000830152614dfa81614dbe565b9050919050565b7f4d696e7420706572207472616e73616374696f6e206578636565646564000000600082015250565b6000614e37601d836137d5565b9150614e4282614e01565b602082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b7f4d617820746f6b656e73206d696e74656420666f72207468697320616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec96022836137d5565b9150614ed482614e6d565b604082019050919050565b60006020820190508181036000830152614ef881614ebc565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000614f356013836137d5565b9150614f4082614eff565b602082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b6000614f7682613885565b9150614f8183613885565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fba57614fb9614848565b5b828202905092915050565b7f506c656173652073656e642074686520636f727265637420616d6f756e74206f60008201527f6620455448000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836137d5565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006150b3602f836137d5565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b600081905092915050565b60006150ff826137ca565b61510981856150e9565b93506151198185602086016137e6565b80840191505092915050565b600061513182856150f4565b915061513d82846150f4565b91508190509392505050565b7f436c61696d206c616e6420697320696e61637469766500000000000000000000600082015250565b600061517f6016836137d5565b915061518a82615149565b602082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f416c726561647920436c61696d65640000000000000000000000000000000000600082015250565b60006151eb600f836137d5565b91506151f6826151b5565b602082019050919050565b6000602082019050818103600083015261521a816151de565b9050919050565b7f506c656173652075736520636f727265637420436c61696d61626c652061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061527d6024836137d5565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b7f486f6c6465722053616c65206973206e6f742061637469766500000000000000600082015250565b60006152e96019836137d5565b91506152f4826152b3565b602082019050919050565b60006020820190508181036000830152615318816152dc565b9050919050565b7f506c656173652075736520636f727265637420486f6c6465722061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061537b6021836137d5565b91506153868261531f565b604082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061540d6026836137d5565b9150615418826153b1565b604082019050919050565b6000602082019050818103600083015261543c81615400565b9050919050565b7f596f752068617665206e6f206c616e6420746f20636c61696d00000000000000600082015250565b60006154796019836137d5565b915061548482615443565b602082019050919050565b600060208201905081810360008301526154a88161546c565b9050919050565b60006154ba82614193565b9150600082036154cd576154cc614848565b5b600182039050919050565b60006154e382614193565b915060ff82036154f6576154f5614848565b5b600182019050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061555d602c836137d5565b915061556882615501565b604082019050919050565b6000602082019050818103600083015261558c81615550565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006155ef6025836137d5565b91506155fa82615593565b604082019050919050565b6000602082019050818103600083015261561e816155e2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156816024836137d5565b915061568c82615625565b604082019050919050565b600060208201905081810360008301526156b081615674565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006156ed6019836137d5565b91506156f8826156b7565b602082019050919050565b6000602082019050818103600083015261571c816156e0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061577f6032836137d5565b915061578a82615723565b604082019050919050565b600060208201905081810360008301526157ae81615772565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157ef82613885565b91506157fa83613885565b92508261580a576158096157b5565b5b828204905092915050565b600061582082613885565b915061582b83613885565b92508261583b5761583a6157b5565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061586d82615846565b6158778185615851565b93506158878185602086016137e6565b61589081613819565b840191505092915050565b60006080820190506158b0600083018761391a565b6158bd602083018661391a565b6158ca6040830185613b62565b81810360608301526158dc8184615862565b905095945050505050565b6000815190506158f68161373b565b92915050565b60006020828403121561591257615911613705565b5b6000615920848285016158e7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061595f6020836137d5565b915061596a82615929565b602082019050919050565b6000602082019050818103600083015261598e81615952565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006159cb601c836137d5565b91506159d682615995565b602082019050919050565b600060208201905081810360008301526159fa816159be565b905091905056fea26469706673582212201418ed416a8053a019fd2599d83b40a4dd2f2c44f964c5decc7fc7962f69f5ba64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102935760003560e01c80639351158c1161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109d8578063ecabe15f14610a15578063f10b74df14610a40578063f2fde38b14610a69578063f54b893b14610a92578063f5f2e61814610acf57610293565b8063c87b56dd146108d7578063d5abeb0114610914578063d69714e71461093f578063d74e52ce1461096a578063db5c69e214610993578063e2e06fa3146109af57610293565b8063a0712d6811610113578063a0712d68146107d8578063a22cb465146107f4578063a816bafc1461081d578063af3b89d914610846578063b88d4fde14610871578063bcc443a61461089a57610293565b80639351158c146106de578063937423cc1461070757806395d89b4114610730578063962467fd1461075b5780639c3e1378146107865780639f127e57146107af57610293565b806355f804b3116101fe578063715018a6116101b7578063715018a6146105e25780637277286d146105f957806383a0fe9b146106225780638d11422a1461064d5780638d22bb0a146106765780638da5cb5b146106b357610293565b806355f804b3146104975780635e8bf9f7146104c05780636352211e146104fd578063651376311461053a5780636ad1fe021461057757806370a08231146105a557610293565b806318160ddd1161025057806318160ddd146103ba5780631e84c413146103e557806323b872dd146104105780633695d947146104395780633ccfd60b1461046457806342842e0e1461046e57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631096952314610366578063143efd1c1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613767565b610af8565b6040516102cc91906137af565b60405180910390f35b3480156102e157600080fd5b506102ea610bda565b6040516102f79190613863565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906138bb565b610c6c565b6040516103349190613929565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613970565b610cf1565b005b34801561037257600080fd5b5061038d60048036038101906103889190613ae5565b610e08565b005b34801561039b57600080fd5b506103a4610e97565b6040516103b19190613b47565b60405180910390f35b3480156103c657600080fd5b506103cf610e9d565b6040516103dc9190613b71565b60405180910390f35b3480156103f157600080fd5b506103fa610ec8565b60405161040791906137af565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613b8c565b610edb565b005b34801561044557600080fd5b5061044e610f3b565b60405161045b91906137af565b60405180910390f35b61046c610f4e565b005b34801561047a57600080fd5b5061049560048036038101906104909190613b8c565b611079565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613ae5565b611099565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613bdf565b611128565b6040516104f49190613b71565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f91906138bb565b611140565b6040516105319190613929565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613d00565b6111f1565b60405161056e91906137af565b60405180910390f35b34801561058357600080fd5b5061058c611236565b60405161059c9493929190613d6f565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190613bdf565b611254565b6040516105d99190613b71565b60405180910390f35b3480156105ee57600080fd5b506105f761130b565b005b34801561060557600080fd5b50610620600480360381019061061b91906138bb565b611393565b005b34801561062e57600080fd5b50610637611419565b6040516106449190613b47565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906138bb565b61141f565b005b34801561068257600080fd5b5061069d60048036038101906106989190613db4565b6114a5565b6040516106aa91906137af565b60405180910390f35b3480156106bf57600080fd5b506106c86114e7565b6040516106d59190613929565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613e10565b611511565b005b34801561071357600080fd5b5061072e60048036038101906107299190613e69565b611597565b005b34801561073c57600080fd5b50610745611630565b6040516107529190613863565b60405180910390f35b34801561076757600080fd5b506107706116c2565b60405161077d9190613b71565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613e96565b6116c8565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613fae565b611772565b005b6107f260048036038101906107ed91906138bb565b611904565b005b34801561080057600080fd5b5061081b6004803603810190610816919061402f565b611bb1565b005b34801561082957600080fd5b50610844600480360381019061083f9190613e69565b611bc7565b005b34801561085257600080fd5b5061085b611c60565b6040516108689190613b71565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190614110565b611c66565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613bdf565b611cc8565b6040516108ce91906141af565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f991906138bb565b611ce8565b60405161090b9190613863565b60405180910390f35b34801561092057600080fd5b50610929611d8f565b6040516109369190613b71565b60405180910390f35b34801561094b57600080fd5b50610954611d95565b6040516109619190613863565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061424c565b611e23565b005b6109ad60048036038101906109a891906142ac565b61208a565b005b3480156109bb57600080fd5b506109d660048036038101906109d19190613e69565b612381565b005b3480156109e457600080fd5b506109ff60048036038101906109fa9190614308565b61241a565b604051610a0c91906137af565b60405180910390f35b348015610a2157600080fd5b50610a2a6124ae565b604051610a3791906137af565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613e10565b6124c1565b005b348015610a7557600080fd5b50610a906004803603810190610a8b9190613bdf565b612547565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190613bdf565b61263e565b604051610ac691906141af565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906138bb565b61265e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd35750610bd2826128c7565b5b9050919050565b606060008054610be990614377565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590614377565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b6000610c7782612931565b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad9061441a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cfc82611140565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d63906144ac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8b61299d565b73ffffffffffffffffffffffffffffffffffffffff161480610dba5750610db981610db461299d565b61241a565b5b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df09061453e565b60405180910390fd5b610e0383836129a5565b505050565b610e1061299d565b73ffffffffffffffffffffffffffffffffffffffff16610e2e6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906145aa565b60405180910390fd5b80600a9081610e939190614776565b5050565b60085481565b6000600d54600f54610eaf6017612a5e565b610eb99190614877565b610ec391906148cd565b905090565b600b60019054906101000a900460ff1681565b610eec610ee661299d565b82612a6c565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290614973565b60405180910390fd5b610f36838383612b4a565b505050565b600b60009054906101000a900460ff1681565b610f5661299d565b73ffffffffffffffffffffffffffffffffffffffff16610f746114e7565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906145aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ff0906149c4565b60006040518083038185875af1925050503d806000811461102d576040519150601f19603f3d011682016040523d82523d6000602084013e611032565b606091505b5050905080611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90614a25565b60405180910390fd5b50565b61109483838360405180602001604052806000815250611c66565b505050565b6110a161299d565b73ffffffffffffffffffffffffffffffffffffffff166110bf6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906145aa565b60405180910390fd5b80600c90816111249190614776565b5050565b60166020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90614ab7565b60405180910390fd5b80915050919050565b6000808385604051602001611207929190614b40565b60405160208183030381529060405280519060200120905061122c8360095483612db0565b9150509392505050565b60108060000154908060010154908060020154908060030154905084565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614bde565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131361299d565b73ffffffffffffffffffffffffffffffffffffffff166113316114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906145aa565b60405180910390fd5b6113916000612dc7565b565b61139b61299d565b73ffffffffffffffffffffffffffffffffffffffff166113b96114e7565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906145aa565b60405180910390fd5b80600d8190555050565b60095481565b61142761299d565b73ffffffffffffffffffffffffffffffffffffffff166114456114e7565b73ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906145aa565b60405180910390fd5b80600f8190555050565b600080836040516020016114b99190614bfe565b6040516020818303038152906040528051906020012090506114de8360085483612db0565b91505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151961299d565b73ffffffffffffffffffffffffffffffffffffffff166115376114e7565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906145aa565b60405180910390fd5b8060098190555050565b61159f61299d565b73ffffffffffffffffffffffffffffffffffffffff166115bd6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a906145aa565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606001805461163f90614377565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90614377565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600d5481565b6116d061299d565b73ffffffffffffffffffffffffffffffffffffffff166116ee6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906145aa565b60405180910390fd5b8360106000018190555082601060010181905550816010600201819055508060106003018190555050505050565b61177a61299d565b73ffffffffffffffffffffffffffffffffffffffff166117986114e7565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e5906145aa565b60405180910390fd5b818190508484905014611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614c65565b60405180910390fd5b60005b848490508110156118fd5782828281811061185757611856614c85565b5b905060200201602081019061186c9190614cb4565b6015600087878581811061188357611882614c85565b5b90506020020160208101906118989190613bdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806118f590614ce1565b915050611839565b5050505050565b600b60019054906101000a900460ff16611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614d75565b60405180910390fd5b60008111611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90614de1565b60405180910390fd5b8060106001015410156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614e4d565b60405180910390fd5b60106000015481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2f9190614877565b1115611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614edf565b60405180910390fd5b600e5481600f54611a819190614877565b1115611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990614f4b565b60405180910390fd5b80601060020154611ad39190614f6b565b341015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90615037565b60405180910390fd5b60005b81811015611b5757611b2c33600f54612e8d565b600f6000815480929190611b3f90614ce1565b91905055508080611b4f90614ce1565b915050611b18565b5080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ba79190614877565b9250508190555050565b611bc3611bbc61299d565b8383612eab565b5050565b611bcf61299d565b73ffffffffffffffffffffffffffffffffffffffff16611bed6114e7565b73ffffffffffffffffffffffffffffffffffffffff1614611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a906145aa565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600f5481565b611c77611c7161299d565b83612a6c565b611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90614973565b60405180910390fd5b611cc284848484613017565b50505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6060611cf382612931565b611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d29906150c9565b60405180910390fd5b6000611d3c613073565b90506000815111611d5c5760405180602001604052806000815250611d87565b80611d6684613105565b604051602001611d77929190615125565b6040516020818303038152906040525b915050919050565b600e5481565b600a8054611da290614377565b80601f0160208091040260200160405190810160405280929190818152602001828054611dce90614377565b8015611e1b5780601f10611df057610100808354040283529160200191611e1b565b820191906000526020600020905b815481529060010190602001808311611dfe57829003601f168201915b505050505081565b600b60009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990615195565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90615201565b60405180910390fd5b611f538360ff1633848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506111f1565b611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990615293565b60405180910390fd5b600e548360ff16611fa36017612a5e565b611fad9190614877565b1115611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614f4b565b60405180910390fd5b60005b8360ff1681101561202c5761200f3361200a6017612a5e565b612e8d565b6120196017613265565b808061202490614ce1565b915050611ff1565b5082601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b600b60029054906101000a900460ff166120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152ff565b60405180910390fd5b6000821161211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211390614de1565b60405180910390fd5b816010600101541015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614e4d565b60405180910390fd5b61216e33826114a5565b6121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490615391565b60405180910390fd5b60106000015482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121fe9190614877565b111561223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690614edf565b60405180910390fd5b600e5482600f546122509190614877565b1115612291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228890614f4b565b60405180910390fd5b816010600301546122a29190614f6b565b3410156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90615037565b60405180910390fd5b60005b82811015612326576122fb33600f54612e8d565b600f600081548092919061230e90614ce1565b9190505550808061231e90614ce1565b9150506122e7565b5081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123769190614877565b925050819055505050565b61238961299d565b73ffffffffffffffffffffffffffffffffffffffff166123a76114e7565b73ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f4906145aa565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60029054906101000a900460ff1681565b6124c961299d565b73ffffffffffffffffffffffffffffffffffffffff166124e76114e7565b73ffffffffffffffffffffffffffffffffffffffff161461253d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612534906145aa565b60405180910390fd5b8060088190555050565b61254f61299d565b73ffffffffffffffffffffffffffffffffffffffff1661256d6114e7565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba906145aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990615423565b60405180910390fd5b61263b81612dc7565b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900460ff166126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490615195565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905081811015612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b9061548f565b60405180910390fd5b600e54816127526017612a5e565b61275c9190614877565b111561279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614f4b565b60405180910390fd5b60005b828110156128c2576127bb336127b66017612a5e565b612e8d565b6127c56017613265565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190612821906154af565b91906101000a81548160ff021916908360ff16021790555050601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190612896906154d8565b91906101000a81548160ff021916908360ff1602179055505080806128ba90614ce1565b9150506127a0565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a1883611140565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612a7782612931565b612ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aad90615573565b60405180910390fd5b6000612ac183611140565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b035750612b02818561241a565b5b80612b4157508373ffffffffffffffffffffffffffffffffffffffff16612b2984610c6c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6a82611140565b73ffffffffffffffffffffffffffffffffffffffff1614612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb790615605565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690615697565b60405180910390fd5b612c3a83838361327b565b612c456000826129a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9591906148cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cec9190614877565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612dab838383613280565b505050565b600082612dbd8584613285565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ea78282604051806020016040528060008152506132db565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615703565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161300a91906137af565b60405180910390a3505050565b613022848484612b4a565b61302e84848484613336565b61306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615795565b60405180910390fd5b50505050565b6060600c805461308290614377565b80601f01602080910402602001604051908101604052809291908181526020018280546130ae90614377565b80156130fb5780601f106130d0576101008083540402835291602001916130fb565b820191906000526020600020905b8154815290600101906020018083116130de57829003601f168201915b5050505050905090565b60606000820361314c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613260565b600082905060005b6000821461317e57808061316790614ce1565b915050600a8261317791906157e4565b9150613154565b60008167ffffffffffffffff81111561319a576131996139ba565b5b6040519080825280601f01601f1916602001820160405280156131cc5781602001600182028036833780820191505090505b5090505b60008514613259576001826131e591906148cd565b9150600a856131f49190615815565b60306132009190614877565b60f81b81838151811061321657613215614c85565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561325291906157e4565b94506131d0565b8093505050505b919050565b6001816000016000828254019250508190555050565b505050565b505050565b60008082905060005b84518110156132d0576132bb828683815181106132ae576132ad614c85565b5b60200260200101516134bd565b915080806132c890614ce1565b91505061328e565b508091505092915050565b6132e583836134e8565b6132f26000848484613336565b613331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332890615795565b60405180910390fd5b505050565b60006133578473ffffffffffffffffffffffffffffffffffffffff166136c1565b156134b0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261338061299d565b8786866040518563ffffffff1660e01b81526004016133a2949392919061589b565b6020604051808303816000875af19250505080156133de57506040513d601f19601f820116820180604052508101906133db91906158fc565b60015b613460573d806000811461340e576040519150601f19603f3d011682016040523d82523d6000602084013e613413565b606091505b506000815103613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f90615795565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134b5565b600190505b949350505050565b60008183106134d5576134d082846136e4565b6134e0565b6134df83836136e4565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354e90615975565b60405180910390fd5b61356081612931565b156135a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613597906159e1565b60405180910390fd5b6135ac6000838361327b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135fc9190614877565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136bd60008383613280565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137448161370f565b811461374f57600080fd5b50565b6000813590506137618161373b565b92915050565b60006020828403121561377d5761377c613705565b5b600061378b84828501613752565b91505092915050565b60008115159050919050565b6137a981613794565b82525050565b60006020820190506137c460008301846137a0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138045780820151818401526020810190506137e9565b83811115613813576000848401525b50505050565b6000601f19601f8301169050919050565b6000613835826137ca565b61383f81856137d5565b935061384f8185602086016137e6565b61385881613819565b840191505092915050565b6000602082019050818103600083015261387d818461382a565b905092915050565b6000819050919050565b61389881613885565b81146138a357600080fd5b50565b6000813590506138b58161388f565b92915050565b6000602082840312156138d1576138d0613705565b5b60006138df848285016138a6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613913826138e8565b9050919050565b61392381613908565b82525050565b600060208201905061393e600083018461391a565b92915050565b61394d81613908565b811461395857600080fd5b50565b60008135905061396a81613944565b92915050565b6000806040838503121561398757613986613705565b5b60006139958582860161395b565b92505060206139a6858286016138a6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139f282613819565b810181811067ffffffffffffffff82111715613a1157613a106139ba565b5b80604052505050565b6000613a246136fb565b9050613a3082826139e9565b919050565b600067ffffffffffffffff821115613a5057613a4f6139ba565b5b613a5982613819565b9050602081019050919050565b82818337600083830152505050565b6000613a88613a8384613a35565b613a1a565b905082815260208101848484011115613aa457613aa36139b5565b5b613aaf848285613a66565b509392505050565b600082601f830112613acc57613acb6139b0565b5b8135613adc848260208601613a75565b91505092915050565b600060208284031215613afb57613afa613705565b5b600082013567ffffffffffffffff811115613b1957613b1861370a565b5b613b2584828501613ab7565b91505092915050565b6000819050919050565b613b4181613b2e565b82525050565b6000602082019050613b5c6000830184613b38565b92915050565b613b6b81613885565b82525050565b6000602082019050613b866000830184613b62565b92915050565b600080600060608486031215613ba557613ba4613705565b5b6000613bb38682870161395b565b9350506020613bc48682870161395b565b9250506040613bd5868287016138a6565b9150509250925092565b600060208284031215613bf557613bf4613705565b5b6000613c038482850161395b565b91505092915050565b600067ffffffffffffffff821115613c2757613c266139ba565b5b602082029050602081019050919050565b600080fd5b613c4681613b2e565b8114613c5157600080fd5b50565b600081359050613c6381613c3d565b92915050565b6000613c7c613c7784613c0c565b613a1a565b90508083825260208201905060208402830185811115613c9f57613c9e613c38565b5b835b81811015613cc85780613cb48882613c54565b845260208401935050602081019050613ca1565b5050509392505050565b600082601f830112613ce757613ce66139b0565b5b8135613cf7848260208601613c69565b91505092915050565b600080600060608486031215613d1957613d18613705565b5b6000613d27868287016138a6565b9350506020613d388682870161395b565b925050604084013567ffffffffffffffff811115613d5957613d5861370a565b5b613d6586828701613cd2565b9150509250925092565b6000608082019050613d846000830187613b62565b613d916020830186613b62565b613d9e6040830185613b62565b613dab6060830184613b62565b95945050505050565b60008060408385031215613dcb57613dca613705565b5b6000613dd98582860161395b565b925050602083013567ffffffffffffffff811115613dfa57613df961370a565b5b613e0685828601613cd2565b9150509250929050565b600060208284031215613e2657613e25613705565b5b6000613e3484828501613c54565b91505092915050565b613e4681613794565b8114613e5157600080fd5b50565b600081359050613e6381613e3d565b92915050565b600060208284031215613e7f57613e7e613705565b5b6000613e8d84828501613e54565b91505092915050565b60008060008060808587031215613eb057613eaf613705565b5b6000613ebe878288016138a6565b9450506020613ecf878288016138a6565b9350506040613ee0878288016138a6565b9250506060613ef1878288016138a6565b91505092959194509250565b600080fd5b60008083601f840112613f1857613f176139b0565b5b8235905067ffffffffffffffff811115613f3557613f34613efd565b5b602083019150836020820283011115613f5157613f50613c38565b5b9250929050565b60008083601f840112613f6e57613f6d6139b0565b5b8235905067ffffffffffffffff811115613f8b57613f8a613efd565b5b602083019150836020820283011115613fa757613fa6613c38565b5b9250929050565b60008060008060408587031215613fc857613fc7613705565b5b600085013567ffffffffffffffff811115613fe657613fe561370a565b5b613ff287828801613f02565b9450945050602085013567ffffffffffffffff8111156140155761401461370a565b5b61402187828801613f58565b925092505092959194509250565b6000806040838503121561404657614045613705565b5b60006140548582860161395b565b925050602061406585828601613e54565b9150509250929050565b600067ffffffffffffffff82111561408a576140896139ba565b5b61409382613819565b9050602081019050919050565b60006140b36140ae8461406f565b613a1a565b9050828152602081018484840111156140cf576140ce6139b5565b5b6140da848285613a66565b509392505050565b600082601f8301126140f7576140f66139b0565b5b81356141078482602086016140a0565b91505092915050565b6000806000806080858703121561412a57614129613705565b5b60006141388782880161395b565b94505060206141498782880161395b565b935050604061415a878288016138a6565b925050606085013567ffffffffffffffff81111561417b5761417a61370a565b5b614187878288016140e2565b91505092959194509250565b600060ff82169050919050565b6141a981614193565b82525050565b60006020820190506141c460008301846141a0565b92915050565b6141d381614193565b81146141de57600080fd5b50565b6000813590506141f0816141ca565b92915050565b60008083601f84011261420c5761420b6139b0565b5b8235905067ffffffffffffffff81111561422957614228613efd565b5b60208301915083602082028301111561424557614244613c38565b5b9250929050565b60008060006040848603121561426557614264613705565b5b6000614273868287016141e1565b935050602084013567ffffffffffffffff8111156142945761429361370a565b5b6142a0868287016141f6565b92509250509250925092565b600080604083850312156142c3576142c2613705565b5b60006142d1858286016138a6565b925050602083013567ffffffffffffffff8111156142f2576142f161370a565b5b6142fe85828601613cd2565b9150509250929050565b6000806040838503121561431f5761431e613705565b5b600061432d8582860161395b565b925050602061433e8582860161395b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438f57607f821691505b6020821081036143a2576143a1614348565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614404602c836137d5565b915061440f826143a8565b604082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006144966021836137d5565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145286038836137d5565b9150614533826144cc565b604082019050919050565b600060208201905081810360008301526145578161451b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145946020836137d5565b915061459f8261455e565b602082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261462c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145ef565b61463686836145ef565b95508019841693508086168417925050509392505050565b6000819050919050565b600061467361466e61466984613885565b61464e565b613885565b9050919050565b6000819050919050565b61468d83614658565b6146a16146998261467a565b8484546145fc565b825550505050565b600090565b6146b66146a9565b6146c1818484614684565b505050565b5b818110156146e5576146da6000826146ae565b6001810190506146c7565b5050565b601f82111561472a576146fb816145ca565b614704846145df565b81016020851015614713578190505b61472761471f856145df565b8301826146c6565b50505b505050565b600082821c905092915050565b600061474d6000198460080261472f565b1980831691505092915050565b6000614766838361473c565b9150826002028217905092915050565b61477f826137ca565b67ffffffffffffffff811115614798576147976139ba565b5b6147a28254614377565b6147ad8282856146e9565b600060209050601f8311600181146147e057600084156147ce578287015190505b6147d8858261475a565b865550614840565b601f1984166147ee866145ca565b60005b82811015614816578489015182556001820191506020850194506020810190506147f1565b86831015614833578489015161482f601f89168261473c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061488282613885565b915061488d83613885565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c2576148c1614848565b5b828201905092915050565b60006148d882613885565b91506148e383613885565b9250828210156148f6576148f5614848565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061495d6031836137d5565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b600081905092915050565b50565b60006149ae600083614993565b91506149b98261499e565b600082019050919050565b60006149cf826149a1565b9150819050919050565b7f5769746864726177616c206f662066756e6473206661696c6564000000000000600082015250565b6000614a0f601a836137d5565b9150614a1a826149d9565b602082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aa16029836137d5565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b60008160601b9050919050565b6000614aef82614ad7565b9050919050565b6000614b0182614ae4565b9050919050565b614b19614b1482613908565b614af6565b82525050565b6000819050919050565b614b3a614b3582613885565b614b1f565b82525050565b6000614b4c8285614b08565b601482019150614b5c8284614b29565b6020820191508190509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614bc8602a836137d5565b9150614bd382614b6c565b604082019050919050565b60006020820190508181036000830152614bf781614bbb565b9050919050565b6000614c0a8284614b08565b60148201915081905092915050565b7f4c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b6000614c4f600f836137d5565b9150614c5a82614c19565b602082019050919050565b60006020820190508181036000830152614c7e81614c42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614cca57614cc9613705565b5b6000614cd8848285016141e1565b91505092915050565b6000614cec82613885565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d1e57614d1d614848565b5b600182019050919050565b7f5075626c69632053616c65206973206e6f742061637469766500000000000000600082015250565b6000614d5f6019836137d5565b9150614d6a82614d29565b602082019050919050565b60006020820190508181036000830152614d8e81614d52565b9050919050565b7f596f75206d757374206d696e74206174206c656173742031204e465400000000600082015250565b6000614dcb601c836137d5565b9150614dd682614d95565b602082019050919050565b60006020820190508181036000830152614dfa81614dbe565b9050919050565b7f4d696e7420706572207472616e73616374696f6e206578636565646564000000600082015250565b6000614e37601d836137d5565b9150614e4282614e01565b602082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b7f4d617820746f6b656e73206d696e74656420666f72207468697320616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec96022836137d5565b9150614ed482614e6d565b604082019050919050565b60006020820190508181036000830152614ef881614ebc565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000614f356013836137d5565b9150614f4082614eff565b602082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b6000614f7682613885565b9150614f8183613885565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fba57614fb9614848565b5b828202905092915050565b7f506c656173652073656e642074686520636f727265637420616d6f756e74206f60008201527f6620455448000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836137d5565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006150b3602f836137d5565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b600081905092915050565b60006150ff826137ca565b61510981856150e9565b93506151198185602086016137e6565b80840191505092915050565b600061513182856150f4565b915061513d82846150f4565b91508190509392505050565b7f436c61696d206c616e6420697320696e61637469766500000000000000000000600082015250565b600061517f6016836137d5565b915061518a82615149565b602082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f416c726561647920436c61696d65640000000000000000000000000000000000600082015250565b60006151eb600f836137d5565b91506151f6826151b5565b602082019050919050565b6000602082019050818103600083015261521a816151de565b9050919050565b7f506c656173652075736520636f727265637420436c61696d61626c652061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061527d6024836137d5565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b7f486f6c6465722053616c65206973206e6f742061637469766500000000000000600082015250565b60006152e96019836137d5565b91506152f4826152b3565b602082019050919050565b60006020820190508181036000830152615318816152dc565b9050919050565b7f506c656173652075736520636f727265637420486f6c6465722061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061537b6021836137d5565b91506153868261531f565b604082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061540d6026836137d5565b9150615418826153b1565b604082019050919050565b6000602082019050818103600083015261543c81615400565b9050919050565b7f596f752068617665206e6f206c616e6420746f20636c61696d00000000000000600082015250565b60006154796019836137d5565b915061548482615443565b602082019050919050565b600060208201905081810360008301526154a88161546c565b9050919050565b60006154ba82614193565b9150600082036154cd576154cc614848565b5b600182039050919050565b60006154e382614193565b915060ff82036154f6576154f5614848565b5b600182019050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061555d602c836137d5565b915061556882615501565b604082019050919050565b6000602082019050818103600083015261558c81615550565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006155ef6025836137d5565b91506155fa82615593565b604082019050919050565b6000602082019050818103600083015261561e816155e2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156816024836137d5565b915061568c82615625565b604082019050919050565b600060208201905081810360008301526156b081615674565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006156ed6019836137d5565b91506156f8826156b7565b602082019050919050565b6000602082019050818103600083015261571c816156e0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061577f6032836137d5565b915061578a82615723565b604082019050919050565b600060208201905081810360008301526157ae81615772565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157ef82613885565b91506157fa83613885565b92508261580a576158096157b5565b5b828204905092915050565b600061582082613885565b915061582b83613885565b92508261583b5761583a6157b5565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061586d82615846565b6158778185615851565b93506158878185602086016137e6565b61589081613819565b840191505092915050565b60006080820190506158b0600083018761391a565b6158bd602083018661391a565b6158ca6040830185613b62565b81810360608301526158dc8184615862565b905095945050505050565b6000815190506158f68161373b565b92915050565b60006020828403121561591257615911613705565b5b6000615920848285016158e7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061595f6020836137d5565b915061596a82615929565b602082019050919050565b6000602082019050818103600083015261598e81615952565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006159cb601c836137d5565b91506159d682615995565b602082019050919050565b600060208201905081810360008301526159fa816159be565b905091905056fea26469706673582212201418ed416a8053a019fd2599d83b40a4dd2f2c44f964c5decc7fc7962f69f5ba64736f6c634300080f0033

Deployed Bytecode Sourcemap

45510:6878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19074:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20007:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21567:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21090:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51077:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45792:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46519:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45939:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22317:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45903:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52187:198;;;:::i;:::-;;22727:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50599:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46367:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19701:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50089:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46232:16;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;19431:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33238:103;;;;;;;;;;;;;:::i;:::-;;51204:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45830:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51400:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49729:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32587:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50371:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51760:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20176:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46091:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50693:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51871:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46657:806;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21860:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51540:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46177:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22983:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46309:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20351:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46141:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45871:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49101:622;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47469:940;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51649:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22086:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45976:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49973:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33496:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46255:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48474:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19074:293;19176:4;19224:25;19209:40;;;:11;:40;;;;:101;;;;19277:33;19262:48;;;:11;:48;;;;19209:101;:150;;;;19323:36;19347:11;19323:23;:36::i;:::-;19209:150;19193:166;;19074:293;;;:::o;20007:100::-;20061:13;20094:5;20087:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20007:100;:::o;21567:221::-;21643:7;21671:16;21679:7;21671;:16::i;:::-;21663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21756:15;:24;21772:7;21756:24;;;;;;;;;;;;;;;;;;;;;21749:31;;21567:221;;;:::o;21090:411::-;21171:13;21187:23;21202:7;21187:14;:23::i;:::-;21171:39;;21235:5;21229:11;;:2;:11;;;21221:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21329:5;21313:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21338:37;21355:5;21362:12;:10;:12::i;:::-;21338:16;:37::i;:::-;21313:62;21291:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;21472:21;21481:2;21485:7;21472:8;:21::i;:::-;21160:341;21090:411;;:::o;51077:121::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51176:14:::1;51162:11;:28;;;;;;:::i;:::-;;51077:121:::0;:::o;45792:31::-;;;;:::o;46519:132::-;46562:4;46625:18;;46607:15;;46586:18;:8;:16;:18::i;:::-;:36;;;;:::i;:::-;:57;;;;:::i;:::-;46579:64;;46519:132;:::o;45939:30::-;;;;;;;;;;;;;:::o;22317:339::-;22512:41;22531:12;:10;:12::i;:::-;22545:7;22512:18;:41::i;:::-;22504:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22620:28;22630:4;22636:2;22640:7;22620:9;:28::i;:::-;22317:339;;;:::o;45903:29::-;;;;;;;;;;;;;:::o;52187:198::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52244:12:::1;52270:10;52262:24;;52294:21;52262:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52243:77;;;52339:7;52331:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52232:153;52187:198::o:0;22727:185::-;22865:39;22882:4;22888:2;22892:7;22865:39;;;;;;;;;;;;:16;:39::i;:::-;22727:185;;;:::o;50599:88::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50676:3:::1;50666:7;:13;;;;;;:::i;:::-;;50599:88:::0;:::o;46367:53::-;;;;;;;;;;;;;;;;;:::o;19701:239::-;19773:7;19793:13;19809:7;:16;19817:7;19809:16;;;;;;;;;;;;;;;;;;;;;19793:32;;19861:1;19844:19;;:5;:19;;;19836:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19927:5;19920:12;;;19701:239;;;:::o;50089:276::-;50199:4;50215:12;50257:8;50267:12;50240:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50230:51;;;;;;50215:66;;50299:58;50318:12;50331:19;;50352:4;50299:18;:58::i;:::-;50292:65;;;50089:276;;;;;:::o;46232:16::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19431:208::-;19503:7;19548:1;19531:19;;:5;:19;;;19523:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19615:9;:16;19625:5;19615:16;;;;;;;;;;;;;;;;19608:23;;19431:208;;;:::o;33238:103::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33303:30:::1;33330:1;33303:18;:30::i;:::-;33238:103::o:0;51204:133::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51310:19:::1;51289:18;:40;;;;51204:133:::0;:::o;45830:34::-;;;;:::o;51400:128::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51500:20:::1;51482:15;:38;;;;51400:128:::0;:::o;49729:238::-;49818:4;49834:12;49876:7;49859:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;49849:36;;;;;;49834:51;;49903:56;49922:12;49936:16;;49954:4;49903:18;:56::i;:::-;49896:63;;;49729:238;;;;:::o;32587:87::-;32633:7;32660:6;;;;;;;;;;;32653:13;;32587:87;:::o;50371:116::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50468:11:::1;50446:19;:33;;;;50371:116:::0;:::o;51760:105::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51851:6:::1;51830:18;;:27;;;;;;;;;;;;;;;;;;51760:105:::0;:::o;20176:104::-;20232:13;20265:7;20258:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:104;:::o;46091:37::-;;;;:::o;50693:378::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50905:20:::1;50878:4;:24;;:47;;;;50967:24;50936:4;:28;;:55;;;;51015:6;51002:4;:10;;:19;;;;51051:12;51032:4;:16;;:31;;;;50693:378:::0;;;;:::o;51871:310::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52012:11:::1;;:18;;51995:6;;:13;;:35;51987:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52065:6;52061:113;52081:6;;:13;;52077:1;:17;52061:113;;;52148:11;;52160:1;52148:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52116:18;:29;52135:6;;52142:1;52135:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52116:29;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;52096:3;;;;;:::i;:::-;;;;52061:113;;;;51871:310:::0;;;;:::o;46657:806::-;46723:18;;;;;;;;;;;46715:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46804:1;46790:11;:15;46782:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46889:11;46857:4;:28;;;:43;;46849:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47004:4;:24;;;46989:11;46953:21;:33;46975:10;46953:33;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;:75;;46945:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;47119:9;;47104:11;47086:15;;:29;;;;:::i;:::-;:42;;47078:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47197:11;47184:4;:10;;;:24;;;;:::i;:::-;47171:9;:37;;47163:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47266:6;47261:136;47282:11;47278:1;:15;47261:136;;;47315:38;47325:10;47337:15;;47315:9;:38::i;:::-;47368:15;;:17;;;;;;;;;:::i;:::-;;;;;;47295:3;;;;;:::i;:::-;;;;47261:136;;;;47444:11;47407:21;:33;47429:10;47407:33;;;;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;;;;;;;;46657:806;:::o;21860:155::-;21955:52;21974:12;:10;:12::i;:::-;21988:8;21998;21955:18;:52::i;:::-;21860:155;;:::o;51540:103::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51629:6:::1;51609:17;;:26;;;;;;;;;;;;;;;;;;51540:103:::0;:::o;46177:48::-;;;;:::o;22983:328::-;23158:41;23177:12;:10;:12::i;:::-;23191:7;23158:18;:41::i;:::-;23150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23264:39;23278:4;23284:2;23288:7;23297:5;23264:13;:39::i;:::-;22983:328;;;;:::o;46309:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;20351:334::-;20424:13;20458:16;20466:7;20458;:16::i;:::-;20450:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20539:21;20563:10;:8;:10::i;:::-;20539:34;;20615:1;20597:7;20591:21;:25;:86;;;;;;;;;;;;;;;;;20643:7;20652:18;:7;:16;:18::i;:::-;20626:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20591:86;20584:93;;;20351:334;;;:::o;46141:29::-;;;;:::o;45871:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49101:622::-;49198:17;;;;;;;;;;;49190:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;49291:1;49261:14;:26;49276:10;49261:26;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;49253:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49331:50;49343:12;49331:50;;49357:10;49369:11;;49331:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:50::i;:::-;49323:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49479:9;;49463:12;49441:34;;:18;:8;:16;:18::i;:::-;:34;;;;:::i;:::-;:47;;49433:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49528:6;49523:143;49544:12;49540:16;;:1;:16;49523:143;;;49578:41;49588:10;49600:18;:8;:16;:18::i;:::-;49578:9;:41::i;:::-;49634:20;:8;:18;:20::i;:::-;49558:3;;;;;:::i;:::-;;;;49523:143;;;;49703:12;49676:14;:26;49691:10;49676:26;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;49101:622;;;:::o;47469:940::-;47571:18;;;;;;;;;;;47563:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47652:1;47638:11;:15;47630:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47737:11;47705:4;:28;;;:43;;47697:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47801:35;47812:10;47824:11;47801:10;:35::i;:::-;47793:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47944:4;:24;;;47929:11;47893:21;:33;47915:10;47893:33;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;:75;;47885:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;48059:9;;48044:11;48026:15;;:29;;;;:::i;:::-;:42;;48018:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48143:11;48124:4;:16;;;:30;;;;:::i;:::-;48111:9;:43;;48103:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;48212:6;48207:136;48228:11;48224:1;:15;48207:136;;;48261:38;48271:10;48283:15;;48261:9;:38::i;:::-;48314:15;;:17;;;;;;;;;:::i;:::-;;;;;;48241:3;;;;;:::i;:::-;;;;48207:136;;;;48390:11;48353:21;:33;48375:10;48353:33;;;;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;;;;;;;;47469:940;;:::o;51649:105::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51740:6:::1;51719:18;;:27;;;;;;;;;;;;;;;;;;51649:105:::0;:::o;22086:164::-;22183:4;22207:18;:25;22226:5;22207:25;;;;;;;;;;;;;;;:35;22233:8;22207:35;;;;;;;;;;;;;;;;;;;;;;;;;22200:42;;22086:164;;;;:::o;45976:30::-;;;;;;;;;;;;;:::o;49973:110::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50064:11:::1;50045:16;:30;;;;49973:110:::0;:::o;33496:201::-;32818:12;:10;:12::i;:::-;32807:23;;:7;:5;:7::i;:::-;:23;;;32799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33605:1:::1;33585:22;;:8;:22;;::::0;33577:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33661:28;33680:8;33661:18;:28::i;:::-;33496:201:::0;:::o;46255:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;48474:586::-;48543:17;;;;;;;;;;;48535:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;48598:15;48616:18;:30;48635:10;48616:30;;;;;;;;;;;;;;;;;;;;;;;;;48598:48;;;;48679:12;48665:10;:26;;48657:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48776:9;;48762:10;48740:18;:8;:16;:18::i;:::-;:32;;;;:::i;:::-;:45;;48732:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:6;48820:233;48841:12;48837:1;:16;48820:233;;;48875:41;48885:10;48897:18;:8;:16;:18::i;:::-;48875:9;:41::i;:::-;48931:20;:8;:18;:20::i;:::-;48966:18;:30;48985:10;48966:30;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;49013:14;:26;49028:10;49013:26;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;48855:3;;;;;:::i;:::-;;;;48820:233;;;;48524:536;48474:586;:::o;17937:157::-;18022:4;18061:25;18046:40;;;:11;:40;;;;18039:47;;17937:157;;;:::o;24821:127::-;24886:4;24938:1;24910:30;;:7;:16;24918:7;24910:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24903:37;;24821:127;;;:::o;15673:98::-;15726:7;15753:10;15746:17;;15673:98;:::o;28967:174::-;29069:2;29042:15;:24;29058:7;29042:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29125:7;29121:2;29087:46;;29096:23;29111:7;29096:14;:23::i;:::-;29087:46;;;;;;;;;;;;28967:174;;:::o;34464:114::-;34529:7;34556;:14;;;34549:21;;34464:114;;;:::o;25115:348::-;25208:4;25233:16;25241:7;25233;:16::i;:::-;25225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25309:13;25325:23;25340:7;25325:14;:23::i;:::-;25309:39;;25378:5;25367:16;;:7;:16;;;:52;;;;25387:32;25404:5;25411:7;25387:16;:32::i;:::-;25367:52;:87;;;;25447:7;25423:31;;:20;25435:7;25423:11;:20::i;:::-;:31;;;25367:87;25359:96;;;25115:348;;;;:::o;28224:625::-;28383:4;28356:31;;:23;28371:7;28356:14;:23::i;:::-;:31;;;28348:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28462:1;28448:16;;:2;:16;;;28440:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28518:39;28539:4;28545:2;28549:7;28518:20;:39::i;:::-;28622:29;28639:1;28643:7;28622:8;:29::i;:::-;28683:1;28664:9;:15;28674:4;28664:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28712:1;28695:9;:13;28705:2;28695:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28743:2;28724:7;:16;28732:7;28724:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28782:7;28778:2;28763:27;;28772:4;28763:27;;;;;;;;;;;;28803:38;28823:4;28829:2;28833:7;28803:19;:38::i;:::-;28224:625;;;:::o;37979:190::-;38104:4;38157;38128:25;38141:5;38148:4;38128:12;:25::i;:::-;:33;38121:40;;37979:190;;;;;:::o;33857:191::-;33931:16;33950:6;;;;;;;;;;;33931:25;;33976:8;33967:6;;:17;;;;;;;;;;;;;;;;;;34031:8;34000:40;;34021:8;34000:40;;;;;;;;;;;;33920:128;33857:191;:::o;25805:110::-;25881:26;25891:2;25895:7;25881:26;;;;;;;;;;;;:9;:26::i;:::-;25805:110;;:::o;29283:315::-;29438:8;29429:17;;:5;:17;;;29421:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29525:8;29487:18;:25;29506:5;29487:25;;;;;;;;;;;;;;;:35;29513:8;29487:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29571:8;29549:41;;29564:5;29549:41;;;29581:8;29549:41;;;;;;:::i;:::-;;;;;;;;29283:315;;;:::o;24193:::-;24350:28;24360:4;24366:2;24370:7;24350:9;:28::i;:::-;24397:48;24420:4;24426:2;24430:7;24439:5;24397:22;:48::i;:::-;24389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24193:315;;;;:::o;50493:100::-;50545:13;50578:7;50571:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50493:100;:::o;16073:723::-;16129:13;16359:1;16350:5;:10;16346:53;;16377:10;;;;;;;;;;;;;;;;;;;;;16346:53;16409:12;16424:5;16409:20;;16440:14;16465:78;16480:1;16472:4;:9;16465:78;;16498:8;;;;;:::i;:::-;;;;16529:2;16521:10;;;;;:::i;:::-;;;16465:78;;;16553:19;16585:6;16575:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16553:39;;16603:154;16619:1;16610:5;:10;16603:154;;16647:1;16637:11;;;;;:::i;:::-;;;16714:2;16706:5;:10;;;;:::i;:::-;16693:2;:24;;;;:::i;:::-;16680:39;;16663:6;16670;16663:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16743:2;16734:11;;;;;:::i;:::-;;;16603:154;;;16781:6;16767:21;;;;;16073:723;;;;:::o;34586:115::-;34685:1;34667:7;:14;;;:19;;;;;;;;;;;34586:115;:::o;31534:126::-;;;;:::o;32045:125::-;;;;:::o;38846:296::-;38929:7;38949:20;38972:4;38949:27;;38992:9;38987:118;39011:5;:12;39007:1;:16;38987:118;;;39060:33;39070:12;39084:5;39090:1;39084:8;;;;;;;;:::i;:::-;;;;;;;;39060:9;:33::i;:::-;39045:48;;39025:3;;;;;:::i;:::-;;;;38987:118;;;;39122:12;39115:19;;;38846:296;;;;:::o;26142:321::-;26272:18;26278:2;26282:7;26272:5;:18::i;:::-;26323:54;26354:1;26358:2;26362:7;26371:5;26323:22;:54::i;:::-;26301:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26142:321;;;:::o;30163:799::-;30318:4;30339:15;:2;:13;;;:15::i;:::-;30335:620;;;30391:2;30375:36;;;30412:12;:10;:12::i;:::-;30426:4;30432:7;30441:5;30375:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30371:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30634:1;30617:6;:13;:18;30613:272;;30660:60;;;;;;;;;;:::i;:::-;;;;;;;;30613:272;30835:6;30829:13;30820:6;30816:2;30812:15;30805:38;30371:529;30508:41;;;30498:51;;;:6;:51;;;;30491:58;;;;;30335:620;30939:4;30932:11;;30163:799;;;;;;;:::o;45053:149::-;45116:7;45147:1;45143;:5;:51;;45174:20;45189:1;45192;45174:14;:20::i;:::-;45143:51;;;45151:20;45166:1;45169;45151:14;:20::i;:::-;45143:51;45136:58;;45053:149;;;;:::o;26799:439::-;26893:1;26879:16;;:2;:16;;;26871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26952:16;26960:7;26952;:16::i;:::-;26951:17;26943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27014:45;27043:1;27047:2;27051:7;27014:20;:45::i;:::-;27089:1;27072:9;:13;27082:2;27072:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27120:2;27101:7;:16;27109:7;27101:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27165:7;27161:2;27140:33;;27157:1;27140:33;;;;;;;;;;;;27186:44;27214:1;27218:2;27222:7;27186:19;:44::i;:::-;26799:439;;:::o;8372:326::-;8432:4;8689:1;8667:7;:19;;;:23;8660:30;;8372:326;;;:::o;45210:268::-;45278:13;45385:1;45379:4;45372:15;45414:1;45408:4;45401:15;45455:4;45449;45439:21;45430:30;;45210:268;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:509::-;7113:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:119;;;7168:79;;:::i;:::-;7130:119;7316:1;7305:9;7301:17;7288:31;7346:18;7338:6;7335:30;7332:117;;;7368:79;;:::i;:::-;7332:117;7473:63;7528:7;7519:6;7508:9;7504:22;7473:63;:::i;:::-;7463:73;;7259:287;7044:509;;;;:::o;7559:77::-;7596:7;7625:5;7614:16;;7559:77;;;:::o;7642:118::-;7729:24;7747:5;7729:24;:::i;:::-;7724:3;7717:37;7642:118;;:::o;7766:222::-;7859:4;7897:2;7886:9;7882:18;7874:26;;7910:71;7978:1;7967:9;7963:17;7954:6;7910:71;:::i;:::-;7766:222;;;;:::o;7994:118::-;8081:24;8099:5;8081:24;:::i;:::-;8076:3;8069:37;7994:118;;:::o;8118:222::-;8211:4;8249:2;8238:9;8234:18;8226:26;;8262:71;8330:1;8319:9;8315:17;8306:6;8262:71;:::i;:::-;8118:222;;;;:::o;8346:619::-;8423:6;8431;8439;8488:2;8476:9;8467:7;8463:23;8459:32;8456:119;;;8494:79;;:::i;:::-;8456:119;8614:1;8639:53;8684:7;8675:6;8664:9;8660:22;8639:53;:::i;:::-;8629:63;;8585:117;8741:2;8767:53;8812:7;8803:6;8792:9;8788:22;8767:53;:::i;:::-;8757:63;;8712:118;8869:2;8895:53;8940:7;8931:6;8920:9;8916:22;8895:53;:::i;:::-;8885:63;;8840:118;8346:619;;;;;:::o;8971:329::-;9030:6;9079:2;9067:9;9058:7;9054:23;9050:32;9047:119;;;9085:79;;:::i;:::-;9047:119;9205:1;9230:53;9275:7;9266:6;9255:9;9251:22;9230:53;:::i;:::-;9220:63;;9176:117;8971:329;;;;:::o;9306:311::-;9383:4;9473:18;9465:6;9462:30;9459:56;;;9495:18;;:::i;:::-;9459:56;9545:4;9537:6;9533:17;9525:25;;9605:4;9599;9595:15;9587:23;;9306:311;;;:::o;9623:117::-;9732:1;9729;9722:12;9746:122;9819:24;9837:5;9819:24;:::i;:::-;9812:5;9809:35;9799:63;;9858:1;9855;9848:12;9799:63;9746:122;:::o;9874:139::-;9920:5;9958:6;9945:20;9936:29;;9974:33;10001:5;9974:33;:::i;:::-;9874:139;;;;:::o;10036:710::-;10132:5;10157:81;10173:64;10230:6;10173:64;:::i;:::-;10157:81;:::i;:::-;10148:90;;10258:5;10287:6;10280:5;10273:21;10321:4;10314:5;10310:16;10303:23;;10374:4;10366:6;10362:17;10354:6;10350:30;10403:3;10395:6;10392:15;10389:122;;;10422:79;;:::i;:::-;10389:122;10537:6;10520:220;10554:6;10549:3;10546:15;10520:220;;;10629:3;10658:37;10691:3;10679:10;10658:37;:::i;:::-;10653:3;10646:50;10725:4;10720:3;10716:14;10709:21;;10596:144;10580:4;10575:3;10571:14;10564:21;;10520:220;;;10524:21;10138:608;;10036:710;;;;;:::o;10769:370::-;10840:5;10889:3;10882:4;10874:6;10870:17;10866:27;10856:122;;10897:79;;:::i;:::-;10856:122;11014:6;11001:20;11039:94;11129:3;11121:6;11114:4;11106:6;11102:17;11039:94;:::i;:::-;11030:103;;10846:293;10769:370;;;;:::o;11145:829::-;11247:6;11255;11263;11312:2;11300:9;11291:7;11287:23;11283:32;11280:119;;;11318:79;;:::i;:::-;11280:119;11438:1;11463:53;11508:7;11499:6;11488:9;11484:22;11463:53;:::i;:::-;11453:63;;11409:117;11565:2;11591:53;11636:7;11627:6;11616:9;11612:22;11591:53;:::i;:::-;11581:63;;11536:118;11721:2;11710:9;11706:18;11693:32;11752:18;11744:6;11741:30;11738:117;;;11774:79;;:::i;:::-;11738:117;11879:78;11949:7;11940:6;11929:9;11925:22;11879:78;:::i;:::-;11869:88;;11664:303;11145:829;;;;;:::o;11980:553::-;12157:4;12195:3;12184:9;12180:19;12172:27;;12209:71;12277:1;12266:9;12262:17;12253:6;12209:71;:::i;:::-;12290:72;12358:2;12347:9;12343:18;12334:6;12290:72;:::i;:::-;12372;12440:2;12429:9;12425:18;12416:6;12372:72;:::i;:::-;12454;12522:2;12511:9;12507:18;12498:6;12454:72;:::i;:::-;11980:553;;;;;;;:::o;12539:684::-;12632:6;12640;12689:2;12677:9;12668:7;12664:23;12660:32;12657:119;;;12695:79;;:::i;:::-;12657:119;12815:1;12840:53;12885:7;12876:6;12865:9;12861:22;12840:53;:::i;:::-;12830:63;;12786:117;12970:2;12959:9;12955:18;12942:32;13001:18;12993:6;12990:30;12987:117;;;13023:79;;:::i;:::-;12987:117;13128:78;13198:7;13189:6;13178:9;13174:22;13128:78;:::i;:::-;13118:88;;12913:303;12539:684;;;;;:::o;13229:329::-;13288:6;13337:2;13325:9;13316:7;13312:23;13308:32;13305:119;;;13343:79;;:::i;:::-;13305:119;13463:1;13488:53;13533:7;13524:6;13513:9;13509:22;13488:53;:::i;:::-;13478:63;;13434:117;13229:329;;;;:::o;13564:116::-;13634:21;13649:5;13634:21;:::i;:::-;13627:5;13624:32;13614:60;;13670:1;13667;13660:12;13614:60;13564:116;:::o;13686:133::-;13729:5;13767:6;13754:20;13745:29;;13783:30;13807:5;13783:30;:::i;:::-;13686:133;;;;:::o;13825:323::-;13881:6;13930:2;13918:9;13909:7;13905:23;13901:32;13898:119;;;13936:79;;:::i;:::-;13898:119;14056:1;14081:50;14123:7;14114:6;14103:9;14099:22;14081:50;:::i;:::-;14071:60;;14027:114;13825:323;;;;:::o;14154:765::-;14240:6;14248;14256;14264;14313:3;14301:9;14292:7;14288:23;14284:33;14281:120;;;14320:79;;:::i;:::-;14281:120;14440:1;14465:53;14510:7;14501:6;14490:9;14486:22;14465:53;:::i;:::-;14455:63;;14411:117;14567:2;14593:53;14638:7;14629:6;14618:9;14614:22;14593:53;:::i;:::-;14583:63;;14538:118;14695:2;14721:53;14766:7;14757:6;14746:9;14742:22;14721:53;:::i;:::-;14711:63;;14666:118;14823:2;14849:53;14894:7;14885:6;14874:9;14870:22;14849:53;:::i;:::-;14839:63;;14794:118;14154:765;;;;;;;:::o;14925:117::-;15034:1;15031;15024:12;15065:568;15138:8;15148:6;15198:3;15191:4;15183:6;15179:17;15175:27;15165:122;;15206:79;;:::i;:::-;15165:122;15319:6;15306:20;15296:30;;15349:18;15341:6;15338:30;15335:117;;;15371:79;;:::i;:::-;15335:117;15485:4;15477:6;15473:17;15461:29;;15539:3;15531:4;15523:6;15519:17;15509:8;15505:32;15502:41;15499:128;;;15546:79;;:::i;:::-;15499:128;15065:568;;;;;:::o;15654:566::-;15725:8;15735:6;15785:3;15778:4;15770:6;15766:17;15762:27;15752:122;;15793:79;;:::i;:::-;15752:122;15906:6;15893:20;15883:30;;15936:18;15928:6;15925:30;15922:117;;;15958:79;;:::i;:::-;15922:117;16072:4;16064:6;16060:17;16048:29;;16126:3;16118:4;16110:6;16106:17;16096:8;16092:32;16089:41;16086:128;;;16133:79;;:::i;:::-;16086:128;15654:566;;;;;:::o;16226:930::-;16346:6;16354;16362;16370;16419:2;16407:9;16398:7;16394:23;16390:32;16387:119;;;16425:79;;:::i;:::-;16387:119;16573:1;16562:9;16558:17;16545:31;16603:18;16595:6;16592:30;16589:117;;;16625:79;;:::i;:::-;16589:117;16738:80;16810:7;16801:6;16790:9;16786:22;16738:80;:::i;:::-;16720:98;;;;16516:312;16895:2;16884:9;16880:18;16867:32;16926:18;16918:6;16915:30;16912:117;;;16948:79;;:::i;:::-;16912:117;17061:78;17131:7;17122:6;17111:9;17107:22;17061:78;:::i;:::-;17043:96;;;;16838:311;16226:930;;;;;;;:::o;17162:468::-;17227:6;17235;17284:2;17272:9;17263:7;17259:23;17255:32;17252:119;;;17290:79;;:::i;:::-;17252:119;17410:1;17435:53;17480:7;17471:6;17460:9;17456:22;17435:53;:::i;:::-;17425:63;;17381:117;17537:2;17563:50;17605:7;17596:6;17585:9;17581:22;17563:50;:::i;:::-;17553:60;;17508:115;17162:468;;;;;:::o;17636:307::-;17697:4;17787:18;17779:6;17776:30;17773:56;;;17809:18;;:::i;:::-;17773:56;17847:29;17869:6;17847:29;:::i;:::-;17839:37;;17931:4;17925;17921:15;17913:23;;17636:307;;;:::o;17949:410::-;18026:5;18051:65;18067:48;18108:6;18067:48;:::i;:::-;18051:65;:::i;:::-;18042:74;;18139:6;18132:5;18125:21;18177:4;18170:5;18166:16;18215:3;18206:6;18201:3;18197:16;18194:25;18191:112;;;18222:79;;:::i;:::-;18191:112;18312:41;18346:6;18341:3;18336;18312:41;:::i;:::-;18032:327;17949:410;;;;;:::o;18378:338::-;18433:5;18482:3;18475:4;18467:6;18463:17;18459:27;18449:122;;18490:79;;:::i;:::-;18449:122;18607:6;18594:20;18632:78;18706:3;18698:6;18691:4;18683:6;18679:17;18632:78;:::i;:::-;18623:87;;18439:277;18378:338;;;;:::o;18722:943::-;18817:6;18825;18833;18841;18890:3;18878:9;18869:7;18865:23;18861:33;18858:120;;;18897:79;;:::i;:::-;18858:120;19017:1;19042:53;19087:7;19078:6;19067:9;19063:22;19042:53;:::i;:::-;19032:63;;18988:117;19144:2;19170:53;19215:7;19206:6;19195:9;19191:22;19170:53;:::i;:::-;19160:63;;19115:118;19272:2;19298:53;19343:7;19334:6;19323:9;19319:22;19298:53;:::i;:::-;19288:63;;19243:118;19428:2;19417:9;19413:18;19400:32;19459:18;19451:6;19448:30;19445:117;;;19481:79;;:::i;:::-;19445:117;19586:62;19640:7;19631:6;19620:9;19616:22;19586:62;:::i;:::-;19576:72;;19371:287;18722:943;;;;;;;:::o;19671:86::-;19706:7;19746:4;19739:5;19735:16;19724:27;;19671:86;;;:::o;19763:112::-;19846:22;19862:5;19846:22;:::i;:::-;19841:3;19834:35;19763:112;;:::o;19881:214::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20021:67;20085:1;20074:9;20070:17;20061:6;20021:67;:::i;:::-;19881:214;;;;:::o;20101:118::-;20172:22;20188:5;20172:22;:::i;:::-;20165:5;20162:33;20152:61;;20209:1;20206;20199:12;20152:61;20101:118;:::o;20225:135::-;20269:5;20307:6;20294:20;20285:29;;20323:31;20348:5;20323:31;:::i;:::-;20225:135;;;;:::o;20383:568::-;20456:8;20466:6;20516:3;20509:4;20501:6;20497:17;20493:27;20483:122;;20524:79;;:::i;:::-;20483:122;20637:6;20624:20;20614:30;;20667:18;20659:6;20656:30;20653:117;;;20689:79;;:::i;:::-;20653:117;20803:4;20795:6;20791:17;20779:29;;20857:3;20849:4;20841:6;20837:17;20827:8;20823:32;20820:41;20817:128;;;20864:79;;:::i;:::-;20817:128;20383:568;;;;;:::o;20957:700::-;21050:6;21058;21066;21115:2;21103:9;21094:7;21090:23;21086:32;21083:119;;;21121:79;;:::i;:::-;21083:119;21241:1;21266:51;21309:7;21300:6;21289:9;21285:22;21266:51;:::i;:::-;21256:61;;21212:115;21394:2;21383:9;21379:18;21366:32;21425:18;21417:6;21414:30;21411:117;;;21447:79;;:::i;:::-;21411:117;21560:80;21632:7;21623:6;21612:9;21608:22;21560:80;:::i;:::-;21542:98;;;;21337:313;20957:700;;;;;:::o;21663:684::-;21756:6;21764;21813:2;21801:9;21792:7;21788:23;21784:32;21781:119;;;21819:79;;:::i;:::-;21781:119;21939:1;21964:53;22009:7;22000:6;21989:9;21985:22;21964:53;:::i;:::-;21954:63;;21910:117;22094:2;22083:9;22079:18;22066:32;22125:18;22117:6;22114:30;22111:117;;;22147:79;;:::i;:::-;22111:117;22252:78;22322:7;22313:6;22302:9;22298:22;22252:78;:::i;:::-;22242:88;;22037:303;21663:684;;;;;:::o;22353:474::-;22421:6;22429;22478:2;22466:9;22457:7;22453:23;22449:32;22446:119;;;22484:79;;:::i;:::-;22446:119;22604:1;22629:53;22674:7;22665:6;22654:9;22650:22;22629:53;:::i;:::-;22619:63;;22575:117;22731:2;22757:53;22802:7;22793:6;22782:9;22778:22;22757:53;:::i;:::-;22747:63;;22702:118;22353:474;;;;;:::o;22833:180::-;22881:77;22878:1;22871:88;22978:4;22975:1;22968:15;23002:4;22999:1;22992:15;23019:320;23063:6;23100:1;23094:4;23090:12;23080:22;;23147:1;23141:4;23137:12;23168:18;23158:81;;23224:4;23216:6;23212:17;23202:27;;23158:81;23286:2;23278:6;23275:14;23255:18;23252:38;23249:84;;23305:18;;:::i;:::-;23249:84;23070:269;23019:320;;;:::o;23345:231::-;23485:34;23481:1;23473:6;23469:14;23462:58;23554:14;23549:2;23541:6;23537:15;23530:39;23345:231;:::o;23582:366::-;23724:3;23745:67;23809:2;23804:3;23745:67;:::i;:::-;23738:74;;23821:93;23910:3;23821:93;:::i;:::-;23939:2;23934:3;23930:12;23923:19;;23582:366;;;:::o;23954:419::-;24120:4;24158:2;24147:9;24143:18;24135:26;;24207:9;24201:4;24197:20;24193:1;24182:9;24178:17;24171:47;24235:131;24361:4;24235:131;:::i;:::-;24227:139;;23954:419;;;:::o;24379:220::-;24519:34;24515:1;24507:6;24503:14;24496:58;24588:3;24583:2;24575:6;24571:15;24564:28;24379:220;:::o;24605:366::-;24747:3;24768:67;24832:2;24827:3;24768:67;:::i;:::-;24761:74;;24844:93;24933:3;24844:93;:::i;:::-;24962:2;24957:3;24953:12;24946:19;;24605:366;;;:::o;24977:419::-;25143:4;25181:2;25170:9;25166:18;25158:26;;25230:9;25224:4;25220:20;25216:1;25205:9;25201:17;25194:47;25258:131;25384:4;25258:131;:::i;:::-;25250:139;;24977:419;;;:::o;25402:243::-;25542:34;25538:1;25530:6;25526:14;25519:58;25611:26;25606:2;25598:6;25594:15;25587:51;25402:243;:::o;25651:366::-;25793:3;25814:67;25878:2;25873:3;25814:67;:::i;:::-;25807:74;;25890:93;25979:3;25890:93;:::i;:::-;26008:2;26003:3;25999:12;25992:19;;25651:366;;;:::o;26023:419::-;26189:4;26227:2;26216:9;26212:18;26204:26;;26276:9;26270:4;26266:20;26262:1;26251:9;26247:17;26240:47;26304:131;26430:4;26304:131;:::i;:::-;26296:139;;26023:419;;;:::o;26448:182::-;26588:34;26584:1;26576:6;26572:14;26565:58;26448:182;:::o;26636:366::-;26778:3;26799:67;26863:2;26858:3;26799:67;:::i;:::-;26792:74;;26875:93;26964:3;26875:93;:::i;:::-;26993:2;26988:3;26984:12;26977:19;;26636:366;;;:::o;27008:419::-;27174:4;27212:2;27201:9;27197:18;27189:26;;27261:9;27255:4;27251:20;27247:1;27236:9;27232:17;27225:47;27289:131;27415:4;27289:131;:::i;:::-;27281:139;;27008:419;;;:::o;27433:141::-;27482:4;27505:3;27497:11;;27528:3;27525:1;27518:14;27562:4;27559:1;27549:18;27541:26;;27433:141;;;:::o;27580:93::-;27617:6;27664:2;27659;27652:5;27648:14;27644:23;27634:33;;27580:93;;;:::o;27679:107::-;27723:8;27773:5;27767:4;27763:16;27742:37;;27679:107;;;;:::o;27792:393::-;27861:6;27911:1;27899:10;27895:18;27934:97;27964:66;27953:9;27934:97;:::i;:::-;28052:39;28082:8;28071:9;28052:39;:::i;:::-;28040:51;;28124:4;28120:9;28113:5;28109:21;28100:30;;28173:4;28163:8;28159:19;28152:5;28149:30;28139:40;;27868:317;;27792:393;;;;;:::o;28191:60::-;28219:3;28240:5;28233:12;;28191:60;;;:::o;28257:142::-;28307:9;28340:53;28358:34;28367:24;28385:5;28367:24;:::i;:::-;28358:34;:::i;:::-;28340:53;:::i;:::-;28327:66;;28257:142;;;:::o;28405:75::-;28448:3;28469:5;28462:12;;28405:75;;;:::o;28486:269::-;28596:39;28627:7;28596:39;:::i;:::-;28657:91;28706:41;28730:16;28706:41;:::i;:::-;28698:6;28691:4;28685:11;28657:91;:::i;:::-;28651:4;28644:105;28562:193;28486:269;;;:::o;28761:73::-;28806:3;28761:73;:::o;28840:189::-;28917:32;;:::i;:::-;28958:65;29016:6;29008;29002:4;28958:65;:::i;:::-;28893:136;28840:189;;:::o;29035:186::-;29095:120;29112:3;29105:5;29102:14;29095:120;;;29166:39;29203:1;29196:5;29166:39;:::i;:::-;29139:1;29132:5;29128:13;29119:22;;29095:120;;;29035:186;;:::o;29227:543::-;29328:2;29323:3;29320:11;29317:446;;;29362:38;29394:5;29362:38;:::i;:::-;29446:29;29464:10;29446:29;:::i;:::-;29436:8;29432:44;29629:2;29617:10;29614:18;29611:49;;;29650:8;29635:23;;29611:49;29673:80;29729:22;29747:3;29729:22;:::i;:::-;29719:8;29715:37;29702:11;29673:80;:::i;:::-;29332:431;;29317:446;29227:543;;;:::o;29776:117::-;29830:8;29880:5;29874:4;29870:16;29849:37;;29776:117;;;;:::o;29899:169::-;29943:6;29976:51;30024:1;30020:6;30012:5;30009:1;30005:13;29976:51;:::i;:::-;29972:56;30057:4;30051;30047:15;30037:25;;29950:118;29899:169;;;;:::o;30073:295::-;30149:4;30295:29;30320:3;30314:4;30295:29;:::i;:::-;30287:37;;30357:3;30354:1;30350:11;30344:4;30341:21;30333:29;;30073:295;;;;:::o;30373:1395::-;30490:37;30523:3;30490:37;:::i;:::-;30592:18;30584:6;30581:30;30578:56;;;30614:18;;:::i;:::-;30578:56;30658:38;30690:4;30684:11;30658:38;:::i;:::-;30743:67;30803:6;30795;30789:4;30743:67;:::i;:::-;30837:1;30861:4;30848:17;;30893:2;30885:6;30882:14;30910:1;30905:618;;;;31567:1;31584:6;31581:77;;;31633:9;31628:3;31624:19;31618:26;31609:35;;31581:77;31684:67;31744:6;31737:5;31684:67;:::i;:::-;31678:4;31671:81;31540:222;30875:887;;30905:618;30957:4;30953:9;30945:6;30941:22;30991:37;31023:4;30991:37;:::i;:::-;31050:1;31064:208;31078:7;31075:1;31072:14;31064:208;;;31157:9;31152:3;31148:19;31142:26;31134:6;31127:42;31208:1;31200:6;31196:14;31186:24;;31255:2;31244:9;31240:18;31227:31;;31101:4;31098:1;31094:12;31089:17;;31064:208;;;31300:6;31291:7;31288:19;31285:179;;;31358:9;31353:3;31349:19;31343:26;31401:48;31443:4;31435:6;31431:17;31420:9;31401:48;:::i;:::-;31393:6;31386:64;31308:156;31285:179;31510:1;31506;31498:6;31494:14;31490:22;31484:4;31477:36;30912:611;;;30875:887;;30465:1303;;;30373:1395;;:::o;31774:180::-;31822:77;31819:1;31812:88;31919:4;31916:1;31909:15;31943:4;31940:1;31933:15;31960:305;32000:3;32019:20;32037:1;32019:20;:::i;:::-;32014:25;;32053:20;32071:1;32053:20;:::i;:::-;32048:25;;32207:1;32139:66;32135:74;32132:1;32129:81;32126:107;;;32213:18;;:::i;:::-;32126:107;32257:1;32254;32250:9;32243:16;;31960:305;;;;:::o;32271:191::-;32311:4;32331:20;32349:1;32331:20;:::i;:::-;32326:25;;32365:20;32383:1;32365:20;:::i;:::-;32360:25;;32404:1;32401;32398:8;32395:34;;;32409:18;;:::i;:::-;32395:34;32454:1;32451;32447:9;32439:17;;32271:191;;;;:::o;32468:236::-;32608:34;32604:1;32596:6;32592:14;32585:58;32677:19;32672:2;32664:6;32660:15;32653:44;32468:236;:::o;32710:366::-;32852:3;32873:67;32937:2;32932:3;32873:67;:::i;:::-;32866:74;;32949:93;33038:3;32949:93;:::i;:::-;33067:2;33062:3;33058:12;33051:19;;32710:366;;;:::o;33082:419::-;33248:4;33286:2;33275:9;33271:18;33263:26;;33335:9;33329:4;33325:20;33321:1;33310:9;33306:17;33299:47;33363:131;33489:4;33363:131;:::i;:::-;33355:139;;33082:419;;;:::o;33507:147::-;33608:11;33645:3;33630:18;;33507:147;;;;:::o;33660:114::-;;:::o;33780:398::-;33939:3;33960:83;34041:1;34036:3;33960:83;:::i;:::-;33953:90;;34052:93;34141:3;34052:93;:::i;:::-;34170:1;34165:3;34161:11;34154:18;;33780:398;;;:::o;34184:379::-;34368:3;34390:147;34533:3;34390:147;:::i;:::-;34383:154;;34554:3;34547:10;;34184:379;;;:::o;34569:176::-;34709:28;34705:1;34697:6;34693:14;34686:52;34569:176;:::o;34751:366::-;34893:3;34914:67;34978:2;34973:3;34914:67;:::i;:::-;34907:74;;34990:93;35079:3;34990:93;:::i;:::-;35108:2;35103:3;35099:12;35092:19;;34751:366;;;:::o;35123:419::-;35289:4;35327:2;35316:9;35312:18;35304:26;;35376:9;35370:4;35366:20;35362:1;35351:9;35347:17;35340:47;35404:131;35530:4;35404:131;:::i;:::-;35396:139;;35123:419;;;:::o;35548:228::-;35688:34;35684:1;35676:6;35672:14;35665:58;35757:11;35752:2;35744:6;35740:15;35733:36;35548:228;:::o;35782:366::-;35924:3;35945:67;36009:2;36004:3;35945:67;:::i;:::-;35938:74;;36021:93;36110:3;36021:93;:::i;:::-;36139:2;36134:3;36130:12;36123:19;;35782:366;;;:::o;36154:419::-;36320:4;36358:2;36347:9;36343:18;36335:26;;36407:9;36401:4;36397:20;36393:1;36382:9;36378:17;36371:47;36435:131;36561:4;36435:131;:::i;:::-;36427:139;;36154:419;;;:::o;36579:94::-;36612:8;36660:5;36656:2;36652:14;36631:35;;36579:94;;;:::o;36679:::-;36718:7;36747:20;36761:5;36747:20;:::i;:::-;36736:31;;36679:94;;;:::o;36779:100::-;36818:7;36847:26;36867:5;36847:26;:::i;:::-;36836:37;;36779:100;;;:::o;36885:157::-;36990:45;37010:24;37028:5;37010:24;:::i;:::-;36990:45;:::i;:::-;36985:3;36978:58;36885:157;;:::o;37048:79::-;37087:7;37116:5;37105:16;;37048:79;;;:::o;37133:157::-;37238:45;37258:24;37276:5;37258:24;:::i;:::-;37238:45;:::i;:::-;37233:3;37226:58;37133:157;;:::o;37296:397::-;37436:3;37451:75;37522:3;37513:6;37451:75;:::i;:::-;37551:2;37546:3;37542:12;37535:19;;37564:75;37635:3;37626:6;37564:75;:::i;:::-;37664:2;37659:3;37655:12;37648:19;;37684:3;37677:10;;37296:397;;;;;:::o;37699:229::-;37839:34;37835:1;37827:6;37823:14;37816:58;37908:12;37903:2;37895:6;37891:15;37884:37;37699:229;:::o;37934:366::-;38076:3;38097:67;38161:2;38156:3;38097:67;:::i;:::-;38090:74;;38173:93;38262:3;38173:93;:::i;:::-;38291:2;38286:3;38282:12;38275:19;;37934:366;;;:::o;38306:419::-;38472:4;38510:2;38499:9;38495:18;38487:26;;38559:9;38553:4;38549:20;38545:1;38534:9;38530:17;38523:47;38587:131;38713:4;38587:131;:::i;:::-;38579:139;;38306:419;;;:::o;38731:256::-;38843:3;38858:75;38929:3;38920:6;38858:75;:::i;:::-;38958:2;38953:3;38949:12;38942:19;;38978:3;38971:10;;38731:256;;;;:::o;38993:165::-;39133:17;39129:1;39121:6;39117:14;39110:41;38993:165;:::o;39164:366::-;39306:3;39327:67;39391:2;39386:3;39327:67;:::i;:::-;39320:74;;39403:93;39492:3;39403:93;:::i;:::-;39521:2;39516:3;39512:12;39505:19;;39164:366;;;:::o;39536:419::-;39702:4;39740:2;39729:9;39725:18;39717:26;;39789:9;39783:4;39779:20;39775:1;39764:9;39760:17;39753:47;39817:131;39943:4;39817:131;:::i;:::-;39809:139;;39536:419;;;:::o;39961:180::-;40009:77;40006:1;39999:88;40106:4;40103:1;40096:15;40130:4;40127:1;40120:15;40147:325;40204:6;40253:2;40241:9;40232:7;40228:23;40224:32;40221:119;;;40259:79;;:::i;:::-;40221:119;40379:1;40404:51;40447:7;40438:6;40427:9;40423:22;40404:51;:::i;:::-;40394:61;;40350:115;40147:325;;;;:::o;40478:233::-;40517:3;40540:24;40558:5;40540:24;:::i;:::-;40531:33;;40586:66;40579:5;40576:77;40573:103;;40656:18;;:::i;:::-;40573:103;40703:1;40696:5;40692:13;40685:20;;40478:233;;;:::o;40717:175::-;40857:27;40853:1;40845:6;40841:14;40834:51;40717:175;:::o;40898:366::-;41040:3;41061:67;41125:2;41120:3;41061:67;:::i;:::-;41054:74;;41137:93;41226:3;41137:93;:::i;:::-;41255:2;41250:3;41246:12;41239:19;;40898:366;;;:::o;41270:419::-;41436:4;41474:2;41463:9;41459:18;41451:26;;41523:9;41517:4;41513:20;41509:1;41498:9;41494:17;41487:47;41551:131;41677:4;41551:131;:::i;:::-;41543:139;;41270:419;;;:::o;41695:178::-;41835:30;41831:1;41823:6;41819:14;41812:54;41695:178;:::o;41879:366::-;42021:3;42042:67;42106:2;42101:3;42042:67;:::i;:::-;42035:74;;42118:93;42207:3;42118:93;:::i;:::-;42236:2;42231:3;42227:12;42220:19;;41879:366;;;:::o;42251:419::-;42417:4;42455:2;42444:9;42440:18;42432:26;;42504:9;42498:4;42494:20;42490:1;42479:9;42475:17;42468:47;42532:131;42658:4;42532:131;:::i;:::-;42524:139;;42251:419;;;:::o;42676:179::-;42816:31;42812:1;42804:6;42800:14;42793:55;42676:179;:::o;42861:366::-;43003:3;43024:67;43088:2;43083:3;43024:67;:::i;:::-;43017:74;;43100:93;43189:3;43100:93;:::i;:::-;43218:2;43213:3;43209:12;43202:19;;42861:366;;;:::o;43233:419::-;43399:4;43437:2;43426:9;43422:18;43414:26;;43486:9;43480:4;43476:20;43472:1;43461:9;43457:17;43450:47;43514:131;43640:4;43514:131;:::i;:::-;43506:139;;43233:419;;;:::o;43658:221::-;43798:34;43794:1;43786:6;43782:14;43775:58;43867:4;43862:2;43854:6;43850:15;43843:29;43658:221;:::o;43885:366::-;44027:3;44048:67;44112:2;44107:3;44048:67;:::i;:::-;44041:74;;44124:93;44213:3;44124:93;:::i;:::-;44242:2;44237:3;44233:12;44226:19;;43885:366;;;:::o;44257:419::-;44423:4;44461:2;44450:9;44446:18;44438:26;;44510:9;44504:4;44500:20;44496:1;44485:9;44481:17;44474:47;44538:131;44664:4;44538:131;:::i;:::-;44530:139;;44257:419;;;:::o;44682:169::-;44822:21;44818:1;44810:6;44806:14;44799:45;44682:169;:::o;44857:366::-;44999:3;45020:67;45084:2;45079:3;45020:67;:::i;:::-;45013:74;;45096:93;45185:3;45096:93;:::i;:::-;45214:2;45209:3;45205:12;45198:19;;44857:366;;;:::o;45229:419::-;45395:4;45433:2;45422:9;45418:18;45410:26;;45482:9;45476:4;45472:20;45468:1;45457:9;45453:17;45446:47;45510:131;45636:4;45510:131;:::i;:::-;45502:139;;45229:419;;;:::o;45654:348::-;45694:7;45717:20;45735:1;45717:20;:::i;:::-;45712:25;;45751:20;45769:1;45751:20;:::i;:::-;45746:25;;45939:1;45871:66;45867:74;45864:1;45861:81;45856:1;45849:9;45842:17;45838:105;45835:131;;;45946:18;;:::i;:::-;45835:131;45994:1;45991;45987:9;45976:20;;45654:348;;;;:::o;46008:224::-;46148:34;46144:1;46136:6;46132:14;46125:58;46217:7;46212:2;46204:6;46200:15;46193:32;46008:224;:::o;46238:366::-;46380:3;46401:67;46465:2;46460:3;46401:67;:::i;:::-;46394:74;;46477:93;46566:3;46477:93;:::i;:::-;46595:2;46590:3;46586:12;46579:19;;46238:366;;;:::o;46610:419::-;46776:4;46814:2;46803:9;46799:18;46791:26;;46863:9;46857:4;46853:20;46849:1;46838:9;46834:17;46827:47;46891:131;47017:4;46891:131;:::i;:::-;46883:139;;46610:419;;;:::o;47035:234::-;47175:34;47171:1;47163:6;47159:14;47152:58;47244:17;47239:2;47231:6;47227:15;47220:42;47035:234;:::o;47275:366::-;47417:3;47438:67;47502:2;47497:3;47438:67;:::i;:::-;47431:74;;47514:93;47603:3;47514:93;:::i;:::-;47632:2;47627:3;47623:12;47616:19;;47275:366;;;:::o;47647:419::-;47813:4;47851:2;47840:9;47836:18;47828:26;;47900:9;47894:4;47890:20;47886:1;47875:9;47871:17;47864:47;47928:131;48054:4;47928:131;:::i;:::-;47920:139;;47647:419;;;:::o;48072:148::-;48174:11;48211:3;48196:18;;48072:148;;;;:::o;48226:377::-;48332:3;48360:39;48393:5;48360:39;:::i;:::-;48415:89;48497:6;48492:3;48415:89;:::i;:::-;48408:96;;48513:52;48558:6;48553:3;48546:4;48539:5;48535:16;48513:52;:::i;:::-;48590:6;48585:3;48581:16;48574:23;;48336:267;48226:377;;;;:::o;48609:435::-;48789:3;48811:95;48902:3;48893:6;48811:95;:::i;:::-;48804:102;;48923:95;49014:3;49005:6;48923:95;:::i;:::-;48916:102;;49035:3;49028:10;;48609:435;;;;;:::o;49050:172::-;49190:24;49186:1;49178:6;49174:14;49167:48;49050:172;:::o;49228:366::-;49370:3;49391:67;49455:2;49450:3;49391:67;:::i;:::-;49384:74;;49467:93;49556:3;49467:93;:::i;:::-;49585:2;49580:3;49576:12;49569:19;;49228:366;;;:::o;49600:419::-;49766:4;49804:2;49793:9;49789:18;49781:26;;49853:9;49847:4;49843:20;49839:1;49828:9;49824:17;49817:47;49881:131;50007:4;49881:131;:::i;:::-;49873:139;;49600:419;;;:::o;50025:165::-;50165:17;50161:1;50153:6;50149:14;50142:41;50025:165;:::o;50196:366::-;50338:3;50359:67;50423:2;50418:3;50359:67;:::i;:::-;50352:74;;50435:93;50524:3;50435:93;:::i;:::-;50553:2;50548:3;50544:12;50537:19;;50196:366;;;:::o;50568:419::-;50734:4;50772:2;50761:9;50757:18;50749:26;;50821:9;50815:4;50811:20;50807:1;50796:9;50792:17;50785:47;50849:131;50975:4;50849:131;:::i;:::-;50841:139;;50568:419;;;:::o;50993:223::-;51133:34;51129:1;51121:6;51117:14;51110:58;51202:6;51197:2;51189:6;51185:15;51178:31;50993:223;:::o;51222:366::-;51364:3;51385:67;51449:2;51444:3;51385:67;:::i;:::-;51378:74;;51461:93;51550:3;51461:93;:::i;:::-;51579:2;51574:3;51570:12;51563:19;;51222:366;;;:::o;51594:419::-;51760:4;51798:2;51787:9;51783:18;51775:26;;51847:9;51841:4;51837:20;51833:1;51822:9;51818:17;51811:47;51875:131;52001:4;51875:131;:::i;:::-;51867:139;;51594:419;;;:::o;52019:175::-;52159:27;52155:1;52147:6;52143:14;52136:51;52019:175;:::o;52200:366::-;52342:3;52363:67;52427:2;52422:3;52363:67;:::i;:::-;52356:74;;52439:93;52528:3;52439:93;:::i;:::-;52557:2;52552:3;52548:12;52541:19;;52200:366;;;:::o;52572:419::-;52738:4;52776:2;52765:9;52761:18;52753:26;;52825:9;52819:4;52815:20;52811:1;52800:9;52796:17;52789:47;52853:131;52979:4;52853:131;:::i;:::-;52845:139;;52572:419;;;:::o;52997:220::-;53137:34;53133:1;53125:6;53121:14;53114:58;53206:3;53201:2;53193:6;53189:15;53182:28;52997:220;:::o;53223:366::-;53365:3;53386:67;53450:2;53445:3;53386:67;:::i;:::-;53379:74;;53462:93;53551:3;53462:93;:::i;:::-;53580:2;53575:3;53571:12;53564:19;;53223:366;;;:::o;53595:419::-;53761:4;53799:2;53788:9;53784:18;53776:26;;53848:9;53842:4;53838:20;53834:1;53823:9;53819:17;53812:47;53876:131;54002:4;53876:131;:::i;:::-;53868:139;;53595:419;;;:::o;54020:225::-;54160:34;54156:1;54148:6;54144:14;54137:58;54229:8;54224:2;54216:6;54212:15;54205:33;54020:225;:::o;54251:366::-;54393:3;54414:67;54478:2;54473:3;54414:67;:::i;:::-;54407:74;;54490:93;54579:3;54490:93;:::i;:::-;54608:2;54603:3;54599:12;54592:19;;54251:366;;;:::o;54623:419::-;54789:4;54827:2;54816:9;54812:18;54804:26;;54876:9;54870:4;54866:20;54862:1;54851:9;54847:17;54840:47;54904:131;55030:4;54904:131;:::i;:::-;54896:139;;54623:419;;;:::o;55048:175::-;55188:27;55184:1;55176:6;55172:14;55165:51;55048:175;:::o;55229:366::-;55371:3;55392:67;55456:2;55451:3;55392:67;:::i;:::-;55385:74;;55468:93;55557:3;55468:93;:::i;:::-;55586:2;55581:3;55577:12;55570:19;;55229:366;;;:::o;55601:419::-;55767:4;55805:2;55794:9;55790:18;55782:26;;55854:9;55848:4;55844:20;55840:1;55829:9;55825:17;55818:47;55882:131;56008:4;55882:131;:::i;:::-;55874:139;;55601:419;;;:::o;56026:167::-;56063:3;56086:22;56102:5;56086:22;:::i;:::-;56077:31;;56130:4;56123:5;56120:15;56117:41;;56138:18;;:::i;:::-;56117:41;56185:1;56178:5;56174:13;56167:20;;56026:167;;;:::o;56199:::-;56236:3;56259:22;56275:5;56259:22;:::i;:::-;56250:31;;56303:4;56296:5;56293:15;56290:41;;56311:18;;:::i;:::-;56290:41;56358:1;56351:5;56347:13;56340:20;;56199:167;;;:::o;56372:231::-;56512:34;56508:1;56500:6;56496:14;56489:58;56581:14;56576:2;56568:6;56564:15;56557:39;56372:231;:::o;56609:366::-;56751:3;56772:67;56836:2;56831:3;56772:67;:::i;:::-;56765:74;;56848:93;56937:3;56848:93;:::i;:::-;56966:2;56961:3;56957:12;56950:19;;56609:366;;;:::o;56981:419::-;57147:4;57185:2;57174:9;57170:18;57162:26;;57234:9;57228:4;57224:20;57220:1;57209:9;57205:17;57198:47;57262:131;57388:4;57262:131;:::i;:::-;57254:139;;56981:419;;;:::o;57406:224::-;57546:34;57542:1;57534:6;57530:14;57523:58;57615:7;57610:2;57602:6;57598:15;57591:32;57406:224;:::o;57636:366::-;57778:3;57799:67;57863:2;57858:3;57799:67;:::i;:::-;57792:74;;57875:93;57964:3;57875:93;:::i;:::-;57993:2;57988:3;57984:12;57977:19;;57636:366;;;:::o;58008:419::-;58174:4;58212:2;58201:9;58197:18;58189:26;;58261:9;58255:4;58251:20;58247:1;58236:9;58232:17;58225:47;58289:131;58415:4;58289:131;:::i;:::-;58281:139;;58008:419;;;:::o;58433:223::-;58573:34;58569:1;58561:6;58557:14;58550:58;58642:6;58637:2;58629:6;58625:15;58618:31;58433:223;:::o;58662:366::-;58804:3;58825:67;58889:2;58884:3;58825:67;:::i;:::-;58818:74;;58901:93;58990:3;58901:93;:::i;:::-;59019:2;59014:3;59010:12;59003:19;;58662:366;;;:::o;59034:419::-;59200:4;59238:2;59227:9;59223:18;59215:26;;59287:9;59281:4;59277:20;59273:1;59262:9;59258:17;59251:47;59315:131;59441:4;59315:131;:::i;:::-;59307:139;;59034:419;;;:::o;59459:175::-;59599:27;59595:1;59587:6;59583:14;59576:51;59459:175;:::o;59640:366::-;59782:3;59803:67;59867:2;59862:3;59803:67;:::i;:::-;59796:74;;59879:93;59968:3;59879:93;:::i;:::-;59997:2;59992:3;59988:12;59981:19;;59640:366;;;:::o;60012:419::-;60178:4;60216:2;60205:9;60201:18;60193:26;;60265:9;60259:4;60255:20;60251:1;60240:9;60236:17;60229:47;60293:131;60419:4;60293:131;:::i;:::-;60285:139;;60012:419;;;:::o;60437:237::-;60577:34;60573:1;60565:6;60561:14;60554:58;60646:20;60641:2;60633:6;60629:15;60622:45;60437:237;:::o;60680:366::-;60822:3;60843:67;60907:2;60902:3;60843:67;:::i;:::-;60836:74;;60919:93;61008:3;60919:93;:::i;:::-;61037:2;61032:3;61028:12;61021:19;;60680:366;;;:::o;61052:419::-;61218:4;61256:2;61245:9;61241:18;61233:26;;61305:9;61299:4;61295:20;61291:1;61280:9;61276:17;61269:47;61333:131;61459:4;61333:131;:::i;:::-;61325:139;;61052:419;;;:::o;61477:180::-;61525:77;61522:1;61515:88;61622:4;61619:1;61612:15;61646:4;61643:1;61636:15;61663:185;61703:1;61720:20;61738:1;61720:20;:::i;:::-;61715:25;;61754:20;61772:1;61754:20;:::i;:::-;61749:25;;61793:1;61783:35;;61798:18;;:::i;:::-;61783:35;61840:1;61837;61833:9;61828:14;;61663:185;;;;:::o;61854:176::-;61886:1;61903:20;61921:1;61903:20;:::i;:::-;61898:25;;61937:20;61955:1;61937:20;:::i;:::-;61932:25;;61976:1;61966:35;;61981:18;;:::i;:::-;61966:35;62022:1;62019;62015:9;62010:14;;61854:176;;;;:::o;62036:98::-;62087:6;62121:5;62115:12;62105:22;;62036:98;;;:::o;62140:168::-;62223:11;62257:6;62252:3;62245:19;62297:4;62292:3;62288:14;62273:29;;62140:168;;;;:::o;62314:360::-;62400:3;62428:38;62460:5;62428:38;:::i;:::-;62482:70;62545:6;62540:3;62482:70;:::i;:::-;62475:77;;62561:52;62606:6;62601:3;62594:4;62587:5;62583:16;62561:52;:::i;:::-;62638:29;62660:6;62638:29;:::i;:::-;62633:3;62629:39;62622:46;;62404:270;62314:360;;;;:::o;62680:640::-;62875:4;62913:3;62902:9;62898:19;62890:27;;62927:71;62995:1;62984:9;62980:17;62971:6;62927:71;:::i;:::-;63008:72;63076:2;63065:9;63061:18;63052:6;63008:72;:::i;:::-;63090;63158:2;63147:9;63143:18;63134:6;63090:72;:::i;:::-;63209:9;63203:4;63199:20;63194:2;63183:9;63179:18;63172:48;63237:76;63308:4;63299:6;63237:76;:::i;:::-;63229:84;;62680:640;;;;;;;:::o;63326:141::-;63382:5;63413:6;63407:13;63398:22;;63429:32;63455:5;63429:32;:::i;:::-;63326:141;;;;:::o;63473:349::-;63542:6;63591:2;63579:9;63570:7;63566:23;63562:32;63559:119;;;63597:79;;:::i;:::-;63559:119;63717:1;63742:63;63797:7;63788:6;63777:9;63773:22;63742:63;:::i;:::-;63732:73;;63688:127;63473:349;;;;:::o;63828:182::-;63968:34;63964:1;63956:6;63952:14;63945:58;63828:182;:::o;64016:366::-;64158:3;64179:67;64243:2;64238:3;64179:67;:::i;:::-;64172:74;;64255:93;64344:3;64255:93;:::i;:::-;64373:2;64368:3;64364:12;64357:19;;64016:366;;;:::o;64388:419::-;64554:4;64592:2;64581:9;64577:18;64569:26;;64641:9;64635:4;64631:20;64627:1;64616:9;64612:17;64605:47;64669:131;64795:4;64669:131;:::i;:::-;64661:139;;64388:419;;;:::o;64813:178::-;64953:30;64949:1;64941:6;64937:14;64930:54;64813:178;:::o;64997:366::-;65139:3;65160:67;65224:2;65219:3;65160:67;:::i;:::-;65153:74;;65236:93;65325:3;65236:93;:::i;:::-;65354:2;65349:3;65345:12;65338:19;;64997:366;;;:::o;65369:419::-;65535:4;65573:2;65562:9;65558:18;65550:26;;65622:9;65616:4;65612:20;65608:1;65597:9;65593:17;65586:47;65650:131;65776:4;65650:131;:::i;:::-;65642:139;;65369:419;;;:::o

Swarm Source

ipfs://1418ed416a8053a019fd2599d83b40a4dd2f2c44f964c5decc7fc7962f69f5ba
Loading...
Loading
Loading...
Loading
[ 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.