ETH Price: $2,426.02 (-2.00%)
 

Overview

Max Total Supply

32 HIP

Holders

16

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 HIP
0xf9986fe26b14e6b34813c96a1ae865b3d2c9420a
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:
HippoStreet

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

    __  __________  ____  ____ 
   / / / /  _/ __ \/ __ \/ __ \
  / /_/ // // /_/ / /_/ / / / /
 / __  // // ____/ ____/ /_/ / 
/_/ /_/___/_/   /_/    \____/  
                               
   _______________  __________________
  / ___/_  __/ __ \/ ____/ ____/_  __/
  \__ \ / / / /_/ / __/ / __/   / /   
 ___/ // / / _, _/ /___/ /___  / /    
/____//_/ /_/ |_/_____/_____/ /_/     
                                      

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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




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

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

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

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

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

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

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

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

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

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

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

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




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





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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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




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

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



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

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

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

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

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





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




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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).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 {}
}




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

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

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





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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

contract HippoStreet is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    string public baseExtension = "";
    uint256 public _reserved = 50;
    uint256 public _maxSupply = 3333;
    uint256 private _price = 0.03 ether; 
    bool public _paused = false;
    mapping(address => bool) public whitelisted;

    // team
    // x0
    address t1 = 0xC17689A1405e4443145a8c5626fB3d057910C091;
    // to
    address t2 = 0x851b4C101E02FEd42d7ff14Dc967d72f2f0f9cc5;
    // ti
    address t3 = 0xd70C752Cb4f015485D96e5632641a94428f7628F;
    
    constructor(string memory baseURI) ERC721("HippoStreet", "HIP")  {
        setBaseURI(baseURI);

        //mint to team
        // to
        _safeMint(t2, 0);
        // ti
        _safeMint(t3, 1);
        // x0
        _safeMint(t1, 2);
        _safeMint(t1, 3);

    }

    function mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                            "Sale paused" );
        require( num < 11,                            "You can mint a maximum of 10" );
        require( supply + num < _maxSupply - _reserved,     "Exceeds maximum supply" );
        require( msg.value >= _price * num,           "Ether sent is not correct" );

        for(uint256 i; i < num; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }

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

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

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

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved supply" );

        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        }

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }
    
    function whitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = true;
    }
 
    function removeWhitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = false;
    }
    
    function setReserved(uint256 _newReserved) public onlyOwner {
        _reserved = _newReserved;
    }
    
    function setMaxSupply(uint256 _newMaxSupply) public onlyOwner {
        _maxSupply = _newMaxSupply;
    }
    

    function withdrawAll() public payable onlyOwner {
        uint256 _each = address(this).balance / 3;
        require(payable(t1).send(_each));
        require(payable(t2).send(_each));
        require(payable(t3).send(_each));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260405180602001604052806000815250600c90805190602001906200002b92919062000ec6565b506032600d55610d05600e55666a94d74f430000600f556000601060006101000a81548160ff02191690831515021790555073c17689a1405e4443145a8c5626fb3d057910c091601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073851b4c101e02fed42d7ff14dc967d72f2f0f9cc5601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d70c752cb4f015485d96e5632641a94428f7628f601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016957600080fd5b5060405162005eeb38038062005eeb83398181016040528101906200018f91906200103d565b6040518060400160405280600b81526020017f486970706f5374726565740000000000000000000000000000000000000000008152506040518060400160405280600381526020017f484950000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200021392919062000ec6565b5080600190805190602001906200022c92919062000ec6565b5050506200024f620002436200033b60201b60201c565b6200034360201b60201c565b62000260816200040960201b60201c565b62000295601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000620004b460201b60201c565b620002ca601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004b460201b60201c565b620002ff601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002620004b460201b60201c565b62000334601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003620004b460201b60201c565b5062001725565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004196200033b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200043f620004da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000498576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048f9062001290565b60405180910390fd5b80600b9080519060200190620004b092919062000ec6565b5050565b620004d68282604051806020016040528060008152506200050460201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200051683836200057260201b60201c565b6200052b60008484846200075860201b60201c565b6200056d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005649062001208565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005dc906200126e565b60405180910390fd5b620005f6816200091260201b60201c565b1562000639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000630906200122a565b60405180910390fd5b6200064d600083836200097e60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200069f91906200133e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007868473ffffffffffffffffffffffffffffffffffffffff1662000ac560201b62001e941760201c565b1562000905578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007b86200033b60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007dc9493929190620011b4565b602060405180830381600087803b158015620007f757600080fd5b505af19250505080156200082b57506040513d601f19601f820116820180604052508101906200082891906200100b565b60015b620008b4573d80600081146200085e576040519150601f19603f3d011682016040523d82523d6000602084013e62000863565b606091505b50600081511415620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062001208565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200090a565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200099683838362000ad860201b62001ea71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009e357620009dd8162000add60201b60201c565b62000a2b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000a2a5762000a29838262000b2660201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a785762000a728162000ca360201b60201c565b62000ac0565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000abf5762000abe828262000d7f60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b408462000e0b60201b6200125c1760201c565b62000b4c91906200139b565b905060006007600084815260200190815260200160002054905081811462000c32576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000cb991906200139b565b905060006009600084815260200190815260200160002054905060006008838154811062000cec5762000ceb6200156f565b5b90600052602060002001549050806008838154811062000d115762000d106200156f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d635762000d6262001540565b5b6001900381819060005260206000200160009055905550505050565b600062000d978362000e0b60201b6200125c1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e76906200124c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000ed49062001476565b90600052602060002090601f01602090048101928262000ef8576000855562000f44565b82601f1062000f1357805160ff191683800117855562000f44565b8280016001018555821562000f44579182015b8281111562000f4357825182559160200191906001019062000f26565b5b50905062000f53919062000f57565b5090565b5b8082111562000f7257600081600090555060010162000f58565b5090565b600062000f8d62000f8784620012db565b620012b2565b90508281526020810184848401111562000fac5762000fab620015d2565b5b62000fb984828562001440565b509392505050565b60008151905062000fd2816200170b565b92915050565b600082601f83011262000ff05762000fef620015cd565b5b81516200100284826020860162000f76565b91505092915050565b600060208284031215620010245762001023620015dc565b5b6000620010348482850162000fc1565b91505092915050565b600060208284031215620010565762001055620015dc565b5b600082015167ffffffffffffffff811115620010775762001076620015d7565b5b620010858482850162000fd8565b91505092915050565b6200109981620013d6565b82525050565b6000620010ac8262001311565b620010b881856200131c565b9350620010ca81856020860162001440565b620010d581620015e1565b840191505092915050565b6000620010ef6032836200132d565b9150620010fc82620015f2565b604082019050919050565b600062001116601c836200132d565b9150620011238262001641565b602082019050919050565b60006200113d602a836200132d565b91506200114a826200166a565b604082019050919050565b6000620011646020836200132d565b91506200117182620016b9565b602082019050919050565b60006200118b6020836200132d565b91506200119882620016e2565b602082019050919050565b620011ae8162001436565b82525050565b6000608082019050620011cb60008301876200108e565b620011da60208301866200108e565b620011e96040830185620011a3565b8181036060830152620011fd81846200109f565b905095945050505050565b600060208201905081810360008301526200122381620010e0565b9050919050565b60006020820190508181036000830152620012458162001107565b9050919050565b6000602082019050818103600083015262001267816200112e565b9050919050565b60006020820190508181036000830152620012898162001155565b9050919050565b60006020820190508181036000830152620012ab816200117c565b9050919050565b6000620012be620012d1565b9050620012cc8282620014ac565b919050565b6000604051905090565b600067ffffffffffffffff821115620012f957620012f86200159e565b5b6200130482620015e1565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200134b8262001436565b9150620013588362001436565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001390576200138f620014e2565b5b828201905092915050565b6000620013a88262001436565b9150620013b58362001436565b925082821015620013cb57620013ca620014e2565b5b828203905092915050565b6000620013e38262001416565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200146057808201518184015260208101905062001443565b8381111562001470576000848401525b50505050565b600060028204905060018216806200148f57607f821691505b60208210811415620014a657620014a562001511565b5b50919050565b620014b782620015e1565b810181811067ffffffffffffffff82111715620014d957620014d86200159e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200171681620013ea565b81146200172257600080fd5b50565b6147b680620017356000396000f3fe60806040526004361061021a5760003560e01c80636aaa571d11610123578063a0712d68116100ab578063ca8001441161006f578063ca800144146107b3578063d936547e146107dc578063da3ef23f14610819578063e985e9c514610842578063f2fde38b1461087f5761021a565b8063a0712d68146106dd578063a22cb465146106f9578063b88d4fde14610722578063c66828621461074b578063c87b56dd146107765761021a565b8063853828b6116100f2578063853828b6146106295780638da5cb5b1461063357806391b7f5ed1461065e57806395d89b411461068757806398d5fdca146106b25761021a565b80636aaa571d146105815780636f8b44b0146105ac57806370a08231146105d5578063715018a6146106125761021a565b80632d6e71b6116101a6578063438b630011610175578063438b6300146104785780634a4c560d146104b55780634f6ccce7146104de57806355f804b31461051b5780636352211e146105445761021a565b80632d6e71b6146103c05780632f745c59146103e957806330cc7ae01461042657806342842e0e1461044f5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806316c61ccc1461031657806318160ddd1461034157806322f4596f1461036c57806323b872dd146103975761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613348565b6108a8565b604051610253919061393f565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e919061331b565b610922565b005b34801561029157600080fd5b5061029a6109bb565b6040516102a7919061395a565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906133eb565b610a4d565b6040516102e491906138b6565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906132db565b610ad2565b005b34801561032257600080fd5b5061032b610bea565b604051610338919061393f565b60405180910390f35b34801561034d57600080fd5b50610356610bfd565b6040516103639190613c5c565b60405180910390f35b34801561037857600080fd5b50610381610c0a565b60405161038e9190613c5c565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b991906131c5565b610c10565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906133eb565b610c70565b005b3480156103f557600080fd5b50610410600480360381019061040b91906132db565b610cf6565b60405161041d9190613c5c565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613158565b610d9b565b005b34801561045b57600080fd5b50610476600480360381019061047191906131c5565b610e72565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613158565b610e92565b6040516104ac919061391d565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613158565b610f40565b005b3480156104ea57600080fd5b50610505600480360381019061050091906133eb565b611017565b6040516105129190613c5c565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906133a2565b611088565b005b34801561055057600080fd5b5061056b600480360381019061056691906133eb565b61111e565b60405161057891906138b6565b60405180910390f35b34801561058d57600080fd5b506105966111d0565b6040516105a39190613c5c565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906133eb565b6111d6565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613158565b61125c565b6040516106099190613c5c565b60405180910390f35b34801561061e57600080fd5b50610627611314565b005b61063161139c565b005b34801561063f57600080fd5b5061064861154c565b60405161065591906138b6565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906133eb565b611576565b005b34801561069357600080fd5b5061069c6115fc565b6040516106a9919061395a565b60405180910390f35b3480156106be57600080fd5b506106c761168e565b6040516106d49190613c5c565b60405180910390f35b6106f760048036038101906106f291906133eb565b611698565b005b34801561070557600080fd5b50610720600480360381019061071b919061329b565b61181b565b005b34801561072e57600080fd5b5061074960048036038101906107449190613218565b61199c565b005b34801561075757600080fd5b506107606119fe565b60405161076d919061395a565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906133eb565b611a8c565b6040516107aa919061395a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906132db565b611b33565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190613158565b611c52565b604051610810919061393f565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906133a2565b611c72565b005b34801561084e57600080fd5b5061086960048036038101906108649190613185565b611d08565b604051610876919061393f565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613158565b611d9c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091b575061091a82611eac565b5b9050919050565b61092a611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661094861154c565b73ffffffffffffffffffffffffffffffffffffffff161461099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590613b3c565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109ca90613f45565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690613f45565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000610a5882611f96565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613b1c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610add8261111e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613b9c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d611f8e565b73ffffffffffffffffffffffffffffffffffffffff161480610b9c5750610b9b81610b96611f8e565b611d08565b5b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613a7c565b60405180910390fd5b610be58383612002565b505050565b601060009054906101000a900460ff1681565b6000600880549050905090565b600e5481565b610c21610c1b611f8e565b826120bb565b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613bfc565b60405180910390fd5b610c6b838383612199565b505050565b610c78611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610c9661154c565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613b3c565b60405180910390fd5b80600d8190555050565b6000610d018361125c565b8210610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061399c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610da3611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610dc161154c565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90613b3c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e8d8383836040518060200160405280600081525061199c565b505050565b60606000610e9f8361125c565b905060008167ffffffffffffffff811115610ebd57610ebc61410d565b5b604051908082528060200260200182016040528015610eeb5781602001602082028036833780820191505090505b50905060005b82811015610f3557610f038582610cf6565b828281518110610f1657610f156140de565b5b6020026020010181815250508080610f2d90613fa8565b915050610ef1565b508092505050919050565b610f48611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610f6661154c565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613b3c565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611021610bfd565b8210611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990613c1c565b60405180910390fd5b60088281548110611076576110756140de565b5b90600052602060002001549050919050565b611090611f8e565b73ffffffffffffffffffffffffffffffffffffffff166110ae61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613b3c565b60405180910390fd5b80600b908051906020019061111a929190612f6c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90613abc565b60405180910390fd5b80915050919050565b600d5481565b6111de611f8e565b73ffffffffffffffffffffffffffffffffffffffff166111fc61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990613b3c565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613a9c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131c611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661133a61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613b3c565b60405180910390fd5b61139a60006123f5565b565b6113a4611f8e565b73ffffffffffffffffffffffffffffffffffffffff166113c261154c565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613b3c565b60405180910390fd5b60006003476114279190613dd0565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061148957600080fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506114e957600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061154957600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157e611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661159c61154c565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613b3c565b60405180910390fd5b80600f8190555050565b60606001805461160b90613f45565b80601f016020809104026020016040519081016040528092919081815260200182805461163790613f45565b80156116845780601f1061165957610100808354040283529160200191611684565b820191906000526020600020905b81548152906001019060200180831161166757829003601f168201915b5050505050905090565b6000600f54905090565b60006116a2610bfd565b9050601060009054906101000a900460ff16156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb9061397c565b60405180910390fd5b600b8210611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90613c3c565b60405180910390fd5b600d54600e546117479190613e5b565b82826117539190613d7a565b10611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613bbc565b60405180910390fd5b81600f546117a19190613e01565b3410156117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90613bdc565b60405180910390fd5b60005b82811015611816576118033382846117fe9190613d7a565b6124bb565b808061180e90613fa8565b9150506117e6565b505050565b611823611f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613a3c565b60405180910390fd5b806005600061189e611f8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661194b611f8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611990919061393f565b60405180910390a35050565b6119ad6119a7611f8e565b836120bb565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390613bfc565b60405180910390fd5b6119f8848484846124d9565b50505050565b600c8054611a0b90613f45565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3790613f45565b8015611a845780601f10611a5957610100808354040283529160200191611a84565b820191906000526020600020905b815481529060010190602001808311611a6757829003601f168201915b505050505081565b6060611a9782611f96565b611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613b7c565b60405180910390fd5b6000611ae0612535565b90506000815111611b005760405180602001604052806000815250611b2b565b80611b0a846125c7565b604051602001611b1b929190613892565b6040516020818303038152906040525b915050919050565b611b3b611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611b5961154c565b73ffffffffffffffffffffffffffffffffffffffff1614611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613b3c565b60405180910390fd5b600d54811115611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613adc565b60405180910390fd5b6000611bfe610bfd565b905060005b82811015611c3357611c20848284611c1b9190613d7a565b6124bb565b8080611c2b90613fa8565b915050611c03565b5081600d6000828254611c469190613e5b565b92505081905550505050565b60116020528060005260406000206000915054906101000a900460ff1681565b611c7a611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611c9861154c565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613b3c565b60405180910390fd5b80600c9080519060200190611d04929190612f6c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611da4611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611dc261154c565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613b3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906139dc565b60405180910390fd5b611e91816123f5565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f875750611f8682612728565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120758361111e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c682611f96565b612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90613a5c565b60405180910390fd5b60006121108361111e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217f57508373ffffffffffffffffffffffffffffffffffffffff1661216784610a4d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f8185611d08565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b98261111e565b73ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613b5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690613a1c565b60405180910390fd5b61228a838383612792565b612295600082612002565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e59190613e5b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233c9190613d7a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124d58282604051806020016040528060008152506128a6565b5050565b6124e4848484612199565b6124f084848484612901565b61252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906139bc565b60405180910390fd5b50505050565b6060600b805461254490613f45565b80601f016020809104026020016040519081016040528092919081815260200182805461257090613f45565b80156125bd5780601f10612592576101008083540402835291602001916125bd565b820191906000526020600020905b8154815290600101906020018083116125a057829003601f168201915b5050505050905090565b6060600082141561260f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612723565b600082905060005b6000821461264157808061262a90613fa8565b915050600a8261263a9190613dd0565b9150612617565b60008167ffffffffffffffff81111561265d5761265c61410d565b5b6040519080825280601f01601f19166020018201604052801561268f5781602001600182028036833780820191505090505b5090505b6000851461271c576001826126a89190613e5b565b9150600a856126b79190613ff1565b60306126c39190613d7a565b60f81b8183815181106126d9576126d86140de565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127159190613dd0565b9450612693565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61279d838383611ea7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e0576127db81612a98565b61281f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461281e5761281d8382612ae1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128625761285d81612c4e565b6128a1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128a05761289f8282612d1f565b5b5b505050565b6128b08383612d9e565b6128bd6000848484612901565b6128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906139bc565b60405180910390fd5b505050565b60006129228473ffffffffffffffffffffffffffffffffffffffff16611e94565b15612a8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261294b611f8e565b8786866040518563ffffffff1660e01b815260040161296d94939291906138d1565b602060405180830381600087803b15801561298757600080fd5b505af19250505080156129b857506040513d601f19601f820116820180604052508101906129b59190613375565b60015b612a3b573d80600081146129e8576040519150601f19603f3d011682016040523d82523d6000602084013e6129ed565b606091505b50600081511415612a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2a906139bc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a90565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612aee8461125c565b612af89190613e5b565b9050600060076000848152602001908152602001600020549050818114612bdd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c629190613e5b565b9050600060096000848152602001908152602001600020549050600060088381548110612c9257612c916140de565b5b906000526020600020015490508060088381548110612cb457612cb36140de565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d0357612d026140af565b5b6001900381819060005260206000200160009055905550505050565b6000612d2a8361125c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0590613afc565b60405180910390fd5b612e1781611f96565b15612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e906139fc565b60405180910390fd5b612e6360008383612792565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb39190613d7a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f7890613f45565b90600052602060002090601f016020900481019282612f9a5760008555612fe1565b82601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee9190612ff2565b5090565b5b8082111561300b576000816000905550600101612ff3565b5090565b600061302261301d84613c9c565b613c77565b90508281526020810184848401111561303e5761303d614141565b5b613049848285613f03565b509392505050565b600061306461305f84613ccd565b613c77565b9050828152602081018484840111156130805761307f614141565b5b61308b848285613f03565b509392505050565b6000813590506130a281614724565b92915050565b6000813590506130b78161473b565b92915050565b6000813590506130cc81614752565b92915050565b6000815190506130e181614752565b92915050565b600082601f8301126130fc576130fb61413c565b5b813561310c84826020860161300f565b91505092915050565b600082601f83011261312a5761312961413c565b5b813561313a848260208601613051565b91505092915050565b60008135905061315281614769565b92915050565b60006020828403121561316e5761316d61414b565b5b600061317c84828501613093565b91505092915050565b6000806040838503121561319c5761319b61414b565b5b60006131aa85828601613093565b92505060206131bb85828601613093565b9150509250929050565b6000806000606084860312156131de576131dd61414b565b5b60006131ec86828701613093565b93505060206131fd86828701613093565b925050604061320e86828701613143565b9150509250925092565b600080600080608085870312156132325761323161414b565b5b600061324087828801613093565b945050602061325187828801613093565b935050604061326287828801613143565b925050606085013567ffffffffffffffff81111561328357613282614146565b5b61328f878288016130e7565b91505092959194509250565b600080604083850312156132b2576132b161414b565b5b60006132c085828601613093565b92505060206132d1858286016130a8565b9150509250929050565b600080604083850312156132f2576132f161414b565b5b600061330085828601613093565b925050602061331185828601613143565b9150509250929050565b6000602082840312156133315761333061414b565b5b600061333f848285016130a8565b91505092915050565b60006020828403121561335e5761335d61414b565b5b600061336c848285016130bd565b91505092915050565b60006020828403121561338b5761338a61414b565b5b6000613399848285016130d2565b91505092915050565b6000602082840312156133b8576133b761414b565b5b600082013567ffffffffffffffff8111156133d6576133d5614146565b5b6133e284828501613115565b91505092915050565b6000602082840312156134015761340061414b565b5b600061340f84828501613143565b91505092915050565b60006134248383613874565b60208301905092915050565b61343981613e8f565b82525050565b600061344a82613d0e565b6134548185613d3c565b935061345f83613cfe565b8060005b838110156134905781516134778882613418565b975061348283613d2f565b925050600181019050613463565b5085935050505092915050565b6134a681613ea1565b82525050565b60006134b782613d19565b6134c18185613d4d565b93506134d1818560208601613f12565b6134da81614150565b840191505092915050565b60006134f082613d24565b6134fa8185613d5e565b935061350a818560208601613f12565b61351381614150565b840191505092915050565b600061352982613d24565b6135338185613d6f565b9350613543818560208601613f12565b80840191505092915050565b600061355c600b83613d5e565b915061356782614161565b602082019050919050565b600061357f602b83613d5e565b915061358a8261418a565b604082019050919050565b60006135a2603283613d5e565b91506135ad826141d9565b604082019050919050565b60006135c5602683613d5e565b91506135d082614228565b604082019050919050565b60006135e8601c83613d5e565b91506135f382614277565b602082019050919050565b600061360b602483613d5e565b9150613616826142a0565b604082019050919050565b600061362e601983613d5e565b9150613639826142ef565b602082019050919050565b6000613651602c83613d5e565b915061365c82614318565b604082019050919050565b6000613674603883613d5e565b915061367f82614367565b604082019050919050565b6000613697602a83613d5e565b91506136a2826143b6565b604082019050919050565b60006136ba602983613d5e565b91506136c582614405565b604082019050919050565b60006136dd601783613d5e565b91506136e882614454565b602082019050919050565b6000613700602083613d5e565b915061370b8261447d565b602082019050919050565b6000613723602c83613d5e565b915061372e826144a6565b604082019050919050565b6000613746602083613d5e565b9150613751826144f5565b602082019050919050565b6000613769602983613d5e565b91506137748261451e565b604082019050919050565b600061378c602f83613d5e565b91506137978261456d565b604082019050919050565b60006137af602183613d5e565b91506137ba826145bc565b604082019050919050565b60006137d2601683613d5e565b91506137dd8261460b565b602082019050919050565b60006137f5601983613d5e565b915061380082614634565b602082019050919050565b6000613818603183613d5e565b91506138238261465d565b604082019050919050565b600061383b602c83613d5e565b9150613846826146ac565b604082019050919050565b600061385e601c83613d5e565b9150613869826146fb565b602082019050919050565b61387d81613ef9565b82525050565b61388c81613ef9565b82525050565b600061389e828561351e565b91506138aa828461351e565b91508190509392505050565b60006020820190506138cb6000830184613430565b92915050565b60006080820190506138e66000830187613430565b6138f36020830186613430565b6139006040830185613883565b818103606083015261391281846134ac565b905095945050505050565b60006020820190508181036000830152613937818461343f565b905092915050565b6000602082019050613954600083018461349d565b92915050565b6000602082019050818103600083015261397481846134e5565b905092915050565b600060208201905081810360008301526139958161354f565b9050919050565b600060208201905081810360008301526139b581613572565b9050919050565b600060208201905081810360008301526139d581613595565b9050919050565b600060208201905081810360008301526139f5816135b8565b9050919050565b60006020820190508181036000830152613a15816135db565b9050919050565b60006020820190508181036000830152613a35816135fe565b9050919050565b60006020820190508181036000830152613a5581613621565b9050919050565b60006020820190508181036000830152613a7581613644565b9050919050565b60006020820190508181036000830152613a9581613667565b9050919050565b60006020820190508181036000830152613ab58161368a565b9050919050565b60006020820190508181036000830152613ad5816136ad565b9050919050565b60006020820190508181036000830152613af5816136d0565b9050919050565b60006020820190508181036000830152613b15816136f3565b9050919050565b60006020820190508181036000830152613b3581613716565b9050919050565b60006020820190508181036000830152613b5581613739565b9050919050565b60006020820190508181036000830152613b758161375c565b9050919050565b60006020820190508181036000830152613b958161377f565b9050919050565b60006020820190508181036000830152613bb5816137a2565b9050919050565b60006020820190508181036000830152613bd5816137c5565b9050919050565b60006020820190508181036000830152613bf5816137e8565b9050919050565b60006020820190508181036000830152613c158161380b565b9050919050565b60006020820190508181036000830152613c358161382e565b9050919050565b60006020820190508181036000830152613c5581613851565b9050919050565b6000602082019050613c716000830184613883565b92915050565b6000613c81613c92565b9050613c8d8282613f77565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb757613cb661410d565b5b613cc082614150565b9050602081019050919050565b600067ffffffffffffffff821115613ce857613ce761410d565b5b613cf182614150565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8582613ef9565b9150613d9083613ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc557613dc4614022565b5b828201905092915050565b6000613ddb82613ef9565b9150613de683613ef9565b925082613df657613df5614051565b5b828204905092915050565b6000613e0c82613ef9565b9150613e1783613ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5057613e4f614022565b5b828202905092915050565b6000613e6682613ef9565b9150613e7183613ef9565b925082821015613e8457613e83614022565b5b828203905092915050565b6000613e9a82613ed9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f30578082015181840152602081019050613f15565b83811115613f3f576000848401525b50505050565b60006002820490506001821680613f5d57607f821691505b60208210811415613f7157613f70614080565b5b50919050565b613f8082614150565b810181811067ffffffffffffffff82111715613f9f57613f9e61410d565b5b80604052505050565b6000613fb382613ef9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fe657613fe5614022565b5b600182019050919050565b6000613ffc82613ef9565b915061400783613ef9565b92508261401757614016614051565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313000000000600082015250565b61472d81613e8f565b811461473857600080fd5b50565b61474481613ea1565b811461474f57600080fd5b50565b61475b81613ead565b811461476657600080fd5b50565b61477281613ef9565b811461477d57600080fd5b5056fea26469706673582212207a6392a8ce409ac510e9f8be82be7b85fab98647a046dae64b93ef2320e3acd464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5750366778756577684a327a6545656e64433153687463667445547775584b757a6673583242786d776569452f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636aaa571d11610123578063a0712d68116100ab578063ca8001441161006f578063ca800144146107b3578063d936547e146107dc578063da3ef23f14610819578063e985e9c514610842578063f2fde38b1461087f5761021a565b8063a0712d68146106dd578063a22cb465146106f9578063b88d4fde14610722578063c66828621461074b578063c87b56dd146107765761021a565b8063853828b6116100f2578063853828b6146106295780638da5cb5b1461063357806391b7f5ed1461065e57806395d89b411461068757806398d5fdca146106b25761021a565b80636aaa571d146105815780636f8b44b0146105ac57806370a08231146105d5578063715018a6146106125761021a565b80632d6e71b6116101a6578063438b630011610175578063438b6300146104785780634a4c560d146104b55780634f6ccce7146104de57806355f804b31461051b5780636352211e146105445761021a565b80632d6e71b6146103c05780632f745c59146103e957806330cc7ae01461042657806342842e0e1461044f5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806316c61ccc1461031657806318160ddd1461034157806322f4596f1461036c57806323b872dd146103975761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613348565b6108a8565b604051610253919061393f565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e919061331b565b610922565b005b34801561029157600080fd5b5061029a6109bb565b6040516102a7919061395a565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906133eb565b610a4d565b6040516102e491906138b6565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906132db565b610ad2565b005b34801561032257600080fd5b5061032b610bea565b604051610338919061393f565b60405180910390f35b34801561034d57600080fd5b50610356610bfd565b6040516103639190613c5c565b60405180910390f35b34801561037857600080fd5b50610381610c0a565b60405161038e9190613c5c565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b991906131c5565b610c10565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906133eb565b610c70565b005b3480156103f557600080fd5b50610410600480360381019061040b91906132db565b610cf6565b60405161041d9190613c5c565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613158565b610d9b565b005b34801561045b57600080fd5b50610476600480360381019061047191906131c5565b610e72565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613158565b610e92565b6040516104ac919061391d565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613158565b610f40565b005b3480156104ea57600080fd5b50610505600480360381019061050091906133eb565b611017565b6040516105129190613c5c565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906133a2565b611088565b005b34801561055057600080fd5b5061056b600480360381019061056691906133eb565b61111e565b60405161057891906138b6565b60405180910390f35b34801561058d57600080fd5b506105966111d0565b6040516105a39190613c5c565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906133eb565b6111d6565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613158565b61125c565b6040516106099190613c5c565b60405180910390f35b34801561061e57600080fd5b50610627611314565b005b61063161139c565b005b34801561063f57600080fd5b5061064861154c565b60405161065591906138b6565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906133eb565b611576565b005b34801561069357600080fd5b5061069c6115fc565b6040516106a9919061395a565b60405180910390f35b3480156106be57600080fd5b506106c761168e565b6040516106d49190613c5c565b60405180910390f35b6106f760048036038101906106f291906133eb565b611698565b005b34801561070557600080fd5b50610720600480360381019061071b919061329b565b61181b565b005b34801561072e57600080fd5b5061074960048036038101906107449190613218565b61199c565b005b34801561075757600080fd5b506107606119fe565b60405161076d919061395a565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906133eb565b611a8c565b6040516107aa919061395a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906132db565b611b33565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190613158565b611c52565b604051610810919061393f565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906133a2565b611c72565b005b34801561084e57600080fd5b5061086960048036038101906108649190613185565b611d08565b604051610876919061393f565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613158565b611d9c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091b575061091a82611eac565b5b9050919050565b61092a611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661094861154c565b73ffffffffffffffffffffffffffffffffffffffff161461099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590613b3c565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109ca90613f45565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690613f45565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000610a5882611f96565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613b1c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610add8261111e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613b9c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d611f8e565b73ffffffffffffffffffffffffffffffffffffffff161480610b9c5750610b9b81610b96611f8e565b611d08565b5b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613a7c565b60405180910390fd5b610be58383612002565b505050565b601060009054906101000a900460ff1681565b6000600880549050905090565b600e5481565b610c21610c1b611f8e565b826120bb565b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613bfc565b60405180910390fd5b610c6b838383612199565b505050565b610c78611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610c9661154c565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613b3c565b60405180910390fd5b80600d8190555050565b6000610d018361125c565b8210610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061399c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610da3611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610dc161154c565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90613b3c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e8d8383836040518060200160405280600081525061199c565b505050565b60606000610e9f8361125c565b905060008167ffffffffffffffff811115610ebd57610ebc61410d565b5b604051908082528060200260200182016040528015610eeb5781602001602082028036833780820191505090505b50905060005b82811015610f3557610f038582610cf6565b828281518110610f1657610f156140de565b5b6020026020010181815250508080610f2d90613fa8565b915050610ef1565b508092505050919050565b610f48611f8e565b73ffffffffffffffffffffffffffffffffffffffff16610f6661154c565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613b3c565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611021610bfd565b8210611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990613c1c565b60405180910390fd5b60088281548110611076576110756140de565b5b90600052602060002001549050919050565b611090611f8e565b73ffffffffffffffffffffffffffffffffffffffff166110ae61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613b3c565b60405180910390fd5b80600b908051906020019061111a929190612f6c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90613abc565b60405180910390fd5b80915050919050565b600d5481565b6111de611f8e565b73ffffffffffffffffffffffffffffffffffffffff166111fc61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990613b3c565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613a9c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131c611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661133a61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613b3c565b60405180910390fd5b61139a60006123f5565b565b6113a4611f8e565b73ffffffffffffffffffffffffffffffffffffffff166113c261154c565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613b3c565b60405180910390fd5b60006003476114279190613dd0565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061148957600080fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506114e957600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061154957600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157e611f8e565b73ffffffffffffffffffffffffffffffffffffffff1661159c61154c565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613b3c565b60405180910390fd5b80600f8190555050565b60606001805461160b90613f45565b80601f016020809104026020016040519081016040528092919081815260200182805461163790613f45565b80156116845780601f1061165957610100808354040283529160200191611684565b820191906000526020600020905b81548152906001019060200180831161166757829003601f168201915b5050505050905090565b6000600f54905090565b60006116a2610bfd565b9050601060009054906101000a900460ff16156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb9061397c565b60405180910390fd5b600b8210611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90613c3c565b60405180910390fd5b600d54600e546117479190613e5b565b82826117539190613d7a565b10611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613bbc565b60405180910390fd5b81600f546117a19190613e01565b3410156117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90613bdc565b60405180910390fd5b60005b82811015611816576118033382846117fe9190613d7a565b6124bb565b808061180e90613fa8565b9150506117e6565b505050565b611823611f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613a3c565b60405180910390fd5b806005600061189e611f8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661194b611f8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611990919061393f565b60405180910390a35050565b6119ad6119a7611f8e565b836120bb565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390613bfc565b60405180910390fd5b6119f8848484846124d9565b50505050565b600c8054611a0b90613f45565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3790613f45565b8015611a845780601f10611a5957610100808354040283529160200191611a84565b820191906000526020600020905b815481529060010190602001808311611a6757829003601f168201915b505050505081565b6060611a9782611f96565b611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613b7c565b60405180910390fd5b6000611ae0612535565b90506000815111611b005760405180602001604052806000815250611b2b565b80611b0a846125c7565b604051602001611b1b929190613892565b6040516020818303038152906040525b915050919050565b611b3b611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611b5961154c565b73ffffffffffffffffffffffffffffffffffffffff1614611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613b3c565b60405180910390fd5b600d54811115611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613adc565b60405180910390fd5b6000611bfe610bfd565b905060005b82811015611c3357611c20848284611c1b9190613d7a565b6124bb565b8080611c2b90613fa8565b915050611c03565b5081600d6000828254611c469190613e5b565b92505081905550505050565b60116020528060005260406000206000915054906101000a900460ff1681565b611c7a611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611c9861154c565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613b3c565b60405180910390fd5b80600c9080519060200190611d04929190612f6c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611da4611f8e565b73ffffffffffffffffffffffffffffffffffffffff16611dc261154c565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613b3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906139dc565b60405180910390fd5b611e91816123f5565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f875750611f8682612728565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120758361111e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c682611f96565b612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90613a5c565b60405180910390fd5b60006121108361111e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217f57508373ffffffffffffffffffffffffffffffffffffffff1661216784610a4d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f8185611d08565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b98261111e565b73ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613b5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690613a1c565b60405180910390fd5b61228a838383612792565b612295600082612002565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e59190613e5b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233c9190613d7a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124d58282604051806020016040528060008152506128a6565b5050565b6124e4848484612199565b6124f084848484612901565b61252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906139bc565b60405180910390fd5b50505050565b6060600b805461254490613f45565b80601f016020809104026020016040519081016040528092919081815260200182805461257090613f45565b80156125bd5780601f10612592576101008083540402835291602001916125bd565b820191906000526020600020905b8154815290600101906020018083116125a057829003601f168201915b5050505050905090565b6060600082141561260f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612723565b600082905060005b6000821461264157808061262a90613fa8565b915050600a8261263a9190613dd0565b9150612617565b60008167ffffffffffffffff81111561265d5761265c61410d565b5b6040519080825280601f01601f19166020018201604052801561268f5781602001600182028036833780820191505090505b5090505b6000851461271c576001826126a89190613e5b565b9150600a856126b79190613ff1565b60306126c39190613d7a565b60f81b8183815181106126d9576126d86140de565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127159190613dd0565b9450612693565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61279d838383611ea7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e0576127db81612a98565b61281f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461281e5761281d8382612ae1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128625761285d81612c4e565b6128a1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128a05761289f8282612d1f565b5b5b505050565b6128b08383612d9e565b6128bd6000848484612901565b6128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906139bc565b60405180910390fd5b505050565b60006129228473ffffffffffffffffffffffffffffffffffffffff16611e94565b15612a8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261294b611f8e565b8786866040518563ffffffff1660e01b815260040161296d94939291906138d1565b602060405180830381600087803b15801561298757600080fd5b505af19250505080156129b857506040513d601f19601f820116820180604052508101906129b59190613375565b60015b612a3b573d80600081146129e8576040519150601f19603f3d011682016040523d82523d6000602084013e6129ed565b606091505b50600081511415612a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2a906139bc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a90565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612aee8461125c565b612af89190613e5b565b9050600060076000848152602001908152602001600020549050818114612bdd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c629190613e5b565b9050600060096000848152602001908152602001600020549050600060088381548110612c9257612c916140de565b5b906000526020600020015490508060088381548110612cb457612cb36140de565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d0357612d026140af565b5b6001900381819060005260206000200160009055905550505050565b6000612d2a8361125c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0590613afc565b60405180910390fd5b612e1781611f96565b15612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e906139fc565b60405180910390fd5b612e6360008383612792565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb39190613d7a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f7890613f45565b90600052602060002090601f016020900481019282612f9a5760008555612fe1565b82601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee9190612ff2565b5090565b5b8082111561300b576000816000905550600101612ff3565b5090565b600061302261301d84613c9c565b613c77565b90508281526020810184848401111561303e5761303d614141565b5b613049848285613f03565b509392505050565b600061306461305f84613ccd565b613c77565b9050828152602081018484840111156130805761307f614141565b5b61308b848285613f03565b509392505050565b6000813590506130a281614724565b92915050565b6000813590506130b78161473b565b92915050565b6000813590506130cc81614752565b92915050565b6000815190506130e181614752565b92915050565b600082601f8301126130fc576130fb61413c565b5b813561310c84826020860161300f565b91505092915050565b600082601f83011261312a5761312961413c565b5b813561313a848260208601613051565b91505092915050565b60008135905061315281614769565b92915050565b60006020828403121561316e5761316d61414b565b5b600061317c84828501613093565b91505092915050565b6000806040838503121561319c5761319b61414b565b5b60006131aa85828601613093565b92505060206131bb85828601613093565b9150509250929050565b6000806000606084860312156131de576131dd61414b565b5b60006131ec86828701613093565b93505060206131fd86828701613093565b925050604061320e86828701613143565b9150509250925092565b600080600080608085870312156132325761323161414b565b5b600061324087828801613093565b945050602061325187828801613093565b935050604061326287828801613143565b925050606085013567ffffffffffffffff81111561328357613282614146565b5b61328f878288016130e7565b91505092959194509250565b600080604083850312156132b2576132b161414b565b5b60006132c085828601613093565b92505060206132d1858286016130a8565b9150509250929050565b600080604083850312156132f2576132f161414b565b5b600061330085828601613093565b925050602061331185828601613143565b9150509250929050565b6000602082840312156133315761333061414b565b5b600061333f848285016130a8565b91505092915050565b60006020828403121561335e5761335d61414b565b5b600061336c848285016130bd565b91505092915050565b60006020828403121561338b5761338a61414b565b5b6000613399848285016130d2565b91505092915050565b6000602082840312156133b8576133b761414b565b5b600082013567ffffffffffffffff8111156133d6576133d5614146565b5b6133e284828501613115565b91505092915050565b6000602082840312156134015761340061414b565b5b600061340f84828501613143565b91505092915050565b60006134248383613874565b60208301905092915050565b61343981613e8f565b82525050565b600061344a82613d0e565b6134548185613d3c565b935061345f83613cfe565b8060005b838110156134905781516134778882613418565b975061348283613d2f565b925050600181019050613463565b5085935050505092915050565b6134a681613ea1565b82525050565b60006134b782613d19565b6134c18185613d4d565b93506134d1818560208601613f12565b6134da81614150565b840191505092915050565b60006134f082613d24565b6134fa8185613d5e565b935061350a818560208601613f12565b61351381614150565b840191505092915050565b600061352982613d24565b6135338185613d6f565b9350613543818560208601613f12565b80840191505092915050565b600061355c600b83613d5e565b915061356782614161565b602082019050919050565b600061357f602b83613d5e565b915061358a8261418a565b604082019050919050565b60006135a2603283613d5e565b91506135ad826141d9565b604082019050919050565b60006135c5602683613d5e565b91506135d082614228565b604082019050919050565b60006135e8601c83613d5e565b91506135f382614277565b602082019050919050565b600061360b602483613d5e565b9150613616826142a0565b604082019050919050565b600061362e601983613d5e565b9150613639826142ef565b602082019050919050565b6000613651602c83613d5e565b915061365c82614318565b604082019050919050565b6000613674603883613d5e565b915061367f82614367565b604082019050919050565b6000613697602a83613d5e565b91506136a2826143b6565b604082019050919050565b60006136ba602983613d5e565b91506136c582614405565b604082019050919050565b60006136dd601783613d5e565b91506136e882614454565b602082019050919050565b6000613700602083613d5e565b915061370b8261447d565b602082019050919050565b6000613723602c83613d5e565b915061372e826144a6565b604082019050919050565b6000613746602083613d5e565b9150613751826144f5565b602082019050919050565b6000613769602983613d5e565b91506137748261451e565b604082019050919050565b600061378c602f83613d5e565b91506137978261456d565b604082019050919050565b60006137af602183613d5e565b91506137ba826145bc565b604082019050919050565b60006137d2601683613d5e565b91506137dd8261460b565b602082019050919050565b60006137f5601983613d5e565b915061380082614634565b602082019050919050565b6000613818603183613d5e565b91506138238261465d565b604082019050919050565b600061383b602c83613d5e565b9150613846826146ac565b604082019050919050565b600061385e601c83613d5e565b9150613869826146fb565b602082019050919050565b61387d81613ef9565b82525050565b61388c81613ef9565b82525050565b600061389e828561351e565b91506138aa828461351e565b91508190509392505050565b60006020820190506138cb6000830184613430565b92915050565b60006080820190506138e66000830187613430565b6138f36020830186613430565b6139006040830185613883565b818103606083015261391281846134ac565b905095945050505050565b60006020820190508181036000830152613937818461343f565b905092915050565b6000602082019050613954600083018461349d565b92915050565b6000602082019050818103600083015261397481846134e5565b905092915050565b600060208201905081810360008301526139958161354f565b9050919050565b600060208201905081810360008301526139b581613572565b9050919050565b600060208201905081810360008301526139d581613595565b9050919050565b600060208201905081810360008301526139f5816135b8565b9050919050565b60006020820190508181036000830152613a15816135db565b9050919050565b60006020820190508181036000830152613a35816135fe565b9050919050565b60006020820190508181036000830152613a5581613621565b9050919050565b60006020820190508181036000830152613a7581613644565b9050919050565b60006020820190508181036000830152613a9581613667565b9050919050565b60006020820190508181036000830152613ab58161368a565b9050919050565b60006020820190508181036000830152613ad5816136ad565b9050919050565b60006020820190508181036000830152613af5816136d0565b9050919050565b60006020820190508181036000830152613b15816136f3565b9050919050565b60006020820190508181036000830152613b3581613716565b9050919050565b60006020820190508181036000830152613b5581613739565b9050919050565b60006020820190508181036000830152613b758161375c565b9050919050565b60006020820190508181036000830152613b958161377f565b9050919050565b60006020820190508181036000830152613bb5816137a2565b9050919050565b60006020820190508181036000830152613bd5816137c5565b9050919050565b60006020820190508181036000830152613bf5816137e8565b9050919050565b60006020820190508181036000830152613c158161380b565b9050919050565b60006020820190508181036000830152613c358161382e565b9050919050565b60006020820190508181036000830152613c5581613851565b9050919050565b6000602082019050613c716000830184613883565b92915050565b6000613c81613c92565b9050613c8d8282613f77565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb757613cb661410d565b5b613cc082614150565b9050602081019050919050565b600067ffffffffffffffff821115613ce857613ce761410d565b5b613cf182614150565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8582613ef9565b9150613d9083613ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc557613dc4614022565b5b828201905092915050565b6000613ddb82613ef9565b9150613de683613ef9565b925082613df657613df5614051565b5b828204905092915050565b6000613e0c82613ef9565b9150613e1783613ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5057613e4f614022565b5b828202905092915050565b6000613e6682613ef9565b9150613e7183613ef9565b925082821015613e8457613e83614022565b5b828203905092915050565b6000613e9a82613ed9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f30578082015181840152602081019050613f15565b83811115613f3f576000848401525b50505050565b60006002820490506001821680613f5d57607f821691505b60208210811415613f7157613f70614080565b5b50919050565b613f8082614150565b810181811067ffffffffffffffff82111715613f9f57613f9e61410d565b5b80604052505050565b6000613fb382613ef9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fe657613fe5614022565b5b600182019050919050565b6000613ffc82613ef9565b915061400783613ef9565b92508261401757614016614051565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313000000000600082015250565b61472d81613e8f565b811461473857600080fd5b50565b61474481613ea1565b811461474f57600080fd5b50565b61475b81613ead565b811461476657600080fd5b50565b61477281613ef9565b811461477d57600080fd5b5056fea26469706673582212207a6392a8ce409ac510e9f8be82be7b85fab98647a046dae64b93ef2320e3acd464736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5750366778756577684a327a6545656e64433153687463667445547775584b757a6673583242786d776569452f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmWP6gxuewhJ2zeEendC1ShtcftETwuXKuzfsX2BxmweiE/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d5750366778756577684a327a6545656e644331536874636674455477
Arg [4] : 75584b757a6673583242786d776569452f000000000000000000000000000000


Deployed Bytecode Sourcemap

42294:3449:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33954:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44963:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21068:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22627:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22150:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42571:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34594:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42489:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23517:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45267:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34262:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45153:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23927:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43724:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45049:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34784:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44297:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20762:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42453:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45382:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20492:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41665:94;;;;;;;;;;;;;:::i;:::-;;45503:237;;;:::i;:::-;;41014:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44074:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21237:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44547:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43187:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22920:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24183:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42414:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21412:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44636:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42605:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44411:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23286:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41914:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33954:224;34056:4;34095:35;34080:50;;;:11;:50;;;;:90;;;;34134:36;34158:11;34134:23;:36::i;:::-;34080:90;34073:97;;33954:224;;;:::o;44963:74::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45026:3:::1;45016:7;;:13;;;;;;;;;;;;;;;;;;44963:74:::0;:::o;21068:100::-;21122:13;21155:5;21148:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21068:100;:::o;22627:221::-;22703:7;22731:16;22739:7;22731;:16::i;:::-;22723:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22816:15;:24;22832:7;22816:24;;;;;;;;;;;;;;;;;;;;;22809:31;;22627:221;;;:::o;22150:411::-;22231:13;22247:23;22262:7;22247:14;:23::i;:::-;22231:39;;22295:5;22289:11;;:2;:11;;;;22281:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22389:5;22373:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22398:37;22415:5;22422:12;:10;:12::i;:::-;22398:16;:37::i;:::-;22373:62;22351:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22532:21;22541:2;22545:7;22532:8;:21::i;:::-;22220:341;22150:411;;:::o;42571:27::-;;;;;;;;;;;;;:::o;34594:113::-;34655:7;34682:10;:17;;;;34675:24;;34594:113;:::o;42489:32::-;;;;:::o;23517:339::-;23712:41;23731:12;:10;:12::i;:::-;23745:7;23712:18;:41::i;:::-;23704:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23820:28;23830:4;23836:2;23840:7;23820:9;:28::i;:::-;23517:339;;;:::o;45267:103::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45350:12:::1;45338:9;:24;;;;45267:103:::0;:::o;34262:256::-;34359:7;34395:23;34412:5;34395:16;:23::i;:::-;34387:5;:31;34379:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34484:12;:19;34497:5;34484:19;;;;;;;;;;;;;;;:26;34504:5;34484:26;;;;;;;;;;;;34477:33;;34262:256;;;;:::o;45153:102::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45242:5:::1;45221:11;:18;45233:5;45221:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45153:102:::0;:::o;23927:185::-;24065:39;24082:4;24088:2;24092:7;24065:39;;;;;;;;;;;;:16;:39::i;:::-;23927:185;;;:::o;43724:342::-;43783:16;43812:18;43833:17;43843:6;43833:9;:17::i;:::-;43812:38;;43863:25;43905:10;43891:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43863:53;;43931:9;43927:106;43946:10;43942:1;:14;43927:106;;;43991:30;44011:6;44019:1;43991:19;:30::i;:::-;43977:8;43986:1;43977:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43958:3;;;;;:::i;:::-;;;;43927:106;;;;44050:8;44043:15;;;;43724:342;;;:::o;45049:95::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45132:4:::1;45111:11;:18;45123:5;45111:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;45049:95:::0;:::o;34784:233::-;34859:7;34895:30;:28;:30::i;:::-;34887:5;:38;34879:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34992:10;35003:5;34992:17;;;;;;;;:::i;:::-;;;;;;;;;;34985:24;;34784:233;;;:::o;44297:102::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44384:7:::1;44368:13;:23;;;;;;;;;;;;:::i;:::-;;44297:102:::0;:::o;20762:239::-;20834:7;20854:13;20870:7;:16;20878:7;20870:16;;;;;;;;;;;;;;;;;;;;;20854:32;;20922:1;20905:19;;:5;:19;;;;20897:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20988:5;20981:12;;;20762:239;;;:::o;42453:29::-;;;;:::o;45382:107::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45468:13:::1;45455:10;:26;;;;45382:107:::0;:::o;20492:208::-;20564:7;20609:1;20592:19;;:5;:19;;;;20584:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20676:9;:16;20686:5;20676:16;;;;;;;;;;;;;;;;20669:23;;20492:208;;;:::o;41665:94::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41730:21:::1;41748:1;41730:9;:21::i;:::-;41665:94::o:0;45503:237::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45562:13:::1;45602:1;45578:21;:25;;;;:::i;:::-;45562:41;;45630:2;;;;;;;;;;;45622:16;;:23;45639:5;45622:23;;;;;;;;;;;;;;;;;;;;;;;45614:32;;;::::0;::::1;;45673:2;;;;;;;;;;;45665:16;;:23;45682:5;45665:23;;;;;;;;;;;;;;;;;;;;;;;45657:32;;;::::0;::::1;;45716:2;;;;;;;;;;;45708:16;;:23;45725:5;45708:23;;;;;;;;;;;;;;;;;;;;;;;45700:32;;;::::0;::::1;;45551:189;45503:237::o:0;41014:87::-;41060:7;41087:6;;;;;;;;;;;41080:13;;41014:87;:::o;44074:93::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44150:9:::1;44141:6;:18;;;;44074:93:::0;:::o;21237:104::-;21293:13;21326:7;21319:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21237:104;:::o;44547:81::-;44588:7;44614:6;;44607:13;;44547:81;:::o;43187:529::-;43240:14;43257:13;:11;:13::i;:::-;43240:30;;43291:7;;;;;;;;;;;43290:8;43281:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43368:2;43362:3;:8;43353:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;43479:9;;43466:10;;:22;;;;:::i;:::-;43460:3;43451:6;:12;;;;:::i;:::-;:37;43442:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;43562:3;43553:6;;:12;;;;:::i;:::-;43540:9;:25;;43531:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43623:9;43619:90;43638:3;43634:1;:7;43619:90;;;43662:35;43673:10;43694:1;43685:6;:10;;;;:::i;:::-;43662:9;:35::i;:::-;43643:3;;;;;:::i;:::-;;;;43619:90;;;;43229:487;43187:529;:::o;22920:295::-;23035:12;:10;:12::i;:::-;23023:24;;:8;:24;;;;23015:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23135:8;23090:18;:32;23109:12;:10;:12::i;:::-;23090:32;;;;;;;;;;;;;;;:42;23123:8;23090:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23188:8;23159:48;;23174:12;:10;:12::i;:::-;23159:48;;;23198:8;23159:48;;;;;;:::i;:::-;;;;;;;;22920:295;;:::o;24183:328::-;24358:41;24377:12;:10;:12::i;:::-;24391:7;24358:18;:41::i;:::-;24350:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24464:39;24478:4;24484:2;24488:7;24497:5;24464:13;:39::i;:::-;24183:328;;;;:::o;42414:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21412:334::-;21485:13;21519:16;21527:7;21519;:16::i;:::-;21511:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21600:21;21624:10;:8;:10::i;:::-;21600:34;;21676:1;21658:7;21652:21;:25;:86;;;;;;;;;;;;;;;;;21704:7;21713:18;:7;:16;:18::i;:::-;21687:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21652:86;21645:93;;;21412:334;;;:::o;44636:319::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44736:9:::1;;44725:7;:20;;44716:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44787:14;44804:13;:11;:13::i;:::-;44787:30;;44832:9;44828:87;44847:7;44843:1;:11;44828:87;;;44875:28;44886:3;44900:1;44891:6;:10;;;;:::i;:::-;44875:9;:28::i;:::-;44856:3;;;;;:::i;:::-;;;;44828:87;;;;44940:7;44927:9;;:20;;;;;;;:::i;:::-;;;;;;;;44705:250;44636:319:::0;;:::o;42605:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;44411:128::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44514:17:::1;44498:13;:33;;;;;;;;;;;;:::i;:::-;;44411:128:::0;:::o;23286:164::-;23383:4;23407:18;:25;23426:5;23407:25;;;;;;;;;;;;;;;:35;23433:8;23407:35;;;;;;;;;;;;;;;;;;;;;;;;;23400:42;;23286:164;;;;:::o;41914:192::-;41245:12;:10;:12::i;:::-;41234:23;;:7;:5;:7::i;:::-;:23;;;41226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42023:1:::1;42003:22;;:8;:22;;;;41995:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42079:19;42089:8;42079:9;:19::i;:::-;41914:192:::0;:::o;8158:387::-;8218:4;8426:12;8493:7;8481:20;8473:28;;8536:1;8529:4;:8;8522:15;;;8158:387;;;:::o;32117:126::-;;;;:::o;20123:305::-;20225:4;20277:25;20262:40;;;:11;:40;;;;:105;;;;20334:33;20319:48;;;:11;:48;;;;20262:105;:158;;;;20384:36;20408:11;20384:23;:36::i;:::-;20262:158;20242:178;;20123:305;;;:::o;15817:98::-;15870:7;15897:10;15890:17;;15817:98;:::o;26021:127::-;26086:4;26138:1;26110:30;;:7;:16;26118:7;26110:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26103:37;;26021:127;;;:::o;30003:174::-;30105:2;30078:15;:24;30094:7;30078:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30161:7;30157:2;30123:46;;30132:23;30147:7;30132:14;:23::i;:::-;30123:46;;;;;;;;;;;;30003:174;;:::o;26315:348::-;26408:4;26433:16;26441:7;26433;:16::i;:::-;26425:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26509:13;26525:23;26540:7;26525:14;:23::i;:::-;26509:39;;26578:5;26567:16;;:7;:16;;;:51;;;;26611:7;26587:31;;:20;26599:7;26587:11;:20::i;:::-;:31;;;26567:51;:87;;;;26622:32;26639:5;26646:7;26622:16;:32::i;:::-;26567:87;26559:96;;;26315:348;;;;:::o;29307:578::-;29466:4;29439:31;;:23;29454:7;29439:14;:23::i;:::-;:31;;;29431:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29549:1;29535:16;;:2;:16;;;;29527:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29605:39;29626:4;29632:2;29636:7;29605:20;:39::i;:::-;29709:29;29726:1;29730:7;29709:8;:29::i;:::-;29770:1;29751:9;:15;29761:4;29751:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29799:1;29782:9;:13;29792:2;29782:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29830:2;29811:7;:16;29819:7;29811:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29869:7;29865:2;29850:27;;29859:4;29850:27;;;;;;;;;;;;29307:578;;;:::o;42114:173::-;42170:16;42189:6;;;;;;;;;;;42170:25;;42215:8;42206:6;;:17;;;;;;;;;;;;;;;;;;42270:8;42239:40;;42260:8;42239:40;;;;;;;;;;;;42159:128;42114:173;:::o;27005:110::-;27081:26;27091:2;27095:7;27081:26;;;;;;;;;;;;:9;:26::i;:::-;27005:110;;:::o;25393:315::-;25550:28;25560:4;25566:2;25570:7;25550:9;:28::i;:::-;25597:48;25620:4;25626:2;25630:7;25639:5;25597:22;:48::i;:::-;25589:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25393:315;;;;:::o;44175:114::-;44235:13;44268;44261:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44175:114;:::o;16261:723::-;16317:13;16547:1;16538:5;:10;16534:53;;;16565:10;;;;;;;;;;;;;;;;;;;;;16534:53;16597:12;16612:5;16597:20;;16628:14;16653:78;16668:1;16660:4;:9;16653:78;;16686:8;;;;;:::i;:::-;;;;16717:2;16709:10;;;;;:::i;:::-;;;16653:78;;;16741:19;16773:6;16763:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16741:39;;16791:154;16807:1;16798:5;:10;16791:154;;16835:1;16825:11;;;;;:::i;:::-;;;16902:2;16894:5;:10;;;;:::i;:::-;16881:2;:24;;;;:::i;:::-;16868:39;;16851:6;16858;16851:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16931:2;16922:11;;;;;:::i;:::-;;;16791:154;;;16969:6;16955:21;;;;;16261:723;;;;:::o;18726:157::-;18811:4;18850:25;18835:40;;;:11;:40;;;;18828:47;;18726:157;;;:::o;35630:589::-;35774:45;35801:4;35807:2;35811:7;35774:26;:45::i;:::-;35852:1;35836:18;;:4;:18;;;35832:187;;;35871:40;35903:7;35871:31;:40::i;:::-;35832:187;;;35941:2;35933:10;;:4;:10;;;35929:90;;35960:47;35993:4;35999:7;35960:32;:47::i;:::-;35929:90;35832:187;36047:1;36033:16;;:2;:16;;;36029:183;;;36066:45;36103:7;36066:36;:45::i;:::-;36029:183;;;36139:4;36133:10;;:2;:10;;;36129:83;;36160:40;36188:2;36192:7;36160:27;:40::i;:::-;36129:83;36029:183;35630:589;;;:::o;27342:321::-;27472:18;27478:2;27482:7;27472:5;:18::i;:::-;27523:54;27554:1;27558:2;27562:7;27571:5;27523:22;:54::i;:::-;27501:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27342:321;;;:::o;30742:803::-;30897:4;30918:15;:2;:13;;;:15::i;:::-;30914:624;;;30970:2;30954:36;;;30991:12;:10;:12::i;:::-;31005:4;31011:7;31020:5;30954:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30950:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31217:1;31200:6;:13;:18;31196:272;;;31243:60;;;;;;;;;;:::i;:::-;;;;;;;;31196:272;31418:6;31412:13;31403:6;31399:2;31395:15;31388:38;30950:533;31087:45;;;31077:55;;;:6;:55;;;;31070:62;;;;;30914:624;31522:4;31515:11;;30742:803;;;;;;;:::o;36942:164::-;37046:10;:17;;;;37019:15;:24;37035:7;37019:24;;;;;;;;;;;:44;;;;37074:10;37090:7;37074:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36942:164;:::o;37733:988::-;37999:22;38049:1;38024:22;38041:4;38024:16;:22::i;:::-;:26;;;;:::i;:::-;37999:51;;38061:18;38082:17;:26;38100:7;38082:26;;;;;;;;;;;;38061:47;;38229:14;38215:10;:28;38211:328;;38260:19;38282:12;:18;38295:4;38282:18;;;;;;;;;;;;;;;:34;38301:14;38282:34;;;;;;;;;;;;38260:56;;38366:11;38333:12;:18;38346:4;38333:18;;;;;;;;;;;;;;;:30;38352:10;38333:30;;;;;;;;;;;:44;;;;38483:10;38450:17;:30;38468:11;38450:30;;;;;;;;;;;:43;;;;38245:294;38211:328;38635:17;:26;38653:7;38635:26;;;;;;;;;;;38628:33;;;38679:12;:18;38692:4;38679:18;;;;;;;;;;;;;;;:34;38698:14;38679:34;;;;;;;;;;;38672:41;;;37814:907;;37733:988;;:::o;39016:1079::-;39269:22;39314:1;39294:10;:17;;;;:21;;;;:::i;:::-;39269:46;;39326:18;39347:15;:24;39363:7;39347:24;;;;;;;;;;;;39326:45;;39698:19;39720:10;39731:14;39720:26;;;;;;;;:::i;:::-;;;;;;;;;;39698:48;;39784:11;39759:10;39770;39759:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39895:10;39864:15;:28;39880:11;39864:28;;;;;;;;;;;:41;;;;40036:15;:24;40052:7;40036:24;;;;;;;;;;;40029:31;;;40071:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39087:1008;;;39016:1079;:::o;36520:221::-;36605:14;36622:20;36639:2;36622:16;:20::i;:::-;36605:37;;36680:7;36653:12;:16;36666:2;36653:16;;;;;;;;;;;;;;;:24;36670:6;36653:24;;;;;;;;;;;:34;;;;36727:6;36698:17;:26;36716:7;36698:26;;;;;;;;;;;:35;;;;36594:147;36520:221;;:::o;27999:382::-;28093:1;28079:16;;:2;:16;;;;28071:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28152:16;28160:7;28152;:16::i;:::-;28151:17;28143:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28214:45;28243:1;28247:2;28251:7;28214:20;:45::i;:::-;28289:1;28272:9;:13;28282:2;28272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28320:2;28301:7;:16;28309:7;28301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28365:7;28361:2;28340:33;;28357:1;28340:33;;;;;;;;;;;;27999:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:::-;17380:3;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17477:93;17566:3;17477:93;:::i;:::-;17595:2;17590:3;17586:12;17579:19;;17238:366;;;:::o;17610:::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:::-;18124:3;18145:67;18209:2;18204:3;18145:67;:::i;:::-;18138:74;;18221:93;18310:3;18221:93;:::i;:::-;18339:2;18334:3;18330:12;18323:19;;17982:366;;;:::o;18354:108::-;18431:24;18449:5;18431:24;:::i;:::-;18426:3;18419:37;18354:108;;:::o;18468:118::-;18555:24;18573:5;18555:24;:::i;:::-;18550:3;18543:37;18468:118;;:::o;18592:435::-;18772:3;18794:95;18885:3;18876:6;18794:95;:::i;:::-;18787:102;;18906:95;18997:3;18988:6;18906:95;:::i;:::-;18899:102;;19018:3;19011:10;;18592:435;;;;;:::o;19033:222::-;19126:4;19164:2;19153:9;19149:18;19141:26;;19177:71;19245:1;19234:9;19230:17;19221:6;19177:71;:::i;:::-;19033:222;;;;:::o;19261:640::-;19456:4;19494:3;19483:9;19479:19;19471:27;;19508:71;19576:1;19565:9;19561:17;19552:6;19508:71;:::i;:::-;19589:72;19657:2;19646:9;19642:18;19633:6;19589:72;:::i;:::-;19671;19739:2;19728:9;19724:18;19715:6;19671:72;:::i;:::-;19790:9;19784:4;19780:20;19775:2;19764:9;19760:18;19753:48;19818:76;19889:4;19880:6;19818:76;:::i;:::-;19810:84;;19261:640;;;;;;;:::o;19907:373::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:108;20268:4;20259:6;20165:108;:::i;:::-;20157:116;;19907:373;;;;:::o;20286:210::-;20373:4;20411:2;20400:9;20396:18;20388:26;;20424:65;20486:1;20475:9;20471:17;20462:6;20424:65;:::i;:::-;20286:210;;;;:::o;20502:313::-;20615:4;20653:2;20642:9;20638:18;20630:26;;20702:9;20696:4;20692:20;20688:1;20677:9;20673:17;20666:47;20730:78;20803:4;20794:6;20730:78;:::i;:::-;20722:86;;20502:313;;;;:::o;20821:419::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:131;21228:4;21102:131;:::i;:::-;21094:139;;20821:419;;;:::o;21246:::-;21412:4;21450:2;21439:9;21435:18;21427:26;;21499:9;21493:4;21489:20;21485:1;21474:9;21470:17;21463:47;21527:131;21653:4;21527:131;:::i;:::-;21519:139;;21246:419;;;:::o;21671:::-;21837:4;21875:2;21864:9;21860:18;21852:26;;21924:9;21918:4;21914:20;21910:1;21899:9;21895:17;21888:47;21952:131;22078:4;21952:131;:::i;:::-;21944:139;;21671:419;;;:::o;22096:::-;22262:4;22300:2;22289:9;22285:18;22277:26;;22349:9;22343:4;22339:20;22335:1;22324:9;22320:17;22313:47;22377:131;22503:4;22377:131;:::i;:::-;22369:139;;22096:419;;;:::o;22521:::-;22687:4;22725:2;22714:9;22710:18;22702:26;;22774:9;22768:4;22764:20;22760:1;22749:9;22745:17;22738:47;22802:131;22928:4;22802:131;:::i;:::-;22794:139;;22521:419;;;:::o;22946:::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;22946:419;;;:::o;23371:::-;23537:4;23575:2;23564:9;23560:18;23552:26;;23624:9;23618:4;23614:20;23610:1;23599:9;23595:17;23588:47;23652:131;23778:4;23652:131;:::i;:::-;23644:139;;23371:419;;;:::o;23796:::-;23962:4;24000:2;23989:9;23985:18;23977:26;;24049:9;24043:4;24039:20;24035:1;24024:9;24020:17;24013:47;24077:131;24203:4;24077:131;:::i;:::-;24069:139;;23796:419;;;:::o;24221:::-;24387:4;24425:2;24414:9;24410:18;24402:26;;24474:9;24468:4;24464:20;24460:1;24449:9;24445:17;24438:47;24502:131;24628:4;24502:131;:::i;:::-;24494:139;;24221:419;;;:::o;24646:::-;24812:4;24850:2;24839:9;24835:18;24827:26;;24899:9;24893:4;24889:20;24885:1;24874:9;24870:17;24863:47;24927:131;25053:4;24927:131;:::i;:::-;24919:139;;24646:419;;;:::o;25071:::-;25237:4;25275:2;25264:9;25260:18;25252:26;;25324:9;25318:4;25314:20;25310:1;25299:9;25295:17;25288:47;25352:131;25478:4;25352:131;:::i;:::-;25344:139;;25071:419;;;:::o;25496:::-;25662:4;25700:2;25689:9;25685:18;25677:26;;25749:9;25743:4;25739:20;25735:1;25724:9;25720:17;25713:47;25777:131;25903:4;25777:131;:::i;:::-;25769:139;;25496:419;;;:::o;25921:::-;26087:4;26125:2;26114:9;26110:18;26102:26;;26174:9;26168:4;26164:20;26160:1;26149:9;26145:17;26138:47;26202:131;26328:4;26202:131;:::i;:::-;26194:139;;25921:419;;;:::o;26346:::-;26512:4;26550:2;26539:9;26535:18;26527:26;;26599:9;26593:4;26589:20;26585:1;26574:9;26570:17;26563:47;26627:131;26753:4;26627:131;:::i;:::-;26619:139;;26346:419;;;:::o;26771:::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:::-;27362:4;27400:2;27389:9;27385:18;27377:26;;27449:9;27443:4;27439:20;27435:1;27424:9;27420:17;27413:47;27477:131;27603:4;27477:131;:::i;:::-;27469:139;;27196:419;;;:::o;27621:::-;27787:4;27825:2;27814:9;27810:18;27802:26;;27874:9;27868:4;27864:20;27860:1;27849:9;27845:17;27838:47;27902:131;28028:4;27902:131;:::i;:::-;27894:139;;27621:419;;;:::o;28046:::-;28212:4;28250:2;28239:9;28235:18;28227:26;;28299:9;28293:4;28289:20;28285:1;28274:9;28270:17;28263:47;28327:131;28453:4;28327:131;:::i;:::-;28319:139;;28046:419;;;:::o;28471:::-;28637:4;28675:2;28664:9;28660:18;28652:26;;28724:9;28718:4;28714:20;28710:1;28699:9;28695:17;28688:47;28752:131;28878:4;28752:131;:::i;:::-;28744:139;;28471:419;;;:::o;28896:::-;29062:4;29100:2;29089:9;29085:18;29077:26;;29149:9;29143:4;29139:20;29135:1;29124:9;29120:17;29113:47;29177:131;29303:4;29177:131;:::i;:::-;29169:139;;28896:419;;;:::o;29321:::-;29487:4;29525:2;29514:9;29510:18;29502:26;;29574:9;29568:4;29564:20;29560:1;29549:9;29545:17;29538:47;29602:131;29728:4;29602:131;:::i;:::-;29594:139;;29321:419;;;:::o;29746:::-;29912:4;29950:2;29939:9;29935:18;29927:26;;29999:9;29993:4;29989:20;29985:1;29974:9;29970:17;29963:47;30027:131;30153:4;30027:131;:::i;:::-;30019:139;;29746:419;;;:::o;30171:::-;30337:4;30375:2;30364:9;30360:18;30352:26;;30424:9;30418:4;30414:20;30410:1;30399:9;30395:17;30388:47;30452:131;30578:4;30452:131;:::i;:::-;30444:139;;30171:419;;;:::o;30596:222::-;30689:4;30727:2;30716:9;30712:18;30704:26;;30740:71;30808:1;30797:9;30793:17;30784:6;30740:71;:::i;:::-;30596:222;;;;:::o;30824:129::-;30858:6;30885:20;;:::i;:::-;30875:30;;30914:33;30942:4;30934:6;30914:33;:::i;:::-;30824:129;;;:::o;30959:75::-;30992:6;31025:2;31019:9;31009:19;;30959:75;:::o;31040:307::-;31101:4;31191:18;31183:6;31180:30;31177:56;;;31213:18;;:::i;:::-;31177:56;31251:29;31273:6;31251:29;:::i;:::-;31243:37;;31335:4;31329;31325:15;31317:23;;31040:307;;;:::o;31353:308::-;31415:4;31505:18;31497:6;31494:30;31491:56;;;31527:18;;:::i;:::-;31491:56;31565:29;31587:6;31565:29;:::i;:::-;31557:37;;31649:4;31643;31639:15;31631:23;;31353:308;;;:::o;31667:132::-;31734:4;31757:3;31749:11;;31787:4;31782:3;31778:14;31770:22;;31667:132;;;:::o;31805:114::-;31872:6;31906:5;31900:12;31890:22;;31805:114;;;:::o;31925:98::-;31976:6;32010:5;32004:12;31994:22;;31925:98;;;:::o;32029:99::-;32081:6;32115:5;32109:12;32099:22;;32029:99;;;:::o;32134:113::-;32204:4;32236;32231:3;32227:14;32219:22;;32134:113;;;:::o;32253:184::-;32352:11;32386:6;32381:3;32374:19;32426:4;32421:3;32417:14;32402:29;;32253:184;;;;:::o;32443:168::-;32526:11;32560:6;32555:3;32548:19;32600:4;32595:3;32591:14;32576:29;;32443:168;;;;:::o;32617:169::-;32701:11;32735:6;32730:3;32723:19;32775:4;32770:3;32766:14;32751:29;;32617:169;;;;:::o;32792:148::-;32894:11;32931:3;32916:18;;32792:148;;;;:::o;32946:305::-;32986:3;33005:20;33023:1;33005:20;:::i;:::-;33000:25;;33039:20;33057:1;33039:20;:::i;:::-;33034:25;;33193:1;33125:66;33121:74;33118:1;33115:81;33112:107;;;33199:18;;:::i;:::-;33112:107;33243:1;33240;33236:9;33229:16;;32946:305;;;;:::o;33257:185::-;33297:1;33314:20;33332:1;33314:20;:::i;:::-;33309:25;;33348:20;33366:1;33348:20;:::i;:::-;33343:25;;33387:1;33377:35;;33392:18;;:::i;:::-;33377:35;33434:1;33431;33427:9;33422:14;;33257:185;;;;:::o;33448:348::-;33488:7;33511:20;33529:1;33511:20;:::i;:::-;33506:25;;33545:20;33563:1;33545:20;:::i;:::-;33540:25;;33733:1;33665:66;33661:74;33658:1;33655:81;33650:1;33643:9;33636:17;33632:105;33629:131;;;33740:18;;:::i;:::-;33629:131;33788:1;33785;33781:9;33770:20;;33448:348;;;;:::o;33802:191::-;33842:4;33862:20;33880:1;33862:20;:::i;:::-;33857:25;;33896:20;33914:1;33896:20;:::i;:::-;33891:25;;33935:1;33932;33929:8;33926:34;;;33940:18;;:::i;:::-;33926:34;33985:1;33982;33978:9;33970:17;;33802:191;;;;:::o;33999:96::-;34036:7;34065:24;34083:5;34065:24;:::i;:::-;34054:35;;33999:96;;;:::o;34101:90::-;34135:7;34178:5;34171:13;34164:21;34153:32;;34101:90;;;:::o;34197:149::-;34233:7;34273:66;34266:5;34262:78;34251:89;;34197:149;;;:::o;34352:126::-;34389:7;34429:42;34422:5;34418:54;34407:65;;34352:126;;;:::o;34484:77::-;34521:7;34550:5;34539:16;;34484:77;;;:::o;34567:154::-;34651:6;34646:3;34641;34628:30;34713:1;34704:6;34699:3;34695:16;34688:27;34567:154;;;:::o;34727:307::-;34795:1;34805:113;34819:6;34816:1;34813:13;34805:113;;;34904:1;34899:3;34895:11;34889:18;34885:1;34880:3;34876:11;34869:39;34841:2;34838:1;34834:10;34829:15;;34805:113;;;34936:6;34933:1;34930:13;34927:101;;;35016:1;35007:6;35002:3;34998:16;34991:27;34927:101;34776:258;34727:307;;;:::o;35040:320::-;35084:6;35121:1;35115:4;35111:12;35101:22;;35168:1;35162:4;35158:12;35189:18;35179:81;;35245:4;35237:6;35233:17;35223:27;;35179:81;35307:2;35299:6;35296:14;35276:18;35273:38;35270:84;;;35326:18;;:::i;:::-;35270:84;35091:269;35040:320;;;:::o;35366:281::-;35449:27;35471:4;35449:27;:::i;:::-;35441:6;35437:40;35579:6;35567:10;35564:22;35543:18;35531:10;35528:34;35525:62;35522:88;;;35590:18;;:::i;:::-;35522:88;35630:10;35626:2;35619:22;35409:238;35366:281;;:::o;35653:233::-;35692:3;35715:24;35733:5;35715:24;:::i;:::-;35706:33;;35761:66;35754:5;35751:77;35748:103;;;35831:18;;:::i;:::-;35748:103;35878:1;35871:5;35867:13;35860:20;;35653:233;;;:::o;35892:176::-;35924:1;35941:20;35959:1;35941:20;:::i;:::-;35936:25;;35975:20;35993:1;35975:20;:::i;:::-;35970:25;;36014:1;36004:35;;36019:18;;:::i;:::-;36004:35;36060:1;36057;36053:9;36048:14;;35892:176;;;;:::o;36074:180::-;36122:77;36119:1;36112:88;36219:4;36216:1;36209:15;36243:4;36240:1;36233:15;36260:180;36308:77;36305:1;36298:88;36405:4;36402:1;36395:15;36429:4;36426:1;36419:15;36446:180;36494:77;36491:1;36484:88;36591:4;36588:1;36581:15;36615:4;36612:1;36605:15;36632:180;36680:77;36677:1;36670:88;36777:4;36774:1;36767:15;36801:4;36798:1;36791:15;36818:180;36866:77;36863:1;36856:88;36963:4;36960:1;36953:15;36987:4;36984:1;36977:15;37004:180;37052:77;37049:1;37042:88;37149:4;37146:1;37139:15;37173:4;37170:1;37163:15;37190:117;37299:1;37296;37289:12;37313:117;37422:1;37419;37412:12;37436:117;37545:1;37542;37535:12;37559:117;37668:1;37665;37658:12;37682:102;37723:6;37774:2;37770:7;37765:2;37758:5;37754:14;37750:28;37740:38;;37682:102;;;:::o;37790:161::-;37930:13;37926:1;37918:6;37914:14;37907:37;37790:161;:::o;37957:230::-;38097:34;38093:1;38085:6;38081:14;38074:58;38166:13;38161:2;38153:6;38149:15;38142:38;37957:230;:::o;38193:237::-;38333:34;38329:1;38321:6;38317:14;38310:58;38402:20;38397:2;38389:6;38385:15;38378:45;38193:237;:::o;38436:225::-;38576:34;38572:1;38564:6;38560:14;38553:58;38645:8;38640:2;38632:6;38628:15;38621:33;38436:225;:::o;38667:178::-;38807:30;38803:1;38795:6;38791:14;38784:54;38667:178;:::o;38851:223::-;38991:34;38987:1;38979:6;38975:14;38968:58;39060:6;39055:2;39047:6;39043:15;39036:31;38851:223;:::o;39080:175::-;39220:27;39216:1;39208:6;39204:14;39197:51;39080:175;:::o;39261:231::-;39401:34;39397:1;39389:6;39385:14;39378:58;39470:14;39465:2;39457:6;39453:15;39446:39;39261:231;:::o;39498:243::-;39638:34;39634:1;39626:6;39622:14;39615:58;39707:26;39702:2;39694:6;39690:15;39683:51;39498:243;:::o;39747:229::-;39887:34;39883:1;39875:6;39871:14;39864:58;39956:12;39951:2;39943:6;39939:15;39932:37;39747:229;:::o;39982:228::-;40122:34;40118:1;40110:6;40106:14;40099:58;40191:11;40186:2;40178:6;40174:15;40167:36;39982:228;:::o;40216:173::-;40356:25;40352:1;40344:6;40340:14;40333:49;40216:173;:::o;40395:182::-;40535:34;40531:1;40523:6;40519:14;40512:58;40395:182;:::o;40583:231::-;40723:34;40719:1;40711:6;40707:14;40700:58;40792:14;40787:2;40779:6;40775:15;40768:39;40583:231;:::o;40820:182::-;40960:34;40956:1;40948:6;40944:14;40937:58;40820:182;:::o;41008:228::-;41148:34;41144:1;41136:6;41132:14;41125:58;41217:11;41212:2;41204:6;41200:15;41193:36;41008:228;:::o;41242:234::-;41382:34;41378:1;41370:6;41366:14;41359:58;41451:17;41446:2;41438:6;41434:15;41427:42;41242:234;:::o;41482:220::-;41622:34;41618:1;41610:6;41606:14;41599:58;41691:3;41686:2;41678:6;41674:15;41667:28;41482:220;:::o;41708:172::-;41848:24;41844:1;41836:6;41832:14;41825:48;41708:172;:::o;41886:175::-;42026:27;42022:1;42014:6;42010:14;42003:51;41886:175;:::o;42067:236::-;42207:34;42203:1;42195:6;42191:14;42184:58;42276:19;42271:2;42263:6;42259:15;42252:44;42067:236;:::o;42309:231::-;42449:34;42445:1;42437:6;42433:14;42426:58;42518:14;42513:2;42505:6;42501:15;42494:39;42309:231;:::o;42546:178::-;42686:30;42682:1;42674:6;42670:14;42663:54;42546:178;:::o;42730:122::-;42803:24;42821:5;42803:24;:::i;:::-;42796:5;42793:35;42783:63;;42842:1;42839;42832:12;42783:63;42730:122;:::o;42858:116::-;42928:21;42943:5;42928:21;:::i;:::-;42921:5;42918:32;42908:60;;42964:1;42961;42954:12;42908:60;42858:116;:::o;42980:120::-;43052:23;43069:5;43052:23;:::i;:::-;43045:5;43042:34;43032:62;;43090:1;43087;43080:12;43032:62;42980:120;:::o;43106:122::-;43179:24;43197:5;43179:24;:::i;:::-;43172:5;43169:35;43159:63;;43218:1;43215;43208:12;43159:63;43106:122;:::o

Swarm Source

ipfs://7a6392a8ce409ac510e9f8be82be7b85fab98647a046dae64b93ef2320e3acd4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.