ERC-721
Overview
Max Total Supply
35 daT1
Holders
35
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 daT1Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
podatCloud
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-11 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) 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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: .deps/npm/podatCloud.sol pragma solidity ^0.8.0; contract podatCloud is ERC721Enumerable, Ownable { POT public pot; SEV public sev; IERC1155 public eve; using SafeMath for uint256; using Strings for string; address public devAddress = 0xB758c4D4e2973FEF14Df828dA705f7c02980d836; address public artAddress = 0x770D33b60104f77d1eeF8970E55Ab0245315600c; address public busAddress = 0xB758c4D4e2973FEF14Df828dA705f7c02980d836; address public potToken = 0x9FCd3C8F683682CD0b108C9B32bb7BA0De945fCc; address public sevToken = 0x9FCd3C8F683682CD0b108C9B32bb7BA0De945fCc; address public eveToken = 0xEa7BC5a06Bc65803c5bcD1eDC774502897755D1E; uint256 public payB = 20; uint256 public payC = 40; uint256 public payD = 20; string public _baseTokenURI = "https://artstamps.io/podatTokens/"; mapping(uint256 => uint256) public price; mapping(uint256 => address) public client; mapping(uint256 => uint256) public clientPay; mapping(address => uint256) public noDupes; mapping(uint256 => uint256) public supply; mapping(uint256 => uint256) public typeNum; mapping(address => uint256) public allow; mapping(uint256 => uint256) public proofToken; mapping(uint256 => address) public proofContract; constructor() ERC721("PodaT Cloud", "daT1") { } function startZero () public onlyOwner { sev = SEV(sevToken); eve = IERC1155(eveToken); for (uint256 xx = 0; xx < 100; xx++) { supply[xx] = 0;} } function newClient(uint256 _match, uint256 setNum, uint256 _price, address _clientAdr, uint256 _clientPay, uint256 _typeNum) public onlyOwner { price[_match] = _price; client[_match] = _clientAdr; typeNum[_match] = _typeNum; clientPay[_match] = _clientPay; supply[_match] = setNum; } function changeContracts(address _seven, address _eleven) public onlyOwner { sevToken = _seven; sev = SEV(sevToken); eveToken = _eleven; eve = IERC1155(eveToken); } function changePays(address _art, address _bus, address _dev, uint256 _devPay, uint256 _artPay, uint256 _busPay) public onlyOwner { devAddress = _dev; artAddress = _art; busAddress = _bus; payB = _devPay; payC = _artPay; payD = _busPay; } function claimAddresses(uint256 _match, address _ad1, address _ad2, address _ad3, address _ad4, address _ad5) public { require(msg.sender == client[_match]); allow[_ad1] = _match; allow[_ad2] = _match; allow[_ad3] = _match; allow[_ad4] = _match; allow[_ad5] = _match; } function proofToClaim(address _prove, uint256 _ownToken, uint256 _match) public { potToken = _prove; pot = POT(potToken); require(pot.ownerOf(_ownToken) == msg.sender, "Must own"); allow[msg.sender] = _match; } function airdropMembership(uint256 _match, address _ad1) public onlyOwner { _safeMint(_ad1, _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; } function airdropMembership5(uint256 _match, address _ad1, address _ad2, address _ad3, address _ad4, address _ad5) public onlyOwner { address [5] memory temp; temp[0] = _ad1; temp[1] = _ad2; temp[2] = _ad3; temp[3] = _ad4; temp[4] = _ad5; for (uint256 i = 0; i < 5; i++) { _safeMint(temp[i], _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; } } function mintCloud(uint256 _match) public payable { require(typeNum[_match] == 1); require(price[_match] == msg.value, "insufficient ETH"); require(supply[_match] < 100, "No Paid Tokens Left"); _mint(msg.sender, _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; _payout(_match, clientPay[_match], payable(client[_match])); _payout(_match, payB, payable(devAddress)); _payout(_match, payC, payable(artAddress)); _payout(_match, payD, payable(busAddress)); } function mintSevCloud(uint256 _ownToken, uint256 _match) public payable { require(typeNum[_match] == 2); require(price[_match] == msg.value, "insufficient ETH"); require(supply[_match] < 100, "No Paid Tokens Left"); require(sev.ownerOf(_ownToken) == msg.sender, "Must own"); _mint(msg.sender, _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; _payout(_match, clientPay[_match], payable(client[_match])); _payout(_match, payB, payable(devAddress)); _payout(_match, payC, payable(artAddress)); _payout(_match, payD, payable(busAddress)); } function mintEveCloud(uint256 _ownToken, uint256 _match) public payable { require(typeNum[_match] == 3); require(price[_match] == msg.value, "insufficient ETH"); require(supply[_match] < 100, "No Paid Tokens Left"); require(eve.balanceOf(msg.sender, _ownToken) > 0, "Must own"); _mint(msg.sender, _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; _payout(_match, clientPay[_match], payable(client[_match])); _payout(_match, payB, payable(devAddress)); _payout(_match, payC, payable(artAddress)); _payout(_match, payD, payable(busAddress)); } function claimCloud(uint256 _match) public payable { require(typeNum[_match] == 5); require(price[_match] == msg.value, "insufficient ETH"); require(supply[_match] < 100, "No Paid Tokens Left"); require(allow[msg.sender] == _match); _mint(msg.sender, _match.mul(100) + supply[_match]); supply[_match] = supply[_match] + 1; _payout(_match, clientPay[_match], payable(client[_match])); _payout(_match, payB, payable(devAddress)); _payout(_match, payC, payable(artAddress)); _payout(_match, payD, payable(busAddress)); } function proofOf(address _prove, uint256 _ownToken, uint256 _match) public payable{ potToken = _prove; pot = POT(potToken); require(typeNum[_match] == 6); require(price[_match] == msg.value, "insufficient ETH"); require(supply[_match] < 100, "No Paid Tokens Left"); require(pot.ownerOf(_ownToken) == msg.sender, "Must own"); _mint(msg.sender, _match.mul(100) + supply[_match]); proofToken[_match.mul(100)+supply[_match]] = _ownToken; proofContract[_match.mul(100)+supply[_match]] = _prove; supply[_match] = supply[_match] + 1; _payout(_match, clientPay[_match], payable(client[_match])); _payout(_match, payB, payable(devAddress)); _payout(_match, payC, payable(artAddress)); _payout(_match, payD, payable(busAddress)); } function airToken(uint256 _tokenNum, address _ad1) public onlyOwner { _safeMint(_ad1, _tokenNum); } function _payout(uint256 _tokenNum, uint256 _amount, address payable _split) private { uint256 thePayment = _amount.mul(price[_tokenNum])/100; _split.transfer(thePayment); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function withdrawSome(uint256 leaveAmt) public onlyOwner { uint256 withdrawAmt = address(this).balance.sub(leaveAmt); payable(msg.sender).transfer(withdrawAmt); } } interface POT { function ownerOf(uint256 tokenId) external view returns (address); } interface SEV { function ownerOf(uint256 tokenId) external view returns (address); } interface IERC1155 { function balanceOf(address account, uint256 id) external view returns (uint256); }
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":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenNum","type":"uint256"},{"internalType":"address","name":"_ad1","type":"address"}],"name":"airToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_match","type":"uint256"},{"internalType":"address","name":"_ad1","type":"address"}],"name":"airdropMembership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_match","type":"uint256"},{"internalType":"address","name":"_ad1","type":"address"},{"internalType":"address","name":"_ad2","type":"address"},{"internalType":"address","name":"_ad3","type":"address"},{"internalType":"address","name":"_ad4","type":"address"},{"internalType":"address","name":"_ad5","type":"address"}],"name":"airdropMembership5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"busAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_seven","type":"address"},{"internalType":"address","name":"_eleven","type":"address"}],"name":"changeContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_art","type":"address"},{"internalType":"address","name":"_bus","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"uint256","name":"_devPay","type":"uint256"},{"internalType":"uint256","name":"_artPay","type":"uint256"},{"internalType":"uint256","name":"_busPay","type":"uint256"}],"name":"changePays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_match","type":"uint256"},{"internalType":"address","name":"_ad1","type":"address"},{"internalType":"address","name":"_ad2","type":"address"},{"internalType":"address","name":"_ad3","type":"address"},{"internalType":"address","name":"_ad4","type":"address"},{"internalType":"address","name":"_ad5","type":"address"}],"name":"claimAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"claimCloud","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"client","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"clientPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eve","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"mintCloud","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ownToken","type":"uint256"},{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"mintEveCloud","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ownToken","type":"uint256"},{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"mintSevCloud","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_match","type":"uint256"},{"internalType":"uint256","name":"setNum","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_clientAdr","type":"address"},{"internalType":"uint256","name":"_clientPay","type":"uint256"},{"internalType":"uint256","name":"_typeNum","type":"uint256"}],"name":"newClient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"noDupes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pot","outputs":[{"internalType":"contract POT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proofContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_prove","type":"address"},{"internalType":"uint256","name":"_ownToken","type":"uint256"},{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"proofOf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_prove","type":"address"},{"internalType":"uint256","name":"_ownToken","type":"uint256"},{"internalType":"uint256","name":"_match","type":"uint256"}],"name":"proofToClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proofToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sev","outputs":[{"internalType":"contract SEV","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sevToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"typeNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"leaveAmt","type":"uint256"}],"name":"withdrawSome","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273b758c4d4e2973fef14df828da705f7c02980d836600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073770d33b60104f77d1eef8970e55ab0245315600c600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b758c4d4e2973fef14df828da705f7c02980d836601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739fcd3c8f683682cd0b108c9b32bb7ba0de945fcc601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739fcd3c8f683682cd0b108c9b32bb7ba0de945fcc601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ea7bc5a06bc65803c5bcd1edc774502897755d1e601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014805560286015556014601655604051806060016040528060218152602001620064e6602191396017908051906020019062000241929190620003e4565b503480156200024f57600080fd5b506040518060400160405280600b81526020017f506f64615420436c6f75640000000000000000000000000000000000000000008152506040518060400160405280600481526020017f64615431000000000000000000000000000000000000000000000000000000008152508160009080519060200190620002d4929190620003e4565b508060019080519060200190620002ed929190620003e4565b50505062000310620003046200031660201b60201c565b6200031e60201b60201c565b620004f9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003f29062000494565b90600052602060002090601f01602090048101928262000416576000855562000462565b82601f106200043157805160ff191683800117855562000462565b8280016001018555821562000462579182015b828111156200046157825182559160200191906001019062000444565b5b50905062000471919062000475565b5090565b5b808211156200049057600081600090555060010162000476565b5090565b60006002820490506001821680620004ad57607f821691505b60208210811415620004c457620004c3620004ca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615fdd80620005096000396000f3fe6080604052600436106103765760003560e01c80637510b175116101d1578063c3b84d0211610102578063db73d515116100a0578063f2fde38b1161006f578063f2fde38b14610d0f578063f8c384a914610d38578063fb0743b914610d54578063ff9913e814610d7057610376565b8063db73d51514610c60578063df3cc80714610c8b578063dfde022614610ca7578063e985e9c514610cd257610376565b8063ce33de7f116100dc578063ce33de7f14610bb6578063cfc86f7b14610be1578063d4bbed8814610c0c578063d677a67c14610c3757610376565b8063c3b84d0214610b27578063c5e59c5514610b50578063c87b56dd14610b7957610376565b806395d89b411161016f578063ad7bb60811610149578063ad7bb60814610a6d578063ae9b051c14610aaa578063b88d4fde14610ad3578063b98cfd0514610afc57610376565b806395d89b41146109fd578063a22cb46514610a28578063a5831b6c14610a5157610376565b80638d00a26b116101ab5780638d00a26b146109515780638da5cb5b1461097c578063932c1cae146109a75780639489b879146109d257610376565b80637510b175146108ac578063783da953146108d7578063812e32191461091457610376565b806342842e0e116102ab57806355f804b3116102495780636d880e65116102235780636d880e651461081857806370a0823114610841578063715018a61461087e57806372c2bd1c1461089557610376565b806355f804b3146107895780636352211e146107b2578063676e9a7b146107ef57610376565b806348866b911161028557806348866b91146106b95780634ba2363a146106f65780634c986871146107215780634f6ccce71461074c57610376565b806342842e0e14610616578063471755bf1461063f5780634799bddc1461067c57610376565b806326a49e3711610318578063309627b6116102f2578063309627b61461055c5780633540302314610585578063376bb8bc146105c25780633ad10ef6146105eb57610376565b806326a49e37146104b95780632b636671146104f65780632f745c591461051f57610376565b8063095ea7b311610354578063095ea7b3146104205780630c983d861461044957806318160ddd1461046557806323b872dd1461049057610376565b806301ffc9a71461037b57806306fdde03146103b8578063081812fc146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614c3b565b610dad565b6040516103af91906152f9565b60405180910390f35b3480156103c457600080fd5b506103cd610e27565b6040516103da9190615365565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614cde565b610eb9565b6040516104179190615269565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190614ba8565b610eff565b005b610463600480360381019061045e9190614be8565b611017565b005b34801561047157600080fd5b5061047a6114bf565b60405161048791906155c7565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190614a92565b6114cc565b005b3480156104c557600080fd5b506104e060048036038101906104db9190614cde565b61152c565b6040516104ed91906155c7565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190614be8565b611544565b005b34801561052b57600080fd5b5061054660048036038101906105419190614ba8565b611749565b60405161055391906155c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e91906149c5565b6117ee565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614cde565b611942565b6040516105b991906155c7565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614d78565b61195a565b005b3480156105f757600080fd5b50610600611b21565b60405161060d9190615269565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614a92565b611b47565b005b34801561064b57600080fd5b5061066660048036038101906106619190614cde565b611b67565b60405161067391906155c7565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190614cde565b611b7f565b6040516106b091906155c7565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190614cde565b611b97565b6040516106ed9190615269565b60405180910390f35b34801561070257600080fd5b5061070b611bc9565b604051610718919061532f565b60405180910390f35b34801561072d57600080fd5b50610736611bef565b60405161074391906155c7565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e9190614cde565b611bf5565b60405161078091906155c7565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614c95565b611c66565b005b3480156107be57600080fd5b506107d960048036038101906107d49190614cde565b611c88565b6040516107e69190615269565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190614e45565b611d3a565b005b34801561082457600080fd5b5061083f600480360381019061083a9190614d38565b611dfc565b005b34801561084d57600080fd5b506108686004803603810190610863919061496b565b611e12565b60405161087591906155c7565b60405180910390f35b34801561088a57600080fd5b50610893611eca565b005b3480156108a157600080fd5b506108aa611ede565b005b3480156108b857600080fd5b506108c1611fe7565b6040516108ce919061534a565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f9919061496b565b61200d565b60405161090b91906155c7565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190614cde565b612025565b6040516109489190615269565b60405180910390f35b34801561095d57600080fd5b50610966612058565b6040516109739190615269565b60405180910390f35b34801561098857600080fd5b5061099161207e565b60405161099e9190615269565b60405180910390f35b3480156109b357600080fd5b506109bc6120a8565b6040516109c99190615269565b60405180910390f35b3480156109de57600080fd5b506109e76120ce565b6040516109f49190615269565b60405180910390f35b348015610a0957600080fd5b50610a126120f4565b604051610a1f9190615365565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614b68565b612186565b005b610a6b6004803603810190610a669190614e05565b61219c565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614cde565b6124d3565b604051610aa191906155c7565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190614cde565b6124eb565b005b348015610adf57600080fd5b50610afa6004803603810190610af59190614ae5565b612555565b005b348015610b0857600080fd5b50610b116125b7565b604051610b1e9190615269565b60405180910390f35b348015610b3357600080fd5b50610b4e6004803603810190610b499190614d38565b6125dd565b005b348015610b5c57600080fd5b50610b776004803603810190610b729190614d78565b61265b565b005b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614cde565b612899565b604051610bad9190615365565b60405180910390f35b348015610bc257600080fd5b50610bcb612901565b604051610bd89190615269565b60405180910390f35b348015610bed57600080fd5b50610bf6612927565b604051610c039190615365565b60405180910390f35b348015610c1857600080fd5b50610c216129b5565b604051610c2e9190615314565b60405180910390f35b348015610c4357600080fd5b50610c5e6004803603810190610c599190614a05565b6129db565b005b348015610c6c57600080fd5b50610c75612ac3565b604051610c8291906155c7565b60405180910390f35b610ca56004803603810190610ca09190614cde565b612ac9565b005b348015610cb357600080fd5b50610cbc612ce7565b604051610cc991906155c7565b60405180910390f35b348015610cde57600080fd5b50610cf96004803603810190610cf491906149c5565b612ced565b604051610d0691906152f9565b60405180910390f35b348015610d1b57600080fd5b50610d366004803603810190610d31919061496b565b612d81565b005b610d526004803603810190610d4d9190614cde565b612e05565b005b610d6e6004803603810190610d699190614e05565b61306e565b005b348015610d7c57600080fd5b50610d976004803603810190610d92919061496b565b61337b565b604051610da491906155c7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e205750610e1f82613393565b5b9050919050565b606060008054610e36906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e62906158d1565b8015610eaf5780601f10610e8457610100808354040283529160200191610eaf565b820191906000526020600020905b815481529060010190602001808311610e9257829003601f168201915b5050505050905090565b6000610ec482613475565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0a82611c88565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290615567565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9a6134c0565b73ffffffffffffffffffffffffffffffffffffffff161480610fc95750610fc881610fc36134c0565b612ced565b5b611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906154a7565b60405180910390fd5b61101283836134c8565b505050565b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006601d600083815260200190815260200160002054146110db57600080fd5b34601860008381526020019081526020016000205414611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90615527565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016111f891906155c7565b60206040518083038186803b15801561121057600080fd5b505afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112489190614998565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590615387565b60405180910390fd5b6112d933601c6000848152602001908152602001600020546112ca60648561358190919063ffffffff16565b6112d491906156ac565b613597565b81601f6000601c60008581526020019081526020016000205461130660648661358190919063ffffffff16565b61131091906156ac565b8152602001908152602001600020819055508260206000601c60008581526020019081526020016000205461134f60648661358190919063ffffffff16565b61135991906156ac565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c6000838152602001908152602001600020546113c591906156ac565b601c60008381526020019081526020016000208190555061142d81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61145c81601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61148b81601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6114ba81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b505050565b6000600880549050905090565b6114dd6114d76134c0565b826137f4565b61151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906155a7565b60405180910390fd5b611527838383613889565b505050565b60186020528060005260406000206000915090505481565b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161165a91906155c7565b60206040518083038186803b15801561167257600080fd5b505afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614998565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790615387565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600061175483611e12565b8210611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c906153a7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6117f6613af0565b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c6020528060005260406000206000915090505481565b6019600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119c557600080fd5b85601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b6283838360405180602001604052806000815250612555565b505050565b601a6020528060005260406000206000915090505481565b601f6020528060005260406000206000915090505481565b602080528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000611bff6114bf565b8210611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790615587565b60405180910390fd5b60088281548110611c5457611c53615a6a565b5b90600052602060002001549050919050565b611c6e613af0565b8060179080519060200190611c84929190614733565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890615547565b60405180910390fd5b80915050919050565b611d42613af0565b836018600088815260200190815260200160002081905550826019600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60008881526020019081526020016000208190555081601a60008881526020019081526020016000208190555084601c600088815260200190815260200160002081905550505050505050565b611e04613af0565b611e0e8183613b6e565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90615487565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ed2613af0565b611edc6000613b8c565b565b611ee6613af0565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b6064811015611fe4576000601c6000838152602001908152602001600020819055508080611fdc90615934565b915050611faf565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915090505481565b60196020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054612103906158d1565b80601f016020809104026020016040519081016040528092919081815260200182805461212f906158d1565b801561217c5780601f106121515761010080835404028352916020019161217c565b820191906000526020600020905b81548152906001019060200180831161215f57829003601f168201915b5050505050905090565b6121986121916134c0565b8383613c52565b5050565b6002601d600083815260200190815260200160002054146121bc57600080fd5b34601860008381526020019081526020016000205414612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90615527565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016122d991906155c7565b60206040518083038186803b1580156122f157600080fd5b505afa158015612305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123299190614998565b73ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690615387565b60405180910390fd5b6123ba33601c6000848152602001908152602001600020546123ab60648561358190919063ffffffff16565b6123b591906156ac565b613597565b6001601c6000838152602001908152602001600020546123da91906156ac565b601c60008381526020019081526020016000208190555061244281601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61247181601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6124a081601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6124cf81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b5050565b601d6020528060005260406000206000915090505481565b6124f3613af0565b60006125088247613dbf90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612550573d6000803e3d6000fd5b505050565b6125666125606134c0565b836137f4565b6125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c906155a7565b60405180910390fd5b6125b184848484613dd5565b50505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125e5613af0565b61262081601c60008581526020019081526020016000205461261160648661358190919063ffffffff16565b61261b91906156ac565b613b6e565b6001601c60008481526020019081526020016000205461264091906156ac565b601c6000848152602001908152602001600020819055505050565b612663613af0565b61266b6147b9565b85816000600581106126805761267f615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084816001600581106126cc576126cb615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160026005811061271857612717615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160036005811061276457612763615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816004600581106127b0576127af615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b600581101561288f5761284582826005811061280957612808615a6a565b5b6020020151601c60008b81526020019081526020016000205461283660648c61358190919063ffffffff16565b61284091906156ac565b613b6e565b6001601c60008a81526020019081526020016000205461286591906156ac565b601c60008a815260200190815260200160002081905550808061288790615934565b9150506127ea565b5050505050505050565b60606128a482613475565b60006128ae613e31565b905060008151116128ce57604051806020016040528060008152506128f9565b806128d884613ec3565b6040516020016128e9929190615245565b6040516020818303038152906040525b915050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60178054612934906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612960906158d1565b80156129ad5780601f10612982576101008083540402835291602001916129ad565b820191906000526020600020905b81548152906001019060200180831161299057829003601f168201915b505050505081565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129e3613af0565b83600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826014819055508160158190555080601681905550505050505050565b60165481565b6001601d60008381526020019081526020016000205414612ae957600080fd5b34601860008381526020019081526020016000205414612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90615527565b60405180910390fd5b612bcf33601c600084815260200190815260200160002054612bc060648561358190919063ffffffff16565b612bca91906156ac565b613597565b6001601c600083815260200190815260200160002054612bef91906156ac565b601c600083815260200190815260200160002081905550612c5781601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612c8681601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612cb581601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612ce481601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b50565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612d89613af0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df0906153e7565b60405180910390fd5b612e0281613b8c565b50565b6005601d60008381526020019081526020016000205414612e2557600080fd5b34601860008381526020019081526020016000205414612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7190615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec790615527565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f1b57600080fd5b612f5633601c600084815260200190815260200160002054612f4760648561358190919063ffffffff16565b612f5191906156ac565b613597565b6001601c600083815260200190815260200160002054612f7691906156ac565b601c600083815260200190815260200160002081905550612fde81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61300d81601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61303c81601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61306b81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b50565b6003601d6000838152602001908152602001600020541461308e57600080fd5b346018600083815260200190815260200160002054146130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da90615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090615527565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33856040518363ffffffff1660e01b81526004016131979291906152d0565b60206040518083038186803b1580156131af57600080fd5b505afa1580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614d0b565b11613227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321e90615387565b60405180910390fd5b61326233601c60008481526020019081526020016000205461325360648561358190919063ffffffff16565b61325d91906156ac565b613597565b6001601c60008381526020019081526020016000205461328291906156ac565b601c6000838152602001908152602001600020819055506132ea81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61331981601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61334881601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61337781601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b5050565b601e6020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061345e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061346e575061346d82614024565b5b9050919050565b61347e8161408e565b6134bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b490615547565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661353b83611c88565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818361358f9190615733565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe906154c7565b60405180910390fd5b6136108161408e565b15613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790615427565b60405180910390fd5b61365c600083836140fa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ac91906156ac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461376d6000838361420e565b5050565b6000606461379b60186000878152602001908152602001600020548561358190919063ffffffff16565b6137a59190615702565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137ed573d6000803e3d6000fd5b5050505050565b60008061380083611c88565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061384257506138418185612ced565b5b8061388057508373ffffffffffffffffffffffffffffffffffffffff1661386884610eb9565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166138a982611c88565b73ffffffffffffffffffffffffffffffffffffffff16146138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f690615407565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561396f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396690615447565b60405180910390fd5b61397a8383836140fa565b6139856000826134c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d5919061578d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a2c91906156ac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613aeb83838361420e565b505050565b613af86134c0565b73ffffffffffffffffffffffffffffffffffffffff16613b1661207e565b73ffffffffffffffffffffffffffffffffffffffff1614613b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b63906154e7565b60405180910390fd5b565b613b88828260405180602001604052806000815250614213565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb890615467565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613db291906152f9565b60405180910390a3505050565b60008183613dcd919061578d565b905092915050565b613de0848484613889565b613dec8484848461426e565b613e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e22906153c7565b60405180910390fd5b50505050565b606060178054613e40906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054613e6c906158d1565b8015613eb95780601f10613e8e57610100808354040283529160200191613eb9565b820191906000526020600020905b815481529060010190602001808311613e9c57829003601f168201915b5050505050905090565b60606000821415613f0b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061401f565b600082905060005b60008214613f3d578080613f2690615934565b915050600a82613f369190615702565b9150613f13565b60008167ffffffffffffffff811115613f5957613f58615a99565b5b6040519080825280601f01601f191660200182016040528015613f8b5781602001600182028036833780820191505090505b5090505b6000851461401857600182613fa4919061578d565b9150600a85613fb3919061597d565b6030613fbf91906156ac565b60f81b818381518110613fd557613fd4615a6a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856140119190615702565b9450613f8f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b614105838383614405565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614148576141438161440a565b614187565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614186576141858382614453565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141ca576141c5816145c0565b614209565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614614208576142078282614691565b5b5b505050565b505050565b61421d8383613597565b61422a600084848461426e565b614269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614260906153c7565b60405180910390fd5b505050565b600061428f8473ffffffffffffffffffffffffffffffffffffffff16614710565b156143f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026142b86134c0565b8786866040518563ffffffff1660e01b81526004016142da9493929190615284565b602060405180830381600087803b1580156142f457600080fd5b505af192505050801561432557506040513d601f19601f820116820180604052508101906143229190614c68565b60015b6143a8573d8060008114614355576040519150601f19603f3d011682016040523d82523d6000602084013e61435a565b606091505b506000815114156143a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614397906153c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506143fd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161446084611e12565b61446a919061578d565b905060006007600084815260200190815260200160002054905081811461454f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506145d4919061578d565b905060006009600084815260200190815260200160002054905060006008838154811061460457614603615a6a565b5b90600052602060002001549050806008838154811061462657614625615a6a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061467557614674615a3b565b5b6001900381819060005260206000200160009055905550505050565b600061469c83611e12565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461473f906158d1565b90600052602060002090601f01602090048101928261476157600085556147a8565b82601f1061477a57805160ff19168380011785556147a8565b828001600101855582156147a8579182015b828111156147a757825182559160200191906001019061478c565b5b5090506147b591906147db565b5090565b6040518060a00160405280600590602082028036833780820191505090505090565b5b808211156147f45760008160009055506001016147dc565b5090565b600061480b61480684615607565b6155e2565b90508281526020810184848401111561482757614826615acd565b5b61483284828561588f565b509392505050565b600061484d61484884615638565b6155e2565b90508281526020810184848401111561486957614868615acd565b5b61487484828561588f565b509392505050565b60008135905061488b81615f4b565b92915050565b6000815190506148a081615f4b565b92915050565b6000813590506148b581615f62565b92915050565b6000813590506148ca81615f79565b92915050565b6000815190506148df81615f79565b92915050565b600082601f8301126148fa576148f9615ac8565b5b813561490a8482602086016147f8565b91505092915050565b600082601f83011261492857614927615ac8565b5b813561493884826020860161483a565b91505092915050565b60008135905061495081615f90565b92915050565b60008151905061496581615f90565b92915050565b60006020828403121561498157614980615ad7565b5b600061498f8482850161487c565b91505092915050565b6000602082840312156149ae576149ad615ad7565b5b60006149bc84828501614891565b91505092915050565b600080604083850312156149dc576149db615ad7565b5b60006149ea8582860161487c565b92505060206149fb8582860161487c565b9150509250929050565b60008060008060008060c08789031215614a2257614a21615ad7565b5b6000614a3089828a0161487c565b9650506020614a4189828a0161487c565b9550506040614a5289828a0161487c565b9450506060614a6389828a01614941565b9350506080614a7489828a01614941565b92505060a0614a8589828a01614941565b9150509295509295509295565b600080600060608486031215614aab57614aaa615ad7565b5b6000614ab98682870161487c565b9350506020614aca8682870161487c565b9250506040614adb86828701614941565b9150509250925092565b60008060008060808587031215614aff57614afe615ad7565b5b6000614b0d8782880161487c565b9450506020614b1e8782880161487c565b9350506040614b2f87828801614941565b925050606085013567ffffffffffffffff811115614b5057614b4f615ad2565b5b614b5c878288016148e5565b91505092959194509250565b60008060408385031215614b7f57614b7e615ad7565b5b6000614b8d8582860161487c565b9250506020614b9e858286016148a6565b9150509250929050565b60008060408385031215614bbf57614bbe615ad7565b5b6000614bcd8582860161487c565b9250506020614bde85828601614941565b9150509250929050565b600080600060608486031215614c0157614c00615ad7565b5b6000614c0f8682870161487c565b9350506020614c2086828701614941565b9250506040614c3186828701614941565b9150509250925092565b600060208284031215614c5157614c50615ad7565b5b6000614c5f848285016148bb565b91505092915050565b600060208284031215614c7e57614c7d615ad7565b5b6000614c8c848285016148d0565b91505092915050565b600060208284031215614cab57614caa615ad7565b5b600082013567ffffffffffffffff811115614cc957614cc8615ad2565b5b614cd584828501614913565b91505092915050565b600060208284031215614cf457614cf3615ad7565b5b6000614d0284828501614941565b91505092915050565b600060208284031215614d2157614d20615ad7565b5b6000614d2f84828501614956565b91505092915050565b60008060408385031215614d4f57614d4e615ad7565b5b6000614d5d85828601614941565b9250506020614d6e8582860161487c565b9150509250929050565b60008060008060008060c08789031215614d9557614d94615ad7565b5b6000614da389828a01614941565b9650506020614db489828a0161487c565b9550506040614dc589828a0161487c565b9450506060614dd689828a0161487c565b9350506080614de789828a0161487c565b92505060a0614df889828a0161487c565b9150509295509295509295565b60008060408385031215614e1c57614e1b615ad7565b5b6000614e2a85828601614941565b9250506020614e3b85828601614941565b9150509250929050565b60008060008060008060c08789031215614e6257614e61615ad7565b5b6000614e7089828a01614941565b9650506020614e8189828a01614941565b9550506040614e9289828a01614941565b9450506060614ea389828a0161487c565b9350506080614eb489828a01614941565b92505060a0614ec589828a01614941565b9150509295509295509295565b614edb816157c1565b82525050565b614eea816157d3565b82525050565b6000614efb82615669565b614f05818561567f565b9350614f1581856020860161589e565b614f1e81615adc565b840191505092915050565b614f3281615835565b82525050565b614f4181615847565b82525050565b614f5081615859565b82525050565b6000614f6182615674565b614f6b8185615690565b9350614f7b81856020860161589e565b614f8481615adc565b840191505092915050565b6000614f9a82615674565b614fa481856156a1565b9350614fb481856020860161589e565b80840191505092915050565b6000614fcd600883615690565b9150614fd882615aed565b602082019050919050565b6000614ff0602b83615690565b9150614ffb82615b16565b604082019050919050565b6000615013603283615690565b915061501e82615b65565b604082019050919050565b6000615036602683615690565b915061504182615bb4565b604082019050919050565b6000615059602583615690565b915061506482615c03565b604082019050919050565b600061507c601c83615690565b915061508782615c52565b602082019050919050565b600061509f602483615690565b91506150aa82615c7b565b604082019050919050565b60006150c2601983615690565b91506150cd82615cca565b602082019050919050565b60006150e5602983615690565b91506150f082615cf3565b604082019050919050565b6000615108603e83615690565b915061511382615d42565b604082019050919050565b600061512b602083615690565b915061513682615d91565b602082019050919050565b600061514e602083615690565b915061515982615dba565b602082019050919050565b6000615171601083615690565b915061517c82615de3565b602082019050919050565b6000615194601383615690565b915061519f82615e0c565b602082019050919050565b60006151b7601883615690565b91506151c282615e35565b602082019050919050565b60006151da602183615690565b91506151e582615e5e565b604082019050919050565b60006151fd602c83615690565b915061520882615ead565b604082019050919050565b6000615220602e83615690565b915061522b82615efc565b604082019050919050565b61523f8161582b565b82525050565b60006152518285614f8f565b915061525d8284614f8f565b91508190509392505050565b600060208201905061527e6000830184614ed2565b92915050565b60006080820190506152996000830187614ed2565b6152a66020830186614ed2565b6152b36040830185615236565b81810360608301526152c58184614ef0565b905095945050505050565b60006040820190506152e56000830185614ed2565b6152f26020830184615236565b9392505050565b600060208201905061530e6000830184614ee1565b92915050565b60006020820190506153296000830184614f29565b92915050565b60006020820190506153446000830184614f38565b92915050565b600060208201905061535f6000830184614f47565b92915050565b6000602082019050818103600083015261537f8184614f56565b905092915050565b600060208201905081810360008301526153a081614fc0565b9050919050565b600060208201905081810360008301526153c081614fe3565b9050919050565b600060208201905081810360008301526153e081615006565b9050919050565b6000602082019050818103600083015261540081615029565b9050919050565b600060208201905081810360008301526154208161504c565b9050919050565b600060208201905081810360008301526154408161506f565b9050919050565b6000602082019050818103600083015261546081615092565b9050919050565b60006020820190508181036000830152615480816150b5565b9050919050565b600060208201905081810360008301526154a0816150d8565b9050919050565b600060208201905081810360008301526154c0816150fb565b9050919050565b600060208201905081810360008301526154e08161511e565b9050919050565b6000602082019050818103600083015261550081615141565b9050919050565b6000602082019050818103600083015261552081615164565b9050919050565b6000602082019050818103600083015261554081615187565b9050919050565b60006020820190508181036000830152615560816151aa565b9050919050565b60006020820190508181036000830152615580816151cd565b9050919050565b600060208201905081810360008301526155a0816151f0565b9050919050565b600060208201905081810360008301526155c081615213565b9050919050565b60006020820190506155dc6000830184615236565b92915050565b60006155ec6155fd565b90506155f88282615903565b919050565b6000604051905090565b600067ffffffffffffffff82111561562257615621615a99565b5b61562b82615adc565b9050602081019050919050565b600067ffffffffffffffff82111561565357615652615a99565b5b61565c82615adc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006156b78261582b565b91506156c28361582b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156f7576156f66159ae565b5b828201905092915050565b600061570d8261582b565b91506157188361582b565b925082615728576157276159dd565b5b828204905092915050565b600061573e8261582b565b91506157498361582b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615782576157816159ae565b5b828202905092915050565b60006157988261582b565b91506157a38361582b565b9250828210156157b6576157b56159ae565b5b828203905092915050565b60006157cc8261580b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006158408261586b565b9050919050565b60006158528261586b565b9050919050565b60006158648261586b565b9050919050565b60006158768261587d565b9050919050565b60006158888261580b565b9050919050565b82818337600083830152505050565b60005b838110156158bc5780820151818401526020810190506158a1565b838111156158cb576000848401525b50505050565b600060028204905060018216806158e957607f821691505b602082108114156158fd576158fc615a0c565b5b50919050565b61590c82615adc565b810181811067ffffffffffffffff8211171561592b5761592a615a99565b5b80604052505050565b600061593f8261582b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615972576159716159ae565b5b600182019050919050565b60006159888261582b565b91506159938361582b565b9250826159a3576159a26159dd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d757374206f776e000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e742045544800000000000000000000000000000000600082015250565b7f4e6f205061696420546f6b656e73204c65667400000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b615f54816157c1565b8114615f5f57600080fd5b50565b615f6b816157d3565b8114615f7657600080fd5b50565b615f82816157df565b8114615f8d57600080fd5b50565b615f998161582b565b8114615fa457600080fd5b5056fea26469706673582212202dbd38fbf2f4a662fcbc50dddab661ca671617728c4173ff4e281515c862df2264736f6c6343000807003368747470733a2f2f6172747374616d70732e696f2f706f646174546f6b656e732f
Deployed Bytecode
0x6080604052600436106103765760003560e01c80637510b175116101d1578063c3b84d0211610102578063db73d515116100a0578063f2fde38b1161006f578063f2fde38b14610d0f578063f8c384a914610d38578063fb0743b914610d54578063ff9913e814610d7057610376565b8063db73d51514610c60578063df3cc80714610c8b578063dfde022614610ca7578063e985e9c514610cd257610376565b8063ce33de7f116100dc578063ce33de7f14610bb6578063cfc86f7b14610be1578063d4bbed8814610c0c578063d677a67c14610c3757610376565b8063c3b84d0214610b27578063c5e59c5514610b50578063c87b56dd14610b7957610376565b806395d89b411161016f578063ad7bb60811610149578063ad7bb60814610a6d578063ae9b051c14610aaa578063b88d4fde14610ad3578063b98cfd0514610afc57610376565b806395d89b41146109fd578063a22cb46514610a28578063a5831b6c14610a5157610376565b80638d00a26b116101ab5780638d00a26b146109515780638da5cb5b1461097c578063932c1cae146109a75780639489b879146109d257610376565b80637510b175146108ac578063783da953146108d7578063812e32191461091457610376565b806342842e0e116102ab57806355f804b3116102495780636d880e65116102235780636d880e651461081857806370a0823114610841578063715018a61461087e57806372c2bd1c1461089557610376565b806355f804b3146107895780636352211e146107b2578063676e9a7b146107ef57610376565b806348866b911161028557806348866b91146106b95780634ba2363a146106f65780634c986871146107215780634f6ccce71461074c57610376565b806342842e0e14610616578063471755bf1461063f5780634799bddc1461067c57610376565b806326a49e3711610318578063309627b6116102f2578063309627b61461055c5780633540302314610585578063376bb8bc146105c25780633ad10ef6146105eb57610376565b806326a49e37146104b95780632b636671146104f65780632f745c591461051f57610376565b8063095ea7b311610354578063095ea7b3146104205780630c983d861461044957806318160ddd1461046557806323b872dd1461049057610376565b806301ffc9a71461037b57806306fdde03146103b8578063081812fc146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614c3b565b610dad565b6040516103af91906152f9565b60405180910390f35b3480156103c457600080fd5b506103cd610e27565b6040516103da9190615365565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614cde565b610eb9565b6040516104179190615269565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190614ba8565b610eff565b005b610463600480360381019061045e9190614be8565b611017565b005b34801561047157600080fd5b5061047a6114bf565b60405161048791906155c7565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190614a92565b6114cc565b005b3480156104c557600080fd5b506104e060048036038101906104db9190614cde565b61152c565b6040516104ed91906155c7565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190614be8565b611544565b005b34801561052b57600080fd5b5061054660048036038101906105419190614ba8565b611749565b60405161055391906155c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e91906149c5565b6117ee565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614cde565b611942565b6040516105b991906155c7565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614d78565b61195a565b005b3480156105f757600080fd5b50610600611b21565b60405161060d9190615269565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614a92565b611b47565b005b34801561064b57600080fd5b5061066660048036038101906106619190614cde565b611b67565b60405161067391906155c7565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190614cde565b611b7f565b6040516106b091906155c7565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190614cde565b611b97565b6040516106ed9190615269565b60405180910390f35b34801561070257600080fd5b5061070b611bc9565b604051610718919061532f565b60405180910390f35b34801561072d57600080fd5b50610736611bef565b60405161074391906155c7565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e9190614cde565b611bf5565b60405161078091906155c7565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614c95565b611c66565b005b3480156107be57600080fd5b506107d960048036038101906107d49190614cde565b611c88565b6040516107e69190615269565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190614e45565b611d3a565b005b34801561082457600080fd5b5061083f600480360381019061083a9190614d38565b611dfc565b005b34801561084d57600080fd5b506108686004803603810190610863919061496b565b611e12565b60405161087591906155c7565b60405180910390f35b34801561088a57600080fd5b50610893611eca565b005b3480156108a157600080fd5b506108aa611ede565b005b3480156108b857600080fd5b506108c1611fe7565b6040516108ce919061534a565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f9919061496b565b61200d565b60405161090b91906155c7565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190614cde565b612025565b6040516109489190615269565b60405180910390f35b34801561095d57600080fd5b50610966612058565b6040516109739190615269565b60405180910390f35b34801561098857600080fd5b5061099161207e565b60405161099e9190615269565b60405180910390f35b3480156109b357600080fd5b506109bc6120a8565b6040516109c99190615269565b60405180910390f35b3480156109de57600080fd5b506109e76120ce565b6040516109f49190615269565b60405180910390f35b348015610a0957600080fd5b50610a126120f4565b604051610a1f9190615365565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614b68565b612186565b005b610a6b6004803603810190610a669190614e05565b61219c565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614cde565b6124d3565b604051610aa191906155c7565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190614cde565b6124eb565b005b348015610adf57600080fd5b50610afa6004803603810190610af59190614ae5565b612555565b005b348015610b0857600080fd5b50610b116125b7565b604051610b1e9190615269565b60405180910390f35b348015610b3357600080fd5b50610b4e6004803603810190610b499190614d38565b6125dd565b005b348015610b5c57600080fd5b50610b776004803603810190610b729190614d78565b61265b565b005b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614cde565b612899565b604051610bad9190615365565b60405180910390f35b348015610bc257600080fd5b50610bcb612901565b604051610bd89190615269565b60405180910390f35b348015610bed57600080fd5b50610bf6612927565b604051610c039190615365565b60405180910390f35b348015610c1857600080fd5b50610c216129b5565b604051610c2e9190615314565b60405180910390f35b348015610c4357600080fd5b50610c5e6004803603810190610c599190614a05565b6129db565b005b348015610c6c57600080fd5b50610c75612ac3565b604051610c8291906155c7565b60405180910390f35b610ca56004803603810190610ca09190614cde565b612ac9565b005b348015610cb357600080fd5b50610cbc612ce7565b604051610cc991906155c7565b60405180910390f35b348015610cde57600080fd5b50610cf96004803603810190610cf491906149c5565b612ced565b604051610d0691906152f9565b60405180910390f35b348015610d1b57600080fd5b50610d366004803603810190610d31919061496b565b612d81565b005b610d526004803603810190610d4d9190614cde565b612e05565b005b610d6e6004803603810190610d699190614e05565b61306e565b005b348015610d7c57600080fd5b50610d976004803603810190610d92919061496b565b61337b565b604051610da491906155c7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e205750610e1f82613393565b5b9050919050565b606060008054610e36906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e62906158d1565b8015610eaf5780601f10610e8457610100808354040283529160200191610eaf565b820191906000526020600020905b815481529060010190602001808311610e9257829003601f168201915b5050505050905090565b6000610ec482613475565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0a82611c88565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290615567565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9a6134c0565b73ffffffffffffffffffffffffffffffffffffffff161480610fc95750610fc881610fc36134c0565b612ced565b5b611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906154a7565b60405180910390fd5b61101283836134c8565b505050565b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006601d600083815260200190815260200160002054146110db57600080fd5b34601860008381526020019081526020016000205414611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90615527565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016111f891906155c7565b60206040518083038186803b15801561121057600080fd5b505afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112489190614998565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590615387565b60405180910390fd5b6112d933601c6000848152602001908152602001600020546112ca60648561358190919063ffffffff16565b6112d491906156ac565b613597565b81601f6000601c60008581526020019081526020016000205461130660648661358190919063ffffffff16565b61131091906156ac565b8152602001908152602001600020819055508260206000601c60008581526020019081526020016000205461134f60648661358190919063ffffffff16565b61135991906156ac565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c6000838152602001908152602001600020546113c591906156ac565b601c60008381526020019081526020016000208190555061142d81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61145c81601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61148b81601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6114ba81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b505050565b6000600880549050905090565b6114dd6114d76134c0565b826137f4565b61151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906155a7565b60405180910390fd5b611527838383613889565b505050565b60186020528060005260406000206000915090505481565b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161165a91906155c7565b60206040518083038186803b15801561167257600080fd5b505afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614998565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790615387565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600061175483611e12565b8210611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c906153a7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6117f6613af0565b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c6020528060005260406000206000915090505481565b6019600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119c557600080fd5b85601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b6283838360405180602001604052806000815250612555565b505050565b601a6020528060005260406000206000915090505481565b601f6020528060005260406000206000915090505481565b602080528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000611bff6114bf565b8210611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790615587565b60405180910390fd5b60088281548110611c5457611c53615a6a565b5b90600052602060002001549050919050565b611c6e613af0565b8060179080519060200190611c84929190614733565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890615547565b60405180910390fd5b80915050919050565b611d42613af0565b836018600088815260200190815260200160002081905550826019600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60008881526020019081526020016000208190555081601a60008881526020019081526020016000208190555084601c600088815260200190815260200160002081905550505050505050565b611e04613af0565b611e0e8183613b6e565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90615487565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ed2613af0565b611edc6000613b8c565b565b611ee6613af0565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b6064811015611fe4576000601c6000838152602001908152602001600020819055508080611fdc90615934565b915050611faf565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915090505481565b60196020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054612103906158d1565b80601f016020809104026020016040519081016040528092919081815260200182805461212f906158d1565b801561217c5780601f106121515761010080835404028352916020019161217c565b820191906000526020600020905b81548152906001019060200180831161215f57829003601f168201915b5050505050905090565b6121986121916134c0565b8383613c52565b5050565b6002601d600083815260200190815260200160002054146121bc57600080fd5b34601860008381526020019081526020016000205414612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90615527565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016122d991906155c7565b60206040518083038186803b1580156122f157600080fd5b505afa158015612305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123299190614998565b73ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690615387565b60405180910390fd5b6123ba33601c6000848152602001908152602001600020546123ab60648561358190919063ffffffff16565b6123b591906156ac565b613597565b6001601c6000838152602001908152602001600020546123da91906156ac565b601c60008381526020019081526020016000208190555061244281601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61247181601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6124a081601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b6124cf81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b5050565b601d6020528060005260406000206000915090505481565b6124f3613af0565b60006125088247613dbf90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612550573d6000803e3d6000fd5b505050565b6125666125606134c0565b836137f4565b6125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c906155a7565b60405180910390fd5b6125b184848484613dd5565b50505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125e5613af0565b61262081601c60008581526020019081526020016000205461261160648661358190919063ffffffff16565b61261b91906156ac565b613b6e565b6001601c60008481526020019081526020016000205461264091906156ac565b601c6000848152602001908152602001600020819055505050565b612663613af0565b61266b6147b9565b85816000600581106126805761267f615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084816001600581106126cc576126cb615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160026005811061271857612717615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160036005811061276457612763615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816004600581106127b0576127af615a6a565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b600581101561288f5761284582826005811061280957612808615a6a565b5b6020020151601c60008b81526020019081526020016000205461283660648c61358190919063ffffffff16565b61284091906156ac565b613b6e565b6001601c60008a81526020019081526020016000205461286591906156ac565b601c60008a815260200190815260200160002081905550808061288790615934565b9150506127ea565b5050505050505050565b60606128a482613475565b60006128ae613e31565b905060008151116128ce57604051806020016040528060008152506128f9565b806128d884613ec3565b6040516020016128e9929190615245565b6040516020818303038152906040525b915050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60178054612934906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612960906158d1565b80156129ad5780601f10612982576101008083540402835291602001916129ad565b820191906000526020600020905b81548152906001019060200180831161299057829003601f168201915b505050505081565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129e3613af0565b83600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826014819055508160158190555080601681905550505050505050565b60165481565b6001601d60008381526020019081526020016000205414612ae957600080fd5b34601860008381526020019081526020016000205414612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90615527565b60405180910390fd5b612bcf33601c600084815260200190815260200160002054612bc060648561358190919063ffffffff16565b612bca91906156ac565b613597565b6001601c600083815260200190815260200160002054612bef91906156ac565b601c600083815260200190815260200160002081905550612c5781601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612c8681601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612cb581601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b612ce481601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b50565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612d89613af0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df0906153e7565b60405180910390fd5b612e0281613b8c565b50565b6005601d60008381526020019081526020016000205414612e2557600080fd5b34601860008381526020019081526020016000205414612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7190615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec790615527565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f1b57600080fd5b612f5633601c600084815260200190815260200160002054612f4760648561358190919063ffffffff16565b612f5191906156ac565b613597565b6001601c600083815260200190815260200160002054612f7691906156ac565b601c600083815260200190815260200160002081905550612fde81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61300d81601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61303c81601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61306b81601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b50565b6003601d6000838152602001908152602001600020541461308e57600080fd5b346018600083815260200190815260200160002054146130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da90615507565b60405180910390fd5b6064601c60008381526020019081526020016000205410613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090615527565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33856040518363ffffffff1660e01b81526004016131979291906152d0565b60206040518083038186803b1580156131af57600080fd5b505afa1580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614d0b565b11613227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321e90615387565b60405180910390fd5b61326233601c60008481526020019081526020016000205461325360648561358190919063ffffffff16565b61325d91906156ac565b613597565b6001601c60008381526020019081526020016000205461328291906156ac565b601c6000838152602001908152602001600020819055506132ea81601a6000848152602001908152602001600020546019600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61331981601454600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61334881601554600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b61337781601654601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613771565b5050565b601e6020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061345e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061346e575061346d82614024565b5b9050919050565b61347e8161408e565b6134bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b490615547565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661353b83611c88565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818361358f9190615733565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe906154c7565b60405180910390fd5b6136108161408e565b15613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790615427565b60405180910390fd5b61365c600083836140fa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ac91906156ac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461376d6000838361420e565b5050565b6000606461379b60186000878152602001908152602001600020548561358190919063ffffffff16565b6137a59190615702565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137ed573d6000803e3d6000fd5b5050505050565b60008061380083611c88565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061384257506138418185612ced565b5b8061388057508373ffffffffffffffffffffffffffffffffffffffff1661386884610eb9565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166138a982611c88565b73ffffffffffffffffffffffffffffffffffffffff16146138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f690615407565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561396f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396690615447565b60405180910390fd5b61397a8383836140fa565b6139856000826134c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d5919061578d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a2c91906156ac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613aeb83838361420e565b505050565b613af86134c0565b73ffffffffffffffffffffffffffffffffffffffff16613b1661207e565b73ffffffffffffffffffffffffffffffffffffffff1614613b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b63906154e7565b60405180910390fd5b565b613b88828260405180602001604052806000815250614213565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb890615467565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613db291906152f9565b60405180910390a3505050565b60008183613dcd919061578d565b905092915050565b613de0848484613889565b613dec8484848461426e565b613e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e22906153c7565b60405180910390fd5b50505050565b606060178054613e40906158d1565b80601f0160208091040260200160405190810160405280929190818152602001828054613e6c906158d1565b8015613eb95780601f10613e8e57610100808354040283529160200191613eb9565b820191906000526020600020905b815481529060010190602001808311613e9c57829003601f168201915b5050505050905090565b60606000821415613f0b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061401f565b600082905060005b60008214613f3d578080613f2690615934565b915050600a82613f369190615702565b9150613f13565b60008167ffffffffffffffff811115613f5957613f58615a99565b5b6040519080825280601f01601f191660200182016040528015613f8b5781602001600182028036833780820191505090505b5090505b6000851461401857600182613fa4919061578d565b9150600a85613fb3919061597d565b6030613fbf91906156ac565b60f81b818381518110613fd557613fd4615a6a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856140119190615702565b9450613f8f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b614105838383614405565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614148576141438161440a565b614187565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614186576141858382614453565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141ca576141c5816145c0565b614209565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614614208576142078282614691565b5b5b505050565b505050565b61421d8383613597565b61422a600084848461426e565b614269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614260906153c7565b60405180910390fd5b505050565b600061428f8473ffffffffffffffffffffffffffffffffffffffff16614710565b156143f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026142b86134c0565b8786866040518563ffffffff1660e01b81526004016142da9493929190615284565b602060405180830381600087803b1580156142f457600080fd5b505af192505050801561432557506040513d601f19601f820116820180604052508101906143229190614c68565b60015b6143a8573d8060008114614355576040519150601f19603f3d011682016040523d82523d6000602084013e61435a565b606091505b506000815114156143a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614397906153c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506143fd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161446084611e12565b61446a919061578d565b905060006007600084815260200190815260200160002054905081811461454f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506145d4919061578d565b905060006009600084815260200190815260200160002054905060006008838154811061460457614603615a6a565b5b90600052602060002001549050806008838154811061462657614625615a6a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061467557614674615a3b565b5b6001900381819060005260206000200160009055905550505050565b600061469c83611e12565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461473f906158d1565b90600052602060002090601f01602090048101928261476157600085556147a8565b82601f1061477a57805160ff19168380011785556147a8565b828001600101855582156147a8579182015b828111156147a757825182559160200191906001019061478c565b5b5090506147b591906147db565b5090565b6040518060a00160405280600590602082028036833780820191505090505090565b5b808211156147f45760008160009055506001016147dc565b5090565b600061480b61480684615607565b6155e2565b90508281526020810184848401111561482757614826615acd565b5b61483284828561588f565b509392505050565b600061484d61484884615638565b6155e2565b90508281526020810184848401111561486957614868615acd565b5b61487484828561588f565b509392505050565b60008135905061488b81615f4b565b92915050565b6000815190506148a081615f4b565b92915050565b6000813590506148b581615f62565b92915050565b6000813590506148ca81615f79565b92915050565b6000815190506148df81615f79565b92915050565b600082601f8301126148fa576148f9615ac8565b5b813561490a8482602086016147f8565b91505092915050565b600082601f83011261492857614927615ac8565b5b813561493884826020860161483a565b91505092915050565b60008135905061495081615f90565b92915050565b60008151905061496581615f90565b92915050565b60006020828403121561498157614980615ad7565b5b600061498f8482850161487c565b91505092915050565b6000602082840312156149ae576149ad615ad7565b5b60006149bc84828501614891565b91505092915050565b600080604083850312156149dc576149db615ad7565b5b60006149ea8582860161487c565b92505060206149fb8582860161487c565b9150509250929050565b60008060008060008060c08789031215614a2257614a21615ad7565b5b6000614a3089828a0161487c565b9650506020614a4189828a0161487c565b9550506040614a5289828a0161487c565b9450506060614a6389828a01614941565b9350506080614a7489828a01614941565b92505060a0614a8589828a01614941565b9150509295509295509295565b600080600060608486031215614aab57614aaa615ad7565b5b6000614ab98682870161487c565b9350506020614aca8682870161487c565b9250506040614adb86828701614941565b9150509250925092565b60008060008060808587031215614aff57614afe615ad7565b5b6000614b0d8782880161487c565b9450506020614b1e8782880161487c565b9350506040614b2f87828801614941565b925050606085013567ffffffffffffffff811115614b5057614b4f615ad2565b5b614b5c878288016148e5565b91505092959194509250565b60008060408385031215614b7f57614b7e615ad7565b5b6000614b8d8582860161487c565b9250506020614b9e858286016148a6565b9150509250929050565b60008060408385031215614bbf57614bbe615ad7565b5b6000614bcd8582860161487c565b9250506020614bde85828601614941565b9150509250929050565b600080600060608486031215614c0157614c00615ad7565b5b6000614c0f8682870161487c565b9350506020614c2086828701614941565b9250506040614c3186828701614941565b9150509250925092565b600060208284031215614c5157614c50615ad7565b5b6000614c5f848285016148bb565b91505092915050565b600060208284031215614c7e57614c7d615ad7565b5b6000614c8c848285016148d0565b91505092915050565b600060208284031215614cab57614caa615ad7565b5b600082013567ffffffffffffffff811115614cc957614cc8615ad2565b5b614cd584828501614913565b91505092915050565b600060208284031215614cf457614cf3615ad7565b5b6000614d0284828501614941565b91505092915050565b600060208284031215614d2157614d20615ad7565b5b6000614d2f84828501614956565b91505092915050565b60008060408385031215614d4f57614d4e615ad7565b5b6000614d5d85828601614941565b9250506020614d6e8582860161487c565b9150509250929050565b60008060008060008060c08789031215614d9557614d94615ad7565b5b6000614da389828a01614941565b9650506020614db489828a0161487c565b9550506040614dc589828a0161487c565b9450506060614dd689828a0161487c565b9350506080614de789828a0161487c565b92505060a0614df889828a0161487c565b9150509295509295509295565b60008060408385031215614e1c57614e1b615ad7565b5b6000614e2a85828601614941565b9250506020614e3b85828601614941565b9150509250929050565b60008060008060008060c08789031215614e6257614e61615ad7565b5b6000614e7089828a01614941565b9650506020614e8189828a01614941565b9550506040614e9289828a01614941565b9450506060614ea389828a0161487c565b9350506080614eb489828a01614941565b92505060a0614ec589828a01614941565b9150509295509295509295565b614edb816157c1565b82525050565b614eea816157d3565b82525050565b6000614efb82615669565b614f05818561567f565b9350614f1581856020860161589e565b614f1e81615adc565b840191505092915050565b614f3281615835565b82525050565b614f4181615847565b82525050565b614f5081615859565b82525050565b6000614f6182615674565b614f6b8185615690565b9350614f7b81856020860161589e565b614f8481615adc565b840191505092915050565b6000614f9a82615674565b614fa481856156a1565b9350614fb481856020860161589e565b80840191505092915050565b6000614fcd600883615690565b9150614fd882615aed565b602082019050919050565b6000614ff0602b83615690565b9150614ffb82615b16565b604082019050919050565b6000615013603283615690565b915061501e82615b65565b604082019050919050565b6000615036602683615690565b915061504182615bb4565b604082019050919050565b6000615059602583615690565b915061506482615c03565b604082019050919050565b600061507c601c83615690565b915061508782615c52565b602082019050919050565b600061509f602483615690565b91506150aa82615c7b565b604082019050919050565b60006150c2601983615690565b91506150cd82615cca565b602082019050919050565b60006150e5602983615690565b91506150f082615cf3565b604082019050919050565b6000615108603e83615690565b915061511382615d42565b604082019050919050565b600061512b602083615690565b915061513682615d91565b602082019050919050565b600061514e602083615690565b915061515982615dba565b602082019050919050565b6000615171601083615690565b915061517c82615de3565b602082019050919050565b6000615194601383615690565b915061519f82615e0c565b602082019050919050565b60006151b7601883615690565b91506151c282615e35565b602082019050919050565b60006151da602183615690565b91506151e582615e5e565b604082019050919050565b60006151fd602c83615690565b915061520882615ead565b604082019050919050565b6000615220602e83615690565b915061522b82615efc565b604082019050919050565b61523f8161582b565b82525050565b60006152518285614f8f565b915061525d8284614f8f565b91508190509392505050565b600060208201905061527e6000830184614ed2565b92915050565b60006080820190506152996000830187614ed2565b6152a66020830186614ed2565b6152b36040830185615236565b81810360608301526152c58184614ef0565b905095945050505050565b60006040820190506152e56000830185614ed2565b6152f26020830184615236565b9392505050565b600060208201905061530e6000830184614ee1565b92915050565b60006020820190506153296000830184614f29565b92915050565b60006020820190506153446000830184614f38565b92915050565b600060208201905061535f6000830184614f47565b92915050565b6000602082019050818103600083015261537f8184614f56565b905092915050565b600060208201905081810360008301526153a081614fc0565b9050919050565b600060208201905081810360008301526153c081614fe3565b9050919050565b600060208201905081810360008301526153e081615006565b9050919050565b6000602082019050818103600083015261540081615029565b9050919050565b600060208201905081810360008301526154208161504c565b9050919050565b600060208201905081810360008301526154408161506f565b9050919050565b6000602082019050818103600083015261546081615092565b9050919050565b60006020820190508181036000830152615480816150b5565b9050919050565b600060208201905081810360008301526154a0816150d8565b9050919050565b600060208201905081810360008301526154c0816150fb565b9050919050565b600060208201905081810360008301526154e08161511e565b9050919050565b6000602082019050818103600083015261550081615141565b9050919050565b6000602082019050818103600083015261552081615164565b9050919050565b6000602082019050818103600083015261554081615187565b9050919050565b60006020820190508181036000830152615560816151aa565b9050919050565b60006020820190508181036000830152615580816151cd565b9050919050565b600060208201905081810360008301526155a0816151f0565b9050919050565b600060208201905081810360008301526155c081615213565b9050919050565b60006020820190506155dc6000830184615236565b92915050565b60006155ec6155fd565b90506155f88282615903565b919050565b6000604051905090565b600067ffffffffffffffff82111561562257615621615a99565b5b61562b82615adc565b9050602081019050919050565b600067ffffffffffffffff82111561565357615652615a99565b5b61565c82615adc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006156b78261582b565b91506156c28361582b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156f7576156f66159ae565b5b828201905092915050565b600061570d8261582b565b91506157188361582b565b925082615728576157276159dd565b5b828204905092915050565b600061573e8261582b565b91506157498361582b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615782576157816159ae565b5b828202905092915050565b60006157988261582b565b91506157a38361582b565b9250828210156157b6576157b56159ae565b5b828203905092915050565b60006157cc8261580b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006158408261586b565b9050919050565b60006158528261586b565b9050919050565b60006158648261586b565b9050919050565b60006158768261587d565b9050919050565b60006158888261580b565b9050919050565b82818337600083830152505050565b60005b838110156158bc5780820151818401526020810190506158a1565b838111156158cb576000848401525b50505050565b600060028204905060018216806158e957607f821691505b602082108114156158fd576158fc615a0c565b5b50919050565b61590c82615adc565b810181811067ffffffffffffffff8211171561592b5761592a615a99565b5b80604052505050565b600061593f8261582b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615972576159716159ae565b5b600182019050919050565b60006159888261582b565b91506159938361582b565b9250826159a3576159a26159dd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d757374206f776e000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e742045544800000000000000000000000000000000600082015250565b7f4e6f205061696420546f6b656e73204c65667400000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b615f54816157c1565b8114615f5f57600080fd5b50565b615f6b816157d3565b8114615f7657600080fd5b50565b615f82816157df565b8114615f8d57600080fd5b50565b615f998161582b565b8114615fa457600080fd5b5056fea26469706673582212202dbd38fbf2f4a662fcbc50dddab661ca671617728c4173ff4e281515c862df2264736f6c63430008070033
Deployed Bytecode Sourcemap
53273:7008:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47051:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33785:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35298:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34815:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58787:765;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47691:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35998:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54035:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55707:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47359:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54982:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54219:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55422:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53443:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36405:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54124:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54354:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54403:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53326:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53881:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47881:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59998:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33496:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54676:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59558:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33227:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12314:103;;;;;;;;;;;;;:::i;:::-;;54511:159;;;;;;;;;;;;;:::i;:::-;;53344:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54172:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54079:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53809:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11666:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53517:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53591;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33954:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35541:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57034:592;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54264:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60107:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36661:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53737:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55936:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56121:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34129:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53665:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53966:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53362:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55165:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53937:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56521:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53909:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35767:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12572:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58232:550;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57631:596;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54310:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47051:224;47153:4;47192:35;47177:50;;;:11;:50;;;;:90;;;;47231:36;47255:11;47231:23;:36::i;:::-;47177:90;47170:97;;47051:224;;;:::o;33785:100::-;33839:13;33872:5;33865:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33785:100;:::o;35298:171::-;35374:7;35394:23;35409:7;35394:14;:23::i;:::-;35437:15;:24;35453:7;35437:24;;;;;;;;;;;;;;;;;;;;;35430:31;;35298:171;;;:::o;34815:417::-;34896:13;34912:23;34927:7;34912:14;:23::i;:::-;34896:39;;34960:5;34954:11;;:2;:11;;;;34946:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35054:5;35038:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35063:37;35080:5;35087:12;:10;:12::i;:::-;35063:16;:37::i;:::-;35038:62;35016:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;35203:21;35212:2;35216:7;35203:8;:21::i;:::-;34885:347;34815:417;;:::o;58787:765::-;58885:6;58874:8;;:17;;;;;;;;;;;;;;;;;;58906:8;;;;;;;;;;;58896:3;;:19;;;;;;;;;;;;;;;;;;58947:1;58928:7;:15;58936:6;58928:15;;;;;;;;;;;;:20;58920:29;;;;;;58979:9;58962:5;:13;58968:6;58962:13;;;;;;;;;;;;:26;58954:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;59039:3;59022:6;:14;59029:6;59022:14;;;;;;;;;;;;:20;59014:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;59105:10;59079:36;;:3;;;;;;;;;;;:11;;;59091:9;59079:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;59071:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;59133:51;59139:10;59169:6;:14;59176:6;59169:14;;;;;;;;;;;;59151:15;59162:3;59151:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;59133:5;:51::i;:::-;59234:9;59189:10;:42;59216:6;:14;59223:6;59216:14;;;;;;;;;;;;59200:15;59211:3;59200:6;:10;;:15;;;;:::i;:::-;:30;;;;:::i;:::-;59189:42;;;;;;;;;;;:54;;;;59296:6;59248:13;:45;59278:6;:14;59285:6;59278:14;;;;;;;;;;;;59262:15;59273:3;59262:6;:10;;:15;;;;:::i;:::-;:30;;;;:::i;:::-;59248:45;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;59341:1;59324:6;:14;59331:6;59324:14;;;;;;;;;;;;:18;;;;:::i;:::-;59307:6;:14;59314:6;59307:14;;;;;;;;;;;:35;;;;59347:59;59355:6;59363:9;:17;59373:6;59363:17;;;;;;;;;;;;59390:6;:14;59397:6;59390:14;;;;;;;;;;;;;;;;;;;;;59347:7;:59::i;:::-;59411:42;59419:6;59427:4;;59441:10;;;;;;;;;;;59411:7;:42::i;:::-;59458;59466:6;59474:4;;59488:10;;;;;;;;;;;59458:7;:42::i;:::-;59505;59513:6;59521:4;;59535:10;;;;;;;;;;;59505:7;:42::i;:::-;58787:765;;;:::o;47691:113::-;47752:7;47779:10;:17;;;;47772:24;;47691:113;:::o;35998:336::-;36193:41;36212:12;:10;:12::i;:::-;36226:7;36193:18;:41::i;:::-;36185:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36298:28;36308:4;36314:2;36318:7;36298:9;:28::i;:::-;35998:336;;;:::o;54035:40::-;;;;;;;;;;;;;;;;;:::o;55707:224::-;55803:6;55792:8;;:17;;;;;;;;;;;;;;;;;;55824:8;;;;;;;;;;;55814:3;;:19;;;;;;;;;;;;;;;;;;55872:10;55846:36;;:3;;;;;;;;;;;:11;;;55858:9;55846:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;55838:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;55920:6;55900:5;:17;55906:10;55900:17;;;;;;;;;;;;;;;:26;;;;55707:224;;;:::o;47359:256::-;47456:7;47492:23;47509:5;47492:16;:23::i;:::-;47484:5;:31;47476:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47581:12;:19;47594:5;47581:19;;;;;;;;;;;;;;;:26;47601:5;47581:26;;;;;;;;;;;;47574:33;;47359:256;;;;:::o;54982:177::-;11552:13;:11;:13::i;:::-;55075:6:::1;55064:8;;:17;;;;;;;;;;;;;;;;;;55095:8;;;;;;;;;;;55085:3;;:19;;;;;;;;;;;;;;;;;;55119:7;55108:8;;:18;;;;;;;;;;;;;;;;;;55145:8;;;;;;;;;;;55130:3;;:24;;;;;;;;;;;;;;;;;;54982:177:::0;;:::o;54219:41::-;;;;;;;;;;;;;;;;;:::o;55422:280::-;55569:6;:14;55576:6;55569:14;;;;;;;;;;;;;;;;;;;;;55555:28;;:10;:28;;;55547:37;;;;;;55603:6;55589:5;:11;55595:4;55589:11;;;;;;;;;;;;;;;:20;;;;55625:6;55611:5;:11;55617:4;55611:11;;;;;;;;;;;;;;;:20;;;;55647:6;55633:5;:11;55639:4;55633:11;;;;;;;;;;;;;;;:20;;;;55669:6;55655:5;:11;55661:4;55655:11;;;;;;;;;;;;;;;:20;;;;55691:6;55677:5;:11;55683:4;55677:11;;;;;;;;;;;;;;;:20;;;;55422:280;;;;;;:::o;53443:70::-;;;;;;;;;;;;;:::o;36405:185::-;36543:39;36560:4;36566:2;36570:7;36543:39;;;;;;;;;;;;:16;:39::i;:::-;36405:185;;;:::o;54124:44::-;;;;;;;;;;;;;;;;;:::o;54354:45::-;;;;;;;;;;;;;;;;;:::o;54403:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;53326:14::-;;;;;;;;;;;;;:::o;53881:24::-;;;;:::o;47881:233::-;47956:7;47992:30;:28;:30::i;:::-;47984:5;:38;47976:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48089:10;48100:5;48089:17;;;;;;;;:::i;:::-;;;;;;;;;;48082:24;;47881:233;;;:::o;59998:102::-;11552:13;:11;:13::i;:::-;60085:7:::1;60069:13;:23;;;;;;;;;;;;:::i;:::-;;59998:102:::0;:::o;33496:222::-;33568:7;33588:13;33604:7;:16;33612:7;33604:16;;;;;;;;;;;;;;;;;;;;;33588:32;;33656:1;33639:19;;:5;:19;;;;33631:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33705:5;33698:12;;;33496:222;;;:::o;54676:301::-;11552:13;:11;:13::i;:::-;54839:6:::1;54823:5;:13;54829:6;54823:13;;;;;;;;;;;:22;;;;54867:10;54850:6;:14;54857:6;54850:14;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;54900:8;54882:7;:15;54890:6;54882:15;;;;;;;;;;;:26;;;;54934:10;54914:9;:17;54924:6;54914:17;;;;;;;;;;;:30;;;;54966:6;54949;:14;54956:6;54949:14;;;;;;;;;;;:23;;;;54676:301:::0;;;;;;:::o;59558:110::-;11552:13;:11;:13::i;:::-;59636:26:::1;59646:4;59652:9;59636;:26::i;:::-;59558:110:::0;;:::o;33227:207::-;33299:7;33344:1;33327:19;;:5;:19;;;;33319:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33410:9;:16;33420:5;33410:16;;;;;;;;;;;;;;;;33403:23;;33227:207;;;:::o;12314:103::-;11552:13;:11;:13::i;:::-;12379:30:::1;12406:1;12379:18;:30::i;:::-;12314:103::o:0;54511:159::-;11552:13;:11;:13::i;:::-;54565:8:::1;;;;;;;;;;;54555:3;;:19;;;;;;;;;;;;;;;;;;54594:8;;;;;;;;;;;54579:3;;:24;;;;;;;;;;;;;;;;;;54613:10;54608:58;54634:3;54629:2;:8;54608:58;;;54663:1;54650:6;:10;54657:2;54650:10;;;;;;;;;;;:14;;;;54639:4;;;;;:::i;:::-;;;;54608:58;;;;54511:159::o:0;53344:14::-;;;;;;;;;;;;;:::o;54172:42::-;;;;;;;;;;;;;;;;;:::o;54079:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;53809:68::-;;;;;;;;;;;;;:::o;11666:87::-;11712:7;11739:6;;;;;;;;;;;11732:13;;11666:87;:::o;53517:70::-;;;;;;;;;;;;;:::o;53591:::-;;;;;;;;;;;;;:::o;33954:104::-;34010:13;34043:7;34036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33954:104;:::o;35541:155::-;35636:52;35655:12;:10;:12::i;:::-;35669:8;35679;35636:18;:52::i;:::-;35541:155;;:::o;57034:592::-;57138:1;57119:7;:15;57127:6;57119:15;;;;;;;;;;;;:20;57111:29;;;;;;57170:9;57153:5;:13;57159:6;57153:13;;;;;;;;;;;;:26;57145:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;57230:3;57213:6;:14;57220:6;57213:14;;;;;;;;;;;;:20;57205:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;57296:10;57270:36;;:3;;;;;;;;;;;:11;;;57282:9;57270:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;57262:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;57324:51;57330:10;57360:6;:14;57367:6;57360:14;;;;;;;;;;;;57342:15;57353:3;57342:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;57324:5;:51::i;:::-;57414:1;57397:6;:14;57404:6;57397:14;;;;;;;;;;;;:18;;;;:::i;:::-;57380:6;:14;57387:6;57380:14;;;;;;;;;;;:35;;;;57420:59;57428:6;57436:9;:17;57446:6;57436:17;;;;;;;;;;;;57463:6;:14;57470:6;57463:14;;;;;;;;;;;;;;;;;;;;;57420:7;:59::i;:::-;57484:42;57492:6;57500:4;;57514:10;;;;;;;;;;;57484:7;:42::i;:::-;57531;57539:6;57547:4;;57561:10;;;;;;;;;;;57531:7;:42::i;:::-;57578;57586:6;57594:4;;57608:10;;;;;;;;;;;57578:7;:42::i;:::-;57034:592;;:::o;54264:42::-;;;;;;;;;;;;;;;;;:::o;60107:170::-;11552:13;:11;:13::i;:::-;60169:19:::1;60191:35;60217:8;60191:21;:25;;:35;;;;:::i;:::-;60169:57;;60239:10;60231:28;;:41;60260:11;60231:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;60164:113;60107:170:::0;:::o;36661:323::-;36835:41;36854:12;:10;:12::i;:::-;36868:7;36835:18;:41::i;:::-;36827:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36938:38;36952:4;36958:2;36962:7;36971:4;36938:13;:38::i;:::-;36661:323;;;;:::o;53737:68::-;;;;;;;;;;;;;:::o;55936:180::-;11552:13;:11;:13::i;:::-;56020:49:::1;56030:4;56054:6;:14;56061:6;56054:14;;;;;;;;;;;;56036:15;56047:3;56036:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;56020:9;:49::i;:::-;56109:1;56092:6;:14;56099:6;56092:14;;;;;;;;;;;;:18;;;;:::i;:::-;56075:6;:14;56082:6;56075:14;;;;;;;;;;;:35;;;;55936:180:::0;;:::o;56121:393::-;11552:13;:11;:13::i;:::-;56261:23:::1;;:::i;:::-;56299:4;56289;56294:1;56289:7;;;;;;;:::i;:::-;;;;;:14;;;;;;;;;::::0;::::1;56315:4;56305;56310:1;56305:7;;;;;;;:::i;:::-;;;;;:14;;;;;;;;;::::0;::::1;56331:4;56321;56326:1;56321:7;;;;;;;:::i;:::-;;;;;:14;;;;;;;;;::::0;::::1;56347:4;56337;56342:1;56337:7;;;;;;;:::i;:::-;;;;;:14;;;;;;;;;::::0;::::1;56363:4;56353;56358:1;56353:7;;;;;;;:::i;:::-;;;;;:14;;;;;;;;;::::0;::::1;56377:9;56372:137;56396:1;56392;:5;56372:137;;;56410:52;56420:4;56425:1;56420:7;;;;;;;:::i;:::-;;;;;;56447:6;:14;56454:6;56447:14;;;;;;;;;;;;56429:15;56440:3;56429:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;56410:9;:52::i;:::-;56502:1;56485:6;:14;56492:6;56485:14;;;;;;;;;;;;:18;;;;:::i;:::-;56468:6;:14;56475:6;56468:14;;;;;;;;;;;:35;;;;56399:3;;;;;:::i;:::-;;;;56372:137;;;;56256:258;56121:393:::0;;;;;;:::o;34129:281::-;34202:13;34228:23;34243:7;34228:14;:23::i;:::-;34264:21;34288:10;:8;:10::i;:::-;34264:34;;34340:1;34322:7;34316:21;:25;:86;;;;;;;;;;;;;;;;;34368:7;34377:18;:7;:16;:18::i;:::-;34351:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34316:86;34309:93;;;34129:281;;;:::o;53665:68::-;;;;;;;;;;;;;:::o;53966:65::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53362:19::-;;;;;;;;;;;;;:::o;55165:252::-;11552:13;:11;:13::i;:::-;55312:4:::1;55299:10;;:17;;;;;;;;;;;;;;;;;;55333:4;55320:10;;:17;;;;;;;;;;;;;;;;;;55354:4;55341:10;;:17;;;;;;;;;;;;;;;;;;55369:7;55362:4;:14;;;;55387:7;55380:4;:14;;;;55405:7;55398:4;:14;;;;55165:252:::0;;;;;;:::o;53937:24::-;;;;:::o;56521:508::-;56603:1;56584:7;:15;56592:6;56584:15;;;;;;;;;;;;:20;56576:29;;;;;;56635:9;56618:5;:13;56624:6;56618:13;;;;;;;;;;;;:26;56610:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;56695:3;56678:6;:14;56685:6;56678:14;;;;;;;;;;;;:20;56670:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;56727:51;56733:10;56763:6;:14;56770:6;56763:14;;;;;;;;;;;;56745:15;56756:3;56745:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;56727:5;:51::i;:::-;56817:1;56800:6;:14;56807:6;56800:14;;;;;;;;;;;;:18;;;;:::i;:::-;56783:6;:14;56790:6;56783:14;;;;;;;;;;;:35;;;;56823:59;56831:6;56839:9;:17;56849:6;56839:17;;;;;;;;;;;;56866:6;:14;56873:6;56866:14;;;;;;;;;;;;;;;;;;;;;56823:7;:59::i;:::-;56887:42;56895:6;56903:4;;56917:10;;;;;;;;;;;56887:7;:42::i;:::-;56934;56942:6;56950:4;;56964:10;;;;;;;;;;;56934:7;:42::i;:::-;56981;56989:6;56997:4;;57011:10;;;;;;;;;;;56981:7;:42::i;:::-;56521:508;:::o;53909:24::-;;;;:::o;35767:164::-;35864:4;35888:18;:25;35907:5;35888:25;;;;;;;;;;;;;;;:35;35914:8;35888:35;;;;;;;;;;;;;;;;;;;;;;;;;35881:42;;35767:164;;;;:::o;12572:201::-;11552:13;:11;:13::i;:::-;12681:1:::1;12661:22;;:8;:22;;;;12653:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12737:28;12756:8;12737:18;:28::i;:::-;12572:201:::0;:::o;58232:550::-;58315:1;58296:7;:15;58304:6;58296:15;;;;;;;;;;;;:20;58288:29;;;;;;58347:9;58330:5;:13;58336:6;58330:13;;;;;;;;;;;;:26;58322:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;58407:3;58390:6;:14;58397:6;58390:14;;;;;;;;;;;;:20;58382:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;58468:6;58447:5;:17;58453:10;58447:17;;;;;;;;;;;;;;;;:27;58439:36;;;;;;58480:51;58486:10;58516:6;:14;58523:6;58516:14;;;;;;;;;;;;58498:15;58509:3;58498:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;58480:5;:51::i;:::-;58570:1;58553:6;:14;58560:6;58553:14;;;;;;;;;;;;:18;;;;:::i;:::-;58536:6;:14;58543:6;58536:14;;;;;;;;;;;:35;;;;58576:59;58584:6;58592:9;:17;58602:6;58592:17;;;;;;;;;;;;58619:6;:14;58626:6;58619:14;;;;;;;;;;;;;;;;;;;;;58576:7;:59::i;:::-;58640:42;58648:6;58656:4;;58670:10;;;;;;;;;;;58640:7;:42::i;:::-;58687;58695:6;58703:4;;58717:10;;;;;;;;;;;58687:7;:42::i;:::-;58734;58742:6;58750:4;;58764:10;;;;;;;;;;;58734:7;:42::i;:::-;58232:550;:::o;57631:596::-;57735:1;57716:7;:15;57724:6;57716:15;;;;;;;;;;;;:20;57708:29;;;;;;57767:9;57750:5;:13;57756:6;57750:13;;;;;;;;;;;;:26;57742:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;57827:3;57810:6;:14;57817:6;57810:14;;;;;;;;;;;;:20;57802:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;57906:1;57867:3;;;;;;;;;;;:13;;;57881:10;57893:9;57867:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;57859:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;57925:51;57931:10;57961:6;:14;57968:6;57961:14;;;;;;;;;;;;57943:15;57954:3;57943:6;:10;;:15;;;;:::i;:::-;:32;;;;:::i;:::-;57925:5;:51::i;:::-;58015:1;57998:6;:14;58005:6;57998:14;;;;;;;;;;;;:18;;;;:::i;:::-;57981:6;:14;57988:6;57981:14;;;;;;;;;;;:35;;;;58021:59;58029:6;58037:9;:17;58047:6;58037:17;;;;;;;;;;;;58064:6;:14;58071:6;58064:14;;;;;;;;;;;;;;;;;;;;;58021:7;:59::i;:::-;58085:42;58093:6;58101:4;;58115:10;;;;;;;;;;;58085:7;:42::i;:::-;58132;58140:6;58148:4;;58162:10;;;;;;;;;;;58132:7;:42::i;:::-;58179;58187:6;58195:4;;58209:10;;;;;;;;;;;58179:7;:42::i;:::-;57631:596;;:::o;54310:40::-;;;;;;;;;;;;;;;;;:::o;32858:305::-;32960:4;33012:25;32997:40;;;:11;:40;;;;:105;;;;33069:33;33054:48;;;:11;:48;;;;32997:105;:158;;;;33119:36;33143:11;33119:23;:36::i;:::-;32997:158;32977:178;;32858:305;;;:::o;43273:135::-;43355:16;43363:7;43355;:16::i;:::-;43347:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43273:135;:::o;10217:98::-;10270:7;10297:10;10290:17;;10217:98;:::o;42552:174::-;42654:2;42627:15;:24;42643:7;42627:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42710:7;42706:2;42672:46;;42681:23;42696:7;42681:14;:23::i;:::-;42672:46;;;;;;;;;;;;42552:174;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;40383:439::-;40477:1;40463:16;;:2;:16;;;;40455:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40536:16;40544:7;40536;:16::i;:::-;40535:17;40527:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40598:45;40627:1;40631:2;40635:7;40598:20;:45::i;:::-;40673:1;40656:9;:13;40666:2;40656:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40704:2;40685:7;:16;40693:7;40685:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40749:7;40745:2;40724:33;;40741:1;40724:33;;;;;;;;;;;;40770:44;40798:1;40802:2;40806:7;40770:19;:44::i;:::-;40383:439;;:::o;59674:197::-;59771:18;59822:3;59792:29;59804:5;:16;59810:9;59804:16;;;;;;;;;;;;59792:7;:11;;:29;;;;:::i;:::-;:33;;;;:::i;:::-;59771:54;;59836:6;:15;;:27;59852:10;59836:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59760:111;59674:197;;;:::o;38785:264::-;38878:4;38895:13;38911:23;38926:7;38911:14;:23::i;:::-;38895:39;;38964:5;38953:16;;:7;:16;;;:52;;;;38973:32;38990:5;38997:7;38973:16;:32::i;:::-;38953:52;:87;;;;39033:7;39009:31;;:20;39021:7;39009:11;:20::i;:::-;:31;;;38953:87;38945:96;;;38785:264;;;;:::o;41808:625::-;41967:4;41940:31;;:23;41955:7;41940:14;:23::i;:::-;:31;;;41932:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42046:1;42032:16;;:2;:16;;;;42024:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42102:39;42123:4;42129:2;42133:7;42102:20;:39::i;:::-;42206:29;42223:1;42227:7;42206:8;:29::i;:::-;42267:1;42248:9;:15;42258:4;42248:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42296:1;42279:9;:13;42289:2;42279:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42327:2;42308:7;:16;42316:7;42308:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42366:7;42362:2;42347:27;;42356:4;42347:27;;;;;;;;;;;;42387:38;42407:4;42413:2;42417:7;42387:19;:38::i;:::-;41808:625;;;:::o;11831:132::-;11906:12;:10;:12::i;:::-;11895:23;;:7;:5;:7::i;:::-;:23;;;11887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11831:132::o;39391:110::-;39467:26;39477:2;39481:7;39467:26;;;;;;;;;;;;:9;:26::i;:::-;39391:110;;:::o;12933:191::-;13007:16;13026:6;;;;;;;;;;;13007:25;;13052:8;13043:6;;:17;;;;;;;;;;;;;;;;;;13107:8;13076:40;;13097:8;13076:40;;;;;;;;;;;;12996:128;12933:191;:::o;42869:315::-;43024:8;43015:17;;:5;:17;;;;43007:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43111:8;43073:18;:25;43092:5;43073:25;;;;;;;;;;;;;;;:35;43099:8;43073:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43157:8;43135:41;;43150:5;43135:41;;;43167:8;43135:41;;;;;;:::i;:::-;;;;;;;;42869:315;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;37865:313::-;38021:28;38031:4;38037:2;38041:7;38021:9;:28::i;:::-;38068:47;38091:4;38097:2;38101:7;38110:4;38068:22;:47::i;:::-;38060:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37865:313;;;;:::o;59876:114::-;59936:13;59969;59962:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59876:114;:::o;7471:723::-;7527:13;7757:1;7748:5;:10;7744:53;;;7775:10;;;;;;;;;;;;;;;;;;;;;7744:53;7807:12;7822:5;7807:20;;7838:14;7863:78;7878:1;7870:4;:9;7863:78;;7896:8;;;;;:::i;:::-;;;;7927:2;7919:10;;;;;:::i;:::-;;;7863:78;;;7951:19;7983:6;7973:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7951:39;;8001:154;8017:1;8008:5;:10;8001:154;;8045:1;8035:11;;;;;:::i;:::-;;;8112:2;8104:5;:10;;;;:::i;:::-;8091:2;:24;;;;:::i;:::-;8078:39;;8061:6;8068;8061:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8141:2;8132:11;;;;;:::i;:::-;;;8001:154;;;8179:6;8165:21;;;;;7471:723;;;;:::o;24520:157::-;24605:4;24644:25;24629:40;;;:11;:40;;;;24622:47;;24520:157;;;:::o;38491:127::-;38556:4;38608:1;38580:30;;:7;:16;38588:7;38580:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38573:37;;38491:127;;;:::o;48727:589::-;48871:45;48898:4;48904:2;48908:7;48871:26;:45::i;:::-;48949:1;48933:18;;:4;:18;;;48929:187;;;48968:40;49000:7;48968:31;:40::i;:::-;48929:187;;;49038:2;49030:10;;:4;:10;;;49026:90;;49057:47;49090:4;49096:7;49057:32;:47::i;:::-;49026:90;48929:187;49144:1;49130:16;;:2;:16;;;49126:183;;;49163:45;49200:7;49163:36;:45::i;:::-;49126:183;;;49236:4;49230:10;;:2;:10;;;49226:83;;49257:40;49285:2;49289:7;49257:27;:40::i;:::-;49226:83;49126:183;48727:589;;;:::o;45908:125::-;;;;:::o;39728:319::-;39857:18;39863:2;39867:7;39857:5;:18::i;:::-;39908:53;39939:1;39943:2;39947:7;39956:4;39908:22;:53::i;:::-;39886:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;39728:319;;;:::o;43972:853::-;44126:4;44147:15;:2;:13;;;:15::i;:::-;44143:675;;;44199:2;44183:36;;;44220:12;:10;:12::i;:::-;44234:4;44240:7;44249:4;44183:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44179:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44441:1;44424:6;:13;:18;44420:328;;;44467:60;;;;;;;;;;:::i;:::-;;;;;;;;44420:328;44698:6;44692:13;44683:6;44679:2;44675:15;44668:38;44179:584;44315:41;;;44305:51;;;:6;:51;;;;44298:58;;;;;44143:675;44802:4;44795:11;;43972:853;;;;;;;:::o;45397:126::-;;;;:::o;50039:164::-;50143:10;:17;;;;50116:15;:24;50132:7;50116:24;;;;;;;;;;;:44;;;;50171:10;50187:7;50171:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50039:164;:::o;50830:988::-;51096:22;51146:1;51121:22;51138:4;51121:16;:22::i;:::-;:26;;;;:::i;:::-;51096:51;;51158:18;51179:17;:26;51197:7;51179:26;;;;;;;;;;;;51158:47;;51326:14;51312:10;:28;51308:328;;51357:19;51379:12;:18;51392:4;51379:18;;;;;;;;;;;;;;;:34;51398:14;51379:34;;;;;;;;;;;;51357:56;;51463:11;51430:12;:18;51443:4;51430:18;;;;;;;;;;;;;;;:30;51449:10;51430:30;;;;;;;;;;;:44;;;;51580:10;51547:17;:30;51565:11;51547:30;;;;;;;;;;;:43;;;;51342:294;51308:328;51732:17;:26;51750:7;51732:26;;;;;;;;;;;51725:33;;;51776:12;:18;51789:4;51776:18;;;;;;;;;;;;;;;:34;51795:14;51776:34;;;;;;;;;;;51769:41;;;50911:907;;50830:988;;:::o;52113:1079::-;52366:22;52411:1;52391:10;:17;;;;:21;;;;:::i;:::-;52366:46;;52423:18;52444:15;:24;52460:7;52444:24;;;;;;;;;;;;52423:45;;52795:19;52817:10;52828:14;52817:26;;;;;;;;:::i;:::-;;;;;;;;;;52795:48;;52881:11;52856:10;52867;52856:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52992:10;52961:15;:28;52977:11;52961:28;;;;;;;;;;;:41;;;;53133:15;:24;53149:7;53133:24;;;;;;;;;;;53126:31;;;53168:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52184:1008;;;52113:1079;:::o;49617:221::-;49702:14;49719:20;49736:2;49719:16;:20::i;:::-;49702:37;;49777:7;49750:12;:16;49763:2;49750:16;;;;;;;;;;;;;;;:24;49767:6;49750:24;;;;;;;;;;;:34;;;;49824:6;49795:17;:26;49813:7;49795:26;;;;;;;;;;;:35;;;;49691:147;49617:221;;:::o;14364:326::-;14424:4;14681:1;14659:7;:19;;;:23;14652:30;;14364:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:143::-;2483:5;2514:6;2508:13;2499:22;;2530:33;2557:5;2530:33;:::i;:::-;2426:143;;;;:::o;2575:329::-;2634:6;2683:2;2671:9;2662:7;2658:23;2654:32;2651:119;;;2689:79;;:::i;:::-;2651:119;2809:1;2834:53;2879:7;2870:6;2859:9;2855:22;2834:53;:::i;:::-;2824:63;;2780:117;2575:329;;;;:::o;2910:351::-;2980:6;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:64;3236:7;3227:6;3216:9;3212:22;3180:64;:::i;:::-;3170:74;;3126:128;2910:351;;;;:::o;3267:474::-;3335:6;3343;3392:2;3380:9;3371:7;3367:23;3363:32;3360:119;;;3398:79;;:::i;:::-;3360:119;3518:1;3543:53;3588:7;3579:6;3568:9;3564:22;3543:53;:::i;:::-;3533:63;;3489:117;3645:2;3671:53;3716:7;3707:6;3696:9;3692:22;3671:53;:::i;:::-;3661:63;;3616:118;3267:474;;;;;:::o;3747:1057::-;3851:6;3859;3867;3875;3883;3891;3940:3;3928:9;3919:7;3915:23;3911:33;3908:120;;;3947:79;;:::i;:::-;3908:120;4067:1;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4038:117;4194:2;4220:53;4265:7;4256:6;4245:9;4241:22;4220:53;:::i;:::-;4210:63;;4165:118;4322:2;4348:53;4393:7;4384:6;4373:9;4369:22;4348:53;:::i;:::-;4338:63;;4293:118;4450:2;4476:53;4521:7;4512:6;4501:9;4497:22;4476:53;:::i;:::-;4466:63;;4421:118;4578:3;4605:53;4650:7;4641:6;4630:9;4626:22;4605:53;:::i;:::-;4595:63;;4549:119;4707:3;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4678:119;3747:1057;;;;;;;;:::o;4810:619::-;4887:6;4895;4903;4952:2;4940:9;4931:7;4927:23;4923:32;4920:119;;;4958:79;;:::i;:::-;4920:119;5078:1;5103:53;5148:7;5139:6;5128:9;5124:22;5103:53;:::i;:::-;5093:63;;5049:117;5205:2;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5176:118;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;4810:619;;;;;:::o;5435:943::-;5530:6;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;5985:2;6011:53;6056:7;6047:6;6036:9;6032:22;6011:53;:::i;:::-;6001:63;;5956:118;6141:2;6130:9;6126:18;6113:32;6172:18;6164:6;6161:30;6158:117;;;6194:79;;:::i;:::-;6158:117;6299:62;6353:7;6344:6;6333:9;6329:22;6299:62;:::i;:::-;6289:72;;6084:287;5435:943;;;;;;;:::o;6384:468::-;6449:6;6457;6506:2;6494:9;6485:7;6481:23;6477:32;6474:119;;;6512:79;;:::i;:::-;6474:119;6632:1;6657:53;6702:7;6693:6;6682:9;6678:22;6657:53;:::i;:::-;6647:63;;6603:117;6759:2;6785:50;6827:7;6818:6;6807:9;6803:22;6785:50;:::i;:::-;6775:60;;6730:115;6384:468;;;;;:::o;6858:474::-;6926:6;6934;6983:2;6971:9;6962:7;6958:23;6954:32;6951:119;;;6989:79;;:::i;:::-;6951:119;7109:1;7134:53;7179:7;7170:6;7159:9;7155:22;7134:53;:::i;:::-;7124:63;;7080:117;7236:2;7262:53;7307:7;7298:6;7287:9;7283:22;7262:53;:::i;:::-;7252:63;;7207:118;6858:474;;;;;:::o;7338:619::-;7415:6;7423;7431;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7733:2;7759:53;7804:7;7795:6;7784:9;7780:22;7759:53;:::i;:::-;7749:63;;7704:118;7861:2;7887:53;7932:7;7923:6;7912:9;7908:22;7887:53;:::i;:::-;7877:63;;7832:118;7338:619;;;;;:::o;7963:327::-;8021:6;8070:2;8058:9;8049:7;8045:23;8041:32;8038:119;;;8076:79;;:::i;:::-;8038:119;8196:1;8221:52;8265:7;8256:6;8245:9;8241:22;8221:52;:::i;:::-;8211:62;;8167:116;7963:327;;;;:::o;8296:349::-;8365:6;8414:2;8402:9;8393:7;8389:23;8385:32;8382:119;;;8420:79;;:::i;:::-;8382:119;8540:1;8565:63;8620:7;8611:6;8600:9;8596:22;8565:63;:::i;:::-;8555:73;;8511:127;8296:349;;;;:::o;8651:509::-;8720:6;8769:2;8757:9;8748:7;8744:23;8740:32;8737:119;;;8775:79;;:::i;:::-;8737:119;8923:1;8912:9;8908:17;8895:31;8953:18;8945:6;8942:30;8939:117;;;8975:79;;:::i;:::-;8939:117;9080:63;9135:7;9126:6;9115:9;9111:22;9080:63;:::i;:::-;9070:73;;8866:287;8651:509;;;;:::o;9166:329::-;9225:6;9274:2;9262:9;9253:7;9249:23;9245:32;9242:119;;;9280:79;;:::i;:::-;9242:119;9400:1;9425:53;9470:7;9461:6;9450:9;9446:22;9425:53;:::i;:::-;9415:63;;9371:117;9166:329;;;;:::o;9501:351::-;9571:6;9620:2;9608:9;9599:7;9595:23;9591:32;9588:119;;;9626:79;;:::i;:::-;9588:119;9746:1;9771:64;9827:7;9818:6;9807:9;9803:22;9771:64;:::i;:::-;9761:74;;9717:128;9501:351;;;;:::o;9858:474::-;9926:6;9934;9983:2;9971:9;9962:7;9958:23;9954:32;9951:119;;;9989:79;;:::i;:::-;9951:119;10109:1;10134:53;10179:7;10170:6;10159:9;10155:22;10134:53;:::i;:::-;10124:63;;10080:117;10236:2;10262:53;10307:7;10298:6;10287:9;10283:22;10262:53;:::i;:::-;10252:63;;10207:118;9858:474;;;;;:::o;10338:1057::-;10442:6;10450;10458;10466;10474;10482;10531:3;10519:9;10510:7;10506:23;10502:33;10499:120;;;10538:79;;:::i;:::-;10499:120;10658:1;10683:53;10728:7;10719:6;10708:9;10704:22;10683:53;:::i;:::-;10673:63;;10629:117;10785:2;10811:53;10856:7;10847:6;10836:9;10832:22;10811:53;:::i;:::-;10801:63;;10756:118;10913:2;10939:53;10984:7;10975:6;10964:9;10960:22;10939:53;:::i;:::-;10929:63;;10884:118;11041:2;11067:53;11112:7;11103:6;11092:9;11088:22;11067:53;:::i;:::-;11057:63;;11012:118;11169:3;11196:53;11241:7;11232:6;11221:9;11217:22;11196:53;:::i;:::-;11186:63;;11140:119;11298:3;11325:53;11370:7;11361:6;11350:9;11346:22;11325:53;:::i;:::-;11315:63;;11269:119;10338:1057;;;;;;;;:::o;11401:474::-;11469:6;11477;11526:2;11514:9;11505:7;11501:23;11497:32;11494:119;;;11532:79;;:::i;:::-;11494:119;11652:1;11677:53;11722:7;11713:6;11702:9;11698:22;11677:53;:::i;:::-;11667:63;;11623:117;11779:2;11805:53;11850:7;11841:6;11830:9;11826:22;11805:53;:::i;:::-;11795:63;;11750:118;11401:474;;;;;:::o;11881:1057::-;11985:6;11993;12001;12009;12017;12025;12074:3;12062:9;12053:7;12049:23;12045:33;12042:120;;;12081:79;;:::i;:::-;12042:120;12201:1;12226:53;12271:7;12262:6;12251:9;12247:22;12226:53;:::i;:::-;12216:63;;12172:117;12328:2;12354:53;12399:7;12390:6;12379:9;12375:22;12354:53;:::i;:::-;12344:63;;12299:118;12456:2;12482:53;12527:7;12518:6;12507:9;12503:22;12482:53;:::i;:::-;12472:63;;12427:118;12584:2;12610:53;12655:7;12646:6;12635:9;12631:22;12610:53;:::i;:::-;12600:63;;12555:118;12712:3;12739:53;12784:7;12775:6;12764:9;12760:22;12739:53;:::i;:::-;12729:63;;12683:119;12841:3;12868:53;12913:7;12904:6;12893:9;12889:22;12868:53;:::i;:::-;12858:63;;12812:119;11881:1057;;;;;;;;:::o;12944:118::-;13031:24;13049:5;13031:24;:::i;:::-;13026:3;13019:37;12944:118;;:::o;13068:109::-;13149:21;13164:5;13149:21;:::i;:::-;13144:3;13137:34;13068:109;;:::o;13183:360::-;13269:3;13297:38;13329:5;13297:38;:::i;:::-;13351:70;13414:6;13409:3;13351:70;:::i;:::-;13344:77;;13430:52;13475:6;13470:3;13463:4;13456:5;13452:16;13430:52;:::i;:::-;13507:29;13529:6;13507:29;:::i;:::-;13502:3;13498:39;13491:46;;13273:270;13183:360;;;;:::o;13549:165::-;13653:54;13701:5;13653:54;:::i;:::-;13648:3;13641:67;13549:165;;:::o;13720:155::-;13819:49;13862:5;13819:49;:::i;:::-;13814:3;13807:62;13720:155;;:::o;13881:::-;13980:49;14023:5;13980:49;:::i;:::-;13975:3;13968:62;13881:155;;:::o;14042:364::-;14130:3;14158:39;14191:5;14158:39;:::i;:::-;14213:71;14277:6;14272:3;14213:71;:::i;:::-;14206:78;;14293:52;14338:6;14333:3;14326:4;14319:5;14315:16;14293:52;:::i;:::-;14370:29;14392:6;14370:29;:::i;:::-;14365:3;14361:39;14354:46;;14134:272;14042:364;;;;:::o;14412:377::-;14518:3;14546:39;14579:5;14546:39;:::i;:::-;14601:89;14683:6;14678:3;14601:89;:::i;:::-;14594:96;;14699:52;14744:6;14739:3;14732:4;14725:5;14721:16;14699:52;:::i;:::-;14776:6;14771:3;14767:16;14760:23;;14522:267;14412:377;;;;:::o;14795:365::-;14937:3;14958:66;15022:1;15017:3;14958:66;:::i;:::-;14951:73;;15033:93;15122:3;15033:93;:::i;:::-;15151:2;15146:3;15142:12;15135:19;;14795:365;;;:::o;15166:366::-;15308:3;15329:67;15393:2;15388:3;15329:67;:::i;:::-;15322:74;;15405:93;15494:3;15405:93;:::i;:::-;15523:2;15518:3;15514:12;15507:19;;15166:366;;;:::o;15538:::-;15680:3;15701:67;15765:2;15760:3;15701:67;:::i;:::-;15694:74;;15777:93;15866:3;15777:93;:::i;:::-;15895:2;15890:3;15886:12;15879:19;;15538:366;;;:::o;15910:::-;16052:3;16073:67;16137:2;16132:3;16073:67;:::i;:::-;16066:74;;16149:93;16238:3;16149:93;:::i;:::-;16267:2;16262:3;16258:12;16251:19;;15910:366;;;:::o;16282:::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:::-;16796:3;16817:67;16881:2;16876:3;16817:67;:::i;:::-;16810:74;;16893:93;16982:3;16893:93;:::i;:::-;17011:2;17006:3;17002:12;16995:19;;16654:366;;;:::o;17026:::-;17168:3;17189:67;17253:2;17248:3;17189:67;:::i;:::-;17182:74;;17265:93;17354:3;17265:93;:::i;:::-;17383:2;17378:3;17374:12;17367:19;;17026:366;;;:::o;17398:::-;17540:3;17561:67;17625:2;17620:3;17561:67;:::i;:::-;17554:74;;17637:93;17726:3;17637:93;:::i;:::-;17755:2;17750:3;17746:12;17739:19;;17398:366;;;:::o;17770:::-;17912:3;17933:67;17997:2;17992:3;17933:67;:::i;:::-;17926:74;;18009:93;18098:3;18009:93;:::i;:::-;18127:2;18122:3;18118:12;18111:19;;17770:366;;;:::o;18142:::-;18284:3;18305:67;18369:2;18364:3;18305:67;:::i;:::-;18298:74;;18381:93;18470:3;18381:93;:::i;:::-;18499:2;18494:3;18490:12;18483:19;;18142:366;;;:::o;18514:::-;18656:3;18677:67;18741:2;18736:3;18677:67;:::i;:::-;18670:74;;18753:93;18842:3;18753:93;:::i;:::-;18871:2;18866:3;18862:12;18855:19;;18514:366;;;:::o;18886:::-;19028:3;19049:67;19113:2;19108:3;19049:67;:::i;:::-;19042:74;;19125:93;19214:3;19125:93;:::i;:::-;19243:2;19238:3;19234:12;19227:19;;18886:366;;;:::o;19258:::-;19400:3;19421:67;19485:2;19480:3;19421:67;:::i;:::-;19414:74;;19497:93;19586:3;19497:93;:::i;:::-;19615:2;19610:3;19606:12;19599:19;;19258:366;;;:::o;19630:::-;19772:3;19793:67;19857:2;19852:3;19793:67;:::i;:::-;19786:74;;19869:93;19958:3;19869:93;:::i;:::-;19987:2;19982:3;19978:12;19971:19;;19630:366;;;:::o;20002:::-;20144:3;20165:67;20229:2;20224:3;20165:67;:::i;:::-;20158:74;;20241:93;20330:3;20241:93;:::i;:::-;20359:2;20354:3;20350:12;20343:19;;20002:366;;;:::o;20374:::-;20516:3;20537:67;20601:2;20596:3;20537:67;:::i;:::-;20530:74;;20613:93;20702:3;20613:93;:::i;:::-;20731:2;20726:3;20722:12;20715:19;;20374:366;;;:::o;20746:::-;20888:3;20909:67;20973:2;20968:3;20909:67;:::i;:::-;20902:74;;20985:93;21074:3;20985:93;:::i;:::-;21103:2;21098:3;21094:12;21087:19;;20746:366;;;:::o;21118:::-;21260:3;21281:67;21345:2;21340:3;21281:67;:::i;:::-;21274:74;;21357:93;21446:3;21357:93;:::i;:::-;21475:2;21470:3;21466:12;21459:19;;21118:366;;;:::o;21490:118::-;21577:24;21595:5;21577:24;:::i;:::-;21572:3;21565:37;21490:118;;:::o;21614:435::-;21794:3;21816:95;21907:3;21898:6;21816:95;:::i;:::-;21809:102;;21928:95;22019:3;22010:6;21928:95;:::i;:::-;21921:102;;22040:3;22033:10;;21614:435;;;;;:::o;22055:222::-;22148:4;22186:2;22175:9;22171:18;22163:26;;22199:71;22267:1;22256:9;22252:17;22243:6;22199:71;:::i;:::-;22055:222;;;;:::o;22283:640::-;22478:4;22516:3;22505:9;22501:19;22493:27;;22530:71;22598:1;22587:9;22583:17;22574:6;22530:71;:::i;:::-;22611:72;22679:2;22668:9;22664:18;22655:6;22611:72;:::i;:::-;22693;22761:2;22750:9;22746:18;22737:6;22693:72;:::i;:::-;22812:9;22806:4;22802:20;22797:2;22786:9;22782:18;22775:48;22840:76;22911:4;22902:6;22840:76;:::i;:::-;22832:84;;22283:640;;;;;;;:::o;22929:332::-;23050:4;23088:2;23077:9;23073:18;23065:26;;23101:71;23169:1;23158:9;23154:17;23145:6;23101:71;:::i;:::-;23182:72;23250:2;23239:9;23235:18;23226:6;23182:72;:::i;:::-;22929:332;;;;;:::o;23267:210::-;23354:4;23392:2;23381:9;23377:18;23369:26;;23405:65;23467:1;23456:9;23452:17;23443:6;23405:65;:::i;:::-;23267:210;;;;:::o;23483:256::-;23593:4;23631:2;23620:9;23616:18;23608:26;;23644:88;23729:1;23718:9;23714:17;23705:6;23644:88;:::i;:::-;23483:256;;;;:::o;23745:246::-;23850:4;23888:2;23877:9;23873:18;23865:26;;23901:83;23981:1;23970:9;23966:17;23957:6;23901:83;:::i;:::-;23745:246;;;;:::o;23997:::-;24102:4;24140:2;24129:9;24125:18;24117:26;;24153:83;24233:1;24222:9;24218:17;24209:6;24153:83;:::i;:::-;23997:246;;;;:::o;24249:313::-;24362:4;24400:2;24389:9;24385:18;24377:26;;24449:9;24443:4;24439:20;24435:1;24424:9;24420:17;24413:47;24477:78;24550:4;24541:6;24477:78;:::i;:::-;24469:86;;24249:313;;;;:::o;24568:419::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24821:9;24815:4;24811:20;24807:1;24796:9;24792:17;24785:47;24849:131;24975:4;24849:131;:::i;:::-;24841:139;;24568:419;;;:::o;24993:::-;25159:4;25197:2;25186:9;25182:18;25174:26;;25246:9;25240:4;25236:20;25232:1;25221:9;25217:17;25210:47;25274:131;25400:4;25274:131;:::i;:::-;25266:139;;24993:419;;;:::o;25418:::-;25584:4;25622:2;25611:9;25607:18;25599:26;;25671:9;25665:4;25661:20;25657:1;25646:9;25642:17;25635:47;25699:131;25825:4;25699:131;:::i;:::-;25691:139;;25418:419;;;:::o;25843:::-;26009:4;26047:2;26036:9;26032:18;26024:26;;26096:9;26090:4;26086:20;26082:1;26071:9;26067:17;26060:47;26124:131;26250:4;26124:131;:::i;:::-;26116:139;;25843:419;;;:::o;26268:::-;26434:4;26472:2;26461:9;26457:18;26449:26;;26521:9;26515:4;26511:20;26507:1;26496:9;26492:17;26485:47;26549:131;26675:4;26549:131;:::i;:::-;26541:139;;26268:419;;;:::o;26693:::-;26859:4;26897:2;26886:9;26882:18;26874:26;;26946:9;26940:4;26936:20;26932:1;26921:9;26917:17;26910:47;26974:131;27100:4;26974:131;:::i;:::-;26966:139;;26693:419;;;:::o;27118:::-;27284:4;27322:2;27311:9;27307:18;27299:26;;27371:9;27365:4;27361:20;27357:1;27346:9;27342:17;27335:47;27399:131;27525:4;27399:131;:::i;:::-;27391:139;;27118:419;;;:::o;27543:::-;27709:4;27747:2;27736:9;27732:18;27724:26;;27796:9;27790:4;27786:20;27782:1;27771:9;27767:17;27760:47;27824:131;27950:4;27824:131;:::i;:::-;27816:139;;27543:419;;;:::o;27968:::-;28134:4;28172:2;28161:9;28157:18;28149:26;;28221:9;28215:4;28211:20;28207:1;28196:9;28192:17;28185:47;28249:131;28375:4;28249:131;:::i;:::-;28241:139;;27968:419;;;:::o;28393:::-;28559:4;28597:2;28586:9;28582:18;28574:26;;28646:9;28640:4;28636:20;28632:1;28621:9;28617:17;28610:47;28674:131;28800:4;28674:131;:::i;:::-;28666:139;;28393:419;;;:::o;28818:::-;28984:4;29022:2;29011:9;29007:18;28999:26;;29071:9;29065:4;29061:20;29057:1;29046:9;29042:17;29035:47;29099:131;29225:4;29099:131;:::i;:::-;29091:139;;28818:419;;;:::o;29243:::-;29409:4;29447:2;29436:9;29432:18;29424:26;;29496:9;29490:4;29486:20;29482:1;29471:9;29467:17;29460:47;29524:131;29650:4;29524:131;:::i;:::-;29516:139;;29243:419;;;:::o;29668:::-;29834:4;29872:2;29861:9;29857:18;29849:26;;29921:9;29915:4;29911:20;29907:1;29896:9;29892:17;29885:47;29949:131;30075:4;29949:131;:::i;:::-;29941:139;;29668:419;;;:::o;30093:::-;30259:4;30297:2;30286:9;30282:18;30274:26;;30346:9;30340:4;30336:20;30332:1;30321:9;30317:17;30310:47;30374:131;30500:4;30374:131;:::i;:::-;30366:139;;30093:419;;;:::o;30518:::-;30684:4;30722:2;30711:9;30707:18;30699:26;;30771:9;30765:4;30761:20;30757:1;30746:9;30742:17;30735:47;30799:131;30925:4;30799:131;:::i;:::-;30791:139;;30518:419;;;:::o;30943:::-;31109:4;31147:2;31136:9;31132:18;31124:26;;31196:9;31190:4;31186:20;31182:1;31171:9;31167:17;31160:47;31224:131;31350:4;31224:131;:::i;:::-;31216:139;;30943:419;;;:::o;31368:::-;31534:4;31572:2;31561:9;31557:18;31549:26;;31621:9;31615:4;31611:20;31607:1;31596:9;31592:17;31585:47;31649:131;31775:4;31649:131;:::i;:::-;31641:139;;31368:419;;;:::o;31793:::-;31959:4;31997:2;31986:9;31982:18;31974:26;;32046:9;32040:4;32036:20;32032:1;32021:9;32017:17;32010:47;32074:131;32200:4;32074:131;:::i;:::-;32066:139;;31793:419;;;:::o;32218:222::-;32311:4;32349:2;32338:9;32334:18;32326:26;;32362:71;32430:1;32419:9;32415:17;32406:6;32362:71;:::i;:::-;32218:222;;;;:::o;32446:129::-;32480:6;32507:20;;:::i;:::-;32497:30;;32536:33;32564:4;32556:6;32536:33;:::i;:::-;32446:129;;;:::o;32581:75::-;32614:6;32647:2;32641:9;32631:19;;32581:75;:::o;32662:307::-;32723:4;32813:18;32805:6;32802:30;32799:56;;;32835:18;;:::i;:::-;32799:56;32873:29;32895:6;32873:29;:::i;:::-;32865:37;;32957:4;32951;32947:15;32939:23;;32662:307;;;:::o;32975:308::-;33037:4;33127:18;33119:6;33116:30;33113:56;;;33149:18;;:::i;:::-;33113:56;33187:29;33209:6;33187:29;:::i;:::-;33179:37;;33271:4;33265;33261:15;33253:23;;32975:308;;;:::o;33289:98::-;33340:6;33374:5;33368:12;33358:22;;33289:98;;;:::o;33393:99::-;33445:6;33479:5;33473:12;33463:22;;33393:99;;;:::o;33498:168::-;33581:11;33615:6;33610:3;33603:19;33655:4;33650:3;33646:14;33631:29;;33498:168;;;;:::o;33672:169::-;33756:11;33790:6;33785:3;33778:19;33830:4;33825:3;33821:14;33806:29;;33672:169;;;;:::o;33847:148::-;33949:11;33986:3;33971:18;;33847:148;;;;:::o;34001:305::-;34041:3;34060:20;34078:1;34060:20;:::i;:::-;34055:25;;34094:20;34112:1;34094:20;:::i;:::-;34089:25;;34248:1;34180:66;34176:74;34173:1;34170:81;34167:107;;;34254:18;;:::i;:::-;34167:107;34298:1;34295;34291:9;34284:16;;34001:305;;;;:::o;34312:185::-;34352:1;34369:20;34387:1;34369:20;:::i;:::-;34364:25;;34403:20;34421:1;34403:20;:::i;:::-;34398:25;;34442:1;34432:35;;34447:18;;:::i;:::-;34432:35;34489:1;34486;34482:9;34477:14;;34312:185;;;;:::o;34503:348::-;34543:7;34566:20;34584:1;34566:20;:::i;:::-;34561:25;;34600:20;34618:1;34600:20;:::i;:::-;34595:25;;34788:1;34720:66;34716:74;34713:1;34710:81;34705:1;34698:9;34691:17;34687:105;34684:131;;;34795:18;;:::i;:::-;34684:131;34843:1;34840;34836:9;34825:20;;34503:348;;;;:::o;34857:191::-;34897:4;34917:20;34935:1;34917:20;:::i;:::-;34912:25;;34951:20;34969:1;34951:20;:::i;:::-;34946:25;;34990:1;34987;34984:8;34981:34;;;34995:18;;:::i;:::-;34981:34;35040:1;35037;35033:9;35025:17;;34857:191;;;;:::o;35054:96::-;35091:7;35120:24;35138:5;35120:24;:::i;:::-;35109:35;;35054:96;;;:::o;35156:90::-;35190:7;35233:5;35226:13;35219:21;35208:32;;35156:90;;;:::o;35252:149::-;35288:7;35328:66;35321:5;35317:78;35306:89;;35252:149;;;:::o;35407:126::-;35444:7;35484:42;35477:5;35473:54;35462:65;;35407:126;;;:::o;35539:77::-;35576:7;35605:5;35594:16;;35539:77;;;:::o;35622:143::-;35689:9;35722:37;35753:5;35722:37;:::i;:::-;35709:50;;35622:143;;;:::o;35771:138::-;35833:9;35866:37;35897:5;35866:37;:::i;:::-;35853:50;;35771:138;;;:::o;35915:::-;35977:9;36010:37;36041:5;36010:37;:::i;:::-;35997:50;;35915:138;;;:::o;36059:126::-;36109:9;36142:37;36173:5;36142:37;:::i;:::-;36129:50;;36059:126;;;:::o;36191:113::-;36241:9;36274:24;36292:5;36274:24;:::i;:::-;36261:37;;36191:113;;;:::o;36310:154::-;36394:6;36389:3;36384;36371:30;36456:1;36447:6;36442:3;36438:16;36431:27;36310:154;;;:::o;36470:307::-;36538:1;36548:113;36562:6;36559:1;36556:13;36548:113;;;36647:1;36642:3;36638:11;36632:18;36628:1;36623:3;36619:11;36612:39;36584:2;36581:1;36577:10;36572:15;;36548:113;;;36679:6;36676:1;36673:13;36670:101;;;36759:1;36750:6;36745:3;36741:16;36734:27;36670:101;36519:258;36470:307;;;:::o;36783:320::-;36827:6;36864:1;36858:4;36854:12;36844:22;;36911:1;36905:4;36901:12;36932:18;36922:81;;36988:4;36980:6;36976:17;36966:27;;36922:81;37050:2;37042:6;37039:14;37019:18;37016:38;37013:84;;;37069:18;;:::i;:::-;37013:84;36834:269;36783:320;;;:::o;37109:281::-;37192:27;37214:4;37192:27;:::i;:::-;37184:6;37180:40;37322:6;37310:10;37307:22;37286:18;37274:10;37271:34;37268:62;37265:88;;;37333:18;;:::i;:::-;37265:88;37373:10;37369:2;37362:22;37152:238;37109:281;;:::o;37396:233::-;37435:3;37458:24;37476:5;37458:24;:::i;:::-;37449:33;;37504:66;37497:5;37494:77;37491:103;;;37574:18;;:::i;:::-;37491:103;37621:1;37614:5;37610:13;37603:20;;37396:233;;;:::o;37635:176::-;37667:1;37684:20;37702:1;37684:20;:::i;:::-;37679:25;;37718:20;37736:1;37718:20;:::i;:::-;37713:25;;37757:1;37747:35;;37762:18;;:::i;:::-;37747:35;37803:1;37800;37796:9;37791:14;;37635:176;;;;:::o;37817:180::-;37865:77;37862:1;37855:88;37962:4;37959:1;37952:15;37986:4;37983:1;37976:15;38003:180;38051:77;38048:1;38041:88;38148:4;38145:1;38138:15;38172:4;38169:1;38162:15;38189:180;38237:77;38234:1;38227:88;38334:4;38331:1;38324:15;38358:4;38355:1;38348:15;38375:180;38423:77;38420:1;38413:88;38520:4;38517:1;38510:15;38544:4;38541:1;38534:15;38561:180;38609:77;38606:1;38599:88;38706:4;38703:1;38696:15;38730:4;38727:1;38720:15;38747:180;38795:77;38792:1;38785:88;38892:4;38889:1;38882:15;38916:4;38913:1;38906:15;38933:117;39042:1;39039;39032:12;39056:117;39165:1;39162;39155:12;39179:117;39288:1;39285;39278:12;39302:117;39411:1;39408;39401:12;39425:102;39466:6;39517:2;39513:7;39508:2;39501:5;39497:14;39493:28;39483:38;;39425:102;;;:::o;39533:158::-;39673:10;39669:1;39661:6;39657:14;39650:34;39533:158;:::o;39697:230::-;39837:34;39833:1;39825:6;39821:14;39814:58;39906:13;39901:2;39893:6;39889:15;39882:38;39697:230;:::o;39933:237::-;40073:34;40069:1;40061:6;40057:14;40050:58;40142:20;40137:2;40129:6;40125:15;40118:45;39933:237;:::o;40176:225::-;40316:34;40312:1;40304:6;40300:14;40293:58;40385:8;40380:2;40372:6;40368:15;40361:33;40176:225;:::o;40407:224::-;40547:34;40543:1;40535:6;40531:14;40524:58;40616:7;40611:2;40603:6;40599:15;40592:32;40407:224;:::o;40637:178::-;40777:30;40773:1;40765:6;40761:14;40754:54;40637:178;:::o;40821:223::-;40961:34;40957:1;40949:6;40945:14;40938:58;41030:6;41025:2;41017:6;41013:15;41006:31;40821:223;:::o;41050:175::-;41190:27;41186:1;41178:6;41174:14;41167:51;41050:175;:::o;41231:228::-;41371:34;41367:1;41359:6;41355:14;41348:58;41440:11;41435:2;41427:6;41423:15;41416:36;41231:228;:::o;41465:249::-;41605:34;41601:1;41593:6;41589:14;41582:58;41674:32;41669:2;41661:6;41657:15;41650:57;41465:249;:::o;41720:182::-;41860:34;41856:1;41848:6;41844:14;41837:58;41720:182;:::o;41908:::-;42048:34;42044:1;42036:6;42032:14;42025:58;41908:182;:::o;42096:166::-;42236:18;42232:1;42224:6;42220:14;42213:42;42096:166;:::o;42268:169::-;42408:21;42404:1;42396:6;42392:14;42385:45;42268:169;:::o;42443:174::-;42583:26;42579:1;42571:6;42567:14;42560:50;42443:174;:::o;42623:220::-;42763:34;42759:1;42751:6;42747:14;42740:58;42832:3;42827:2;42819:6;42815:15;42808:28;42623:220;:::o;42849:231::-;42989:34;42985:1;42977:6;42973:14;42966:58;43058:14;43053:2;43045:6;43041:15;43034:39;42849:231;:::o;43086:233::-;43226:34;43222:1;43214:6;43210:14;43203:58;43295:16;43290:2;43282:6;43278:15;43271:41;43086:233;:::o;43325:122::-;43398:24;43416:5;43398:24;:::i;:::-;43391:5;43388:35;43378:63;;43437:1;43434;43427:12;43378:63;43325:122;:::o;43453:116::-;43523:21;43538:5;43523:21;:::i;:::-;43516:5;43513:32;43503:60;;43559:1;43556;43549:12;43503:60;43453:116;:::o;43575:120::-;43647:23;43664:5;43647:23;:::i;:::-;43640:5;43637:34;43627:62;;43685:1;43682;43675:12;43627:62;43575:120;:::o;43701:122::-;43774:24;43792:5;43774:24;:::i;:::-;43767:5;43764:35;43754:63;;43813:1;43810;43803:12;43754:63;43701:122;:::o
Swarm Source
ipfs://2dbd38fbf2f4a662fcbc50dddab661ca671617728c4173ff4e281515c862df22
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.