Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
1,919 WOC
Holders
255
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 WOCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
nft
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-14 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/creepies.sol pragma solidity >=0.8.2; // to enable certain compiler features //import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; 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; //Mapping para atribuirle un URI para cada token mapping(uint256 => string) internal id_to_URI; /** * @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) {} /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } contract nft is ERC721, Ownable { using Strings for uint256; //amount of tokens that have been minted so far, in total and in presale uint256 private numberOfTotalTokens; //declares the maximum amount of tokens that can be minted, total and in presale uint256 private maxTotalTokens; //initial part of the URI for the metadata string private _currentBaseURI; //cost of mints depending on state of sale uint private mintCost_ = 0.2605 ether; //maximum amount of mints allowed per person uint256 public maxMint = 5; //the amount of reserved mints that have currently been executed by creator and by marketing wallet uint private _reservedMints = 0; //the maximum amount of reserved mints allowed for creator and marketing wallet uint private maxReservedMints = 100; //addresses to where the mint funds will be sent address payable private communityWallet = payable(0x5E525DA32Ae4af742BEFe6bA098eD9832D8cea67); address payable private marketingWallet = payable(0x2d764Cc0541056f3B2cc3fA666E465fAA71Ccd71); //dummy address that we use to sign the mint transaction to make sure it is valid address private dummy = 0x80E4929c869102140E69550BBECC20bEd61B080c; //marks the timestamp of when the respective sales open uint256 internal saleLaunchTime; uint256 internal revealTime; //amount of mints that each address has executed mapping(address => uint256) public mintsPerAddress; //current state os sale enum State {NoSale, OpenSale} //defines the uri for when the NFTs have not been yet revealed string public unrevealedURI; //to see if NFTs have been revealed or not bool public reveal; //declaring initial values for variables constructor() ERC721('Wolf of Crypto', 'WOC') { numberOfTotalTokens = 0; maxTotalTokens = 5000; unrevealedURI = "ipfs://QmeswHUsUskjA2zJNsfounZJdxumziv8ErHCRHi7uKkZQ1/"; reveal = false; } //in case somebody accidentaly sends funds or transaction to contract receive() payable external {} fallback() payable external { revert(); } //only three addresses allowed to access these functions modifier onlyApproved() { require(msg.sender == owner() || msg.sender == communityWallet || msg.sender == marketingWallet); _; } //visualize baseURI function _baseURI() internal view virtual override returns (string memory) { return _currentBaseURI; } //change baseURI in case needed for IPFS function changeBaseURI(string memory baseURI_) public onlyOwner { _currentBaseURI = baseURI_; } function changeUnrevealedURI(string memory unrevealedURI_) public onlyOwner { unrevealedURI = unrevealedURI_; } //gets the tokenID of NFT to be minted function tokenId() internal view returns(uint256) { uint currentId = totalSupply(); bool exists = true; while (exists) { currentId += 1; exists = _exists(currentId); } return currentId; } function openSale() public onlyOwner { require(saleState() == State.NoSale, 'Sale is already Open!'); saleLaunchTime = block.timestamp; } modifier onlyValidAccess(uint8 _v, bytes32 _r, bytes32 _s) { require( isValidAccessMessage(msg.sender,_v,_r,_s), 'Invalid Signature' ); _; } /* * @dev Verifies if message was signed by owner to give access to _add for this contract. * Assumes Geth signature prefix. * @param _add Address of agent with access * @param _v ECDSA signature parameter v. * @param _r ECDSA signature parameters r. * @param _s ECDSA signature parameters s. * @return Validity of access message for a given address. */ function isValidAccessMessage(address _add, uint8 _v, bytes32 _r, bytes32 _s) view public returns (bool) { bytes32 hash = keccak256(abi.encodePacked(address(this), _add)); return dummy == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), _v, _r, _s); } //mint a @param number of NFTs in presale function mint(uint256 number, uint8 _v, bytes32 _r, bytes32 _s) onlyValidAccess(_v, _r, _s) public payable { State saleState_ = saleState(); require(saleState_ != State.NoSale, "Sale in not open yet!"); require(numberOfTotalTokens + number <= maxTotalTokens - (maxReservedMints - _reservedMints), "Not enough NFTs left to mint.."); require(mintsPerAddress[msg.sender] + number <= maxMint, "That is more than you are allowed to mint!"); require(msg.value >= mintCost() * number, "Your wallet doesn't have enough ETH!"); for (uint256 i = 0; i < number; i++) { uint256 tid = tokenId(); _safeMint(msg.sender, tid); mintsPerAddress[msg.sender] += 1; numberOfTotalTokens += 1; } } function tokenURI(uint256 tokenId_) public view virtual override returns (string memory) { require(_exists(tokenId_), "ERC721Metadata: URI query for nonexistent token"); //check to see that 24 hours have passed since beginning of publicsale launch if (!reveal) { return unrevealedURI; } else { string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId_.toString(), '.json')) : ""; } } //reserved mints for giveaways/team/marketing function reservedMintGeneral(uint256 number) public onlyApproved { require(_reservedMints + number <= maxReservedMints, "Not enough NFTs left!"); for (uint256 i = 0; i < number; i++) { uint256 tid = tokenId(); _safeMint(msg.sender, tid); mintsPerAddress[msg.sender] += 1; numberOfTotalTokens += 1; _reservedMints += 1; } } //burn the tokens that have not been sold yet function burnTokens() public onlyOwner { maxTotalTokens = numberOfTotalTokens; } //se the current account balance function accountBalance() public onlyOwner view returns(uint) { return address(this).balance; } //retrieve all funds recieved from minting function withdraw() public onlyApproved { uint256 balance = accountBalance(); require(balance > 0, 'No Funds to withdraw, Balance is 0'); _withdraw(communityWallet, (balance * 75) / 100); _withdraw(marketingWallet, accountBalance()); //to avoid dust eth } //send the percentage of funds to a shareholder´s wallet function _withdraw(address payable account, uint256 amount) internal { (bool sent, ) = account.call{value: amount}(""); require(sent, "Failed to send Ether"); } //change the dummy account used for signing transactions function changeDummy(address _dummy) public onlyOwner { dummy = _dummy; } //see the total amount of tokens that have been minted function totalSupply() public view returns(uint) { return numberOfTotalTokens; } //to see the total amount of reserved mints left function reservedMintsLeft() public onlyOwner view returns(uint) { return maxReservedMints - _reservedMints; } //see current state of sale //see the current state of the sale function saleState() public view returns(State){ if (saleLaunchTime == 0) { return State.NoSale; } else { return State.OpenSale; } } //gets the cost of current mint function mintCost() public view returns(uint) { return mintCost_; } //to modify the price to mint function changeMintCost(uint newCost) public onlyOwner { mintCost_ = newCost; } //to reveal the nfts function toggleReveal() public onlyOwner { require(!reveal, 'Can only reveal when current state is unrevealed!'); reveal = !reveal; revealTime = block.timestamp; } //shows total amount of tokens that could be minted function maxTokens() public view returns(uint) { return maxTotalTokens; } //change the limit of mints allowed per address function changeMaxMint(uint maxMint_) public onlyOwner { maxMint = maxMint_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"accountBalance","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":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dummy","type":"address"}],"name":"changeDummy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint_","type":"uint256"}],"name":"changeMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"changeMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unrevealedURI_","type":"string"}],"name":"changeUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"address","name":"_add","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"isValidAccessMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"reservedMintGeneral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMintsLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum nft.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405267039d7b5eabfd4000600b556005600c556000600d556064600e55735e525da32ae4af742befe6ba098ed9832d8cea67600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732d764cc0541056f3b2cc3fa666e465faa71ccd71601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507380e4929c869102140e69550bbecc20bed61b080c601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012b57600080fd5b506040518060400160405280600e81526020017f576f6c66206f662043727970746f0000000000000000000000000000000000008152506040518060400160405280600381526020017f574f4300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b09291906200031e565b508060019080519060200190620001c99291906200031e565b505050620001ec620001e06200025060201b60201c565b6200025860201b60201c565b60006008819055506113886009819055506040518060600160405280603681526020016200501d60369139601590805190602001906200022e9291906200031e565b506000601660006101000a81548160ff02191690831515021790555062000433565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200032c90620003ce565b90600052602060002090601f0160209004810192826200035057600085556200039c565b82601f106200036b57805160ff19168380011785556200039c565b828001600101855582156200039c579182015b828111156200039b5782518255916020019190600101906200037e565b5b509050620003ab9190620003af565b5090565b5b80821115620003ca576000816000905550600101620003b0565b5090565b60006002820490506001821680620003e757607f821691505b60208210811415620003fe57620003fd62000404565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614bda80620004436000396000f3fe6080604052600436106102295760003560e01c80636352211e11610123578063a22cb465116100ab578063c4d8b9df1161006f578063c4d8b9df146107a5578063c87b56dd146107ce578063e83157421461080b578063e985e9c514610836578063f2fde38b1461087357610230565b8063a22cb465146106d2578063a475b5dd146106fb578063b0a1c1c414610726578063b88d4fde14610751578063bdb4b8481461077a57610230565b80637501f741116100f25780637501f741146105ff5780637f1921ef1461062a5780638810a2c4146106535780638da5cb5b1461067c57806395d89b41146106a757610230565b80636352211e146105435780637035bf181461058057806370a08231146105ab578063715018a6146105e857610230565b806320c63e3b116101b15780633ccfd60b116101755780633ccfd60b1461049657806342842e0e146104ad5780634520e916146104d65780635b8ad42914610501578063603f4d521461051857610230565b806320c63e3b146103a157806323b872dd146103ca5780633023eba6146103f3578063326241141461043057806339a0c6f91461046d57610230565b8063081812fc116101f8578063081812fc146102dd578063095ea7b31461031a57806310aec4a614610343578063167ff46f1461035f57806318160ddd1461037657610230565b80630191a6571461023557806301ffc9a71461025e57806306fdde031461029b57806308003f78146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061317c565b61089c565b005b34801561026a57600080fd5b50610285600480360381019061028091906133a6565b61095c565b6040516102929190613afc565b60405180910390f35b3480156102a757600080fd5b506102b0610a3e565b6040516102bd9190613b77565b60405180910390f35b3480156102d257600080fd5b506102db610ad0565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613449565b610b57565b6040516103119190613a95565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906132ff565b610bdc565b005b61035d60048036038101906103589190613476565b610cf4565b005b34801561036b57600080fd5b50610374610fb7565b005b34801561038257600080fd5b5061038b6110aa565b6040516103989190613ed9565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613449565b6110b4565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906131e9565b61113a565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061317c565b61119a565b6040516104279190613ed9565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061333f565b6111b2565b6040516104649190613afc565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613400565b6112b0565b005b3480156104a257600080fd5b506104ab611346565b005b3480156104b957600080fd5b506104d460048036038101906104cf91906131e9565b6114fe565b005b3480156104e257600080fd5b506104eb61151e565b6040516104f89190613ed9565b60405180910390f35b34801561050d57600080fd5b506105166115b1565b005b34801561052457600080fd5b5061052d6116b0565b60405161053a9190613b5c565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613449565b6116cd565b6040516105779190613a95565b60405180910390f35b34801561058c57600080fd5b5061059561177f565b6040516105a29190613b77565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd919061317c565b61180d565b6040516105df9190613ed9565b60405180910390f35b3480156105f457600080fd5b506105fd6118c5565b005b34801561060b57600080fd5b5061061461194d565b6040516106219190613ed9565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613449565b611953565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613449565b6119d9565b005b34801561068857600080fd5b50610691611bde565b60405161069e9190613a95565b60405180910390f35b3480156106b357600080fd5b506106bc611c08565b6040516106c99190613b77565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906132bf565b611c9a565b005b34801561070757600080fd5b50610710611e1b565b60405161071d9190613afc565b60405180910390f35b34801561073257600080fd5b5061073b611e2e565b6040516107489190613ed9565b60405180910390f35b34801561075d57600080fd5b506107786004803603810190610773919061323c565b611eb2565b005b34801561078657600080fd5b5061078f611f14565b60405161079c9190613ed9565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613400565b611f1e565b005b3480156107da57600080fd5b506107f560048036038101906107f09190613449565b611fb4565b6040516108029190613b77565b60405180910390f35b34801561081757600080fd5b50610820612102565b60405161082d9190613ed9565b60405180910390f35b34801561084257600080fd5b5061085d600480360381019061085891906131a9565b61210c565b60405161086a9190613afc565b60405180910390f35b34801561087f57600080fd5b5061089a6004803603810190610895919061317c565b6121a0565b005b6108a4612298565b73ffffffffffffffffffffffffffffffffffffffff166108c2611bde565b73ffffffffffffffffffffffffffffffffffffffff1614610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90613db9565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a375750610a36826122a0565b5b9050919050565b606060008054610a4d906141d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906141d0565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b5050505050905090565b610ad8612298565b73ffffffffffffffffffffffffffffffffffffffff16610af6611bde565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390613db9565b60405180910390fd5b600854600981905550565b6000610b628261230a565b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890613d79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be7826116cd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613e39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c77612298565b73ffffffffffffffffffffffffffffffffffffffff161480610ca65750610ca581610ca0612298565b61210c565b5b610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613cd9565b60405180910390fd5b610cef8383612376565b505050565b828282610d03338484846111b2565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613d99565b60405180910390fd5b6000610d4c6116b0565b905060006001811115610d6257610d61614339565b5b816001811115610d7557610d74614339565b5b1415610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613e99565b60405180910390fd5b600d54600e54610dc691906140aa565b600954610dd391906140aa565b88600854610de19190613fc9565b1115610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613c59565b60405180910390fd5b600c5488601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e709190613fc9565b1115610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613e19565b60405180910390fd5b87610eba611f14565b610ec49190614050565b341015610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613e79565b60405180910390fd5b60005b88811015610fac576000610f1b61242f565b9050610f273382612470565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f779190613fc9565b92505081905550600160086000828254610f919190613fc9565b92505081905550508080610fa490614233565b915050610f09565b505050505050505050565b610fbf612298565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613db9565b60405180910390fd5b6000600181111561104757611046614339565b5b61104f6116b0565b600181111561106157611060614339565b5b146110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890613cb9565b60405180910390fd5b42601281905550565b6000600854905090565b6110bc612298565b73ffffffffffffffffffffffffffffffffffffffff166110da611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613db9565b60405180910390fd5b80600c8190555050565b61114b611145612298565b8261248e565b61118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613e59565b60405180910390fd5b61119583838361256c565b505050565b60146020528060005260406000206000915090505481565b60008030866040516020016111c89291906139ff565b6040516020818303038152906040528051906020012090506001816040516020016111f39190613a5a565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112299493929190613b17565b6020604051602081039080840390855afa15801561124b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b6112b8612298565b73ffffffffffffffffffffffffffffffffffffffff166112d6611bde565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613db9565b60405180910390fd5b80600a9080519060200190611342929190612f66565b5050565b61134e611bde565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113d45750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061142c5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61143557600080fd5b600061143f611e2e565b905060008111611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613eb9565b60405180910390fd5b6114c8600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064604b846114b99190614050565b6114c3919061401f565b6127c8565b6114fb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114f6611e2e565b6127c8565b50565b61151983838360405180602001604052806000815250611eb2565b505050565b6000611528612298565b73ffffffffffffffffffffffffffffffffffffffff16611546611bde565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613db9565b60405180910390fd5b600d54600e546115ac91906140aa565b905090565b6115b9612298565b73ffffffffffffffffffffffffffffffffffffffff166115d7611bde565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613db9565b60405180910390fd5b601660009054906101000a900460ff161561167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613cf9565b60405180910390fd5b601660009054906101000a900460ff1615601660006101000a81548160ff02191690831515021790555042601381905550565b60008060125414156116c557600090506116ca565b600190505b90565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90613d39565b60405180910390fd5b80915050919050565b6015805461178c906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546117b8906141d0565b80156118055780601f106117da57610100808354040283529160200191611805565b820191906000526020600020905b8154815290600101906020018083116117e857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613d19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118cd612298565b73ffffffffffffffffffffffffffffffffffffffff166118eb611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613db9565b60405180910390fd5b61194b6000612879565b565b600c5481565b61195b612298565b73ffffffffffffffffffffffffffffffffffffffff16611979611bde565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613db9565b60405180910390fd5b80600b8190555050565b6119e1611bde565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a675750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611abf5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ac857600080fd5b600e5481600d54611ad99190613fc9565b1115611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613c79565b60405180910390fd5b60005b81811015611bda576000611b2f61242f565b9050611b3b3382612470565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8b9190613fc9565b92505081905550600160086000828254611ba59190613fc9565b925050819055506001600d6000828254611bbf9190613fc9565b92505081905550508080611bd290614233565b915050611b1d565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611c17906141d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906141d0565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b5050505050905090565b611ca2612298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790613c39565b60405180910390fd5b8060056000611d1d612298565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dca612298565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e0f9190613afc565b60405180910390a35050565b601660009054906101000a900460ff1681565b6000611e38612298565b73ffffffffffffffffffffffffffffffffffffffff16611e56611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613db9565b60405180910390fd5b47905090565b611ec3611ebd612298565b8361248e565b611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990613e59565b60405180910390fd5b611f0e8484848461293f565b50505050565b6000600b54905090565b611f26612298565b73ffffffffffffffffffffffffffffffffffffffff16611f44611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613db9565b60405180910390fd5b8060159080519060200190611fb0929190612f66565b5050565b6060611fbf8261230a565b611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613df9565b60405180910390fd5b601660009054906101000a900460ff166120a4576015805461201f906141d0565b80601f016020809104026020016040519081016040528092919081815260200182805461204b906141d0565b80156120985780601f1061206d57610100808354040283529160200191612098565b820191906000526020600020905b81548152906001019060200180831161207b57829003601f168201915b505050505090506120fd565b60006120ae61299b565b905060008151116120ce57604051806020016040528060008152506120f9565b806120d884612a2d565b6040516020016120e9929190613a2b565b6040516020818303038152906040525b9150505b919050565b6000600954905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a8612298565b73ffffffffffffffffffffffffffffffffffffffff166121c6611bde565b73ffffffffffffffffffffffffffffffffffffffff161461221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613bb9565b60405180910390fd5b61229581612879565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e9836116cd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061243a6110aa565b90506000600190505b8015612468576001826124569190613fc9565b91506124618261230a565b9050612443565b819250505090565b61248a828260405180602001604052806000815250612b8e565b5050565b60006124998261230a565b6124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90613c99565b60405180910390fd5b60006124e3836116cd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255257508373ffffffffffffffffffffffffffffffffffffffff1661253a84610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b806125635750612562818561210c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661258c826116cd565b73ffffffffffffffffffffffffffffffffffffffff16146125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d990613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264990613c19565b60405180910390fd5b61265d838383612be9565b612668600082612376565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b891906140aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461270f9190613fc9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127ee90613a80565b60006040518083038185875af1925050503d806000811461282b576040519150601f19603f3d011682016040523d82523d6000602084013e612830565b606091505b5050905080612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90613bf9565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61294a84848461256c565b61295684848484612bee565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90613b99565b60405180910390fd5b50505050565b6060600a80546129aa906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906141d0565b8015612a235780601f106129f857610100808354040283529160200191612a23565b820191906000526020600020905b815481529060010190602001808311612a0657829003601f168201915b5050505050905090565b60606000821415612a75576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b89565b600082905060005b60008214612aa7578080612a9090614233565b915050600a82612aa0919061401f565b9150612a7d565b60008167ffffffffffffffff811115612ac357612ac26143c6565b5b6040519080825280601f01601f191660200182016040528015612af55781602001600182028036833780820191505090505b5090505b60008514612b8257600182612b0e91906140aa565b9150600a85612b1d91906142aa565b6030612b299190613fc9565b60f81b818381518110612b3f57612b3e614397565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b7b919061401f565b9450612af9565b8093505050505b919050565b612b988383612d85565b612ba56000848484612bee565b612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb90613b99565b60405180910390fd5b505050565b505050565b6000612c0f8473ffffffffffffffffffffffffffffffffffffffff16612f53565b15612d78578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c38612298565b8786866040518563ffffffff1660e01b8152600401612c5a9493929190613ab0565b602060405180830381600087803b158015612c7457600080fd5b505af1925050508015612ca557506040513d601f19601f82011682018060405250810190612ca291906133d3565b60015b612d28573d8060008114612cd5576040519150601f19603f3d011682016040523d82523d6000602084013e612cda565b606091505b50600081511415612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790613b99565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d7d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90613d59565b60405180910390fd5b612dfe8161230a565b15612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590613bd9565b60405180910390fd5b612e4a60008383612be9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e9a9190613fc9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612f72906141d0565b90600052602060002090601f016020900481019282612f945760008555612fdb565b82601f10612fad57805160ff1916838001178555612fdb565b82800160010185558215612fdb579182015b82811115612fda578251825591602001919060010190612fbf565b5b509050612fe89190612fec565b5090565b5b80821115613005576000816000905550600101612fed565b5090565b600061301c61301784613f19565b613ef4565b905082815260208101848484011115613038576130376143fa565b5b61304384828561418e565b509392505050565b600061305e61305984613f4a565b613ef4565b90508281526020810184848401111561307a576130796143fa565b5b61308584828561418e565b509392505050565b60008135905061309c81614b1a565b92915050565b6000813590506130b181614b31565b92915050565b6000813590506130c681614b48565b92915050565b6000813590506130db81614b5f565b92915050565b6000815190506130f081614b5f565b92915050565b600082601f83011261310b5761310a6143f5565b5b813561311b848260208601613009565b91505092915050565b600082601f830112613139576131386143f5565b5b813561314984826020860161304b565b91505092915050565b60008135905061316181614b76565b92915050565b60008135905061317681614b8d565b92915050565b60006020828403121561319257613191614404565b5b60006131a08482850161308d565b91505092915050565b600080604083850312156131c0576131bf614404565b5b60006131ce8582860161308d565b92505060206131df8582860161308d565b9150509250929050565b60008060006060848603121561320257613201614404565b5b60006132108682870161308d565b93505060206132218682870161308d565b925050604061323286828701613152565b9150509250925092565b6000806000806080858703121561325657613255614404565b5b60006132648782880161308d565b94505060206132758782880161308d565b935050604061328687828801613152565b925050606085013567ffffffffffffffff8111156132a7576132a66143ff565b5b6132b3878288016130f6565b91505092959194509250565b600080604083850312156132d6576132d5614404565b5b60006132e48582860161308d565b92505060206132f5858286016130a2565b9150509250929050565b6000806040838503121561331657613315614404565b5b60006133248582860161308d565b925050602061333585828601613152565b9150509250929050565b6000806000806080858703121561335957613358614404565b5b60006133678782880161308d565b945050602061337887828801613167565b9350506040613389878288016130b7565b925050606061339a878288016130b7565b91505092959194509250565b6000602082840312156133bc576133bb614404565b5b60006133ca848285016130cc565b91505092915050565b6000602082840312156133e9576133e8614404565b5b60006133f7848285016130e1565b91505092915050565b60006020828403121561341657613415614404565b5b600082013567ffffffffffffffff811115613434576134336143ff565b5b61344084828501613124565b91505092915050565b60006020828403121561345f5761345e614404565b5b600061346d84828501613152565b91505092915050565b600080600080608085870312156134905761348f614404565b5b600061349e87828801613152565b94505060206134af87828801613167565b93505060406134c0878288016130b7565b92505060606134d1878288016130b7565b91505092959194509250565b6134e6816140de565b82525050565b6134fd6134f8826140de565b61427c565b82525050565b61350c816140f0565b82525050565b61351b816140fc565b82525050565b61353261352d826140fc565b61428e565b82525050565b600061354382613f7b565b61354d8185613f91565b935061355d81856020860161419d565b61356681614409565b840191505092915050565b61357a8161417c565b82525050565b600061358b82613f86565b6135958185613fad565b93506135a581856020860161419d565b6135ae81614409565b840191505092915050565b60006135c482613f86565b6135ce8185613fbe565b93506135de81856020860161419d565b80840191505092915050565b60006135f7601c83613fbe565b915061360282614427565b601c82019050919050565b600061361a603283613fad565b915061362582614450565b604082019050919050565b600061363d602683613fad565b91506136488261449f565b604082019050919050565b6000613660601c83613fad565b915061366b826144ee565b602082019050919050565b6000613683601483613fad565b915061368e82614517565b602082019050919050565b60006136a6602483613fad565b91506136b182614540565b604082019050919050565b60006136c9601983613fad565b91506136d48261458f565b602082019050919050565b60006136ec601e83613fad565b91506136f7826145b8565b602082019050919050565b600061370f601583613fad565b915061371a826145e1565b602082019050919050565b6000613732602c83613fad565b915061373d8261460a565b604082019050919050565b6000613755601583613fad565b915061376082614659565b602082019050919050565b6000613778603883613fad565b915061378382614682565b604082019050919050565b600061379b603183613fad565b91506137a6826146d1565b604082019050919050565b60006137be602a83613fad565b91506137c982614720565b604082019050919050565b60006137e1602983613fad565b91506137ec8261476f565b604082019050919050565b6000613804602083613fad565b915061380f826147be565b602082019050919050565b6000613827602c83613fad565b9150613832826147e7565b604082019050919050565b600061384a600583613fbe565b915061385582614836565b600582019050919050565b600061386d601183613fad565b91506138788261485f565b602082019050919050565b6000613890602083613fad565b915061389b82614888565b602082019050919050565b60006138b3602983613fad565b91506138be826148b1565b604082019050919050565b60006138d6602f83613fad565b91506138e182614900565b604082019050919050565b60006138f9602a83613fad565b91506139048261494f565b604082019050919050565b600061391c602183613fad565b91506139278261499e565b604082019050919050565b600061393f600083613fa2565b915061394a826149ed565b600082019050919050565b6000613962603183613fad565b915061396d826149f0565b604082019050919050565b6000613985602483613fad565b915061399082614a3f565b604082019050919050565b60006139a8601583613fad565b91506139b382614a8e565b602082019050919050565b60006139cb602283613fad565b91506139d682614ab7565b604082019050919050565b6139ea81614165565b82525050565b6139f98161416f565b82525050565b6000613a0b82856134ec565b601482019150613a1b82846134ec565b6014820191508190509392505050565b6000613a3782856135b9565b9150613a4382846135b9565b9150613a4e8261383d565b91508190509392505050565b6000613a65826135ea565b9150613a718284613521565b60208201915081905092915050565b6000613a8b82613932565b9150819050919050565b6000602082019050613aaa60008301846134dd565b92915050565b6000608082019050613ac560008301876134dd565b613ad260208301866134dd565b613adf60408301856139e1565b8181036060830152613af18184613538565b905095945050505050565b6000602082019050613b116000830184613503565b92915050565b6000608082019050613b2c6000830187613512565b613b3960208301866139f0565b613b466040830185613512565b613b536060830184613512565b95945050505050565b6000602082019050613b716000830184613571565b92915050565b60006020820190508181036000830152613b918184613580565b905092915050565b60006020820190508181036000830152613bb28161360d565b9050919050565b60006020820190508181036000830152613bd281613630565b9050919050565b60006020820190508181036000830152613bf281613653565b9050919050565b60006020820190508181036000830152613c1281613676565b9050919050565b60006020820190508181036000830152613c3281613699565b9050919050565b60006020820190508181036000830152613c52816136bc565b9050919050565b60006020820190508181036000830152613c72816136df565b9050919050565b60006020820190508181036000830152613c9281613702565b9050919050565b60006020820190508181036000830152613cb281613725565b9050919050565b60006020820190508181036000830152613cd281613748565b9050919050565b60006020820190508181036000830152613cf28161376b565b9050919050565b60006020820190508181036000830152613d128161378e565b9050919050565b60006020820190508181036000830152613d32816137b1565b9050919050565b60006020820190508181036000830152613d52816137d4565b9050919050565b60006020820190508181036000830152613d72816137f7565b9050919050565b60006020820190508181036000830152613d928161381a565b9050919050565b60006020820190508181036000830152613db281613860565b9050919050565b60006020820190508181036000830152613dd281613883565b9050919050565b60006020820190508181036000830152613df2816138a6565b9050919050565b60006020820190508181036000830152613e12816138c9565b9050919050565b60006020820190508181036000830152613e32816138ec565b9050919050565b60006020820190508181036000830152613e528161390f565b9050919050565b60006020820190508181036000830152613e7281613955565b9050919050565b60006020820190508181036000830152613e9281613978565b9050919050565b60006020820190508181036000830152613eb28161399b565b9050919050565b60006020820190508181036000830152613ed2816139be565b9050919050565b6000602082019050613eee60008301846139e1565b92915050565b6000613efe613f0f565b9050613f0a8282614202565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3457613f336143c6565b5b613f3d82614409565b9050602081019050919050565b600067ffffffffffffffff821115613f6557613f646143c6565b5b613f6e82614409565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fd482614165565b9150613fdf83614165565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614014576140136142db565b5b828201905092915050565b600061402a82614165565b915061403583614165565b9250826140455761404461430a565b5b828204905092915050565b600061405b82614165565b915061406683614165565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561409f5761409e6142db565b5b828202905092915050565b60006140b582614165565b91506140c083614165565b9250828210156140d3576140d26142db565b5b828203905092915050565b60006140e982614145565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061414082614b06565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061418782614132565b9050919050565b82818337600083830152505050565b60005b838110156141bb5780820151818401526020810190506141a0565b838111156141ca576000848401525b50505050565b600060028204905060018216806141e857607f821691505b602082108114156141fc576141fb614368565b5b50919050565b61420b82614409565b810181811067ffffffffffffffff8211171561422a576142296143c6565b5b80604052505050565b600061423e82614165565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614271576142706142db565b5b600182019050919050565b600061428782614298565b9050919050565b6000819050919050565b60006142a38261441a565b9050919050565b60006142b582614165565b91506142c083614165565b9250826142d0576142cf61430a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4e6f7420656e6f756768204e465473206c656674210000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c792072657665616c207768656e2063757272656e742073746160008201527f746520697320756e72657665616c656421000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686174206973206d6f7265207468616e20796f752061726520616c6c6f776560008201527f6420746f206d696e742100000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75722077616c6c657420646f65736e2774206861766520656e6f7567682060008201527f4554482100000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b60028110614b1757614b16614339565b5b50565b614b23816140de565b8114614b2e57600080fd5b50565b614b3a816140f0565b8114614b4557600080fd5b50565b614b51816140fc565b8114614b5c57600080fd5b50565b614b6881614106565b8114614b7357600080fd5b50565b614b7f81614165565b8114614b8a57600080fd5b50565b614b968161416f565b8114614ba157600080fd5b5056fea2646970667358221220a4bc57ff609516cccff6e9f8462c3c164a5cb3e701ea4c611066cc798f32edb464736f6c63430008070033697066733a2f2f516d65737748557355736b6a41327a4a4e73666f756e5a4a6478756d7a6976384572484352486937754b6b5a51312f
Deployed Bytecode
0x6080604052600436106102295760003560e01c80636352211e11610123578063a22cb465116100ab578063c4d8b9df1161006f578063c4d8b9df146107a5578063c87b56dd146107ce578063e83157421461080b578063e985e9c514610836578063f2fde38b1461087357610230565b8063a22cb465146106d2578063a475b5dd146106fb578063b0a1c1c414610726578063b88d4fde14610751578063bdb4b8481461077a57610230565b80637501f741116100f25780637501f741146105ff5780637f1921ef1461062a5780638810a2c4146106535780638da5cb5b1461067c57806395d89b41146106a757610230565b80636352211e146105435780637035bf181461058057806370a08231146105ab578063715018a6146105e857610230565b806320c63e3b116101b15780633ccfd60b116101755780633ccfd60b1461049657806342842e0e146104ad5780634520e916146104d65780635b8ad42914610501578063603f4d521461051857610230565b806320c63e3b146103a157806323b872dd146103ca5780633023eba6146103f3578063326241141461043057806339a0c6f91461046d57610230565b8063081812fc116101f8578063081812fc146102dd578063095ea7b31461031a57806310aec4a614610343578063167ff46f1461035f57806318160ddd1461037657610230565b80630191a6571461023557806301ffc9a71461025e57806306fdde031461029b57806308003f78146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061317c565b61089c565b005b34801561026a57600080fd5b50610285600480360381019061028091906133a6565b61095c565b6040516102929190613afc565b60405180910390f35b3480156102a757600080fd5b506102b0610a3e565b6040516102bd9190613b77565b60405180910390f35b3480156102d257600080fd5b506102db610ad0565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613449565b610b57565b6040516103119190613a95565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906132ff565b610bdc565b005b61035d60048036038101906103589190613476565b610cf4565b005b34801561036b57600080fd5b50610374610fb7565b005b34801561038257600080fd5b5061038b6110aa565b6040516103989190613ed9565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613449565b6110b4565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906131e9565b61113a565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061317c565b61119a565b6040516104279190613ed9565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061333f565b6111b2565b6040516104649190613afc565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613400565b6112b0565b005b3480156104a257600080fd5b506104ab611346565b005b3480156104b957600080fd5b506104d460048036038101906104cf91906131e9565b6114fe565b005b3480156104e257600080fd5b506104eb61151e565b6040516104f89190613ed9565b60405180910390f35b34801561050d57600080fd5b506105166115b1565b005b34801561052457600080fd5b5061052d6116b0565b60405161053a9190613b5c565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613449565b6116cd565b6040516105779190613a95565b60405180910390f35b34801561058c57600080fd5b5061059561177f565b6040516105a29190613b77565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd919061317c565b61180d565b6040516105df9190613ed9565b60405180910390f35b3480156105f457600080fd5b506105fd6118c5565b005b34801561060b57600080fd5b5061061461194d565b6040516106219190613ed9565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613449565b611953565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613449565b6119d9565b005b34801561068857600080fd5b50610691611bde565b60405161069e9190613a95565b60405180910390f35b3480156106b357600080fd5b506106bc611c08565b6040516106c99190613b77565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906132bf565b611c9a565b005b34801561070757600080fd5b50610710611e1b565b60405161071d9190613afc565b60405180910390f35b34801561073257600080fd5b5061073b611e2e565b6040516107489190613ed9565b60405180910390f35b34801561075d57600080fd5b506107786004803603810190610773919061323c565b611eb2565b005b34801561078657600080fd5b5061078f611f14565b60405161079c9190613ed9565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613400565b611f1e565b005b3480156107da57600080fd5b506107f560048036038101906107f09190613449565b611fb4565b6040516108029190613b77565b60405180910390f35b34801561081757600080fd5b50610820612102565b60405161082d9190613ed9565b60405180910390f35b34801561084257600080fd5b5061085d600480360381019061085891906131a9565b61210c565b60405161086a9190613afc565b60405180910390f35b34801561087f57600080fd5b5061089a6004803603810190610895919061317c565b6121a0565b005b6108a4612298565b73ffffffffffffffffffffffffffffffffffffffff166108c2611bde565b73ffffffffffffffffffffffffffffffffffffffff1614610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90613db9565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a375750610a36826122a0565b5b9050919050565b606060008054610a4d906141d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906141d0565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b5050505050905090565b610ad8612298565b73ffffffffffffffffffffffffffffffffffffffff16610af6611bde565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390613db9565b60405180910390fd5b600854600981905550565b6000610b628261230a565b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890613d79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be7826116cd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613e39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c77612298565b73ffffffffffffffffffffffffffffffffffffffff161480610ca65750610ca581610ca0612298565b61210c565b5b610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613cd9565b60405180910390fd5b610cef8383612376565b505050565b828282610d03338484846111b2565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613d99565b60405180910390fd5b6000610d4c6116b0565b905060006001811115610d6257610d61614339565b5b816001811115610d7557610d74614339565b5b1415610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613e99565b60405180910390fd5b600d54600e54610dc691906140aa565b600954610dd391906140aa565b88600854610de19190613fc9565b1115610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613c59565b60405180910390fd5b600c5488601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e709190613fc9565b1115610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613e19565b60405180910390fd5b87610eba611f14565b610ec49190614050565b341015610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613e79565b60405180910390fd5b60005b88811015610fac576000610f1b61242f565b9050610f273382612470565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f779190613fc9565b92505081905550600160086000828254610f919190613fc9565b92505081905550508080610fa490614233565b915050610f09565b505050505050505050565b610fbf612298565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613db9565b60405180910390fd5b6000600181111561104757611046614339565b5b61104f6116b0565b600181111561106157611060614339565b5b146110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890613cb9565b60405180910390fd5b42601281905550565b6000600854905090565b6110bc612298565b73ffffffffffffffffffffffffffffffffffffffff166110da611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613db9565b60405180910390fd5b80600c8190555050565b61114b611145612298565b8261248e565b61118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613e59565b60405180910390fd5b61119583838361256c565b505050565b60146020528060005260406000206000915090505481565b60008030866040516020016111c89291906139ff565b6040516020818303038152906040528051906020012090506001816040516020016111f39190613a5a565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112299493929190613b17565b6020604051602081039080840390855afa15801561124b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b6112b8612298565b73ffffffffffffffffffffffffffffffffffffffff166112d6611bde565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613db9565b60405180910390fd5b80600a9080519060200190611342929190612f66565b5050565b61134e611bde565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113d45750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061142c5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61143557600080fd5b600061143f611e2e565b905060008111611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613eb9565b60405180910390fd5b6114c8600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064604b846114b99190614050565b6114c3919061401f565b6127c8565b6114fb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114f6611e2e565b6127c8565b50565b61151983838360405180602001604052806000815250611eb2565b505050565b6000611528612298565b73ffffffffffffffffffffffffffffffffffffffff16611546611bde565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613db9565b60405180910390fd5b600d54600e546115ac91906140aa565b905090565b6115b9612298565b73ffffffffffffffffffffffffffffffffffffffff166115d7611bde565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613db9565b60405180910390fd5b601660009054906101000a900460ff161561167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613cf9565b60405180910390fd5b601660009054906101000a900460ff1615601660006101000a81548160ff02191690831515021790555042601381905550565b60008060125414156116c557600090506116ca565b600190505b90565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90613d39565b60405180910390fd5b80915050919050565b6015805461178c906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546117b8906141d0565b80156118055780601f106117da57610100808354040283529160200191611805565b820191906000526020600020905b8154815290600101906020018083116117e857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613d19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118cd612298565b73ffffffffffffffffffffffffffffffffffffffff166118eb611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613db9565b60405180910390fd5b61194b6000612879565b565b600c5481565b61195b612298565b73ffffffffffffffffffffffffffffffffffffffff16611979611bde565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613db9565b60405180910390fd5b80600b8190555050565b6119e1611bde565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a675750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611abf5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ac857600080fd5b600e5481600d54611ad99190613fc9565b1115611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613c79565b60405180910390fd5b60005b81811015611bda576000611b2f61242f565b9050611b3b3382612470565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8b9190613fc9565b92505081905550600160086000828254611ba59190613fc9565b925050819055506001600d6000828254611bbf9190613fc9565b92505081905550508080611bd290614233565b915050611b1d565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611c17906141d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906141d0565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b5050505050905090565b611ca2612298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790613c39565b60405180910390fd5b8060056000611d1d612298565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dca612298565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e0f9190613afc565b60405180910390a35050565b601660009054906101000a900460ff1681565b6000611e38612298565b73ffffffffffffffffffffffffffffffffffffffff16611e56611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613db9565b60405180910390fd5b47905090565b611ec3611ebd612298565b8361248e565b611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990613e59565b60405180910390fd5b611f0e8484848461293f565b50505050565b6000600b54905090565b611f26612298565b73ffffffffffffffffffffffffffffffffffffffff16611f44611bde565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613db9565b60405180910390fd5b8060159080519060200190611fb0929190612f66565b5050565b6060611fbf8261230a565b611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613df9565b60405180910390fd5b601660009054906101000a900460ff166120a4576015805461201f906141d0565b80601f016020809104026020016040519081016040528092919081815260200182805461204b906141d0565b80156120985780601f1061206d57610100808354040283529160200191612098565b820191906000526020600020905b81548152906001019060200180831161207b57829003601f168201915b505050505090506120fd565b60006120ae61299b565b905060008151116120ce57604051806020016040528060008152506120f9565b806120d884612a2d565b6040516020016120e9929190613a2b565b6040516020818303038152906040525b9150505b919050565b6000600954905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a8612298565b73ffffffffffffffffffffffffffffffffffffffff166121c6611bde565b73ffffffffffffffffffffffffffffffffffffffff161461221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613bb9565b60405180910390fd5b61229581612879565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e9836116cd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061243a6110aa565b90506000600190505b8015612468576001826124569190613fc9565b91506124618261230a565b9050612443565b819250505090565b61248a828260405180602001604052806000815250612b8e565b5050565b60006124998261230a565b6124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90613c99565b60405180910390fd5b60006124e3836116cd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255257508373ffffffffffffffffffffffffffffffffffffffff1661253a84610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b806125635750612562818561210c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661258c826116cd565b73ffffffffffffffffffffffffffffffffffffffff16146125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d990613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264990613c19565b60405180910390fd5b61265d838383612be9565b612668600082612376565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b891906140aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461270f9190613fc9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127ee90613a80565b60006040518083038185875af1925050503d806000811461282b576040519150601f19603f3d011682016040523d82523d6000602084013e612830565b606091505b5050905080612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90613bf9565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61294a84848461256c565b61295684848484612bee565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90613b99565b60405180910390fd5b50505050565b6060600a80546129aa906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906141d0565b8015612a235780601f106129f857610100808354040283529160200191612a23565b820191906000526020600020905b815481529060010190602001808311612a0657829003601f168201915b5050505050905090565b60606000821415612a75576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b89565b600082905060005b60008214612aa7578080612a9090614233565b915050600a82612aa0919061401f565b9150612a7d565b60008167ffffffffffffffff811115612ac357612ac26143c6565b5b6040519080825280601f01601f191660200182016040528015612af55781602001600182028036833780820191505090505b5090505b60008514612b8257600182612b0e91906140aa565b9150600a85612b1d91906142aa565b6030612b299190613fc9565b60f81b818381518110612b3f57612b3e614397565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b7b919061401f565b9450612af9565b8093505050505b919050565b612b988383612d85565b612ba56000848484612bee565b612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb90613b99565b60405180910390fd5b505050565b505050565b6000612c0f8473ffffffffffffffffffffffffffffffffffffffff16612f53565b15612d78578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c38612298565b8786866040518563ffffffff1660e01b8152600401612c5a9493929190613ab0565b602060405180830381600087803b158015612c7457600080fd5b505af1925050508015612ca557506040513d601f19601f82011682018060405250810190612ca291906133d3565b60015b612d28573d8060008114612cd5576040519150601f19603f3d011682016040523d82523d6000602084013e612cda565b606091505b50600081511415612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790613b99565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d7d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90613d59565b60405180910390fd5b612dfe8161230a565b15612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590613bd9565b60405180910390fd5b612e4a60008383612be9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e9a9190613fc9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612f72906141d0565b90600052602060002090601f016020900481019282612f945760008555612fdb565b82601f10612fad57805160ff1916838001178555612fdb565b82800160010185558215612fdb579182015b82811115612fda578251825591602001919060010190612fbf565b5b509050612fe89190612fec565b5090565b5b80821115613005576000816000905550600101612fed565b5090565b600061301c61301784613f19565b613ef4565b905082815260208101848484011115613038576130376143fa565b5b61304384828561418e565b509392505050565b600061305e61305984613f4a565b613ef4565b90508281526020810184848401111561307a576130796143fa565b5b61308584828561418e565b509392505050565b60008135905061309c81614b1a565b92915050565b6000813590506130b181614b31565b92915050565b6000813590506130c681614b48565b92915050565b6000813590506130db81614b5f565b92915050565b6000815190506130f081614b5f565b92915050565b600082601f83011261310b5761310a6143f5565b5b813561311b848260208601613009565b91505092915050565b600082601f830112613139576131386143f5565b5b813561314984826020860161304b565b91505092915050565b60008135905061316181614b76565b92915050565b60008135905061317681614b8d565b92915050565b60006020828403121561319257613191614404565b5b60006131a08482850161308d565b91505092915050565b600080604083850312156131c0576131bf614404565b5b60006131ce8582860161308d565b92505060206131df8582860161308d565b9150509250929050565b60008060006060848603121561320257613201614404565b5b60006132108682870161308d565b93505060206132218682870161308d565b925050604061323286828701613152565b9150509250925092565b6000806000806080858703121561325657613255614404565b5b60006132648782880161308d565b94505060206132758782880161308d565b935050604061328687828801613152565b925050606085013567ffffffffffffffff8111156132a7576132a66143ff565b5b6132b3878288016130f6565b91505092959194509250565b600080604083850312156132d6576132d5614404565b5b60006132e48582860161308d565b92505060206132f5858286016130a2565b9150509250929050565b6000806040838503121561331657613315614404565b5b60006133248582860161308d565b925050602061333585828601613152565b9150509250929050565b6000806000806080858703121561335957613358614404565b5b60006133678782880161308d565b945050602061337887828801613167565b9350506040613389878288016130b7565b925050606061339a878288016130b7565b91505092959194509250565b6000602082840312156133bc576133bb614404565b5b60006133ca848285016130cc565b91505092915050565b6000602082840312156133e9576133e8614404565b5b60006133f7848285016130e1565b91505092915050565b60006020828403121561341657613415614404565b5b600082013567ffffffffffffffff811115613434576134336143ff565b5b61344084828501613124565b91505092915050565b60006020828403121561345f5761345e614404565b5b600061346d84828501613152565b91505092915050565b600080600080608085870312156134905761348f614404565b5b600061349e87828801613152565b94505060206134af87828801613167565b93505060406134c0878288016130b7565b92505060606134d1878288016130b7565b91505092959194509250565b6134e6816140de565b82525050565b6134fd6134f8826140de565b61427c565b82525050565b61350c816140f0565b82525050565b61351b816140fc565b82525050565b61353261352d826140fc565b61428e565b82525050565b600061354382613f7b565b61354d8185613f91565b935061355d81856020860161419d565b61356681614409565b840191505092915050565b61357a8161417c565b82525050565b600061358b82613f86565b6135958185613fad565b93506135a581856020860161419d565b6135ae81614409565b840191505092915050565b60006135c482613f86565b6135ce8185613fbe565b93506135de81856020860161419d565b80840191505092915050565b60006135f7601c83613fbe565b915061360282614427565b601c82019050919050565b600061361a603283613fad565b915061362582614450565b604082019050919050565b600061363d602683613fad565b91506136488261449f565b604082019050919050565b6000613660601c83613fad565b915061366b826144ee565b602082019050919050565b6000613683601483613fad565b915061368e82614517565b602082019050919050565b60006136a6602483613fad565b91506136b182614540565b604082019050919050565b60006136c9601983613fad565b91506136d48261458f565b602082019050919050565b60006136ec601e83613fad565b91506136f7826145b8565b602082019050919050565b600061370f601583613fad565b915061371a826145e1565b602082019050919050565b6000613732602c83613fad565b915061373d8261460a565b604082019050919050565b6000613755601583613fad565b915061376082614659565b602082019050919050565b6000613778603883613fad565b915061378382614682565b604082019050919050565b600061379b603183613fad565b91506137a6826146d1565b604082019050919050565b60006137be602a83613fad565b91506137c982614720565b604082019050919050565b60006137e1602983613fad565b91506137ec8261476f565b604082019050919050565b6000613804602083613fad565b915061380f826147be565b602082019050919050565b6000613827602c83613fad565b9150613832826147e7565b604082019050919050565b600061384a600583613fbe565b915061385582614836565b600582019050919050565b600061386d601183613fad565b91506138788261485f565b602082019050919050565b6000613890602083613fad565b915061389b82614888565b602082019050919050565b60006138b3602983613fad565b91506138be826148b1565b604082019050919050565b60006138d6602f83613fad565b91506138e182614900565b604082019050919050565b60006138f9602a83613fad565b91506139048261494f565b604082019050919050565b600061391c602183613fad565b91506139278261499e565b604082019050919050565b600061393f600083613fa2565b915061394a826149ed565b600082019050919050565b6000613962603183613fad565b915061396d826149f0565b604082019050919050565b6000613985602483613fad565b915061399082614a3f565b604082019050919050565b60006139a8601583613fad565b91506139b382614a8e565b602082019050919050565b60006139cb602283613fad565b91506139d682614ab7565b604082019050919050565b6139ea81614165565b82525050565b6139f98161416f565b82525050565b6000613a0b82856134ec565b601482019150613a1b82846134ec565b6014820191508190509392505050565b6000613a3782856135b9565b9150613a4382846135b9565b9150613a4e8261383d565b91508190509392505050565b6000613a65826135ea565b9150613a718284613521565b60208201915081905092915050565b6000613a8b82613932565b9150819050919050565b6000602082019050613aaa60008301846134dd565b92915050565b6000608082019050613ac560008301876134dd565b613ad260208301866134dd565b613adf60408301856139e1565b8181036060830152613af18184613538565b905095945050505050565b6000602082019050613b116000830184613503565b92915050565b6000608082019050613b2c6000830187613512565b613b3960208301866139f0565b613b466040830185613512565b613b536060830184613512565b95945050505050565b6000602082019050613b716000830184613571565b92915050565b60006020820190508181036000830152613b918184613580565b905092915050565b60006020820190508181036000830152613bb28161360d565b9050919050565b60006020820190508181036000830152613bd281613630565b9050919050565b60006020820190508181036000830152613bf281613653565b9050919050565b60006020820190508181036000830152613c1281613676565b9050919050565b60006020820190508181036000830152613c3281613699565b9050919050565b60006020820190508181036000830152613c52816136bc565b9050919050565b60006020820190508181036000830152613c72816136df565b9050919050565b60006020820190508181036000830152613c9281613702565b9050919050565b60006020820190508181036000830152613cb281613725565b9050919050565b60006020820190508181036000830152613cd281613748565b9050919050565b60006020820190508181036000830152613cf28161376b565b9050919050565b60006020820190508181036000830152613d128161378e565b9050919050565b60006020820190508181036000830152613d32816137b1565b9050919050565b60006020820190508181036000830152613d52816137d4565b9050919050565b60006020820190508181036000830152613d72816137f7565b9050919050565b60006020820190508181036000830152613d928161381a565b9050919050565b60006020820190508181036000830152613db281613860565b9050919050565b60006020820190508181036000830152613dd281613883565b9050919050565b60006020820190508181036000830152613df2816138a6565b9050919050565b60006020820190508181036000830152613e12816138c9565b9050919050565b60006020820190508181036000830152613e32816138ec565b9050919050565b60006020820190508181036000830152613e528161390f565b9050919050565b60006020820190508181036000830152613e7281613955565b9050919050565b60006020820190508181036000830152613e9281613978565b9050919050565b60006020820190508181036000830152613eb28161399b565b9050919050565b60006020820190508181036000830152613ed2816139be565b9050919050565b6000602082019050613eee60008301846139e1565b92915050565b6000613efe613f0f565b9050613f0a8282614202565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3457613f336143c6565b5b613f3d82614409565b9050602081019050919050565b600067ffffffffffffffff821115613f6557613f646143c6565b5b613f6e82614409565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fd482614165565b9150613fdf83614165565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614014576140136142db565b5b828201905092915050565b600061402a82614165565b915061403583614165565b9250826140455761404461430a565b5b828204905092915050565b600061405b82614165565b915061406683614165565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561409f5761409e6142db565b5b828202905092915050565b60006140b582614165565b91506140c083614165565b9250828210156140d3576140d26142db565b5b828203905092915050565b60006140e982614145565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061414082614b06565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061418782614132565b9050919050565b82818337600083830152505050565b60005b838110156141bb5780820151818401526020810190506141a0565b838111156141ca576000848401525b50505050565b600060028204905060018216806141e857607f821691505b602082108114156141fc576141fb614368565b5b50919050565b61420b82614409565b810181811067ffffffffffffffff8211171561422a576142296143c6565b5b80604052505050565b600061423e82614165565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614271576142706142db565b5b600182019050919050565b600061428782614298565b9050919050565b6000819050919050565b60006142a38261441a565b9050919050565b60006142b582614165565b91506142c083614165565b9250826142d0576142cf61430a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4e6f7420656e6f756768204e465473206c656674210000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c792072657665616c207768656e2063757272656e742073746160008201527f746520697320756e72657665616c656421000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686174206973206d6f7265207468616e20796f752061726520616c6c6f776560008201527f6420746f206d696e742100000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75722077616c6c657420646f65736e2774206861766520656e6f7567682060008201527f4554482100000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b60028110614b1757614b16614339565b5b50565b614b23816140de565b8114614b2e57600080fd5b50565b614b3a816140f0565b8114614b4557600080fd5b50565b614b51816140fc565b8114614b5c57600080fd5b50565b614b6881614106565b8114614b7357600080fd5b50565b614b7f81614165565b8114614b8a57600080fd5b50565b614b968161416f565b8114614ba157600080fd5b5056fea2646970667358221220a4bc57ff609516cccff6e9f8462c3c164a5cb3e701ea4c611066cc798f32edb464736f6c63430008070033
Deployed Bytecode Sourcemap
34788:8821:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37044:8;;;42058:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22903:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23854:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41105:94;;;;;;;;;;;;;:::i;:::-;;25169:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24692:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39185:807;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38071:160;;;;;;;;;;;;;:::i;:::-;;42217:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43503:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26059:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36295:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38820:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37492:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41418:308;;;;;;;;;;;;;:::i;:::-;;26469:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42378:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43095:195;;;;;;;;;;;;;:::i;:::-;;42588:207;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23548:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36492:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23278:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:94;;;;;;;;;;;;;:::i;:::-;;35363:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42968:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40623:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24023:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25462:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36576:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41249:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26725:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42844:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37609:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40004:560;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43355:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25828:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42058:87;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:6:::1;42123:5;;:14;;;;;;;;;;;;;;;;;;42058:87:::0;:::o;22903:305::-;23005:4;23057:25;23042:40;;;:11;:40;;;;:105;;;;23114:33;23099:48;;;:11;:48;;;;23042:105;:158;;;;23164:36;23188:11;23164:23;:36::i;:::-;23042:158;23022:178;;22903:305;;;:::o;23854:100::-;23908:13;23941:5;23934:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23854:100;:::o;41105:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41172:19:::1;;41155:14;:36;;;;41105:94::o:0;25169:221::-;25245:7;25273:16;25281:7;25273;:16::i;:::-;25265:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25358:15;:24;25374:7;25358:24;;;;;;;;;;;;;;;;;;;;;25351:31;;25169:221;;;:::o;24692:411::-;24773:13;24789:23;24804:7;24789:14;:23::i;:::-;24773:39;;24837:5;24831:11;;:2;:11;;;;24823:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24931:5;24915:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24940:37;24957:5;24964:12;:10;:12::i;:::-;24940:16;:37::i;:::-;24915:62;24893:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25074:21;25083:2;25087:7;25074:8;:21::i;:::-;24762:341;24692:411;;:::o;39185:807::-;39265:2;39270;39274;38322:41;38343:10;38354:2;38357;38360;38322:20;:41::i;:::-;38313:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:16:::1;39323:11;:9;:11::i;:::-;39304:30;;39367:12;39353:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;;;39345:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39493:14;;39474:16;;:33;;;;:::i;:::-;39456:14;;:52;;;;:::i;:::-;39446:6;39424:19;;:28;;;;:::i;:::-;:84;;39416:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;39602:7;;39592:6;39562:15;:27;39578:10;39562:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:47;;39554:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39701:6;39688:10;:8;:10::i;:::-;:19;;;;:::i;:::-;39675:9;:32;;39667:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39774:9;39769:214;39793:6;39789:1;:10;39769:214;;;39821:11;39835:9;:7;:9::i;:::-;39821:23;;39859:26;39869:10;39881:3;39859:9;:26::i;:::-;39931:1;39900:15;:27;39916:10;39900:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;39970:1;39947:19;;:24;;;;;;;:::i;:::-;;;;;;;;39806:177;39801:3;;;;;:::i;:::-;;;;39769:214;;;;39293:699;39185:807:::0;;;;;;;:::o;38071:160::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38142:12:::1;38127:27;;;;;;;;:::i;:::-;;:11;:9;:11::i;:::-;:27;;;;;;;;:::i;:::-;;;38119:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38208:15;38191:14;:32;;;;38071:160::o:0;42217:94::-;42260:4;42284:19;;42277:26;;42217:94;:::o;43503:92::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43579:8:::1;43569:7;:18;;;;43503:92:::0;:::o;26059:339::-;26254:41;26273:12;:10;:12::i;:::-;26287:7;26254:18;:41::i;:::-;26246:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26362:28;26372:4;26378:2;26382:7;26362:9;:28::i;:::-;26059:339;;;:::o;36295:50::-;;;;;;;;;;;;;;;;;:::o;38820:306::-;38919:4;38936:12;38986:4;38993;38961:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38951:48;;;;;;38936:63;;39026:92;39099:4;39046:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;39036:69;;;;;;39107:2;39111;39115;39026:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39017:101;;:5;;;;;;;;;;;:101;;;39010:108;;;38820:306;;;;;;:::o;37492:109::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37585:8:::1;37567:15;:26;;;;;;;;;;;;:::i;:::-;;37492:109:::0;:::o;41418:308::-;37187:7;:5;:7::i;:::-;37173:21;;:10;:21;;;:54;;;;37212:15;;;;;;;;;;;37198:29;;:10;:29;;;37173:54;:87;;;;37245:15;;;;;;;;;;;37231:29;;:10;:29;;;37173:87;37165:96;;;;;;41469:15:::1;41487:16;:14;:16::i;:::-;41469:34;;41532:1;41522:7;:11;41514:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41593:48;41603:15;;;;;;;;;;;41637:3;41631:2;41621:7;:12;;;;:::i;:::-;41620:20;;;;:::i;:::-;41593:9;:48::i;:::-;41653:44;41663:15;;;;;;;;;;;41680:16;:14;:16::i;:::-;41653:9;:44::i;:::-;41458:268;41418:308::o:0;26469:185::-;26607:39;26624:4;26630:2;26634:7;26607:39;;;;;;;;;;;;:16;:39::i;:::-;26469:185;;;:::o;42378:124::-;42437:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42480:14:::1;;42461:16;;:33;;;;:::i;:::-;42454:40;;42378:124:::0;:::o;43095:195::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43156:6:::1;;;;;;;;;;;43155:7;43147:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43237:6;;;;;;;;;;;43236:7;43227:6;;:16;;;;;;;;;;;;;;;;;;43267:15;43254:10;:28;;;;43095:195::o:0;42588:207::-;42629:5;42668:1;42650:14;;:19;42646:138;;;42693:12;42686:19;;;;42646:138;42758:14;42751:21;;42588:207;;:::o;23548:239::-;23620:7;23640:13;23656:7;:16;23664:7;23656:16;;;;;;;;;;;;;;;;;;;;;23640:32;;23708:1;23691:19;;:5;:19;;;;23683:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:5;23767:12;;;23548:239;;;:::o;36492:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23278:208::-;23350:7;23395:1;23378:19;;:5;:19;;;;23370:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23462:9;:16;23472:5;23462:16;;;;;;;;;;;;;;;;23455:23;;23278:208;;;:::o;4591:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:21:::1;4674:1;4656:9;:21::i;:::-;4591:94::o:0;35363:26::-;;;;:::o;42968:93::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43046:7:::1;43034:9;:19;;;;42968:93:::0;:::o;40623:419::-;37187:7;:5;:7::i;:::-;37173:21;;:10;:21;;;:54;;;;37212:15;;;;;;;;;;;37198:29;;:10;:29;;;37173:54;:87;;;;37245:15;;;;;;;;;;;37231:29;;:10;:29;;;37173:87;37165:96;;;;;;40734:16:::1;;40724:6;40707:14;;:23;;;;:::i;:::-;:43;;40699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40792:9;40787:248;40811:6;40807:1;:10;40787:248;;;40839:11;40853:9;:7;:9::i;:::-;40839:23;;40877:26;40887:10;40899:3;40877:9;:26::i;:::-;40949:1;40918:15;:27;40934:10;40918:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;40988:1;40965:19;;:24;;;;;;;:::i;:::-;;;;;;;;41022:1;41004:14;;:19;;;;;;;:::i;:::-;;;;;;;;40824:211;40819:3;;;;;:::i;:::-;;;;40787:248;;;;40623:419:::0;:::o;3940:87::-;3986:7;4013:6;;;;;;;;;;;4006:13;;3940:87;:::o;24023:104::-;24079:13;24112:7;24105:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24023:104;:::o;25462:295::-;25577:12;:10;:12::i;:::-;25565:24;;:8;:24;;;;25557:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25677:8;25632:18;:32;25651:12;:10;:12::i;:::-;25632:32;;;;;;;;;;;;;;;:42;25665:8;25632:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25730:8;25701:48;;25716:12;:10;:12::i;:::-;25701:48;;;25740:8;25701:48;;;;;;:::i;:::-;;;;;;;;25462:295;;:::o;36576:18::-;;;;;;;;;;;;;:::o;41249:109::-;41305:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41329:21:::1;41322:28;;41249:109:::0;:::o;26725:328::-;26900:41;26919:12;:10;:12::i;:::-;26933:7;26900:18;:41::i;:::-;26892:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27006:39;27020:4;27026:2;27030:7;27039:5;27006:13;:39::i;:::-;26725:328;;;;:::o;42844:81::-;42884:4;42908:9;;42901:16;;42844:81;:::o;37609:125::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37712:14:::1;37696:13;:30;;;;;;;;;;;;:::i;:::-;;37609:125:::0;:::o;40004:560::-;40078:13;40112:17;40120:8;40112:7;:17::i;:::-;40104:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40294:6;;;;;;;;;;;40289:264;;40324:13;40317:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40289:264;40389:21;40413:10;:8;:10::i;:::-;40389:34;;40469:1;40451:7;40445:21;:25;:96;;;;;;;;;;;;;;;;;40497:7;40506:19;:8;:17;:19::i;:::-;40480:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40445:96;40438:103;;;40004:560;;;;:::o;43355:87::-;43396:4;43420:14;;43413:21;;43355:87;:::o;25828:164::-;25925:4;25949:18;:25;25968:5;25949:25;;;;;;;;;;;;;;;:35;25975:8;25949:35;;;;;;;;;;;;;;;;;;;;;;;;;25942:42;;25828:164;;;;:::o;4840:192::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4949:1:::1;4929:22;;:8;:22;;;;4921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5005:19;5015:8;5005:9;:19::i;:::-;4840:192:::0;:::o;2728:98::-;2781:7;2808:10;2801:17;;2728:98;:::o;15926:157::-;16011:4;16050:25;16035:40;;;:11;:40;;;;16028:47;;15926:157;;;:::o;28563:127::-;28628:4;28680:1;28652:30;;:7;:16;28660:7;28652:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28645:37;;28563:127;;;:::o;32545:174::-;32647:2;32620:15;:24;32636:7;32620:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32703:7;32699:2;32665:46;;32674:23;32689:7;32674:14;:23::i;:::-;32665:46;;;;;;;;;;;;32545:174;;:::o;37790:273::-;37831:7;37851:14;37868:13;:11;:13::i;:::-;37851:30;;37892:11;37906:4;37892:18;;37921:98;37928:6;37921:98;;;37964:1;37951:14;;;;;:::i;:::-;;;37989:18;37997:9;37989:7;:18::i;:::-;37980:27;;37921:98;;;38046:9;38039:16;;;;37790:273;:::o;29547:110::-;29623:26;29633:2;29637:7;29623:26;;;;;;;;;;;;:9;:26::i;:::-;29547:110;;:::o;28857:348::-;28950:4;28975:16;28983:7;28975;:16::i;:::-;28967:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29051:13;29067:23;29082:7;29067:14;:23::i;:::-;29051:39;;29120:5;29109:16;;:7;:16;;;:51;;;;29153:7;29129:31;;:20;29141:7;29129:11;:20::i;:::-;:31;;;29109:51;:87;;;;29164:32;29181:5;29188:7;29164:16;:32::i;:::-;29109:87;29101:96;;;28857:348;;;;:::o;31849:578::-;32008:4;31981:31;;:23;31996:7;31981:14;:23::i;:::-;:31;;;31973:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32091:1;32077:16;;:2;:16;;;;32069:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32147:39;32168:4;32174:2;32178:7;32147:20;:39::i;:::-;32251:29;32268:1;32272:7;32251:8;:29::i;:::-;32312:1;32293:9;:15;32303:4;32293:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32341:1;32324:9;:13;32334:2;32324:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32372:2;32353:7;:16;32361:7;32353:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32411:7;32407:2;32392:27;;32401:4;32392:27;;;;;;;;;;;;31849:578;;;:::o;41801:183::-;41882:9;41897:7;:12;;41917:6;41897:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41881:47;;;41947:4;41939:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;41870:114;41801:183;;:::o;5040:173::-;5096:16;5115:6;;;;;;;;;;;5096:25;;5141:8;5132:6;;:17;;;;;;;;;;;;;;;;;;5196:8;5165:40;;5186:8;5165:40;;;;;;;;;;;;5085:128;5040:173;:::o;27935:315::-;28092:28;28102:4;28108:2;28112:7;28092:9;:28::i;:::-;28139:48;28162:4;28168:2;28172:7;28181:5;28139:22;:48::i;:::-;28131:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:315;;;;:::o;37318:116::-;37378:13;37411:15;37404:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37318:116;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;29884:321::-;30014:18;30020:2;30024:7;30014:5;:18::i;:::-;30065:54;30096:1;30100:2;30104:7;30113:5;30065:22;:54::i;:::-;30043:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29884:321;;;:::o;34655:126::-;;;;:::o;33284:799::-;33439:4;33460:15;:2;:13;;;:15::i;:::-;33456:620;;;33512:2;33496:36;;;33533:12;:10;:12::i;:::-;33547:4;33553:7;33562:5;33496:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33492:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33755:1;33738:6;:13;:18;33734:272;;;33781:60;;;;;;;;;;:::i;:::-;;;;;;;;33734:272;33956:6;33950:13;33941:6;33937:2;33933:15;33926:38;33492:529;33629:41;;;33619:51;;;:6;:51;;;;33612:58;;;;;33456:620;34060:4;34053:11;;33284:799;;;;;;;:::o;30541:382::-;30635:1;30621:16;;:2;:16;;;;30613:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30694:16;30702:7;30694;:16::i;:::-;30693:17;30685:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30756:45;30785:1;30789:2;30793:7;30756:20;:45::i;:::-;30831:1;30814:9;:13;30824:2;30814:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30862:2;30843:7;:16;30851:7;30843:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30907:7;30903:2;30882:33;;30899:1;30882:33;;;;;;;;;;;;30541:382;;:::o;5986:387::-;6046:4;6254:12;6321:7;6309:20;6301:28;;6364:1;6357:4;:8;6350:15;;;5986:387;;;:::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:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:135::-;2466:5;2504:6;2491:20;2482:29;;2520:31;2545:5;2520:31;:::i;:::-;2422:135;;;;:::o;2563:329::-;2622:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:119;;;2677:79;;:::i;:::-;2639:119;2797:1;2822:53;2867:7;2858:6;2847:9;2843:22;2822:53;:::i;:::-;2812:63;;2768:117;2563:329;;;;:::o;2898:474::-;2966:6;2974;3023:2;3011:9;3002:7;2998:23;2994:32;2991:119;;;3029:79;;:::i;:::-;2991:119;3149:1;3174:53;3219:7;3210:6;3199:9;3195:22;3174:53;:::i;:::-;3164:63;;3120:117;3276:2;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3247:118;2898:474;;;;;:::o;3378:619::-;3455:6;3463;3471;3520:2;3508:9;3499:7;3495:23;3491:32;3488:119;;;3526:79;;:::i;:::-;3488:119;3646:1;3671:53;3716:7;3707:6;3696:9;3692:22;3671:53;:::i;:::-;3661:63;;3617:117;3773:2;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3744:118;3901:2;3927:53;3972:7;3963:6;3952:9;3948:22;3927:53;:::i;:::-;3917:63;;3872:118;3378:619;;;;;:::o;4003:943::-;4098:6;4106;4114;4122;4171:3;4159:9;4150:7;4146:23;4142:33;4139:120;;;4178:79;;:::i;:::-;4139:120;4298:1;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4269:117;4425:2;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4396:118;4553:2;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4524:118;4709:2;4698:9;4694:18;4681:32;4740:18;4732:6;4729:30;4726:117;;;4762:79;;:::i;:::-;4726:117;4867:62;4921:7;4912:6;4901:9;4897:22;4867:62;:::i;:::-;4857:72;;4652:287;4003:943;;;;;;;:::o;4952:468::-;5017:6;5025;5074:2;5062:9;5053:7;5049:23;5045:32;5042:119;;;5080:79;;:::i;:::-;5042:119;5200:1;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5171:117;5327:2;5353:50;5395:7;5386:6;5375:9;5371:22;5353:50;:::i;:::-;5343:60;;5298:115;4952:468;;;;;:::o;5426:474::-;5494:6;5502;5551:2;5539:9;5530:7;5526:23;5522:32;5519:119;;;5557:79;;:::i;:::-;5519:119;5677:1;5702:53;5747:7;5738:6;5727:9;5723:22;5702:53;:::i;:::-;5692:63;;5648:117;5804:2;5830:53;5875:7;5866:6;5855:9;5851:22;5830:53;:::i;:::-;5820:63;;5775:118;5426:474;;;;;:::o;5906:761::-;5990:6;5998;6006;6014;6063:3;6051:9;6042:7;6038:23;6034:33;6031:120;;;6070:79;;:::i;:::-;6031:120;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:51;6386:7;6377:6;6366:9;6362:22;6343:51;:::i;:::-;6333:61;;6288:116;6443:2;6469:53;6514:7;6505:6;6494:9;6490:22;6469:53;:::i;:::-;6459:63;;6414:118;6571:2;6597:53;6642:7;6633:6;6622:9;6618:22;6597:53;:::i;:::-;6587:63;;6542:118;5906:761;;;;;;;:::o;6673:327::-;6731:6;6780:2;6768:9;6759:7;6755:23;6751:32;6748:119;;;6786:79;;:::i;:::-;6748:119;6906:1;6931:52;6975:7;6966:6;6955:9;6951:22;6931:52;:::i;:::-;6921:62;;6877:116;6673:327;;;;:::o;7006:349::-;7075:6;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:63;7330:7;7321:6;7310:9;7306:22;7275:63;:::i;:::-;7265:73;;7221:127;7006:349;;;;:::o;7361:509::-;7430:6;7479:2;7467:9;7458:7;7454:23;7450:32;7447:119;;;7485:79;;:::i;:::-;7447:119;7633:1;7622:9;7618:17;7605:31;7663:18;7655:6;7652:30;7649:117;;;7685:79;;:::i;:::-;7649:117;7790:63;7845:7;7836:6;7825:9;7821:22;7790:63;:::i;:::-;7780:73;;7576:287;7361:509;;;;:::o;7876:329::-;7935:6;7984:2;7972:9;7963:7;7959:23;7955:32;7952:119;;;7990:79;;:::i;:::-;7952:119;8110:1;8135:53;8180:7;8171:6;8160:9;8156:22;8135:53;:::i;:::-;8125:63;;8081:117;7876:329;;;;:::o;8211:761::-;8295:6;8303;8311;8319;8368:3;8356:9;8347:7;8343:23;8339:33;8336:120;;;8375:79;;:::i;:::-;8336:120;8495:1;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8466:117;8622:2;8648:51;8691:7;8682:6;8671:9;8667:22;8648:51;:::i;:::-;8638:61;;8593:116;8748:2;8774:53;8819:7;8810:6;8799:9;8795:22;8774:53;:::i;:::-;8764:63;;8719:118;8876:2;8902:53;8947:7;8938:6;8927:9;8923:22;8902:53;:::i;:::-;8892:63;;8847:118;8211:761;;;;;;;:::o;8978:118::-;9065:24;9083:5;9065:24;:::i;:::-;9060:3;9053:37;8978:118;;:::o;9102:157::-;9207:45;9227:24;9245:5;9227:24;:::i;:::-;9207:45;:::i;:::-;9202:3;9195:58;9102:157;;:::o;9265:109::-;9346:21;9361:5;9346:21;:::i;:::-;9341:3;9334:34;9265:109;;:::o;9380:118::-;9467:24;9485:5;9467:24;:::i;:::-;9462:3;9455:37;9380:118;;:::o;9504:157::-;9609:45;9629:24;9647:5;9629:24;:::i;:::-;9609:45;:::i;:::-;9604:3;9597:58;9504:157;;:::o;9667:360::-;9753:3;9781:38;9813:5;9781:38;:::i;:::-;9835:70;9898:6;9893:3;9835:70;:::i;:::-;9828:77;;9914:52;9959:6;9954:3;9947:4;9940:5;9936:16;9914:52;:::i;:::-;9991:29;10013:6;9991:29;:::i;:::-;9986:3;9982:39;9975:46;;9757:270;9667:360;;;;:::o;10033:147::-;10128:45;10167:5;10128:45;:::i;:::-;10123:3;10116:58;10033:147;;:::o;10186:364::-;10274:3;10302:39;10335:5;10302:39;:::i;:::-;10357:71;10421:6;10416:3;10357:71;:::i;:::-;10350:78;;10437:52;10482:6;10477:3;10470:4;10463:5;10459:16;10437:52;:::i;:::-;10514:29;10536:6;10514:29;:::i;:::-;10509:3;10505:39;10498:46;;10278:272;10186:364;;;;:::o;10556:377::-;10662:3;10690:39;10723:5;10690:39;:::i;:::-;10745:89;10827:6;10822:3;10745:89;:::i;:::-;10738:96;;10843:52;10888:6;10883:3;10876:4;10869:5;10865:16;10843:52;:::i;:::-;10920:6;10915:3;10911:16;10904:23;;10666:267;10556:377;;;;:::o;10939:402::-;11099:3;11120:85;11202:2;11197:3;11120:85;:::i;:::-;11113:92;;11214:93;11303:3;11214:93;:::i;:::-;11332:2;11327:3;11323:12;11316:19;;10939:402;;;:::o;11347:366::-;11489:3;11510:67;11574:2;11569:3;11510:67;:::i;:::-;11503:74;;11586:93;11675:3;11586:93;:::i;:::-;11704:2;11699:3;11695:12;11688:19;;11347:366;;;:::o;11719:::-;11861:3;11882:67;11946:2;11941:3;11882:67;:::i;:::-;11875:74;;11958:93;12047:3;11958:93;:::i;:::-;12076:2;12071:3;12067:12;12060:19;;11719:366;;;:::o;12091:::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:::-;12605:3;12626:67;12690:2;12685:3;12626:67;:::i;:::-;12619:74;;12702:93;12791:3;12702:93;:::i;:::-;12820:2;12815:3;12811:12;12804:19;;12463:366;;;:::o;12835:::-;12977:3;12998:67;13062:2;13057:3;12998:67;:::i;:::-;12991:74;;13074:93;13163:3;13074:93;:::i;:::-;13192:2;13187:3;13183:12;13176:19;;12835:366;;;:::o;13207:::-;13349:3;13370:67;13434:2;13429:3;13370:67;:::i;:::-;13363:74;;13446:93;13535:3;13446:93;:::i;:::-;13564:2;13559:3;13555:12;13548:19;;13207:366;;;:::o;13579:::-;13721:3;13742:67;13806:2;13801:3;13742:67;:::i;:::-;13735:74;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13579:366;;;:::o;13951:::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:::-;14465:3;14486:67;14550:2;14545:3;14486:67;:::i;:::-;14479:74;;14562:93;14651:3;14562:93;:::i;:::-;14680:2;14675:3;14671:12;14664:19;;14323:366;;;:::o;14695:::-;14837:3;14858:67;14922:2;14917:3;14858:67;:::i;:::-;14851:74;;14934:93;15023:3;14934:93;:::i;:::-;15052:2;15047:3;15043:12;15036:19;;14695:366;;;:::o;15067:::-;15209:3;15230:67;15294:2;15289:3;15230:67;:::i;:::-;15223:74;;15306:93;15395:3;15306:93;:::i;:::-;15424:2;15419:3;15415:12;15408:19;;15067:366;;;:::o;15439:::-;15581:3;15602:67;15666:2;15661:3;15602:67;:::i;:::-;15595:74;;15678:93;15767:3;15678:93;:::i;:::-;15796:2;15791:3;15787:12;15780:19;;15439:366;;;:::o;15811:::-;15953:3;15974:67;16038:2;16033:3;15974:67;:::i;:::-;15967:74;;16050:93;16139:3;16050:93;:::i;:::-;16168:2;16163:3;16159:12;16152:19;;15811:366;;;:::o;16183:::-;16325:3;16346:67;16410:2;16405:3;16346:67;:::i;:::-;16339:74;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16183:366;;;:::o;16555:::-;16697:3;16718:67;16782:2;16777:3;16718:67;:::i;:::-;16711:74;;16794:93;16883:3;16794:93;:::i;:::-;16912:2;16907:3;16903:12;16896:19;;16555:366;;;:::o;16927:::-;17069:3;17090:67;17154:2;17149:3;17090:67;:::i;:::-;17083:74;;17166:93;17255:3;17166:93;:::i;:::-;17284:2;17279:3;17275:12;17268:19;;16927:366;;;:::o;17299:400::-;17459:3;17480:84;17562:1;17557:3;17480:84;:::i;:::-;17473:91;;17573:93;17662:3;17573:93;:::i;:::-;17691:1;17686:3;17682:11;17675:18;;17299:400;;;:::o;17705:366::-;17847:3;17868:67;17932:2;17927:3;17868:67;:::i;:::-;17861:74;;17944:93;18033:3;17944:93;:::i;:::-;18062:2;18057:3;18053:12;18046:19;;17705:366;;;:::o;18077:::-;18219:3;18240:67;18304:2;18299:3;18240:67;:::i;:::-;18233:74;;18316:93;18405:3;18316:93;:::i;:::-;18434:2;18429:3;18425:12;18418:19;;18077:366;;;:::o;18449:::-;18591:3;18612:67;18676:2;18671:3;18612:67;:::i;:::-;18605:74;;18688:93;18777:3;18688:93;:::i;:::-;18806:2;18801:3;18797:12;18790:19;;18449:366;;;:::o;18821:::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:::-;19335:3;19356:67;19420:2;19415:3;19356:67;:::i;:::-;19349:74;;19432:93;19521:3;19432:93;:::i;:::-;19550:2;19545:3;19541:12;19534:19;;19193:366;;;:::o;19565:::-;19707:3;19728:67;19792:2;19787:3;19728:67;:::i;:::-;19721:74;;19804:93;19893:3;19804:93;:::i;:::-;19922:2;19917:3;19913:12;19906:19;;19565:366;;;:::o;19937:398::-;20096:3;20117:83;20198:1;20193:3;20117:83;:::i;:::-;20110:90;;20209:93;20298:3;20209:93;:::i;:::-;20327:1;20322:3;20318:11;20311:18;;19937:398;;;:::o;20341:366::-;20483:3;20504:67;20568:2;20563:3;20504:67;:::i;:::-;20497:74;;20580:93;20669:3;20580:93;:::i;:::-;20698:2;20693:3;20689:12;20682:19;;20341:366;;;:::o;20713:::-;20855:3;20876:67;20940:2;20935:3;20876:67;:::i;:::-;20869:74;;20952:93;21041:3;20952:93;:::i;:::-;21070:2;21065:3;21061:12;21054:19;;20713:366;;;:::o;21085:::-;21227:3;21248:67;21312:2;21307:3;21248:67;:::i;:::-;21241:74;;21324:93;21413:3;21324:93;:::i;:::-;21442:2;21437:3;21433:12;21426:19;;21085:366;;;:::o;21457:::-;21599:3;21620:67;21684:2;21679:3;21620:67;:::i;:::-;21613:74;;21696:93;21785:3;21696:93;:::i;:::-;21814:2;21809:3;21805:12;21798:19;;21457:366;;;:::o;21829:118::-;21916:24;21934:5;21916:24;:::i;:::-;21911:3;21904:37;21829:118;;:::o;21953:112::-;22036:22;22052:5;22036:22;:::i;:::-;22031:3;22024:35;21953:112;;:::o;22071:397::-;22211:3;22226:75;22297:3;22288:6;22226:75;:::i;:::-;22326:2;22321:3;22317:12;22310:19;;22339:75;22410:3;22401:6;22339:75;:::i;:::-;22439:2;22434:3;22430:12;22423:19;;22459:3;22452:10;;22071:397;;;;;:::o;22474:701::-;22755:3;22777:95;22868:3;22859:6;22777:95;:::i;:::-;22770:102;;22889:95;22980:3;22971:6;22889:95;:::i;:::-;22882:102;;23001:148;23145:3;23001:148;:::i;:::-;22994:155;;23166:3;23159:10;;22474:701;;;;;:::o;23181:522::-;23394:3;23416:148;23560:3;23416:148;:::i;:::-;23409:155;;23574:75;23645:3;23636:6;23574:75;:::i;:::-;23674:2;23669:3;23665:12;23658:19;;23694:3;23687:10;;23181:522;;;;:::o;23709:379::-;23893:3;23915:147;24058:3;23915:147;:::i;:::-;23908:154;;24079:3;24072:10;;23709:379;;;:::o;24094:222::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24238:71;24306:1;24295:9;24291:17;24282:6;24238:71;:::i;:::-;24094:222;;;;:::o;24322:640::-;24517:4;24555:3;24544:9;24540:19;24532:27;;24569:71;24637:1;24626:9;24622:17;24613:6;24569:71;:::i;:::-;24650:72;24718:2;24707:9;24703:18;24694:6;24650:72;:::i;:::-;24732;24800:2;24789:9;24785:18;24776:6;24732:72;:::i;:::-;24851:9;24845:4;24841:20;24836:2;24825:9;24821:18;24814:48;24879:76;24950:4;24941:6;24879:76;:::i;:::-;24871:84;;24322:640;;;;;;;:::o;24968:210::-;25055:4;25093:2;25082:9;25078:18;25070:26;;25106:65;25168:1;25157:9;25153:17;25144:6;25106:65;:::i;:::-;24968:210;;;;:::o;25184:545::-;25357:4;25395:3;25384:9;25380:19;25372:27;;25409:71;25477:1;25466:9;25462:17;25453:6;25409:71;:::i;:::-;25490:68;25554:2;25543:9;25539:18;25530:6;25490:68;:::i;:::-;25568:72;25636:2;25625:9;25621:18;25612:6;25568:72;:::i;:::-;25650;25718:2;25707:9;25703:18;25694:6;25650:72;:::i;:::-;25184:545;;;;;;;:::o;25735:238::-;25836:4;25874:2;25863:9;25859:18;25851:26;;25887:79;25963:1;25952:9;25948:17;25939:6;25887:79;:::i;:::-;25735:238;;;;:::o;25979:313::-;26092:4;26130:2;26119:9;26115:18;26107:26;;26179:9;26173:4;26169:20;26165:1;26154:9;26150:17;26143:47;26207:78;26280:4;26271:6;26207:78;:::i;:::-;26199:86;;25979:313;;;;:::o;26298:419::-;26464:4;26502:2;26491:9;26487:18;26479:26;;26551:9;26545:4;26541:20;26537:1;26526:9;26522:17;26515:47;26579:131;26705:4;26579:131;:::i;:::-;26571:139;;26298:419;;;:::o;26723:::-;26889:4;26927:2;26916:9;26912:18;26904:26;;26976:9;26970:4;26966:20;26962:1;26951:9;26947:17;26940:47;27004:131;27130:4;27004:131;:::i;:::-;26996:139;;26723:419;;;:::o;27148:::-;27314:4;27352:2;27341:9;27337:18;27329:26;;27401:9;27395:4;27391:20;27387:1;27376:9;27372:17;27365:47;27429:131;27555:4;27429:131;:::i;:::-;27421:139;;27148:419;;;:::o;27573:::-;27739:4;27777:2;27766:9;27762:18;27754:26;;27826:9;27820:4;27816:20;27812:1;27801:9;27797:17;27790:47;27854:131;27980:4;27854:131;:::i;:::-;27846:139;;27573:419;;;:::o;27998:::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:::-;28589:4;28627:2;28616:9;28612:18;28604:26;;28676:9;28670:4;28666:20;28662:1;28651:9;28647:17;28640:47;28704:131;28830:4;28704:131;:::i;:::-;28696:139;;28423:419;;;:::o;28848:::-;29014:4;29052:2;29041:9;29037:18;29029:26;;29101:9;29095:4;29091:20;29087:1;29076:9;29072:17;29065:47;29129:131;29255:4;29129:131;:::i;:::-;29121:139;;28848:419;;;:::o;29273:::-;29439:4;29477:2;29466:9;29462:18;29454:26;;29526:9;29520:4;29516:20;29512:1;29501:9;29497:17;29490:47;29554:131;29680:4;29554:131;:::i;:::-;29546:139;;29273:419;;;:::o;29698:::-;29864:4;29902:2;29891:9;29887:18;29879:26;;29951:9;29945:4;29941:20;29937:1;29926:9;29922:17;29915:47;29979:131;30105:4;29979:131;:::i;:::-;29971:139;;29698:419;;;:::o;30123:::-;30289:4;30327:2;30316:9;30312:18;30304:26;;30376:9;30370:4;30366:20;30362:1;30351:9;30347:17;30340:47;30404:131;30530:4;30404:131;:::i;:::-;30396:139;;30123:419;;;:::o;30548:::-;30714:4;30752:2;30741:9;30737:18;30729:26;;30801:9;30795:4;30791:20;30787:1;30776:9;30772:17;30765:47;30829:131;30955:4;30829:131;:::i;:::-;30821:139;;30548:419;;;:::o;30973:::-;31139:4;31177:2;31166:9;31162:18;31154:26;;31226:9;31220:4;31216:20;31212:1;31201:9;31197:17;31190:47;31254:131;31380:4;31254:131;:::i;:::-;31246:139;;30973:419;;;:::o;31398:::-;31564:4;31602:2;31591:9;31587:18;31579:26;;31651:9;31645:4;31641:20;31637:1;31626:9;31622:17;31615:47;31679:131;31805:4;31679:131;:::i;:::-;31671:139;;31398:419;;;:::o;31823:::-;31989:4;32027:2;32016:9;32012:18;32004:26;;32076:9;32070:4;32066:20;32062:1;32051:9;32047:17;32040:47;32104:131;32230:4;32104:131;:::i;:::-;32096:139;;31823:419;;;:::o;32248:::-;32414:4;32452:2;32441:9;32437:18;32429:26;;32501:9;32495:4;32491:20;32487:1;32476:9;32472:17;32465:47;32529:131;32655:4;32529:131;:::i;:::-;32521:139;;32248:419;;;:::o;32673:::-;32839:4;32877:2;32866:9;32862:18;32854:26;;32926:9;32920:4;32916:20;32912:1;32901:9;32897:17;32890:47;32954:131;33080:4;32954:131;:::i;:::-;32946:139;;32673:419;;;:::o;33098:::-;33264:4;33302:2;33291:9;33287:18;33279:26;;33351:9;33345:4;33341:20;33337:1;33326:9;33322:17;33315:47;33379:131;33505:4;33379:131;:::i;:::-;33371:139;;33098:419;;;:::o;33523:::-;33689:4;33727:2;33716:9;33712:18;33704:26;;33776:9;33770:4;33766:20;33762:1;33751:9;33747:17;33740:47;33804:131;33930:4;33804:131;:::i;:::-;33796:139;;33523:419;;;:::o;33948:::-;34114:4;34152:2;34141:9;34137:18;34129:26;;34201:9;34195:4;34191:20;34187:1;34176:9;34172:17;34165:47;34229:131;34355:4;34229:131;:::i;:::-;34221:139;;33948:419;;;:::o;34373:::-;34539:4;34577:2;34566:9;34562:18;34554:26;;34626:9;34620:4;34616:20;34612:1;34601:9;34597:17;34590:47;34654:131;34780:4;34654:131;:::i;:::-;34646:139;;34373:419;;;:::o;34798:::-;34964:4;35002:2;34991:9;34987:18;34979:26;;35051:9;35045:4;35041:20;35037:1;35026:9;35022:17;35015:47;35079:131;35205:4;35079:131;:::i;:::-;35071:139;;34798:419;;;:::o;35223:::-;35389:4;35427:2;35416:9;35412:18;35404:26;;35476:9;35470:4;35466:20;35462:1;35451:9;35447:17;35440:47;35504:131;35630:4;35504:131;:::i;:::-;35496:139;;35223:419;;;:::o;35648:::-;35814:4;35852:2;35841:9;35837:18;35829:26;;35901:9;35895:4;35891:20;35887:1;35876:9;35872:17;35865:47;35929:131;36055:4;35929:131;:::i;:::-;35921:139;;35648:419;;;:::o;36073:::-;36239:4;36277:2;36266:9;36262:18;36254:26;;36326:9;36320:4;36316:20;36312:1;36301:9;36297:17;36290:47;36354:131;36480:4;36354:131;:::i;:::-;36346:139;;36073:419;;;:::o;36498:::-;36664:4;36702:2;36691:9;36687:18;36679:26;;36751:9;36745:4;36741:20;36737:1;36726:9;36722:17;36715:47;36779:131;36905:4;36779:131;:::i;:::-;36771:139;;36498:419;;;:::o;36923:::-;37089:4;37127:2;37116:9;37112:18;37104:26;;37176:9;37170:4;37166:20;37162:1;37151:9;37147:17;37140:47;37204:131;37330:4;37204:131;:::i;:::-;37196:139;;36923:419;;;:::o;37348:222::-;37441:4;37479:2;37468:9;37464:18;37456:26;;37492:71;37560:1;37549:9;37545:17;37536:6;37492:71;:::i;:::-;37348:222;;;;:::o;37576:129::-;37610:6;37637:20;;:::i;:::-;37627:30;;37666:33;37694:4;37686:6;37666:33;:::i;:::-;37576:129;;;:::o;37711:75::-;37744:6;37777:2;37771:9;37761:19;;37711:75;:::o;37792:307::-;37853:4;37943:18;37935:6;37932:30;37929:56;;;37965:18;;:::i;:::-;37929:56;38003:29;38025:6;38003:29;:::i;:::-;37995:37;;38087:4;38081;38077:15;38069:23;;37792:307;;;:::o;38105:308::-;38167:4;38257:18;38249:6;38246:30;38243:56;;;38279:18;;:::i;:::-;38243:56;38317:29;38339:6;38317:29;:::i;:::-;38309:37;;38401:4;38395;38391:15;38383:23;;38105:308;;;:::o;38419:98::-;38470:6;38504:5;38498:12;38488:22;;38419:98;;;:::o;38523:99::-;38575:6;38609:5;38603:12;38593:22;;38523:99;;;:::o;38628:168::-;38711:11;38745:6;38740:3;38733:19;38785:4;38780:3;38776:14;38761:29;;38628:168;;;;:::o;38802:147::-;38903:11;38940:3;38925:18;;38802:147;;;;:::o;38955:169::-;39039:11;39073:6;39068:3;39061:19;39113:4;39108:3;39104:14;39089:29;;38955:169;;;;:::o;39130:148::-;39232:11;39269:3;39254:18;;39130:148;;;;:::o;39284:305::-;39324:3;39343:20;39361:1;39343:20;:::i;:::-;39338:25;;39377:20;39395:1;39377:20;:::i;:::-;39372:25;;39531:1;39463:66;39459:74;39456:1;39453:81;39450:107;;;39537:18;;:::i;:::-;39450:107;39581:1;39578;39574:9;39567:16;;39284:305;;;;:::o;39595:185::-;39635:1;39652:20;39670:1;39652:20;:::i;:::-;39647:25;;39686:20;39704:1;39686:20;:::i;:::-;39681:25;;39725:1;39715:35;;39730:18;;:::i;:::-;39715:35;39772:1;39769;39765:9;39760:14;;39595:185;;;;:::o;39786:348::-;39826:7;39849:20;39867:1;39849:20;:::i;:::-;39844:25;;39883:20;39901:1;39883:20;:::i;:::-;39878:25;;40071:1;40003:66;39999:74;39996:1;39993:81;39988:1;39981:9;39974:17;39970:105;39967:131;;;40078:18;;:::i;:::-;39967:131;40126:1;40123;40119:9;40108:20;;39786:348;;;;:::o;40140:191::-;40180:4;40200:20;40218:1;40200:20;:::i;:::-;40195:25;;40234:20;40252:1;40234:20;:::i;:::-;40229:25;;40273:1;40270;40267:8;40264:34;;;40278:18;;:::i;:::-;40264:34;40323:1;40320;40316:9;40308:17;;40140:191;;;;:::o;40337:96::-;40374:7;40403:24;40421:5;40403:24;:::i;:::-;40392:35;;40337:96;;;:::o;40439:90::-;40473:7;40516:5;40509:13;40502:21;40491:32;;40439:90;;;:::o;40535:77::-;40572:7;40601:5;40590:16;;40535:77;;;:::o;40618:149::-;40654:7;40694:66;40687:5;40683:78;40672:89;;40618:149;;;:::o;40773:131::-;40820:7;40849:5;40838:16;;40855:43;40892:5;40855:43;:::i;:::-;40773:131;;;:::o;40910:126::-;40947:7;40987:42;40980:5;40976:54;40965:65;;40910:126;;;:::o;41042:77::-;41079:7;41108:5;41097:16;;41042:77;;;:::o;41125:86::-;41160:7;41200:4;41193:5;41189:16;41178:27;;41125:86;;;:::o;41217:131::-;41275:9;41308:34;41336:5;41308:34;:::i;:::-;41295:47;;41217:131;;;:::o;41354:154::-;41438:6;41433:3;41428;41415:30;41500:1;41491:6;41486:3;41482:16;41475:27;41354:154;;;:::o;41514:307::-;41582:1;41592:113;41606:6;41603:1;41600:13;41592:113;;;41691:1;41686:3;41682:11;41676:18;41672:1;41667:3;41663:11;41656:39;41628:2;41625:1;41621:10;41616:15;;41592:113;;;41723:6;41720:1;41717:13;41714:101;;;41803:1;41794:6;41789:3;41785:16;41778:27;41714:101;41563:258;41514:307;;;:::o;41827:320::-;41871:6;41908:1;41902:4;41898:12;41888:22;;41955:1;41949:4;41945:12;41976:18;41966:81;;42032:4;42024:6;42020:17;42010:27;;41966:81;42094:2;42086:6;42083:14;42063:18;42060:38;42057:84;;;42113:18;;:::i;:::-;42057:84;41878:269;41827:320;;;:::o;42153:281::-;42236:27;42258:4;42236:27;:::i;:::-;42228:6;42224:40;42366:6;42354:10;42351:22;42330:18;42318:10;42315:34;42312:62;42309:88;;;42377:18;;:::i;:::-;42309:88;42417:10;42413:2;42406:22;42196:238;42153:281;;:::o;42440:233::-;42479:3;42502:24;42520:5;42502:24;:::i;:::-;42493:33;;42548:66;42541:5;42538:77;42535:103;;;42618:18;;:::i;:::-;42535:103;42665:1;42658:5;42654:13;42647:20;;42440:233;;;:::o;42679:100::-;42718:7;42747:26;42767:5;42747:26;:::i;:::-;42736:37;;42679:100;;;:::o;42785:79::-;42824:7;42853:5;42842:16;;42785:79;;;:::o;42870:94::-;42909:7;42938:20;42952:5;42938:20;:::i;:::-;42927:31;;42870:94;;;:::o;42970:176::-;43002:1;43019:20;43037:1;43019:20;:::i;:::-;43014:25;;43053:20;43071:1;43053:20;:::i;:::-;43048:25;;43092:1;43082:35;;43097:18;;:::i;:::-;43082:35;43138:1;43135;43131:9;43126:14;;42970:176;;;;:::o;43152:180::-;43200:77;43197:1;43190:88;43297:4;43294:1;43287:15;43321:4;43318:1;43311:15;43338:180;43386:77;43383:1;43376:88;43483:4;43480:1;43473:15;43507:4;43504:1;43497:15;43524:180;43572:77;43569:1;43562:88;43669:4;43666:1;43659:15;43693:4;43690:1;43683:15;43710:180;43758:77;43755:1;43748:88;43855:4;43852:1;43845:15;43879:4;43876:1;43869:15;43896:180;43944:77;43941:1;43934:88;44041:4;44038:1;44031:15;44065:4;44062:1;44055:15;44082:180;44130:77;44127:1;44120:88;44227:4;44224:1;44217:15;44251:4;44248:1;44241:15;44268:117;44377:1;44374;44367:12;44391:117;44500:1;44497;44490:12;44514:117;44623:1;44620;44613:12;44637:117;44746:1;44743;44736:12;44760:102;44801:6;44852:2;44848:7;44843:2;44836:5;44832:14;44828:28;44818:38;;44760:102;;;:::o;44868:94::-;44901:8;44949:5;44945:2;44941:14;44920:35;;44868:94;;;:::o;44968:214::-;45108:66;45104:1;45096:6;45092:14;45085:90;44968:214;:::o;45188:237::-;45328:34;45324:1;45316:6;45312:14;45305:58;45397:20;45392:2;45384:6;45380:15;45373:45;45188:237;:::o;45431:225::-;45571:34;45567:1;45559:6;45555:14;45548:58;45640:8;45635:2;45627:6;45623:15;45616:33;45431:225;:::o;45662:178::-;45802:30;45798:1;45790:6;45786:14;45779:54;45662:178;:::o;45846:170::-;45986:22;45982:1;45974:6;45970:14;45963:46;45846:170;:::o;46022:223::-;46162:34;46158:1;46150:6;46146:14;46139:58;46231:6;46226:2;46218:6;46214:15;46207:31;46022:223;:::o;46251:175::-;46391:27;46387:1;46379:6;46375:14;46368:51;46251:175;:::o;46432:180::-;46572:32;46568:1;46560:6;46556:14;46549:56;46432:180;:::o;46618:171::-;46758:23;46754:1;46746:6;46742:14;46735:47;46618:171;:::o;46795:231::-;46935:34;46931:1;46923:6;46919:14;46912:58;47004:14;46999:2;46991:6;46987:15;46980:39;46795:231;:::o;47032:171::-;47172:23;47168:1;47160:6;47156:14;47149:47;47032:171;:::o;47209:243::-;47349:34;47345:1;47337:6;47333:14;47326:58;47418:26;47413:2;47405:6;47401:15;47394:51;47209:243;:::o;47458:236::-;47598:34;47594:1;47586:6;47582:14;47575:58;47667:19;47662:2;47654:6;47650:15;47643:44;47458:236;:::o;47700:229::-;47840:34;47836:1;47828:6;47824:14;47817:58;47909:12;47904:2;47896:6;47892:15;47885:37;47700:229;:::o;47935:228::-;48075:34;48071:1;48063:6;48059:14;48052:58;48144:11;48139:2;48131:6;48127:15;48120:36;47935:228;:::o;48169:182::-;48309:34;48305:1;48297:6;48293:14;48286:58;48169:182;:::o;48357:231::-;48497:34;48493:1;48485:6;48481:14;48474:58;48566:14;48561:2;48553:6;48549:15;48542:39;48357:231;:::o;48594:155::-;48734:7;48730:1;48722:6;48718:14;48711:31;48594:155;:::o;48755:167::-;48895:19;48891:1;48883:6;48879:14;48872:43;48755:167;:::o;48928:182::-;49068:34;49064:1;49056:6;49052:14;49045:58;48928:182;:::o;49116:228::-;49256:34;49252:1;49244:6;49240:14;49233:58;49325:11;49320:2;49312:6;49308:15;49301:36;49116:228;:::o;49350:234::-;49490:34;49486:1;49478:6;49474:14;49467:58;49559:17;49554:2;49546:6;49542:15;49535:42;49350:234;:::o;49590:229::-;49730:34;49726:1;49718:6;49714:14;49707:58;49799:12;49794:2;49786:6;49782:15;49775:37;49590:229;:::o;49825:220::-;49965:34;49961:1;49953:6;49949:14;49942:58;50034:3;50029:2;50021:6;50017:15;50010:28;49825:220;:::o;50051:114::-;;:::o;50171:236::-;50311:34;50307:1;50299:6;50295:14;50288:58;50380:19;50375:2;50367:6;50363:15;50356:44;50171:236;:::o;50413:223::-;50553:34;50549:1;50541:6;50537:14;50530:58;50622:6;50617:2;50609:6;50605:15;50598:31;50413:223;:::o;50642:171::-;50782:23;50778:1;50770:6;50766:14;50759:47;50642:171;:::o;50819:221::-;50959:34;50955:1;50947:6;50943:14;50936:58;51028:4;51023:2;51015:6;51011:15;51004:29;50819:221;:::o;51046:115::-;51129:1;51122:5;51119:12;51109:46;;51135:18;;:::i;:::-;51109:46;51046:115;:::o;51167:122::-;51240:24;51258:5;51240:24;:::i;:::-;51233:5;51230:35;51220:63;;51279:1;51276;51269:12;51220:63;51167:122;:::o;51295:116::-;51365:21;51380:5;51365:21;:::i;:::-;51358:5;51355:32;51345:60;;51401:1;51398;51391:12;51345:60;51295:116;:::o;51417:122::-;51490:24;51508:5;51490:24;:::i;:::-;51483:5;51480:35;51470:63;;51529:1;51526;51519:12;51470:63;51417:122;:::o;51545:120::-;51617:23;51634:5;51617:23;:::i;:::-;51610:5;51607:34;51597:62;;51655:1;51652;51645:12;51597:62;51545:120;:::o;51671:122::-;51744:24;51762:5;51744:24;:::i;:::-;51737:5;51734:35;51724:63;;51783:1;51780;51773:12;51724:63;51671:122;:::o;51799:118::-;51870:22;51886:5;51870:22;:::i;:::-;51863:5;51860:33;51850:61;;51907:1;51904;51897:12;51850:61;51799:118;:::o
Swarm Source
ipfs://a4bc57ff609516cccff6e9f8462c3c164a5cb3e701ea4c611066cc798f32edb4
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.