Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
38 KD
Holders
21
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 KDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KoinDeck
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-14 */ /** *Submitted for verification at Etherscan.io on 2021-09-22 */ /** *Submitted for verification at Etherscan.io on 2021-09-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; contract KoinDeck is Ownable, ERC721 { uint constant tokenPrice = 0.078 ether; uint constant presale_tokenPrice = 0.068 ether; uint constant maxSupply = 8888; uint constant public_supply= 8882; uint public reserved_from = 8882; uint public totalSupply = 0; uint public totalminted = 0; uint public presale_starttime = 1636930800; uint public sale_startTime = 1636934400; bool public pause_sale = false; mapping(address => bool) private presaleList; string public baseURI; uint public maxPerWallet = 10; //Max Limit for Sale uint public maxPerWalletPresale = 3; //Max Limit for Presale constructor() ERC721("KoinDeck", "KD"){} function buy(uint _count) public payable{ require(_count > 0, "mint at least one token"); require(totalminted + _count <= public_supply, "Not enough tokens left"); require(msg.value >= tokenPrice * _count, "incorrect ether amount"); require(block.timestamp >= sale_startTime,"Sale not Started Yet."); require(pause_sale == false, "Sale is Paused."); require(balanceOf(msg.sender) + _count <= maxPerWallet, "10 tokens per wallet"); for(uint i = 0; i < _count; i++) _safeMint(msg.sender, totalminted + 1 + i); totalSupply += _count; totalminted += _count; } function buy_presale(uint _count) public payable{ require(checkPresale() == true, "You are not in Presale List."); require(_count > 0, "mint at least one token"); require(totalminted + _count <= public_supply, "Not enough tokens left"); require(msg.value >= presale_tokenPrice * _count, "incorrect ether amount"); require(block.timestamp >= presale_starttime,"Sale not Started Yet."); require(block.timestamp <= sale_startTime,"Sale Ended."); require(pause_sale == false, "Sale is Paused."); require(balanceOf(msg.sender) + _count <= maxPerWalletPresale, "3 tokens per wallet"); for(uint i = 0; i < _count; i++) _safeMint(msg.sender, totalminted + 1 + i); totalSupply += _count; totalminted += _count; } function sendGifts(address[] memory _wallets) public onlyOwner{ require(totalminted + _wallets.length <= public_supply, "not enough tokens left"); for(uint i = 0; i < _wallets.length; i++) _safeMint(_wallets[i], totalminted + 1 + i); totalSupply += _wallets.length; totalminted += _wallets.length; } function send_reserved_as_Gift(address[] memory _wallets) public onlyOwner{ require(reserved_from + _wallets.length <= maxSupply, "not enough tokens left"); for(uint i = 0; i < _wallets.length; i++) _safeMint(_wallets[i], reserved_from + 1 + i); reserved_from += _wallets.length; totalSupply += _wallets.length; } function addPresaleList(address[] memory _wallets) public onlyOwner{ for(uint i; i < _wallets.length; i++) presaleList[_wallets[i]] = true; } function checkPresale() public view returns(bool){ return presaleList[msg.sender]; } function setBaseUri(string memory _uri) external onlyOwner { baseURI = _uri; } function setPauseSale(bool temp) external onlyOwner { pause_sale = temp; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function set_start_time(uint256 time) external onlyOwner{ sale_startTime = time; } function is_presale_active() public view returns(uint){ require(block.timestamp >= presale_starttime,"Sale not Started Yet."); require(block.timestamp <= sale_startTime,"Sale Ended."); return 1; } function set_presale_start_time(uint256 time) external onlyOwner{ presale_starttime = time; } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } }
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"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_presale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletPresale","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":"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":"pause_sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved_from","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"send_reserved_as_Gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"setPauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"set_presale_start_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"set_start_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalminted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526122b26007556000600855600060095563619194f0600a55636191a300600b556000600c60006101000a81548160ff021916908315150217905550600a600f5560036010553480156200005657600080fd5b506040518060400160405280600881526020017f4b6f696e4465636b0000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4b44000000000000000000000000000000000000000000000000000000000000815250620000e3620000d76200011d60201b60201c565b6200012560201b60201c565b8160019080519060200190620000fb929190620001e9565b50806002908051906020019062000114929190620001e9565b505050620002fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f79062000299565b90600052602060002090601f0160209004810192826200021b576000855562000267565b82601f106200023657805160ff191683800117855562000267565b8280016001018555821562000267579182015b828111156200026657825182559160200191906001019062000249565b5b5090506200027691906200027a565b5090565b5b80821115620002955760008160009055506001016200027b565b5090565b60006002820490506001821680620002b257607f821691505b60208210811415620002c957620002c8620002cf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6145a7806200030e6000396000f3fe60806040526004361061021a5760003560e01c80637c8255db11610123578063b083620f116100ab578063c87b56dd1161006f578063c87b56dd1461077a578063d96a094a146107b7578063e985e9c5146107d3578063ebb3151014610810578063f2fde38b146108395761021a565b8063b083620f146106b8578063b27b1a6d146106e1578063b88d4fde1461070a578063bb2841c514610733578063c1580cb31461074f5761021a565b8063a0bcfc7f116100f2578063a0bcfc7f146105e7578063a22cb46514610610578063aa29e23f14610639578063adb4ab6614610662578063b01b72031461068d5761021a565b80637c8255db1461053d5780638da5cb5b1461056657806395d89b4114610591578063996953fc146105bc5761021a565b80633ccfd60b116101a65780636352211e116101755780636352211e146104585780636c0360eb146104955780636ed4b488146104c057806370a08231146104e9578063715018a6146105265761021a565b80633ccfd60b146103c257806342842e0e146103d9578063453c2310146104025780635e21e32f1461042d5761021a565b8063081812fc116101ed578063081812fc146102dd578063095ea7b31461031a57806318160ddd14610343578063230a9b8d1461036e57806323b872dd146103995761021a565b806301ffc9a71461021f578063026896631461025c57806303158dde1461028757806306fdde03146102b2575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061311f565b610862565b60405161025391906136d8565b60405180910390f35b34801561026857600080fd5b50610271610944565b60405161027e91906136d8565b60405180910390f35b34801561029357600080fd5b5061029c610998565b6040516102a99190613a55565b60405180910390f35b3480156102be57600080fd5b506102c761099e565b6040516102d491906136f3565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906131c2565b610a30565b6040516103119190613671565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613069565b610ab5565b005b34801561034f57600080fd5b50610358610bcd565b6040516103659190613a55565b60405180910390f35b34801561037a57600080fd5b50610383610bd3565b6040516103909190613a55565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190612f53565b610bd9565b005b3480156103ce57600080fd5b506103d7610c39565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190612f53565b610d05565b005b34801561040e57600080fd5b50610417610d25565b6040516104249190613a55565b60405180910390f35b34801561043957600080fd5b50610442610d2b565b60405161044f9190613a55565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906131c2565b610d31565b60405161048c9190613671565b60405180910390f35b3480156104a157600080fd5b506104aa610de3565b6040516104b791906136f3565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e291906131c2565b610e71565b005b3480156104f557600080fd5b50610510600480360381019061050b9190612ee6565b610ef7565b60405161051d9190613a55565b60405180910390f35b34801561053257600080fd5b5061053b610faf565b005b34801561054957600080fd5b50610564600480360381019061055f91906130a9565b611037565b005b34801561057257600080fd5b5061057b61119a565b6040516105889190613671565b60405180910390f35b34801561059d57600080fd5b506105a66111c3565b6040516105b391906136f3565b60405180910390f35b3480156105c857600080fd5b506105d1611255565b6040516105de9190613a55565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613179565b6112e8565b005b34801561061c57600080fd5b5061063760048036038101906106329190613029565b61137e565b005b34801561064557600080fd5b50610660600480360381019061065b91906130f2565b6114ff565b005b34801561066e57600080fd5b50610677611598565b6040516106849190613a55565b60405180910390f35b34801561069957600080fd5b506106a261159e565b6040516106af9190613a55565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906130a9565b6115a4565b005b3480156106ed57600080fd5b50610708600480360381019061070391906131c2565b611707565b005b34801561071657600080fd5b50610731600480360381019061072c9190612fa6565b61178d565b005b61074d600480360381019061074891906131c2565b6117ef565b005b34801561075b57600080fd5b50610764611ad6565b60405161077191906136d8565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c91906131c2565b611ae9565b6040516107ae91906136f3565b60405180910390f35b6107d160048036038101906107cc91906131c2565b611b90565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190612f13565b611de5565b60405161080791906136d8565b60405180910390f35b34801561081c57600080fd5b50610837600480360381019061083291906130a9565b611e79565b005b34801561084557600080fd5b50610860600480360381019061085b9190612ee6565b611f8a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093d575061093c82612082565b5b9050919050565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b600b5481565b6060600180546109ad90613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546109d990613d31565b8015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b5050505050905090565b6000610a3b826120ec565b610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7190613895565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac082610d31565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613935565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b50612158565b73ffffffffffffffffffffffffffffffffffffffff161480610b7f5750610b7e81610b79612158565b611de5565b5b610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb5906137f5565b60405180910390fd5b610bc88383612160565b505050565b60085481565b60105481565b610bea610be4612158565b82612219565b610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090613975565b60405180910390fd5b610c348383836122f7565b505050565b610c41612158565b73ffffffffffffffffffffffffffffffffffffffff16610c5f61119a565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac906138b5565b60405180910390fd5b610cbd61119a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d02573d6000803e3d6000fd5b50565b610d208383836040518060200160405280600081525061178d565b505050565b600f5481565b60075481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190613835565b60405180910390fd5b80915050919050565b600e8054610df090613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1c90613d31565b8015610e695780601f10610e3e57610100808354040283529160200191610e69565b820191906000526020600020905b815481529060010190602001808311610e4c57829003601f168201915b505050505081565b610e79612158565b73ffffffffffffffffffffffffffffffffffffffff16610e9761119a565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906138b5565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613815565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb7612158565b73ffffffffffffffffffffffffffffffffffffffff16610fd561119a565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906138b5565b60405180910390fd5b6110356000612553565b565b61103f612158565b73ffffffffffffffffffffffffffffffffffffffff1661105d61119a565b73ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906138b5565b60405180910390fd5b6122b281516009546110c59190613b66565b1115611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906139d5565b60405180910390fd5b60005b81518110156111625761114f82828151811061112857611127613e9b565b5b60200260200101518260016009546111409190613b66565b61114a9190613b66565b612617565b808061115a90613d94565b915050611109565b508051600860008282546111769190613b66565b925050819055508051600960008282546111909190613b66565b9250508190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111d290613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546111fe90613d31565b801561124b5780601f106112205761010080835404028352916020019161124b565b820191906000526020600020905b81548152906001019060200180831161122e57829003601f168201915b5050505050905090565b6000600a5442101561129c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611293906138d5565b60405180910390fd5b600b544211156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613a15565b60405180910390fd5b6001905090565b6112f0612158565b73ffffffffffffffffffffffffffffffffffffffff1661130e61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906138b5565b60405180910390fd5b80600e908051906020019061137a929190612c5c565b5050565b611386612158565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90613795565b60405180910390fd5b8060066000611401612158565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ae612158565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f391906136d8565b60405180910390a35050565b611507612158565b73ffffffffffffffffffffffffffffffffffffffff1661152561119a565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611572906138b5565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600a5481565b60095481565b6115ac612158565b73ffffffffffffffffffffffffffffffffffffffff166115ca61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611617906138b5565b60405180910390fd5b6122b881516007546116329190613b66565b1115611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a906139d5565b60405180910390fd5b60005b81518110156116cf576116bc82828151811061169557611694613e9b565b5b60200260200101518260016007546116ad9190613b66565b6116b79190613b66565b612617565b80806116c790613d94565b915050611676565b508051600760008282546116e39190613b66565b925050819055508051600860008282546116fd9190613b66565b9250508190555050565b61170f612158565b73ffffffffffffffffffffffffffffffffffffffff1661172d61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a906138b5565b60405180910390fd5b80600b8190555050565b61179e611798612158565b83612219565b6117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613975565b60405180910390fd5b6117e984848484612635565b50505050565b600115156117fb610944565b15151461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906139b5565b60405180910390fd5b60008111611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613995565b60405180910390fd5b6122b2816009546118919190613b66565b11156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613855565b60405180910390fd5b8066f195a3c4ba00006118e59190613bed565b341015611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e906137d5565b60405180910390fd5b600a5442101561196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906138d5565b60405180910390fd5b600b544211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613a15565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613a35565b60405180910390fd5b60105481611a1433610ef7565b611a1e9190613b66565b1115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906139f5565b60405180910390fd5b60005b81811015611aa057611a8d33826001600954611a7e9190613b66565b611a889190613b66565b612617565b8080611a9890613d94565b915050611a62565b508060086000828254611ab39190613b66565b925050819055508060096000828254611acc9190613b66565b9250508190555050565b600c60009054906101000a900460ff1681565b6060611af4826120ec565b611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613915565b60405180910390fd5b6000611b3d612691565b90506000815111611b5d5760405180602001604052806000815250611b88565b80611b6784612723565b604051602001611b7892919061364d565b6040516020818303038152906040525b915050919050565b60008111611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90613995565b60405180910390fd5b6122b281600954611be49190613b66565b1115611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613855565b60405180910390fd5b806701151c96347b0000611c399190613bed565b341015611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906137d5565b60405180910390fd5b600b54421015611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906138d5565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d90613a35565b60405180910390fd5b600f5481611d2333610ef7565b611d2d9190613b66565b1115611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613955565b60405180910390fd5b60005b81811015611daf57611d9c33826001600954611d8d9190613b66565b611d979190613b66565b612617565b8080611da790613d94565b915050611d71565b508060086000828254611dc29190613b66565b925050819055508060096000828254611ddb9190613b66565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e81612158565b73ffffffffffffffffffffffffffffffffffffffff16611e9f61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec906138b5565b60405180910390fd5b60005b8151811015611f86576001600d6000848481518110611f1a57611f19613e9b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f7e90613d94565b915050611ef8565b5050565b611f92612158565b73ffffffffffffffffffffffffffffffffffffffff16611fb061119a565b73ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd906138b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613735565b60405180910390fd5b61207f81612553565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121d383610d31565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612224826120ec565b612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906137b5565b60405180910390fd5b600061226e83610d31565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122dd57508373ffffffffffffffffffffffffffffffffffffffff166122c584610a30565b73ffffffffffffffffffffffffffffffffffffffff16145b806122ee57506122ed8185611de5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231782610d31565b73ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612364906138f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490613775565b60405180910390fd5b6123e8838383612884565b6123f3600082612160565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124439190613c47565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249a9190613b66565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612631828260405180602001604052806000815250612889565b5050565b6126408484846122f7565b61264c848484846128e4565b61268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290613715565b60405180910390fd5b50505050565b6060600e80546126a090613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546126cc90613d31565b80156127195780601f106126ee57610100808354040283529160200191612719565b820191906000526020600020905b8154815290600101906020018083116126fc57829003601f168201915b5050505050905090565b6060600082141561276b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061287f565b600082905060005b6000821461279d57808061278690613d94565b915050600a826127969190613bbc565b9150612773565b60008167ffffffffffffffff8111156127b9576127b8613eca565b5b6040519080825280601f01601f1916602001820160405280156127eb5781602001600182028036833780820191505090505b5090505b60008514612878576001826128049190613c47565b9150600a856128139190613ddd565b603061281f9190613b66565b60f81b81838151811061283557612834613e9b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128719190613bbc565b94506127ef565b8093505050505b919050565b505050565b6128938383612a7b565b6128a060008484846128e4565b6128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690613715565b60405180910390fd5b505050565b60006129058473ffffffffffffffffffffffffffffffffffffffff16612c49565b15612a6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261292e612158565b8786866040518563ffffffff1660e01b8152600401612950949392919061368c565b602060405180830381600087803b15801561296a57600080fd5b505af192505050801561299b57506040513d601f19601f82011682018060405250810190612998919061314c565b60015b612a1e573d80600081146129cb576040519150601f19603f3d011682016040523d82523d6000602084013e6129d0565b606091505b50600081511415612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90613715565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a73565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae290613875565b60405180910390fd5b612af4816120ec565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90613755565b60405180910390fd5b612b4060008383612884565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b909190613b66565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612c6890613d31565b90600052602060002090601f016020900481019282612c8a5760008555612cd1565b82601f10612ca357805160ff1916838001178555612cd1565b82800160010185558215612cd1579182015b82811115612cd0578251825591602001919060010190612cb5565b5b509050612cde9190612ce2565b5090565b5b80821115612cfb576000816000905550600101612ce3565b5090565b6000612d12612d0d84613a95565b613a70565b90508083825260208201905082856020860282011115612d3557612d34613efe565b5b60005b85811015612d655781612d4b8882612df3565b845260208401935060208301925050600181019050612d38565b5050509392505050565b6000612d82612d7d84613ac1565b613a70565b905082815260208101848484011115612d9e57612d9d613f03565b5b612da9848285613cef565b509392505050565b6000612dc4612dbf84613af2565b613a70565b905082815260208101848484011115612de057612ddf613f03565b5b612deb848285613cef565b509392505050565b600081359050612e0281614515565b92915050565b600082601f830112612e1d57612e1c613ef9565b5b8135612e2d848260208601612cff565b91505092915050565b600081359050612e458161452c565b92915050565b600081359050612e5a81614543565b92915050565b600081519050612e6f81614543565b92915050565b600082601f830112612e8a57612e89613ef9565b5b8135612e9a848260208601612d6f565b91505092915050565b600082601f830112612eb857612eb7613ef9565b5b8135612ec8848260208601612db1565b91505092915050565b600081359050612ee08161455a565b92915050565b600060208284031215612efc57612efb613f0d565b5b6000612f0a84828501612df3565b91505092915050565b60008060408385031215612f2a57612f29613f0d565b5b6000612f3885828601612df3565b9250506020612f4985828601612df3565b9150509250929050565b600080600060608486031215612f6c57612f6b613f0d565b5b6000612f7a86828701612df3565b9350506020612f8b86828701612df3565b9250506040612f9c86828701612ed1565b9150509250925092565b60008060008060808587031215612fc057612fbf613f0d565b5b6000612fce87828801612df3565b9450506020612fdf87828801612df3565b9350506040612ff087828801612ed1565b925050606085013567ffffffffffffffff81111561301157613010613f08565b5b61301d87828801612e75565b91505092959194509250565b600080604083850312156130405761303f613f0d565b5b600061304e85828601612df3565b925050602061305f85828601612e36565b9150509250929050565b600080604083850312156130805761307f613f0d565b5b600061308e85828601612df3565b925050602061309f85828601612ed1565b9150509250929050565b6000602082840312156130bf576130be613f0d565b5b600082013567ffffffffffffffff8111156130dd576130dc613f08565b5b6130e984828501612e08565b91505092915050565b60006020828403121561310857613107613f0d565b5b600061311684828501612e36565b91505092915050565b60006020828403121561313557613134613f0d565b5b600061314384828501612e4b565b91505092915050565b60006020828403121561316257613161613f0d565b5b600061317084828501612e60565b91505092915050565b60006020828403121561318f5761318e613f0d565b5b600082013567ffffffffffffffff8111156131ad576131ac613f08565b5b6131b984828501612ea3565b91505092915050565b6000602082840312156131d8576131d7613f0d565b5b60006131e684828501612ed1565b91505092915050565b6131f881613c7b565b82525050565b61320781613c8d565b82525050565b600061321882613b23565b6132228185613b39565b9350613232818560208601613cfe565b61323b81613f12565b840191505092915050565b600061325182613b2e565b61325b8185613b4a565b935061326b818560208601613cfe565b61327481613f12565b840191505092915050565b600061328a82613b2e565b6132948185613b5b565b93506132a4818560208601613cfe565b80840191505092915050565b60006132bd603283613b4a565b91506132c882613f23565b604082019050919050565b60006132e0602683613b4a565b91506132eb82613f72565b604082019050919050565b6000613303601c83613b4a565b915061330e82613fc1565b602082019050919050565b6000613326602483613b4a565b915061333182613fea565b604082019050919050565b6000613349601983613b4a565b915061335482614039565b602082019050919050565b600061336c602c83613b4a565b915061337782614062565b604082019050919050565b600061338f601683613b4a565b915061339a826140b1565b602082019050919050565b60006133b2603883613b4a565b91506133bd826140da565b604082019050919050565b60006133d5602a83613b4a565b91506133e082614129565b604082019050919050565b60006133f8602983613b4a565b915061340382614178565b604082019050919050565b600061341b601683613b4a565b9150613426826141c7565b602082019050919050565b600061343e602083613b4a565b9150613449826141f0565b602082019050919050565b6000613461602c83613b4a565b915061346c82614219565b604082019050919050565b6000613484602083613b4a565b915061348f82614268565b602082019050919050565b60006134a7601583613b4a565b91506134b282614291565b602082019050919050565b60006134ca602983613b4a565b91506134d5826142ba565b604082019050919050565b60006134ed602f83613b4a565b91506134f882614309565b604082019050919050565b6000613510602183613b4a565b915061351b82614358565b604082019050919050565b6000613533601483613b4a565b915061353e826143a7565b602082019050919050565b6000613556603183613b4a565b9150613561826143d0565b604082019050919050565b6000613579601783613b4a565b91506135848261441f565b602082019050919050565b600061359c601c83613b4a565b91506135a782614448565b602082019050919050565b60006135bf601683613b4a565b91506135ca82614471565b602082019050919050565b60006135e2601383613b4a565b91506135ed8261449a565b602082019050919050565b6000613605600b83613b4a565b9150613610826144c3565b602082019050919050565b6000613628600f83613b4a565b9150613633826144ec565b602082019050919050565b61364781613ce5565b82525050565b6000613659828561327f565b9150613665828461327f565b91508190509392505050565b600060208201905061368660008301846131ef565b92915050565b60006080820190506136a160008301876131ef565b6136ae60208301866131ef565b6136bb604083018561363e565b81810360608301526136cd818461320d565b905095945050505050565b60006020820190506136ed60008301846131fe565b92915050565b6000602082019050818103600083015261370d8184613246565b905092915050565b6000602082019050818103600083015261372e816132b0565b9050919050565b6000602082019050818103600083015261374e816132d3565b9050919050565b6000602082019050818103600083015261376e816132f6565b9050919050565b6000602082019050818103600083015261378e81613319565b9050919050565b600060208201905081810360008301526137ae8161333c565b9050919050565b600060208201905081810360008301526137ce8161335f565b9050919050565b600060208201905081810360008301526137ee81613382565b9050919050565b6000602082019050818103600083015261380e816133a5565b9050919050565b6000602082019050818103600083015261382e816133c8565b9050919050565b6000602082019050818103600083015261384e816133eb565b9050919050565b6000602082019050818103600083015261386e8161340e565b9050919050565b6000602082019050818103600083015261388e81613431565b9050919050565b600060208201905081810360008301526138ae81613454565b9050919050565b600060208201905081810360008301526138ce81613477565b9050919050565b600060208201905081810360008301526138ee8161349a565b9050919050565b6000602082019050818103600083015261390e816134bd565b9050919050565b6000602082019050818103600083015261392e816134e0565b9050919050565b6000602082019050818103600083015261394e81613503565b9050919050565b6000602082019050818103600083015261396e81613526565b9050919050565b6000602082019050818103600083015261398e81613549565b9050919050565b600060208201905081810360008301526139ae8161356c565b9050919050565b600060208201905081810360008301526139ce8161358f565b9050919050565b600060208201905081810360008301526139ee816135b2565b9050919050565b60006020820190508181036000830152613a0e816135d5565b9050919050565b60006020820190508181036000830152613a2e816135f8565b9050919050565b60006020820190508181036000830152613a4e8161361b565b9050919050565b6000602082019050613a6a600083018461363e565b92915050565b6000613a7a613a8b565b9050613a868282613d63565b919050565b6000604051905090565b600067ffffffffffffffff821115613ab057613aaf613eca565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613adc57613adb613eca565b5b613ae582613f12565b9050602081019050919050565b600067ffffffffffffffff821115613b0d57613b0c613eca565b5b613b1682613f12565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b7182613ce5565b9150613b7c83613ce5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bb157613bb0613e0e565b5b828201905092915050565b6000613bc782613ce5565b9150613bd283613ce5565b925082613be257613be1613e3d565b5b828204905092915050565b6000613bf882613ce5565b9150613c0383613ce5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c3c57613c3b613e0e565b5b828202905092915050565b6000613c5282613ce5565b9150613c5d83613ce5565b925082821015613c7057613c6f613e0e565b5b828203905092915050565b6000613c8682613cc5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d1c578082015181840152602081019050613d01565b83811115613d2b576000848401525b50505050565b60006002820490506001821680613d4957607f821691505b60208210811415613d5d57613d5c613e6c565b5b50919050565b613d6c82613f12565b810181811067ffffffffffffffff82111715613d8b57613d8a613eca565b5b80604052505050565b6000613d9f82613ce5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd257613dd1613e0e565b5b600182019050919050565b6000613de882613ce5565b9150613df383613ce5565b925082613e0357613e02613e3d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f313020746f6b656e73207065722077616c6c6574000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f3320746f6b656e73207065722077616c6c657400000000000000000000000000600082015250565b7f53616c6520456e6465642e000000000000000000000000000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b61451e81613c7b565b811461452957600080fd5b50565b61453581613c8d565b811461454057600080fd5b50565b61454c81613c99565b811461455757600080fd5b50565b61456381613ce5565b811461456e57600080fd5b5056fea264697066735822122036416a8f65b342023692a788607a11a2cdb6c03fa8ed174dc41e0f6385a0b6b064736f6c63430008070033
Deployed Bytecode
0x60806040526004361061021a5760003560e01c80637c8255db11610123578063b083620f116100ab578063c87b56dd1161006f578063c87b56dd1461077a578063d96a094a146107b7578063e985e9c5146107d3578063ebb3151014610810578063f2fde38b146108395761021a565b8063b083620f146106b8578063b27b1a6d146106e1578063b88d4fde1461070a578063bb2841c514610733578063c1580cb31461074f5761021a565b8063a0bcfc7f116100f2578063a0bcfc7f146105e7578063a22cb46514610610578063aa29e23f14610639578063adb4ab6614610662578063b01b72031461068d5761021a565b80637c8255db1461053d5780638da5cb5b1461056657806395d89b4114610591578063996953fc146105bc5761021a565b80633ccfd60b116101a65780636352211e116101755780636352211e146104585780636c0360eb146104955780636ed4b488146104c057806370a08231146104e9578063715018a6146105265761021a565b80633ccfd60b146103c257806342842e0e146103d9578063453c2310146104025780635e21e32f1461042d5761021a565b8063081812fc116101ed578063081812fc146102dd578063095ea7b31461031a57806318160ddd14610343578063230a9b8d1461036e57806323b872dd146103995761021a565b806301ffc9a71461021f578063026896631461025c57806303158dde1461028757806306fdde03146102b2575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061311f565b610862565b60405161025391906136d8565b60405180910390f35b34801561026857600080fd5b50610271610944565b60405161027e91906136d8565b60405180910390f35b34801561029357600080fd5b5061029c610998565b6040516102a99190613a55565b60405180910390f35b3480156102be57600080fd5b506102c761099e565b6040516102d491906136f3565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906131c2565b610a30565b6040516103119190613671565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613069565b610ab5565b005b34801561034f57600080fd5b50610358610bcd565b6040516103659190613a55565b60405180910390f35b34801561037a57600080fd5b50610383610bd3565b6040516103909190613a55565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190612f53565b610bd9565b005b3480156103ce57600080fd5b506103d7610c39565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190612f53565b610d05565b005b34801561040e57600080fd5b50610417610d25565b6040516104249190613a55565b60405180910390f35b34801561043957600080fd5b50610442610d2b565b60405161044f9190613a55565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906131c2565b610d31565b60405161048c9190613671565b60405180910390f35b3480156104a157600080fd5b506104aa610de3565b6040516104b791906136f3565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e291906131c2565b610e71565b005b3480156104f557600080fd5b50610510600480360381019061050b9190612ee6565b610ef7565b60405161051d9190613a55565b60405180910390f35b34801561053257600080fd5b5061053b610faf565b005b34801561054957600080fd5b50610564600480360381019061055f91906130a9565b611037565b005b34801561057257600080fd5b5061057b61119a565b6040516105889190613671565b60405180910390f35b34801561059d57600080fd5b506105a66111c3565b6040516105b391906136f3565b60405180910390f35b3480156105c857600080fd5b506105d1611255565b6040516105de9190613a55565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613179565b6112e8565b005b34801561061c57600080fd5b5061063760048036038101906106329190613029565b61137e565b005b34801561064557600080fd5b50610660600480360381019061065b91906130f2565b6114ff565b005b34801561066e57600080fd5b50610677611598565b6040516106849190613a55565b60405180910390f35b34801561069957600080fd5b506106a261159e565b6040516106af9190613a55565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906130a9565b6115a4565b005b3480156106ed57600080fd5b50610708600480360381019061070391906131c2565b611707565b005b34801561071657600080fd5b50610731600480360381019061072c9190612fa6565b61178d565b005b61074d600480360381019061074891906131c2565b6117ef565b005b34801561075b57600080fd5b50610764611ad6565b60405161077191906136d8565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c91906131c2565b611ae9565b6040516107ae91906136f3565b60405180910390f35b6107d160048036038101906107cc91906131c2565b611b90565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190612f13565b611de5565b60405161080791906136d8565b60405180910390f35b34801561081c57600080fd5b50610837600480360381019061083291906130a9565b611e79565b005b34801561084557600080fd5b50610860600480360381019061085b9190612ee6565b611f8a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093d575061093c82612082565b5b9050919050565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b600b5481565b6060600180546109ad90613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546109d990613d31565b8015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b5050505050905090565b6000610a3b826120ec565b610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7190613895565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac082610d31565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613935565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b50612158565b73ffffffffffffffffffffffffffffffffffffffff161480610b7f5750610b7e81610b79612158565b611de5565b5b610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb5906137f5565b60405180910390fd5b610bc88383612160565b505050565b60085481565b60105481565b610bea610be4612158565b82612219565b610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090613975565b60405180910390fd5b610c348383836122f7565b505050565b610c41612158565b73ffffffffffffffffffffffffffffffffffffffff16610c5f61119a565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac906138b5565b60405180910390fd5b610cbd61119a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d02573d6000803e3d6000fd5b50565b610d208383836040518060200160405280600081525061178d565b505050565b600f5481565b60075481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190613835565b60405180910390fd5b80915050919050565b600e8054610df090613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1c90613d31565b8015610e695780601f10610e3e57610100808354040283529160200191610e69565b820191906000526020600020905b815481529060010190602001808311610e4c57829003601f168201915b505050505081565b610e79612158565b73ffffffffffffffffffffffffffffffffffffffff16610e9761119a565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906138b5565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613815565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb7612158565b73ffffffffffffffffffffffffffffffffffffffff16610fd561119a565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906138b5565b60405180910390fd5b6110356000612553565b565b61103f612158565b73ffffffffffffffffffffffffffffffffffffffff1661105d61119a565b73ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906138b5565b60405180910390fd5b6122b281516009546110c59190613b66565b1115611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906139d5565b60405180910390fd5b60005b81518110156111625761114f82828151811061112857611127613e9b565b5b60200260200101518260016009546111409190613b66565b61114a9190613b66565b612617565b808061115a90613d94565b915050611109565b508051600860008282546111769190613b66565b925050819055508051600960008282546111909190613b66565b9250508190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111d290613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546111fe90613d31565b801561124b5780601f106112205761010080835404028352916020019161124b565b820191906000526020600020905b81548152906001019060200180831161122e57829003601f168201915b5050505050905090565b6000600a5442101561129c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611293906138d5565b60405180910390fd5b600b544211156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613a15565b60405180910390fd5b6001905090565b6112f0612158565b73ffffffffffffffffffffffffffffffffffffffff1661130e61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906138b5565b60405180910390fd5b80600e908051906020019061137a929190612c5c565b5050565b611386612158565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90613795565b60405180910390fd5b8060066000611401612158565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ae612158565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f391906136d8565b60405180910390a35050565b611507612158565b73ffffffffffffffffffffffffffffffffffffffff1661152561119a565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611572906138b5565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600a5481565b60095481565b6115ac612158565b73ffffffffffffffffffffffffffffffffffffffff166115ca61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611617906138b5565b60405180910390fd5b6122b881516007546116329190613b66565b1115611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a906139d5565b60405180910390fd5b60005b81518110156116cf576116bc82828151811061169557611694613e9b565b5b60200260200101518260016007546116ad9190613b66565b6116b79190613b66565b612617565b80806116c790613d94565b915050611676565b508051600760008282546116e39190613b66565b925050819055508051600860008282546116fd9190613b66565b9250508190555050565b61170f612158565b73ffffffffffffffffffffffffffffffffffffffff1661172d61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a906138b5565b60405180910390fd5b80600b8190555050565b61179e611798612158565b83612219565b6117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613975565b60405180910390fd5b6117e984848484612635565b50505050565b600115156117fb610944565b15151461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906139b5565b60405180910390fd5b60008111611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613995565b60405180910390fd5b6122b2816009546118919190613b66565b11156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613855565b60405180910390fd5b8066f195a3c4ba00006118e59190613bed565b341015611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e906137d5565b60405180910390fd5b600a5442101561196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906138d5565b60405180910390fd5b600b544211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613a15565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613a35565b60405180910390fd5b60105481611a1433610ef7565b611a1e9190613b66565b1115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906139f5565b60405180910390fd5b60005b81811015611aa057611a8d33826001600954611a7e9190613b66565b611a889190613b66565b612617565b8080611a9890613d94565b915050611a62565b508060086000828254611ab39190613b66565b925050819055508060096000828254611acc9190613b66565b9250508190555050565b600c60009054906101000a900460ff1681565b6060611af4826120ec565b611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613915565b60405180910390fd5b6000611b3d612691565b90506000815111611b5d5760405180602001604052806000815250611b88565b80611b6784612723565b604051602001611b7892919061364d565b6040516020818303038152906040525b915050919050565b60008111611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90613995565b60405180910390fd5b6122b281600954611be49190613b66565b1115611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613855565b60405180910390fd5b806701151c96347b0000611c399190613bed565b341015611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906137d5565b60405180910390fd5b600b54421015611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906138d5565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d90613a35565b60405180910390fd5b600f5481611d2333610ef7565b611d2d9190613b66565b1115611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613955565b60405180910390fd5b60005b81811015611daf57611d9c33826001600954611d8d9190613b66565b611d979190613b66565b612617565b8080611da790613d94565b915050611d71565b508060086000828254611dc29190613b66565b925050819055508060096000828254611ddb9190613b66565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e81612158565b73ffffffffffffffffffffffffffffffffffffffff16611e9f61119a565b73ffffffffffffffffffffffffffffffffffffffff1614611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec906138b5565b60405180910390fd5b60005b8151811015611f86576001600d6000848481518110611f1a57611f19613e9b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f7e90613d94565b915050611ef8565b5050565b611f92612158565b73ffffffffffffffffffffffffffffffffffffffff16611fb061119a565b73ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd906138b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613735565b60405180910390fd5b61207f81612553565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121d383610d31565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612224826120ec565b612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906137b5565b60405180910390fd5b600061226e83610d31565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122dd57508373ffffffffffffffffffffffffffffffffffffffff166122c584610a30565b73ffffffffffffffffffffffffffffffffffffffff16145b806122ee57506122ed8185611de5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231782610d31565b73ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612364906138f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490613775565b60405180910390fd5b6123e8838383612884565b6123f3600082612160565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124439190613c47565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249a9190613b66565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612631828260405180602001604052806000815250612889565b5050565b6126408484846122f7565b61264c848484846128e4565b61268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290613715565b60405180910390fd5b50505050565b6060600e80546126a090613d31565b80601f01602080910402602001604051908101604052809291908181526020018280546126cc90613d31565b80156127195780601f106126ee57610100808354040283529160200191612719565b820191906000526020600020905b8154815290600101906020018083116126fc57829003601f168201915b5050505050905090565b6060600082141561276b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061287f565b600082905060005b6000821461279d57808061278690613d94565b915050600a826127969190613bbc565b9150612773565b60008167ffffffffffffffff8111156127b9576127b8613eca565b5b6040519080825280601f01601f1916602001820160405280156127eb5781602001600182028036833780820191505090505b5090505b60008514612878576001826128049190613c47565b9150600a856128139190613ddd565b603061281f9190613b66565b60f81b81838151811061283557612834613e9b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128719190613bbc565b94506127ef565b8093505050505b919050565b505050565b6128938383612a7b565b6128a060008484846128e4565b6128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690613715565b60405180910390fd5b505050565b60006129058473ffffffffffffffffffffffffffffffffffffffff16612c49565b15612a6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261292e612158565b8786866040518563ffffffff1660e01b8152600401612950949392919061368c565b602060405180830381600087803b15801561296a57600080fd5b505af192505050801561299b57506040513d601f19601f82011682018060405250810190612998919061314c565b60015b612a1e573d80600081146129cb576040519150601f19603f3d011682016040523d82523d6000602084013e6129d0565b606091505b50600081511415612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90613715565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a73565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae290613875565b60405180910390fd5b612af4816120ec565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90613755565b60405180910390fd5b612b4060008383612884565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b909190613b66565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612c6890613d31565b90600052602060002090601f016020900481019282612c8a5760008555612cd1565b82601f10612ca357805160ff1916838001178555612cd1565b82800160010185558215612cd1579182015b82811115612cd0578251825591602001919060010190612cb5565b5b509050612cde9190612ce2565b5090565b5b80821115612cfb576000816000905550600101612ce3565b5090565b6000612d12612d0d84613a95565b613a70565b90508083825260208201905082856020860282011115612d3557612d34613efe565b5b60005b85811015612d655781612d4b8882612df3565b845260208401935060208301925050600181019050612d38565b5050509392505050565b6000612d82612d7d84613ac1565b613a70565b905082815260208101848484011115612d9e57612d9d613f03565b5b612da9848285613cef565b509392505050565b6000612dc4612dbf84613af2565b613a70565b905082815260208101848484011115612de057612ddf613f03565b5b612deb848285613cef565b509392505050565b600081359050612e0281614515565b92915050565b600082601f830112612e1d57612e1c613ef9565b5b8135612e2d848260208601612cff565b91505092915050565b600081359050612e458161452c565b92915050565b600081359050612e5a81614543565b92915050565b600081519050612e6f81614543565b92915050565b600082601f830112612e8a57612e89613ef9565b5b8135612e9a848260208601612d6f565b91505092915050565b600082601f830112612eb857612eb7613ef9565b5b8135612ec8848260208601612db1565b91505092915050565b600081359050612ee08161455a565b92915050565b600060208284031215612efc57612efb613f0d565b5b6000612f0a84828501612df3565b91505092915050565b60008060408385031215612f2a57612f29613f0d565b5b6000612f3885828601612df3565b9250506020612f4985828601612df3565b9150509250929050565b600080600060608486031215612f6c57612f6b613f0d565b5b6000612f7a86828701612df3565b9350506020612f8b86828701612df3565b9250506040612f9c86828701612ed1565b9150509250925092565b60008060008060808587031215612fc057612fbf613f0d565b5b6000612fce87828801612df3565b9450506020612fdf87828801612df3565b9350506040612ff087828801612ed1565b925050606085013567ffffffffffffffff81111561301157613010613f08565b5b61301d87828801612e75565b91505092959194509250565b600080604083850312156130405761303f613f0d565b5b600061304e85828601612df3565b925050602061305f85828601612e36565b9150509250929050565b600080604083850312156130805761307f613f0d565b5b600061308e85828601612df3565b925050602061309f85828601612ed1565b9150509250929050565b6000602082840312156130bf576130be613f0d565b5b600082013567ffffffffffffffff8111156130dd576130dc613f08565b5b6130e984828501612e08565b91505092915050565b60006020828403121561310857613107613f0d565b5b600061311684828501612e36565b91505092915050565b60006020828403121561313557613134613f0d565b5b600061314384828501612e4b565b91505092915050565b60006020828403121561316257613161613f0d565b5b600061317084828501612e60565b91505092915050565b60006020828403121561318f5761318e613f0d565b5b600082013567ffffffffffffffff8111156131ad576131ac613f08565b5b6131b984828501612ea3565b91505092915050565b6000602082840312156131d8576131d7613f0d565b5b60006131e684828501612ed1565b91505092915050565b6131f881613c7b565b82525050565b61320781613c8d565b82525050565b600061321882613b23565b6132228185613b39565b9350613232818560208601613cfe565b61323b81613f12565b840191505092915050565b600061325182613b2e565b61325b8185613b4a565b935061326b818560208601613cfe565b61327481613f12565b840191505092915050565b600061328a82613b2e565b6132948185613b5b565b93506132a4818560208601613cfe565b80840191505092915050565b60006132bd603283613b4a565b91506132c882613f23565b604082019050919050565b60006132e0602683613b4a565b91506132eb82613f72565b604082019050919050565b6000613303601c83613b4a565b915061330e82613fc1565b602082019050919050565b6000613326602483613b4a565b915061333182613fea565b604082019050919050565b6000613349601983613b4a565b915061335482614039565b602082019050919050565b600061336c602c83613b4a565b915061337782614062565b604082019050919050565b600061338f601683613b4a565b915061339a826140b1565b602082019050919050565b60006133b2603883613b4a565b91506133bd826140da565b604082019050919050565b60006133d5602a83613b4a565b91506133e082614129565b604082019050919050565b60006133f8602983613b4a565b915061340382614178565b604082019050919050565b600061341b601683613b4a565b9150613426826141c7565b602082019050919050565b600061343e602083613b4a565b9150613449826141f0565b602082019050919050565b6000613461602c83613b4a565b915061346c82614219565b604082019050919050565b6000613484602083613b4a565b915061348f82614268565b602082019050919050565b60006134a7601583613b4a565b91506134b282614291565b602082019050919050565b60006134ca602983613b4a565b91506134d5826142ba565b604082019050919050565b60006134ed602f83613b4a565b91506134f882614309565b604082019050919050565b6000613510602183613b4a565b915061351b82614358565b604082019050919050565b6000613533601483613b4a565b915061353e826143a7565b602082019050919050565b6000613556603183613b4a565b9150613561826143d0565b604082019050919050565b6000613579601783613b4a565b91506135848261441f565b602082019050919050565b600061359c601c83613b4a565b91506135a782614448565b602082019050919050565b60006135bf601683613b4a565b91506135ca82614471565b602082019050919050565b60006135e2601383613b4a565b91506135ed8261449a565b602082019050919050565b6000613605600b83613b4a565b9150613610826144c3565b602082019050919050565b6000613628600f83613b4a565b9150613633826144ec565b602082019050919050565b61364781613ce5565b82525050565b6000613659828561327f565b9150613665828461327f565b91508190509392505050565b600060208201905061368660008301846131ef565b92915050565b60006080820190506136a160008301876131ef565b6136ae60208301866131ef565b6136bb604083018561363e565b81810360608301526136cd818461320d565b905095945050505050565b60006020820190506136ed60008301846131fe565b92915050565b6000602082019050818103600083015261370d8184613246565b905092915050565b6000602082019050818103600083015261372e816132b0565b9050919050565b6000602082019050818103600083015261374e816132d3565b9050919050565b6000602082019050818103600083015261376e816132f6565b9050919050565b6000602082019050818103600083015261378e81613319565b9050919050565b600060208201905081810360008301526137ae8161333c565b9050919050565b600060208201905081810360008301526137ce8161335f565b9050919050565b600060208201905081810360008301526137ee81613382565b9050919050565b6000602082019050818103600083015261380e816133a5565b9050919050565b6000602082019050818103600083015261382e816133c8565b9050919050565b6000602082019050818103600083015261384e816133eb565b9050919050565b6000602082019050818103600083015261386e8161340e565b9050919050565b6000602082019050818103600083015261388e81613431565b9050919050565b600060208201905081810360008301526138ae81613454565b9050919050565b600060208201905081810360008301526138ce81613477565b9050919050565b600060208201905081810360008301526138ee8161349a565b9050919050565b6000602082019050818103600083015261390e816134bd565b9050919050565b6000602082019050818103600083015261392e816134e0565b9050919050565b6000602082019050818103600083015261394e81613503565b9050919050565b6000602082019050818103600083015261396e81613526565b9050919050565b6000602082019050818103600083015261398e81613549565b9050919050565b600060208201905081810360008301526139ae8161356c565b9050919050565b600060208201905081810360008301526139ce8161358f565b9050919050565b600060208201905081810360008301526139ee816135b2565b9050919050565b60006020820190508181036000830152613a0e816135d5565b9050919050565b60006020820190508181036000830152613a2e816135f8565b9050919050565b60006020820190508181036000830152613a4e8161361b565b9050919050565b6000602082019050613a6a600083018461363e565b92915050565b6000613a7a613a8b565b9050613a868282613d63565b919050565b6000604051905090565b600067ffffffffffffffff821115613ab057613aaf613eca565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613adc57613adb613eca565b5b613ae582613f12565b9050602081019050919050565b600067ffffffffffffffff821115613b0d57613b0c613eca565b5b613b1682613f12565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b7182613ce5565b9150613b7c83613ce5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bb157613bb0613e0e565b5b828201905092915050565b6000613bc782613ce5565b9150613bd283613ce5565b925082613be257613be1613e3d565b5b828204905092915050565b6000613bf882613ce5565b9150613c0383613ce5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c3c57613c3b613e0e565b5b828202905092915050565b6000613c5282613ce5565b9150613c5d83613ce5565b925082821015613c7057613c6f613e0e565b5b828203905092915050565b6000613c8682613cc5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d1c578082015181840152602081019050613d01565b83811115613d2b576000848401525b50505050565b60006002820490506001821680613d4957607f821691505b60208210811415613d5d57613d5c613e6c565b5b50919050565b613d6c82613f12565b810181811067ffffffffffffffff82111715613d8b57613d8a613eca565b5b80604052505050565b6000613d9f82613ce5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd257613dd1613e0e565b5b600182019050919050565b6000613de882613ce5565b9150613df383613ce5565b925082613e0357613e02613e3d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f313020746f6b656e73207065722077616c6c6574000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f3320746f6b656e73207065722077616c6c657400000000000000000000000000600082015250565b7f53616c6520456e6465642e000000000000000000000000000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b61451e81613c7b565b811461452957600080fd5b50565b61453581613c8d565b811461454057600080fd5b50565b61454c81613c99565b811461455757600080fd5b50565b61456381613ce5565b811461456e57600080fd5b5056fea264697066735822122036416a8f65b342023692a788607a11a2cdb6c03fa8ed174dc41e0f6385a0b6b064736f6c63430008070033
Deployed Bytecode Sourcemap
34562:4198:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22408:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37770:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34961:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23353:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24912:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24435:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35199:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38651:106;;;;;;;;;;;;;:::i;:::-;;26212:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35141:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34799:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23047:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35107:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38536:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22777:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14255:94;;;;;;;;;;;;;:::i;:::-;;36849:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23522:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38288:241;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37874:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25205:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37972:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34912:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34878:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37216:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38186:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26468:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36000:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35013:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23697:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35327:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25571:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37595:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14504:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22408:305;22510:4;22562:25;22547:40;;;:11;:40;;;;:105;;;;22619:33;22604:48;;;:11;:48;;;;22547:105;:158;;;;22669:36;22693:11;22669:23;:36::i;:::-;22547:158;22527:178;;22408:305;;;:::o;37770:98::-;37814:4;37837:11;:23;37849:10;37837:23;;;;;;;;;;;;;;;;;;;;;;;;;37830:30;;37770:98;:::o;34961:39::-;;;;:::o;23353:100::-;23407:13;23440:5;23433:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23353:100;:::o;24912:221::-;24988:7;25016:16;25024:7;25016;:16::i;:::-;25008:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25101:15;:24;25117:7;25101:24;;;;;;;;;;;;;;;;;;;;;25094:31;;24912:221;;;:::o;24435:411::-;24516:13;24532:23;24547:7;24532:14;:23::i;:::-;24516:39;;24580:5;24574:11;;:2;:11;;;;24566:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:5;24658:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24683:37;24700:5;24707:12;:10;:12::i;:::-;24683:16;:37::i;:::-;24658:62;24636:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24817:21;24826:2;24830:7;24817:8;:21::i;:::-;24505:341;24435:411;;:::o;34844:27::-;;;;:::o;35199:35::-;;;;:::o;25802:339::-;25997:41;26016:12;:10;:12::i;:::-;26030:7;25997:18;:41::i;:::-;25989:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26105:28;26115:4;26121:2;26125:7;26105:9;:28::i;:::-;25802:339;;;:::o;38651:106::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38709:7:::1;:5;:7::i;:::-;38701:25;;:48;38727:21;38701:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38651:106::o:0;26212:185::-;26350:39;26367:4;26373:2;26377:7;26350:39;;;;;;;;;;;;:16;:39::i;:::-;26212:185;;;:::o;35141:29::-;;;;:::o;34799:32::-;;;;:::o;23047:239::-;23119:7;23139:13;23155:7;:16;23163:7;23155:16;;;;;;;;;;;;;;;;;;;;;23139:32;;23207:1;23190:19;;:5;:19;;;;23182:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23273:5;23266:12;;;23047:239;;;:::o;35107:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38536:107::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38631:4:::1;38611:17;:24;;;;38536:107:::0;:::o;22777:208::-;22849:7;22894:1;22877:19;;:5;:19;;;;22869:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22961:9;:16;22971:5;22961:16;;;;;;;;;;;;;;;;22954:23;;22777:208;;;:::o;14255:94::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14320:21:::1;14338:1;14320:9;:21::i;:::-;14255:94::o:0;36849:354::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34782:4:::1;36944:8;:15;36930:11;;:29;;;;:::i;:::-;:46;;36922:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37018:6;37014:98;37034:8;:15;37030:1;:19;37014:98;;;37069:43;37079:8;37088:1;37079:11;;;;;;;;:::i;:::-;;;;;;;;37110:1;37106;37092:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;37069:9;:43::i;:::-;37051:3;;;;;:::i;:::-;;;;37014:98;;;;37138:8;:15;37123:11;;:30;;;;;;;:::i;:::-;;;;;;;;37180:8;:15;37165:11;;:30;;;;;;;:::i;:::-;;;;;;;;36849:354:::0;:::o;13604:87::-;13650:7;13677:6;;;;;;;;;;;13670:13;;13604:87;:::o;23522:104::-;23578:13;23611:7;23604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23522:104;:::o;38288:241::-;38337:4;38378:17;;38358:15;:37;;38350:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38459:14;;38439:15;:34;;38431:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38510:1;38503:8;;38288:241;:::o;37874:92::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37954:4:::1;37944:7;:14;;;;;;;;;;;;:::i;:::-;;37874:92:::0;:::o;25205:295::-;25320:12;:10;:12::i;:::-;25308:24;;:8;:24;;;;25300:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:8;25375:18;:32;25394:12;:10;:12::i;:::-;25375:32;;;;;;;;;;;;;;;:42;25408:8;25375:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25473:8;25444:48;;25459:12;:10;:12::i;:::-;25444:48;;;25483:8;25444:48;;;;;;:::i;:::-;;;;;;;;25205:295;;:::o;37972:88::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38048:4:::1;38035:10;;:17;;;;;;;;;;;;;;;;;;37972:88:::0;:::o;34912:42::-;;;;:::o;34878:27::-;;;;:::o;37216:367::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34742:4:::1;37325:8;:15;37309:13;;:31;;;;:::i;:::-;:44;;37301:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;37395:6;37391:100;37411:8;:15;37407:1;:19;37391:100;;;37446:45;37456:8;37465:1;37456:11;;;;;;;;:::i;:::-;;;;;;;;37489:1;37485;37469:13;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;37446:9;:45::i;:::-;37428:3;;;;;:::i;:::-;;;;37391:100;;;;37519:8;:15;37502:13;;:32;;;;;;;:::i;:::-;;;;;;;;37560:8;:15;37545:11;;:30;;;;;;;:::i;:::-;;;;;;;;37216:367:::0;:::o;38186:96::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38270:4:::1;38253:14;:21;;;;38186:96:::0;:::o;26468:328::-;26643:41;26662:12;:10;:12::i;:::-;26676:7;26643:18;:41::i;:::-;26635:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26749:39;26763:4;26769:2;26773:7;26782:5;26749:13;:39::i;:::-;26468:328;;;;:::o;36000:841::-;36085:4;36067:22;;:14;:12;:14::i;:::-;:22;;;36059:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36150:1;36141:6;:10;36133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;34782:4;36212:6;36198:11;;:20;;;;:::i;:::-;:37;;36190:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;36315:6;34692:11;36294:27;;;;:::i;:::-;36281:9;:40;;36273:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36387:17;;36367:15;:37;;36359:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36468:14;;36448:15;:34;;36440:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36530:5;36516:19;;:10;;;;;;;;;;;:19;;;36508:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36608:19;;36598:6;36574:21;36584:10;36574:9;:21::i;:::-;:30;;;;:::i;:::-;:53;;36566:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36685:6;36681:88;36701:6;36697:1;:10;36681:88;;;36727:42;36737:10;36767:1;36763;36749:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36727:9;:42::i;:::-;36709:3;;;;;:::i;:::-;;;;36681:88;;;;36795:6;36780:11;;:21;;;;;;;:::i;:::-;;;;;;;;36827:6;36812:11;;:21;;;;;;;:::i;:::-;;;;;;;;36000:841;:::o;35013:30::-;;;;;;;;;;;;;:::o;23697:334::-;23770:13;23804:16;23812:7;23804;:16::i;:::-;23796:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23885:21;23909:10;:8;:10::i;:::-;23885:34;;23961:1;23943:7;23937:21;:25;:86;;;;;;;;;;;;;;;;;23989:7;23998:18;:7;:16;:18::i;:::-;23972:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23937:86;23930:93;;;23697:334;;;:::o;35327:664::-;35395:1;35386:6;:10;35378:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;34782:4;35457:6;35443:11;;:20;;;;:::i;:::-;:37;;35435:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;35552:6;34639:11;35539:19;;;;:::i;:::-;35526:9;:32;;35518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35623:14;;35604:15;:33;;35596:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35695:5;35681:19;;:10;;;;;;;;;;;:19;;;35673:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;35773:12;;35763:6;35739:21;35749:10;35739:9;:21::i;:::-;:30;;;;:::i;:::-;:46;;35731:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;35835:6;35831:88;35851:6;35847:1;:10;35831:88;;;35877:42;35887:10;35917:1;35913;35899:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;35877:9;:42::i;:::-;35859:3;;;;;:::i;:::-;;;;35831:88;;;;35945:6;35930:11;;:21;;;;;;;:::i;:::-;;;;;;;;35977:6;35962:11;;:21;;;;;;;:::i;:::-;;;;;;;;35327:664;:::o;25571:164::-;25668:4;25692:18;:25;25711:5;25692:25;;;;;;;;;;;;;;;:35;25718:8;25692:35;;;;;;;;;;;;;;;;;;;;;;;;;25685:42;;25571:164;;;;:::o;37595:168::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37677:6:::1;37673:82;37689:8;:15;37685:1;:19;37673:82;;;37751:4;37724:11;:24;37736:8;37745:1;37736:11;;;;;;;;:::i;:::-;;;;;;;;37724:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37706:3;;;;;:::i;:::-;;;;37673:82;;;;37595:168:::0;:::o;14504:192::-;13835:12;:10;:12::i;:::-;13824:23;;:7;:5;:7::i;:::-;:23;;;13816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14613:1:::1;14593:22;;:8;:22;;;;14585:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14669:19;14679:8;14669:9;:19::i;:::-;14504:192:::0;:::o;15609:157::-;15694:4;15733:25;15718:40;;;:11;:40;;;;15711:47;;15609:157;;;:::o;28306:127::-;28371:4;28423:1;28395:30;;:7;:16;28403:7;28395:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28388:37;;28306:127;;;:::o;744:98::-;797:7;824:10;817:17;;744:98;:::o;32288:174::-;32390:2;32363:15;:24;32379:7;32363:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32446:7;32442:2;32408:46;;32417:23;32432:7;32417:14;:23::i;:::-;32408:46;;;;;;;;;;;;32288:174;;:::o;28600:348::-;28693:4;28718:16;28726:7;28718;:16::i;:::-;28710:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28794:13;28810:23;28825:7;28810:14;:23::i;:::-;28794:39;;28863:5;28852:16;;:7;:16;;;:51;;;;28896:7;28872:31;;:20;28884:7;28872:11;:20::i;:::-;:31;;;28852:51;:87;;;;28907:32;28924:5;28931:7;28907:16;:32::i;:::-;28852:87;28844:96;;;28600:348;;;;:::o;31592:578::-;31751:4;31724:31;;:23;31739:7;31724:14;:23::i;:::-;:31;;;31716:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:1;31820:16;;:2;:16;;;;31812:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31890:39;31911:4;31917:2;31921:7;31890:20;:39::i;:::-;31994:29;32011:1;32015:7;31994:8;:29::i;:::-;32055:1;32036:9;:15;32046:4;32036:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32084:1;32067:9;:13;32077:2;32067:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32115:2;32096:7;:16;32104:7;32096:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32154:7;32150:2;32135:27;;32144:4;32135:27;;;;;;;;;;;;31592:578;;;:::o;14704:173::-;14760:16;14779:6;;;;;;;;;;;14760:25;;14805:8;14796:6;;:17;;;;;;;;;;;;;;;;;;14860:8;14829:40;;14850:8;14829:40;;;;;;;;;;;;14749:128;14704:173;:::o;29290:110::-;29366:26;29376:2;29380:7;29366:26;;;;;;;;;;;;:9;:26::i;:::-;29290:110;;:::o;27678:315::-;27835:28;27845:4;27851:2;27855:7;27835:9;:28::i;:::-;27882:48;27905:4;27911:2;27915:7;27924:5;27882:22;:48::i;:::-;27874:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27678:315;;;;:::o;38072:108::-;38132:13;38165:7;38158:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38072:108;:::o;1209:723::-;1265:13;1495:1;1486:5;:10;1482:53;;;1513:10;;;;;;;;;;;;;;;;;;;;;1482:53;1545:12;1560:5;1545:20;;1576:14;1601:78;1616:1;1608:4;:9;1601:78;;1634:8;;;;;:::i;:::-;;;;1665:2;1657:10;;;;;:::i;:::-;;;1601:78;;;1689:19;1721:6;1711:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1689:39;;1739:154;1755:1;1746:5;:10;1739:154;;1783:1;1773:11;;;;;:::i;:::-;;;1850:2;1842:5;:10;;;;:::i;:::-;1829:2;:24;;;;:::i;:::-;1816:39;;1799:6;1806;1799:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1879:2;1870:11;;;;;:::i;:::-;;;1739:154;;;1917:6;1903:21;;;;;1209:723;;;;:::o;34398:126::-;;;;:::o;29627:321::-;29757:18;29763:2;29767:7;29757:5;:18::i;:::-;29808:54;29839:1;29843:2;29847:7;29856:5;29808:22;:54::i;:::-;29786:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29627:321;;;:::o;33027:799::-;33182:4;33203:15;:2;:13;;;:15::i;:::-;33199:620;;;33255:2;33239:36;;;33276:12;:10;:12::i;:::-;33290:4;33296:7;33305:5;33239:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33235:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33498:1;33481:6;:13;:18;33477:272;;;33524:60;;;;;;;;;;:::i;:::-;;;;;;;;33477:272;33699:6;33693:13;33684:6;33680:2;33676:15;33669:38;33235:529;33372:41;;;33362:51;;;:6;:51;;;;33355:58;;;;;33199:620;33803:4;33796:11;;33027:799;;;;;;;:::o;30284:382::-;30378:1;30364:16;;:2;:16;;;;30356:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30437:16;30445:7;30437;:16::i;:::-;30436:17;30428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30499:45;30528:1;30532:2;30536:7;30499:20;:45::i;:::-;30574:1;30557:9;:13;30567:2;30557:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30605:2;30586:7;:16;30594:7;30586:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30650:7;30646:2;30625:33;;30642:1;30625:33;;;;;;;;;;;;30284:382;;:::o;3674:387::-;3734:4;3942:12;4009:7;3997:20;3989:28;;4052:1;4045:4;:8;4038:15;;;3674:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10528:366::-;10670:3;10691:67;10755:2;10750:3;10691:67;:::i;:::-;10684:74;;10767:93;10856:3;10767:93;:::i;:::-;10885:2;10880:3;10876:12;10869:19;;10528:366;;;:::o;10900:::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:::-;11414:3;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11511:93;11600:3;11511:93;:::i;:::-;11629:2;11624:3;11620:12;11613:19;;11272:366;;;:::o;11644:::-;11786:3;11807:67;11871:2;11866:3;11807:67;:::i;:::-;11800:74;;11883:93;11972:3;11883:93;:::i;:::-;12001:2;11996:3;11992:12;11985:19;;11644:366;;;:::o;12016:::-;12158:3;12179:67;12243:2;12238:3;12179:67;:::i;:::-;12172:74;;12255:93;12344:3;12255:93;:::i;:::-;12373:2;12368:3;12364:12;12357:19;;12016:366;;;:::o;12388:::-;12530:3;12551:67;12615:2;12610:3;12551:67;:::i;:::-;12544:74;;12627:93;12716:3;12627:93;:::i;:::-;12745:2;12740:3;12736:12;12729:19;;12388:366;;;:::o;12760:::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:::-;13274:3;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13371:93;13460:3;13371:93;:::i;:::-;13489:2;13484:3;13480:12;13473:19;;13132:366;;;:::o;13504:::-;13646:3;13667:67;13731:2;13726:3;13667:67;:::i;:::-;13660:74;;13743:93;13832:3;13743:93;:::i;:::-;13861:2;13856:3;13852:12;13845:19;;13504:366;;;:::o;13876:::-;14018:3;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14115:93;14204:3;14115:93;:::i;:::-;14233:2;14228:3;14224:12;14217:19;;13876:366;;;:::o;14248:::-;14390:3;14411:67;14475:2;14470:3;14411:67;:::i;:::-;14404:74;;14487:93;14576:3;14487:93;:::i;:::-;14605:2;14600:3;14596:12;14589:19;;14248:366;;;:::o;14620:::-;14762:3;14783:67;14847:2;14842:3;14783:67;:::i;:::-;14776:74;;14859:93;14948:3;14859:93;:::i;:::-;14977:2;14972:3;14968:12;14961:19;;14620:366;;;:::o;14992:::-;15134:3;15155:67;15219:2;15214:3;15155:67;:::i;:::-;15148:74;;15231:93;15320:3;15231:93;:::i;:::-;15349:2;15344:3;15340:12;15333:19;;14992:366;;;:::o;15364:::-;15506:3;15527:67;15591:2;15586:3;15527:67;:::i;:::-;15520:74;;15603:93;15692:3;15603:93;:::i;:::-;15721:2;15716:3;15712:12;15705:19;;15364:366;;;:::o;15736:::-;15878:3;15899:67;15963:2;15958:3;15899:67;:::i;:::-;15892:74;;15975:93;16064:3;15975:93;:::i;:::-;16093:2;16088:3;16084:12;16077:19;;15736:366;;;:::o;16108:::-;16250:3;16271:67;16335:2;16330:3;16271:67;:::i;:::-;16264:74;;16347:93;16436:3;16347:93;:::i;:::-;16465:2;16460:3;16456:12;16449:19;;16108:366;;;:::o;16480:::-;16622:3;16643:67;16707:2;16702:3;16643:67;:::i;:::-;16636:74;;16719:93;16808:3;16719:93;:::i;:::-;16837:2;16832:3;16828:12;16821:19;;16480:366;;;:::o;16852:::-;16994:3;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17091:93;17180:3;17091:93;:::i;:::-;17209:2;17204:3;17200:12;17193:19;;16852:366;;;:::o;17224:::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17224:366;;;:::o;17596:::-;17738:3;17759:67;17823:2;17818:3;17759:67;:::i;:::-;17752:74;;17835:93;17924:3;17835:93;:::i;:::-;17953:2;17948:3;17944:12;17937:19;;17596:366;;;:::o;17968:::-;18110:3;18131:67;18195:2;18190:3;18131:67;:::i;:::-;18124:74;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;17968:366;;;:::o;18340:::-;18482:3;18503:67;18567:2;18562:3;18503:67;:::i;:::-;18496:74;;18579:93;18668:3;18579:93;:::i;:::-;18697:2;18692:3;18688:12;18681:19;;18340:366;;;:::o;18712:::-;18854:3;18875:67;18939:2;18934:3;18875:67;:::i;:::-;18868:74;;18951:93;19040:3;18951:93;:::i;:::-;19069:2;19064:3;19060:12;19053:19;;18712:366;;;:::o;19084:::-;19226:3;19247:67;19311:2;19306:3;19247:67;:::i;:::-;19240:74;;19323:93;19412:3;19323:93;:::i;:::-;19441:2;19436:3;19432:12;19425:19;;19084:366;;;:::o;19456:::-;19598:3;19619:67;19683:2;19678:3;19619:67;:::i;:::-;19612:74;;19695:93;19784:3;19695:93;:::i;:::-;19813:2;19808:3;19804:12;19797:19;;19456:366;;;:::o;19828:::-;19970:3;19991:67;20055:2;20050:3;19991:67;:::i;:::-;19984:74;;20067:93;20156:3;20067:93;:::i;:::-;20185:2;20180:3;20176:12;20169:19;;19828:366;;;:::o;20200:118::-;20287:24;20305:5;20287:24;:::i;:::-;20282:3;20275:37;20200:118;;:::o;20324:435::-;20504:3;20526:95;20617:3;20608:6;20526:95;:::i;:::-;20519:102;;20638:95;20729:3;20720:6;20638:95;:::i;:::-;20631:102;;20750:3;20743:10;;20324:435;;;;;:::o;20765:222::-;20858:4;20896:2;20885:9;20881:18;20873:26;;20909:71;20977:1;20966:9;20962:17;20953:6;20909:71;:::i;:::-;20765:222;;;;:::o;20993:640::-;21188:4;21226:3;21215:9;21211:19;21203:27;;21240:71;21308:1;21297:9;21293:17;21284:6;21240:71;:::i;:::-;21321:72;21389:2;21378:9;21374:18;21365:6;21321:72;:::i;:::-;21403;21471:2;21460:9;21456:18;21447:6;21403:72;:::i;:::-;21522:9;21516:4;21512:20;21507:2;21496:9;21492:18;21485:48;21550:76;21621:4;21612:6;21550:76;:::i;:::-;21542:84;;20993:640;;;;;;;:::o;21639:210::-;21726:4;21764:2;21753:9;21749:18;21741:26;;21777:65;21839:1;21828:9;21824:17;21815:6;21777:65;:::i;:::-;21639:210;;;;:::o;21855:313::-;21968:4;22006:2;21995:9;21991:18;21983:26;;22055:9;22049:4;22045:20;22041:1;22030:9;22026:17;22019:47;22083:78;22156:4;22147:6;22083:78;:::i;:::-;22075:86;;21855:313;;;;:::o;22174:419::-;22340:4;22378:2;22367:9;22363:18;22355:26;;22427:9;22421:4;22417:20;22413:1;22402:9;22398:17;22391:47;22455:131;22581:4;22455:131;:::i;:::-;22447:139;;22174:419;;;:::o;22599:::-;22765:4;22803:2;22792:9;22788:18;22780:26;;22852:9;22846:4;22842:20;22838:1;22827:9;22823:17;22816:47;22880:131;23006:4;22880:131;:::i;:::-;22872:139;;22599:419;;;:::o;23024:::-;23190:4;23228:2;23217:9;23213:18;23205:26;;23277:9;23271:4;23267:20;23263:1;23252:9;23248:17;23241:47;23305:131;23431:4;23305:131;:::i;:::-;23297:139;;23024:419;;;:::o;23449:::-;23615:4;23653:2;23642:9;23638:18;23630:26;;23702:9;23696:4;23692:20;23688:1;23677:9;23673:17;23666:47;23730:131;23856:4;23730:131;:::i;:::-;23722:139;;23449:419;;;:::o;23874:::-;24040:4;24078:2;24067:9;24063:18;24055:26;;24127:9;24121:4;24117:20;24113:1;24102:9;24098:17;24091:47;24155:131;24281:4;24155:131;:::i;:::-;24147:139;;23874:419;;;:::o;24299:::-;24465:4;24503:2;24492:9;24488:18;24480:26;;24552:9;24546:4;24542:20;24538:1;24527:9;24523:17;24516:47;24580:131;24706:4;24580:131;:::i;:::-;24572:139;;24299:419;;;:::o;24724:::-;24890:4;24928:2;24917:9;24913:18;24905:26;;24977:9;24971:4;24967:20;24963:1;24952:9;24948:17;24941:47;25005:131;25131:4;25005:131;:::i;:::-;24997:139;;24724:419;;;:::o;25149:::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:::-;25740:4;25778:2;25767:9;25763:18;25755:26;;25827:9;25821:4;25817:20;25813:1;25802:9;25798:17;25791:47;25855:131;25981:4;25855:131;:::i;:::-;25847:139;;25574:419;;;:::o;25999:::-;26165:4;26203:2;26192:9;26188:18;26180:26;;26252:9;26246:4;26242:20;26238:1;26227:9;26223:17;26216:47;26280:131;26406:4;26280:131;:::i;:::-;26272:139;;25999:419;;;:::o;26424:::-;26590:4;26628:2;26617:9;26613:18;26605:26;;26677:9;26671:4;26667:20;26663:1;26652:9;26648:17;26641:47;26705:131;26831:4;26705:131;:::i;:::-;26697:139;;26424:419;;;:::o;26849:::-;27015:4;27053:2;27042:9;27038:18;27030:26;;27102:9;27096:4;27092:20;27088:1;27077:9;27073:17;27066:47;27130:131;27256:4;27130:131;:::i;:::-;27122:139;;26849:419;;;:::o;27274:::-;27440:4;27478:2;27467:9;27463:18;27455:26;;27527:9;27521:4;27517:20;27513:1;27502:9;27498:17;27491:47;27555:131;27681:4;27555:131;:::i;:::-;27547:139;;27274:419;;;:::o;27699:::-;27865:4;27903:2;27892:9;27888:18;27880:26;;27952:9;27946:4;27942:20;27938:1;27927:9;27923:17;27916:47;27980:131;28106:4;27980:131;:::i;:::-;27972:139;;27699:419;;;:::o;28124:::-;28290:4;28328:2;28317:9;28313:18;28305:26;;28377:9;28371:4;28367:20;28363:1;28352:9;28348:17;28341:47;28405:131;28531:4;28405:131;:::i;:::-;28397:139;;28124:419;;;:::o;28549:::-;28715:4;28753:2;28742:9;28738:18;28730:26;;28802:9;28796:4;28792:20;28788:1;28777:9;28773:17;28766:47;28830:131;28956:4;28830:131;:::i;:::-;28822:139;;28549:419;;;:::o;28974:::-;29140:4;29178:2;29167:9;29163:18;29155:26;;29227:9;29221:4;29217:20;29213:1;29202:9;29198:17;29191:47;29255:131;29381:4;29255:131;:::i;:::-;29247:139;;28974:419;;;:::o;29399:::-;29565:4;29603:2;29592:9;29588:18;29580:26;;29652:9;29646:4;29642:20;29638:1;29627:9;29623:17;29616:47;29680:131;29806:4;29680:131;:::i;:::-;29672:139;;29399:419;;;:::o;29824:::-;29990:4;30028:2;30017:9;30013:18;30005:26;;30077:9;30071:4;30067:20;30063:1;30052:9;30048:17;30041:47;30105:131;30231:4;30105:131;:::i;:::-;30097:139;;29824:419;;;:::o;30249:::-;30415:4;30453:2;30442:9;30438:18;30430:26;;30502:9;30496:4;30492:20;30488:1;30477:9;30473:17;30466:47;30530:131;30656:4;30530:131;:::i;:::-;30522:139;;30249:419;;;:::o;30674:::-;30840:4;30878:2;30867:9;30863:18;30855:26;;30927:9;30921:4;30917:20;30913:1;30902:9;30898:17;30891:47;30955:131;31081:4;30955:131;:::i;:::-;30947:139;;30674:419;;;:::o;31099:::-;31265:4;31303:2;31292:9;31288:18;31280:26;;31352:9;31346:4;31342:20;31338:1;31327:9;31323:17;31316:47;31380:131;31506:4;31380:131;:::i;:::-;31372:139;;31099:419;;;:::o;31524:::-;31690:4;31728:2;31717:9;31713:18;31705:26;;31777:9;31771:4;31767:20;31763:1;31752:9;31748:17;31741:47;31805:131;31931:4;31805:131;:::i;:::-;31797:139;;31524:419;;;:::o;31949:::-;32115:4;32153:2;32142:9;32138:18;32130:26;;32202:9;32196:4;32192:20;32188:1;32177:9;32173:17;32166:47;32230:131;32356:4;32230:131;:::i;:::-;32222:139;;31949:419;;;:::o;32374:::-;32540:4;32578:2;32567:9;32563:18;32555:26;;32627:9;32621:4;32617:20;32613:1;32602:9;32598:17;32591:47;32655:131;32781:4;32655:131;:::i;:::-;32647:139;;32374:419;;;:::o;32799:::-;32965:4;33003:2;32992:9;32988:18;32980:26;;33052:9;33046:4;33042:20;33038:1;33027:9;33023:17;33016:47;33080:131;33206:4;33080:131;:::i;:::-;33072:139;;32799:419;;;:::o;33224:222::-;33317:4;33355:2;33344:9;33340:18;33332:26;;33368:71;33436:1;33425:9;33421:17;33412:6;33368:71;:::i;:::-;33224:222;;;;:::o;33452:129::-;33486:6;33513:20;;:::i;:::-;33503:30;;33542:33;33570:4;33562:6;33542:33;:::i;:::-;33452:129;;;:::o;33587:75::-;33620:6;33653:2;33647:9;33637:19;;33587:75;:::o;33668:311::-;33745:4;33835:18;33827:6;33824:30;33821:56;;;33857:18;;:::i;:::-;33821:56;33907:4;33899:6;33895:17;33887:25;;33967:4;33961;33957:15;33949:23;;33668:311;;;:::o;33985:307::-;34046:4;34136:18;34128:6;34125:30;34122:56;;;34158:18;;:::i;:::-;34122:56;34196:29;34218:6;34196:29;:::i;:::-;34188:37;;34280:4;34274;34270:15;34262:23;;33985:307;;;:::o;34298:308::-;34360:4;34450:18;34442:6;34439:30;34436:56;;;34472:18;;:::i;:::-;34436:56;34510:29;34532:6;34510:29;:::i;:::-;34502:37;;34594:4;34588;34584:15;34576:23;;34298:308;;;:::o;34612:98::-;34663:6;34697:5;34691:12;34681:22;;34612:98;;;:::o;34716:99::-;34768:6;34802:5;34796:12;34786:22;;34716:99;;;:::o;34821:168::-;34904:11;34938:6;34933:3;34926:19;34978:4;34973:3;34969:14;34954:29;;34821:168;;;;:::o;34995:169::-;35079:11;35113:6;35108:3;35101:19;35153:4;35148:3;35144:14;35129:29;;34995:169;;;;:::o;35170:148::-;35272:11;35309:3;35294:18;;35170:148;;;;:::o;35324:305::-;35364:3;35383:20;35401:1;35383:20;:::i;:::-;35378:25;;35417:20;35435:1;35417:20;:::i;:::-;35412:25;;35571:1;35503:66;35499:74;35496:1;35493:81;35490:107;;;35577:18;;:::i;:::-;35490:107;35621:1;35618;35614:9;35607:16;;35324:305;;;;:::o;35635:185::-;35675:1;35692:20;35710:1;35692:20;:::i;:::-;35687:25;;35726:20;35744:1;35726:20;:::i;:::-;35721:25;;35765:1;35755:35;;35770:18;;:::i;:::-;35755:35;35812:1;35809;35805:9;35800:14;;35635:185;;;;:::o;35826:348::-;35866:7;35889:20;35907:1;35889:20;:::i;:::-;35884:25;;35923:20;35941:1;35923:20;:::i;:::-;35918:25;;36111:1;36043:66;36039:74;36036:1;36033:81;36028:1;36021:9;36014:17;36010:105;36007:131;;;36118:18;;:::i;:::-;36007:131;36166:1;36163;36159:9;36148:20;;35826:348;;;;:::o;36180:191::-;36220:4;36240:20;36258:1;36240:20;:::i;:::-;36235:25;;36274:20;36292:1;36274:20;:::i;:::-;36269:25;;36313:1;36310;36307:8;36304:34;;;36318:18;;:::i;:::-;36304:34;36363:1;36360;36356:9;36348:17;;36180:191;;;;:::o;36377:96::-;36414:7;36443:24;36461:5;36443:24;:::i;:::-;36432:35;;36377:96;;;:::o;36479:90::-;36513:7;36556:5;36549:13;36542:21;36531:32;;36479:90;;;:::o;36575:149::-;36611:7;36651:66;36644:5;36640:78;36629:89;;36575:149;;;:::o;36730:126::-;36767:7;36807:42;36800:5;36796:54;36785:65;;36730:126;;;:::o;36862:77::-;36899:7;36928:5;36917:16;;36862:77;;;:::o;36945:154::-;37029:6;37024:3;37019;37006:30;37091:1;37082:6;37077:3;37073:16;37066:27;36945:154;;;:::o;37105:307::-;37173:1;37183:113;37197:6;37194:1;37191:13;37183:113;;;37282:1;37277:3;37273:11;37267:18;37263:1;37258:3;37254:11;37247:39;37219:2;37216:1;37212:10;37207:15;;37183:113;;;37314:6;37311:1;37308:13;37305:101;;;37394:1;37385:6;37380:3;37376:16;37369:27;37305:101;37154:258;37105:307;;;:::o;37418:320::-;37462:6;37499:1;37493:4;37489:12;37479:22;;37546:1;37540:4;37536:12;37567:18;37557:81;;37623:4;37615:6;37611:17;37601:27;;37557:81;37685:2;37677:6;37674:14;37654:18;37651:38;37648:84;;;37704:18;;:::i;:::-;37648:84;37469:269;37418:320;;;:::o;37744:281::-;37827:27;37849:4;37827:27;:::i;:::-;37819:6;37815:40;37957:6;37945:10;37942:22;37921:18;37909:10;37906:34;37903:62;37900:88;;;37968:18;;:::i;:::-;37900:88;38008:10;38004:2;37997:22;37787:238;37744:281;;:::o;38031:233::-;38070:3;38093:24;38111:5;38093:24;:::i;:::-;38084:33;;38139:66;38132:5;38129:77;38126:103;;;38209:18;;:::i;:::-;38126:103;38256:1;38249:5;38245:13;38238:20;;38031:233;;;:::o;38270:176::-;38302:1;38319:20;38337:1;38319:20;:::i;:::-;38314:25;;38353:20;38371:1;38353:20;:::i;:::-;38348:25;;38392:1;38382:35;;38397:18;;:::i;:::-;38382:35;38438:1;38435;38431:9;38426:14;;38270:176;;;;:::o;38452:180::-;38500:77;38497:1;38490:88;38597:4;38594:1;38587:15;38621:4;38618:1;38611:15;38638:180;38686:77;38683:1;38676:88;38783:4;38780:1;38773:15;38807:4;38804:1;38797:15;38824:180;38872:77;38869:1;38862:88;38969:4;38966:1;38959:15;38993:4;38990:1;38983:15;39010:180;39058:77;39055:1;39048:88;39155:4;39152:1;39145:15;39179:4;39176:1;39169:15;39196:180;39244:77;39241:1;39234:88;39341:4;39338:1;39331:15;39365:4;39362:1;39355:15;39382:117;39491:1;39488;39481:12;39505:117;39614:1;39611;39604:12;39628:117;39737:1;39734;39727:12;39751:117;39860:1;39857;39850:12;39874:117;39983:1;39980;39973:12;39997:102;40038:6;40089:2;40085:7;40080:2;40073:5;40069:14;40065:28;40055:38;;39997:102;;;:::o;40105:237::-;40245:34;40241:1;40233:6;40229:14;40222:58;40314:20;40309:2;40301:6;40297:15;40290:45;40105:237;:::o;40348:225::-;40488:34;40484:1;40476:6;40472:14;40465:58;40557:8;40552:2;40544:6;40540:15;40533:33;40348:225;:::o;40579:178::-;40719:30;40715:1;40707:6;40703:14;40696:54;40579:178;:::o;40763:223::-;40903:34;40899:1;40891:6;40887:14;40880:58;40972:6;40967:2;40959:6;40955:15;40948:31;40763:223;:::o;40992:175::-;41132:27;41128:1;41120:6;41116:14;41109:51;40992:175;:::o;41173:231::-;41313:34;41309:1;41301:6;41297:14;41290:58;41382:14;41377:2;41369:6;41365:15;41358:39;41173:231;:::o;41410:172::-;41550:24;41546:1;41538:6;41534:14;41527:48;41410:172;:::o;41588:243::-;41728:34;41724:1;41716:6;41712:14;41705:58;41797:26;41792:2;41784:6;41780:15;41773:51;41588:243;:::o;41837:229::-;41977:34;41973:1;41965:6;41961:14;41954:58;42046:12;42041:2;42033:6;42029:15;42022:37;41837:229;:::o;42072:228::-;42212:34;42208:1;42200:6;42196:14;42189:58;42281:11;42276:2;42268:6;42264:15;42257:36;42072:228;:::o;42306:172::-;42446:24;42442:1;42434:6;42430:14;42423:48;42306:172;:::o;42484:182::-;42624:34;42620:1;42612:6;42608:14;42601:58;42484:182;:::o;42672:231::-;42812:34;42808:1;42800:6;42796:14;42789:58;42881:14;42876:2;42868:6;42864:15;42857:39;42672:231;:::o;42909:182::-;43049:34;43045:1;43037:6;43033:14;43026:58;42909:182;:::o;43097:171::-;43237:23;43233:1;43225:6;43221:14;43214:47;43097:171;:::o;43274:228::-;43414:34;43410:1;43402:6;43398:14;43391:58;43483:11;43478:2;43470:6;43466:15;43459:36;43274:228;:::o;43508:234::-;43648:34;43644:1;43636:6;43632:14;43625:58;43717:17;43712:2;43704:6;43700:15;43693:42;43508:234;:::o;43748:220::-;43888:34;43884:1;43876:6;43872:14;43865:58;43957:3;43952:2;43944:6;43940:15;43933:28;43748:220;:::o;43974:170::-;44114:22;44110:1;44102:6;44098:14;44091:46;43974:170;:::o;44150:236::-;44290:34;44286:1;44278:6;44274:14;44267:58;44359:19;44354:2;44346:6;44342:15;44335:44;44150:236;:::o;44392:173::-;44532:25;44528:1;44520:6;44516:14;44509:49;44392:173;:::o;44571:178::-;44711:30;44707:1;44699:6;44695:14;44688:54;44571:178;:::o;44755:172::-;44895:24;44891:1;44883:6;44879:14;44872:48;44755:172;:::o;44933:169::-;45073:21;45069:1;45061:6;45057:14;45050:45;44933:169;:::o;45108:161::-;45248:13;45244:1;45236:6;45232:14;45225:37;45108:161;:::o;45275:165::-;45415:17;45411:1;45403:6;45399:14;45392:41;45275:165;:::o;45446:122::-;45519:24;45537:5;45519:24;:::i;:::-;45512:5;45509:35;45499:63;;45558:1;45555;45548:12;45499:63;45446:122;:::o;45574:116::-;45644:21;45659:5;45644:21;:::i;:::-;45637:5;45634:32;45624:60;;45680:1;45677;45670:12;45624:60;45574:116;:::o;45696:120::-;45768:23;45785:5;45768:23;:::i;:::-;45761:5;45758:34;45748:62;;45806:1;45803;45796:12;45748:62;45696:120;:::o;45822:122::-;45895:24;45913:5;45895:24;:::i;:::-;45888:5;45885:35;45875:63;;45934:1;45931;45924:12;45875:63;45822:122;:::o
Swarm Source
ipfs://36416a8f65b342023692a788607a11a2cdb6c03fa8ed174dc41e0f6385a0b6b0
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.